2012-04-04 11 views
9

वास्ते से तत्वों को निकालने के लिए कैसे मैं अपने मॉडल को:MOXY JAXB:

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

और मैं इस तरह वस्तु में भरने:

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

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

यह अगले एक्सएमएल उत्पादन

जैसा कि आप देख सकते हैं कि 'id' प्रॉपर्टी के लिए @XmlPath एनोटेशन नहीं है लेकिन यह अंतिम एक्सएमएल में भी मौजूद है। मुझे पता है कि मैं इस व्यवहार से 'id' प्रॉपर्टी को शून्य पर सेट कर सकता हूं लेकिन मैं जानना चाहता हूं कि कोई और तरीका है या नहीं। मुद्दा यह है कि मेरा असली मॉडल इस से बहुत बड़ा है और मुझे बहुत सारी संपत्तियों को शून्य में सेट करना होगा।

कोई मदद?

अग्रिम धन्यवाद।

उत्तर

15

आप @XmlTransient साथ संपत्ति चिह्नित कर सकते हैं या तो इसे एक्सएमएल प्रतिनिधित्व से बाहर रखा गया है करने के लिए:

@XmlTransient 
private Long id; 

या आप @XmlAccessorType(XmlAccessType.NONE) के साथ अपने प्रकार टिप्पणी कर सकते हैं ताकि केवल एनोटेट क्षेत्रों/गुण मैप की जाती हैं।

@XmlAccessorType(XmlAccessType.NONE) 
public class CustomerTest { 

अधिक जानकारी के लिए

+1

धन्यवाद! आप हमेशा बहुत उपयोगी होते हैं। – rocotocloc