2010-12-13 56 views
1

Que puis-je faire pour ignorer les balises <envelope> et <body> dans le processus unmarshall en utilisant Castor?Du xml à l'objet java en utilisant castor

Xml examole:

<?xml version="1.0" encoding="UTF-8"?> 
<envelope> 
    <header> 
    <message>consultaTelefonosVigentesSocios</message> 
    </header> 
    <body> 
    <datosTelefonosVigentesSocios> 
     <listaTelefonosVigentesSocios> 
     <nroInterlocutor>2000393451672</nroInterlocutor> 
     <nroContrato>S6125345450573001</nroContrato> 
     <nroTelefono>011-4454451-8293</nroTelefono> 
     <tipoTelefono>T</tipoTelefono> 
     <claseDireccion>Z001</claseDireccion> 
     <descClaseDireccion>Correspondencia</descClaseDireccion> 
     <marcaEstandar>X</marcaEstandar> 
     <nroInterlocutorAsociadoDomicilio>200053945351672</nroInterlocutorAsociadoDomicilio> 
     </listaTelefonosVigentesSocios> 
     <listaTelefonosVigentesSocios> 
     <nroInterlocutor>200053435391672</nroInterlocutor> 
     <nroContrato>S612535430573001</nroContrato> 
     <nroTelefono>011-44453551-8299</nroTelefono> 
     <tipoTelefono>T</tipoTelefono> 
     <claseDireccion>Z001</claseDireccion> 
     <descClaseDireccion>Correspondencia</descClaseDireccion> 
     <marcaEstandar/> 
     <nroInterlocutorAsociadoDomicilio>20005543391672</nroInterlocutorAsociadoDomicilio> 
     </listaTelefonosVigentesSocios> 
     </datosTelefonosVigentesSocios> 
    </body> 
    <fault> 
    <faultactor>servicios.page:consultaTelefonosVigentesSocios</faultactor> 
    </fault> 
</envelope> 

fichier de mappage de ricin:

<?xml version="1.0"?> 
<mapping> 

<class 
    name="ar.com.telefonosSocioByNroContratoService.backend.service.TelefonosVigentesSocios"> 
    <map-to xml="datosTelefonosVigentesSocios" /> 
    <field name="listaTelefonosVigentesSocios" 
    type="ar.com.telefonosSocioByNroContratoService.backend.service.TelefonoVigenteSocio" 
    collection="arraylist"> 
    <bind-xml name="listaTelefonosVigentesSocios" /> 
    </field> 
</class> 

<class 
    name="ar.com.telefonosSocioByNroContratoService.backend.service.TelefonoVigenteSocio"> 
    <map-to xml="listaTelefonosVigentesSocios" /> 
    <field name="nroInterlocutor" type="java.lang.String"> 
    <bind-xml name="nroInterlocutor" node="element" /> 
    </field> 
    <field name="nroContrato" type="java.lang.String"> 
    <bind-xml name="nroContrato" node="element" /> 
    </field> 
    <field name="nroTelefono" type="java.lang.String"> 
    <bind-xml name="nroTelefono" node="element" /> 
    </field> 
    <field name="tipoTelefono" type="java.lang.String"> 
    <bind-xml name="tipoTelefono" node="element" /> 
    </field> 
    <field name="marcaEstandar" type="java.lang.String"> 
    <bind-xml name="marcaEstandar" node="element" /> 
    </field> 
    <field name="descClaseDireccion" type="java.lang.String"> 
    <bind-xml name="descClaseDireccion" node="element" /> 
    </field> 
    <field name="nroInterlocutorAsociadoDomicilio" type="java.lang.String"> 
    <bind-xml name="nroInterlocutorAsociadoDomicilio" node="element" /> 
    </field> 
</class> 
</mapping> 

Classe d'essai:

public class TelefonosSocioByNroContratoServiceTest { 

@Test 
public void testUsuarioIntranetListfromXML() throws Exception{ 
    Mapping mapping= new Mapping(); 
    ClassPathResource mappingResource = 
    new ClassPathResource("/ar/com/telefonosSocioByNroContratoService/backend/service/telefonosVigenteSocios.map.xml"); 

     mapping.loadMapping(mappingResource.getURL()); 
     ClassPathResource inputExample= new ClassPathResource("ar/com/test/castor/consultaTelefonosVigentesSocios.xml"); 
     Reader reader = new FileReader(inputExample.getFile()); 

     Unmarshaller unmarshaller = new Unmarshaller(TelefonosVigentesSocios.class); 
     unmarshaller.setMapping(mapping); 
     TelefonosVigentesSocios telefonosVigentesSocios = (TelefonosVigentesSocios) unmarshaller.unmarshal(reader); 
     reader.close(); 
     Assert.assertNotNull(telefonosVigentesSocios); 
     Assert.assertNotNull(telefonosVigentesSocios.getListaTelefonosVigentesSocios()); 
     Assert.assertTrue("se esperaba not empty telefonos",!telefonosVigentesSocios.getListaTelefonosVigentesSocios().isEmpty()); 
} 
} 

Répondre

1

Au lieu d'utiliser un flux d'entrée, vous pouvez utiliser un XMLStreamReader (Stax) comme votre contribution. Puis avancez le XMLStreamReader vers l'événement d'élément de départ pour le contenu que vous avez mappé. Ensuite, ayez Castor unmarshal à partir de XMLStreamReader.

Si Castor ne prend pas en charge Stax, je peux vous montrer comment le faire avec JAXB. Je dirige l'implémentation EclipseLink JAXB (MOXy).