2012-04-04 4 views
9

Ich habe mein Modell:moxy JAXB: Wie Elemente aus auszuschließen Rangier

@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; 
} 

Und ich einfach das Objekt wie folgt:

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

Diese produzieren die nächste 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> 

Wie Sie sehen können, gibt es keine @ XmlPath Annotation für 'ID' Eigenschaft, aber dies ist auch in der endgültigen XML vorhanden. Ich weiß, dass ich dieses Verhalten vermeiden kann, indem ich die Eigenschaft 'id' auf null setze, aber ich möchte wissen, ob es einen anderen Weg gibt. Der Punkt ist, dass mein reales Modell viel größer ist als dieses und ich viele Eigenschaften auf null setzen müsste.

Irgendwelche Hilfe?

Vielen Dank im Voraus.

Antwort

15

Sie können entweder die Eigenschaft mit @XmlTransient markieren, um es aus der XML-Repräsentation ausgeschlossen:

@XmlTransient 
private Long id; 

Oder Sie können Ihre Art mit @XmlAccessorType(XmlAccessType.NONE), so dass nur kommentierten Felder/Eigenschaften abgebildet werden mit Anmerkungen versehen.

@XmlAccessorType(XmlAccessType.NONE) 
public class CustomerTest { 

Weitere Informationen

+1

Vielen Dank! Sie sind immer sehr hilfreich. – rocotocloc