2012-04-04 14 views
9

tengo mi modelo:moxy JAXB: cómo excluir elementos de cálculo de referencias

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class CustomerTest { 

    private Long id; 

    @XmlPath("contact-info/billing-address") 
    private AddressTest billingAddress; 

    @XmlPath("contact-info/shipping-address") 
    private AddressTest shippingAddress; 

    @XmlPath("FileHeader/SchemaVersion/text()") 
    private String schemaVersion; 
} 

Y cumplimento el objeto como éste:

private void marshallCustomerTest() { 
     try { 
      JAXBContext jc = JAXBContext.newInstance(CustomerTest.class); 

      CustomerTest customer = new CustomerTest(); 
      customer.setId(new Long(10)); 
      customer.setSchemaVersion("3.2"); 

      AddressTest billingAddress = new AddressTest(); 
      billingAddress.setStreet("1 Billing Street"); 
      customer.setBillingAddress(billingAddress); 

      AddressTest shippingAddress = new AddressTest(); 
      shippingAddress.setStreet("2 Shipping Road"); 
      customer.setShippingAddress(shippingAddress); 

      Marshaller m = jc.createMarshaller(); 
      m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
      m.marshal(customer, System.out); 
     } catch (JAXBException jex) { 
      jex.printStackTrace(); 
      log.error(jex); 
     } 
    } 

Este producir la siguiente XML:

<customerTest xmlns:fe="http://www.facturae.es/Facturae/2009/v3.2/Facturae" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
    <id>10</id> 
    <contact-info> 
     <billing-address> 
     <street>1 Billing Street</street> 
     </billing-address> 
     <shipping-address> 
     <street>2 Shipping Road</street> 
     </shipping-address> 
    </contact-info> 
    <FileHeader> 
     <SchemaVersion>3.2</SchemaVersion> 
    </FileHeader> 
</customerTest> 

Como puede ver, no hay una anotación @XmlPath para la propiedad 'id', pero esto también está presente en el XML final. Sé que puedo evitar este comportamiento estableciendo la propiedad 'id' en nulo, pero quiero saber si hay otra forma. El punto es que mi modelo real es mucho más grande que este y tendría que establecer muchas propiedades para nulo.

¿Algún ayuda?

Gracias de antemano.

Respuesta

15

Usted puede marcar la propiedad con @XmlTransient que sea excluido de la representación XML:

@XmlTransient 
private Long id; 

o puede hacer anotaciones en su tipo con @XmlAccessorType(XmlAccessType.NONE) campos de modo que sólo anotados/propiedades se asignan.

@XmlAccessorType(XmlAccessType.NONE) 
public class CustomerTest { 

Para más información

+1

Gracias! Siempre eres muy útil. – rocotocloc

Cuestiones relacionadas