2012-06-19 23 views
16

Si tengo una clase anotada con¿JAXB siempre ignora los elementos 'adicionales' no especificados en @ XmlType/propOrder?

@XmlType(name = "someDTO", propOrder = { "firstField", "secondField", })

pero el XML (de una respuesta SOAP, por ejemplo) parece

<return><firstField>a</firstField><secondField>b</secondField><thirdField>c</thirdField></return>

Mi objetivo seguirá recibiendo firstField y secondField poblada, y thirdField es ignorado.

¿Por qué es esto? ¿Este siempre será el caso? ¿Hay alguna manera de evitar la creación de objetos si hay campos adicionales presentes?

Respuesta

18

Algunas implementaciones de JAXB (JSR-222) se quejan si hay propiedades asignadas a elementos XML que no están incluidos en el propOrder. propOder en @XmlType no se usa para controlar qué elementos están incluidos/excluidos.

Opciones para excluir Propiedades

  1. Si desea excluir menos de la mitad de las propiedades, entonces te sugeriría que marca los que desea excluir con @XmlTransient.
  2. Si desea excluir más de la mitad de las propiedades, le sugiero usar @XmlAccessorType(XmlAccessType.NONE) y anotar las propiedades que desea incluir.

Para más información

+0

sabes si hay alguna implementaciones JAXB que se quejan si hay elementos XML que no se asignan a las propiedades? – Derek

+3

@Derek: puede establecer un 'ValidationEventHandler' en el' Unmarshaller', que debe informar una 'advertencia' cuando se golpea el contenido no asignado. –

+0

@BlaiseDoughan, ¿qué pasa con la necesidad de tener más de un caso? por ejemplo, una vez necesito un campo específico, y otra vez no ... ¿qué puedo hacer para eso? –

Cuestiones relacionadas