2

こちらの記事に従って、XML を外部メタデータとして使用することができました。ただし、Moxy は、外部 XMLメタデータで注釈も指定もされていないプロパティをマーシャリングしています。以下は、この動作を回避する方法などです。使ってみxml-mapping-metadata-complete="true"ましたがダメでした。

新しい接頭辞プロパティが追加されたクラス (簡潔にするために他のプロパティを削除)

public class Customer
{
    private String prefix;

    public void setPrefix(String prefix)
    {
        this.prefix = prefix;
    }

    public String getPrefix()
    {
        return prefix;
    }
}

メタデータ xml

<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" package-name="blog.bindingfile">
   <xml-schema namespace="http://www.example.com/customer" element-form-default="QUALIFIED" />
   <java-types>
      <java-type name="Customer">
         <xml-root-element />
         <xml-type prop-order="firstName lastName address phoneNumbers" />
         <java-attributes>
            <xml-element java-attribute="firstName" name="first-name" />
            <xml-element java-attribute="lastName" name="last-name" />
            <xml-element java-attribute="phoneNumbers" name="phone-number" />
         </java-attributes>
      </java-type>
      <java-type name="PhoneNumber">
         <java-attributes>
            <xml-attribute java-attribute="type" />
            <xml-value java-attribute="number" />
         </java-attributes>
      </java-type>
   </java-types>
</xml-bindings>

出力

<customer xmlns="http://www.example.com/customer">
   <first-name>Jane</first-name>
   <last-name>Doe</last-name>
   <address>
      <street>123 A Street</street>
   </address>
   <phone-number type="work">555-1111</phone-number>
   <phone-number type="cell">555-2222</phone-number>
   <prefix>pre</prefix>
</customer>
4

1 に答える 1

2

prefixマーシャリングされたXMLからプロパティを省略するにはtransient、バインディングファイルのようにプロパティを宣言する必要があります。

  ...
  <java-type name="Customer">
     <xml-root-element />
     <xml-type prop-order="firstName lastName address phoneNumbers" />
     <java-attributes>
        <xml-element java-attribute="firstName" name="first-name" />
        <xml-element java-attribute="lastName" name="last-name" />
        <xml-element java-attribute="phoneNumbers" name="phone-number" />
        <xml-transient java-attribute="prefix" />
     </java-attributes>
  </java-type>
  ...

デフォルトでは、JAXBはすべてのパブリックフィールドをマップします。したがって、フィールドに明示的な「注釈」がなかったためprefix、デフォルトの方法でマップされます。

xml-mapping-metadata-complete="true"「Javaクラスで見つかったアノテーションを無視し、このバインディングファイルをマッピング情報の唯一のソースとして使用します。既存のアノテーションを拡張しないでください。」を意味します。

これがお役に立てば幸い、リック

于 2012-08-07T20:17:17.807 に答える