3

あるシナリオを考えると、私は自分のシステムのオブジェクト構造を持っています。これで、Javaクラスにマップする必要のあるXMLソースが複数あります。また、JavaオブジェクトをXMLに戻す必要はありません。

DigesterまたはJAXBを使用するためのあなたの提案は何ですか?現在、私はDigesterを使用する傾向があります。これは、同じオブジェクトメソッド呼び出しに対して各XMLソースのXMLパスを指定でき、Digesterの方が保守しやすいように思われるためです。JAXBは、JavaとXMLをマーシャリング/アンマーシャリングするための優れた設計を備えていますが、複雑すぎると思いますが、xml-javaマッピングごとにxmlスキーマが必要です。

DigesterとJAXBはどちらも、さまざまな使用シナリオに適合するという使命を持っていると思います。そのため、どちらかを決定するためにアドバイスが必要です。どうもありがとう。

4

3 に答える 3

4

JAXBの見方が歪んでいるのではないかと思います。あなたがそうすることを選択した場合、それは複雑になる可能性がありますが、それは非常に単純な場合もあります。たとえば、XMLドキュメント全体を1つの注釈だけでオブジェクトグラフにバインドできます。

また、スキーマのものは赤いニシンです。JAXBはXMLスキーマからJavaコードを生成できますが、これはスキーマある場合に便利です。そうでない場合は、その部分を無視してください。クラスモデルに手動で注釈を付けることができます。非常に簡単です。

一方、ダイジェスターは、クラスモデルにパス式を追加する必要があるため、(私の意見では)保守が困難です。

于 2011-01-07T08:54:02.890 に答える
3

JAXBの利点は、 MetroEclipseLink MOXyJaxMeの複数の実装を備えた仕様(JSR-222)であることです。これにより、ベンダーロックインの問題が回避されます。

XPathベースのマッピング

EclipseLink JAXB(MOXy)には、XPathベースのマッピングをサポートする拡張機能があります(私は技術リーダーです)。

package blog.geocode;

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="kml")
@XmlType(propOrder={"country", "state", "city", "street", "postalCode"})
public class Address {

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:Thoroughfare/ns:ThoroughfareName/text()")
    private String street;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:LocalityName/text()")
    private String city;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:AdministrativeAreaName/text()")
    private String state;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:CountryNameCode/text()")
    private String country;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:PostalCode/ns:PostalCodeNumber/text()")
    private String postalCode;

}

複数のXMLソース

オブジェクトモデルに複数のXML表現を適用するには、MOXyのXMLメタデータを活用できます。これは、JAXB標準のもう1つの拡張です。サンプルファイルは次のようになります。

<?xml version="1.0"?>
<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>

詳細については:

于 2011-01-07T14:14:03.777 に答える
1

多分トピックから外れています:私はxstreamを支持してダイジェスターを放棄しました。多分見てください

于 2011-01-07T09:39:29.390 に答える