2010-12-13 5 views
1

Was kann ich tun, um die <envelope> und <body> Tags in unmarshall Prozess mit Castor zu ignorieren?xml zu Java-Objekt mit 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> 

castor-Mapping-Datei:

<?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> 

Testklasse:

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()); 
} 
} 

Antwort

1

Statt einen Eingangsstrom zu verwenden, können Sie eine XMLStreamReader (StAX) verwenden als deine Eingabe. Stellen Sie dann den XMLStreamReader auf das Startelement -Ereignis für den Inhalt, dem Sie zugeordnet haben, fort. Dann lassen Sie Castor vom XMLStreamReader abmarshalen.

Wenn Castor StAX nicht unterstützt, dann kann ich Ihnen zeigen, wie es mit JAXB funktioniert. Ich führe die EclipseLink JAXB-Implementierung (MOXy).