9

私は自分のモデルを持っています:

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

そして、次のようにオブジェクトを埋めます。

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 が生成されます。

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

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

何か助けはありますか?

前もって感謝します。

4

1 に答える 1

16

プロパティを でマークして@XmlTransient、XML 表現から除外することができます。

@XmlTransient
private Long id;

または、@XmlAccessorType(XmlAccessType.NONE)注釈付きのフィールド/プロパティのみがマップされるように、型に注釈を付けることができます。

@XmlAccessorType(XmlAccessType.NONE)
public class CustomerTest {

詳細については

于 2012-04-04T14:04:25.887 に答える