2

かなり複雑な XML スキーマ (HR-XML) を扱っており、xpath ベースのマッピング アプローチを使用して、ローカルに定義されたドメイン オブジェクトに非整列化することを望んでいます。Simple を試しましたが、問題が発生しました。最近 MOXy を試してみましたが、運が良かったのですが、述語のサポートで問題が発生しました。MOXy が使用する必要があると思われる述語をサポートしているかどうかを確認しようとしています。私がする必要があるのは、兄弟要素の値に基づいて 1 つの要素の値を取得することです。

これが実行されると、正しく選択されていないように null が返されます。誰かが同様のことをしましたか?多分別の問題がありますか?

XML の例:

<person>
<communication>
    <address>
        <street>101 First St.</street>
        <city>Whoville</city>
        <state>CA</state>
    </address>
</communication>
<communication>
    <channelcode>email</channelcode>
    <uri>johndoe@some.com</uri>
</communication>
<communication>
    <channelcode>telephone</channelcode>
    <usecode>mobile</usecode>
    <dialnumber>555-555-5555</dialnumber>
</communication>
</person>

オブジェクトの例:

public class Person
{
    private String email;
    private Address homeAddress;
    private String homePhone;
...

xml-bindings.xml フラグメントの例:

<java-types>
      <java-type name="Person">
        <xml-root-element name="person">
        <java-attributes>
          <xml-element java-attribute="email" xml-path="communication/uri[../channelcode/text()='email']/text()" />
          <xml-element java-attribute="homePhone" xml-path="communication[channelcode/text()='telephone']/dialnumber/text()" />
          <xml-element java-attribute="homeAddress" xml-path="communication/Address" />
        </java-attributes>
     </java-type>
    ...
4

1 に答える 1

0

現在、EclipseLink JAXB (MOXy)では、述語が XML 属性の値をチェックする必要があります。これは、次の XML がある場合を意味します。

<?xml version="1.0" encoding="UTF-8"?>
<person>
   <communication channelcode="address">
      <address>
         <city>Whoville</city>
         <state>CA</state>
         <street>101 First St.</street>
      </address>
   </communication>
   <communication channelcode="email">
      <uri>johndoe@some.com</uri>
   </communication>
   <communication channelcode="telephone">
      <dialnumber>555-555-5555</dialnumber>
   </communication>
</person>

次に、次のようにマッピングできます。

<?xml version="1.0"?>
<xml-bindings
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="forum14368563"
    xml-accessor-type="FIELD">
    <java-types>
        <java-type name="Person">
            <xml-root-element/>
            <xml-type prop-order="homeAddress email homePhone"/>
            <java-attributes>
                <xml-element java-attribute="homeAddress" xml-path="communication[@channelcode='address']/address"/>
                <xml-element java-attribute="email" xml-path="communication[@channelcode='email']/uri/text()"/>
                <xml-element java-attribute="homePhone" name="communication[@channelcode='telephone']/dialnumber/text()"/>
            </java-attributes>
        </java-type>
     </java-types>
</xml-bindings>
于 2013-01-19T11:31:40.137 に答える