2012-04-04 5 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); 
     } 
    } 

は、この次のXMLを生成します

「id」プロパティには@XmlPathアノテーションはありませんが、これは最終的なXMLにも存在します。私はこの動作を避けることができることを知っている 'id'プロパティをnullに設定するが、別の方法があるかどうかを知りたい。ポイントは、私の実際のモデルはこれよりずっと大きく、多くのプロパティをnullに設定しなければならないということです。

助けが必要ですか?

ありがとうございます。

答えて

15

あなたはそれがXML表現から除外持って@XmlTransientでプロパティをマークすることができ、次のいずれか

@XmlTransient 
private Long id; 

それとものみ注釈付きフィールド/プロパティがマッピングされているように、あなたが@XmlAccessorType(XmlAccessType.NONE)であなたのタイプに注釈を付けることができます。

@XmlAccessorType(XmlAccessType.NONE) 
public class CustomerTest { 

詳細情報

+1

ありがとうございます!あなたはいつもとても役に立ちます。 – rocotocloc

関連する問題