2010-12-13 1 views
1

Castorを使用してアンマーシャルプロセスで<envelope>タグと<body>タグを無視するにはどうすればよいですか?xmlからcastorを使用したJavaオブジェクト

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

ヒマシマッピングファイル:

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

テストクラス:

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

答えて

1

代わりに入力ストリームを使用しての、あなたはにXMLStreamReader(StAXの)を使用することができますあなたの入力として。次に、XMLStreamReaderを、マッピングしたコンテンツの開始要素イベントに進めます。その後、CastorをXMLStreamReaderから非整列化します。

CastorがStAXをサポートしていない場合は、JAXBでCastorを使用する方法を示すことができます。私はEclipseLink JAXB実装(MOXy)をリードします。

関連する問題