2015-09-20 10 views
1

Мне нужно преобразовать XML в объект (Unmarshalling), но есть поле (тег), которое я не хочу отображать. Я искал ответ в StackOverFlow, но только нашел, как преобразовать объект в XML (Marshalling), и мне нужно знать (Unmarshalling). Вот XML:Игнорирование полей при разборке с использованием сопоставления XML Castor

<autorizacion> 
    <estado>AUTORIZADO</estado> 
    <numeroAutorizacion>9999999999999</numeroAutorizacion> 
    <fechaAutorizacion>17/06/2015</fechaAutorizacion> 
    <comprobante> 
<comprobanteRetencion id="comprobante" version="1.0.0"> 
    <infoAdicional> 
    <campoAdicional nombre="correo:">[email protected]</campoAdicional> 
    </infoAdicional> 
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:etsi="http://uri.etsi.org/01903/v1.3.2#" Id="Signature89637"> 
<ds:KeyInfo Id="Certifixxxxxx0"> 
<ds:Modulus> 
ppFiiWXmjvwteDiLvklh38gGypZ8moRjEhEijs0kfjpddd1NTJ5QWmNtgH8uVUP5aEduxPMYQPpg 
</ds:Modulus> 
</ds:KeyInfo> 
</ds:Signature> 
</comprobanteRetencion> 
</comprobante> 
</autorizacion> 

Я хочу, чтобы исключить тег Подпись из процесса unmarshalling.

Herer является отображение XML:

<class name="ec.eac.sitac.esigef.ComprobanteRetencion" auto-complete="true"> 
    <map-to xml="comprobanteRetencion" /> 
    <field name="infoAdicional" type="ec.eac.sitac.esigef.InfoAdicional"> 
     <bind-xml name="infoAdicional" node="element" /> 
    </field> 
</class> 
+0

вы нашли ответ ? ;-) –

+0

Да, я нашел его. Я просто добавил ответ. Возможно, это было не изящное решение, но оно сработало. –

ответ

1

Я удалил тег с помощью:

 DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
     Document doc = docBuilder.parse(xmlPath); 

     Node node = xml.getElementsByTagName("comprobanteRetencion").item(0); 
     Node signature = node.getLastChild(); 
     node.removeChild(signature); 
+0

через два дня не забудьте проверить это как принято ;-) –

+0

Я сделал это ... спасибо! –

1

Любого некартированный элемент будет игнорироваться, если вы не против проверки схемы.

Пример:

@XmlRootElement(name="A") 
public class A { 
    @XmlElement(name="B") 
    String b; 
} 

код теста:

String xml = "<A><B>Hello</B><C>World</C></A>"; 
JAXBContext jaxb = JAXBContext.newInstance(A.class); 
Unmarshaller unmarshaller = jaxb.createUnmarshaller(); 
A a = (A)unmarshaller.unmarshal(new StringReader(xml)); 
System.out.println(a.b); 

Выход:

Hello 

Как вы можете видеть, значение <B> было unmarshalled, а значение <C> получил игнорируются.

Update

Чтобы явно игнорировать значение <C>, добавить фиктивный метод установки:

@XmlElement(name="C") 
void setC(String c) {/*ignore*/} 
+0

Я отобразил все теги, кроме тега «Подпись», и когда я запустил приложение, я получил следующую ошибку: не удалось найти FieldDescriptor для Signature ... –

+0

Я не использую аннотацию java, я использую файл конфигурации xml , Как я могу исключить тег, используя файл конфигурации xml? –

+0

xml-сопоставления по-прежнему сопоставляются методу setter, поэтому просто сопоставьте с методом фиктивного сеттера. – Andreas