2

私は JAXB を初めて使用し、現在、複雑な XML を複数のネストされたオブジェクトにアンマーシャリングする必要があるプロジェクトに取り組んでいます。たとえば、次の XML があるとします。

 <person>
     <bio>
          <id>12345</id>
          <name>Keth TTT</name>
          <age>30</age>
     </bio>
     <address>
           <no>1232</no>
           <street>York Street</street>
           <city>NewYork<city>
           <country>USA</country>
     </address>
 </person>

そして、次のドメインオブジェクトがあるとします

class Person{
    String id;
    String name;
    int age;
    Address address;
}

class Address{
    String name;
    String no;
    String street;
    String city;
    String country;
}

XSD が一致している場合、または構造が一致している場合、JAXB はそれらの POJO を簡単に設定します。しかし、ここでは複雑なマッピングを行う必要があります (例:PersonAddressクラスの両方に同じ属性名が含まれる)。これらのオブジェクトを移動し、両方のオブジェクトにデータを入力するにはどうすればよいでしょうか?

4

1 に答える 1

0

注: 私はEclipseLink JAXB (MOXy)のリーダーであり、JAXB (JSR-222)エキスパート グループのメンバーです。

ユースケースにMOXyの@XmlPath拡張機能を使用できます。クラスPersonは次のようになります。

import javax.xml.bind.annotations*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Person{

    @XmlPath("bio/id/text()")
    String id;

    @XmlPath("bio/name/text()")
    String name;

    @XmlPath("bio/age/text()")
    int age;

    Address address;
}

MOXy を JAXB プロバイダーとして指定するにはjaxb.properties、次のエントリを使用して、ドメイン モデルと同じパッケージで呼び出されるファイルを含める必要があります ( http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-asを参照)。 -your.html ):

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

詳細については

于 2012-09-11T16:11:53.983 に答える