XML ファイルがあり、その xml スキーマにはカップルが含まcomplexType
れています。そのため、xml ファイルを非整列化するときに、xml パーサーに my xml schema
. それを行うことは可能ですか、そうであればどのように行うのですか?
EDIT : I の後unmarshal
、オブジェクトのすべてのフィールドが null になります。理由はありますか?
XML ファイルがあり、その xml スキーマにはカップルが含まcomplexType
れています。そのため、xml ファイルを非整列化するときに、xml パーサーに my xml schema
. それを行うことは可能ですか、そうであればどのように行うのですか?
EDIT : I の後unmarshal
、オブジェクトのすべてのフィールドが null になります。理由はありますか?
アップデート
表示されている問題は、コンテンツがNameAndAddress
要素内にネストされていることが原因です。そのインスタンスを保持するNameAndAddress
クラスを導入できます。PackageLabel
パッケージラベル
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="PackageLabel")
@XmlAccessorType(XmlAccessType.FIELD)
public class PackageLabel implements Serializable {
@XmlElement(name="NameAndAddress")
private NameAndAddress nameAndAddress;
}
名前と住所
import javax.xml.bind.annotation.XmlElement;
public class NameAndAddress {
@XmlElement(name="Name")
private String name;
@XmlElement(name="Address1")
private String address1;
@XmlElement(name="Address2")
private String address2;
@XmlElement(name="City")
private String city;
@XmlElement(name="State")
private String state;
@XmlElement(name="ZipCode")
private String zipCode;
}
EclipseLink JAXB (MOXy) の @XmlPath 拡張
あるいは、 EclipseLink JAXB (MOXy)@XmlPath
の拡張機能を使用することもできます。
import java.io.Serializable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlRootElement(name="PackageLabel")
@XmlAccessorType(XmlAccessType.FIELD)
public class PackageLabel implements Serializable {
@XmlPath("NameAndAddress/Name/text()")
private String name;
@XmlPath("NameAndAddress/Address1/text()")
private String address1;
@XmlPath("NameAndAddress/Address2/text()")
private String address2;
@XmlPath("NameAndAddress/City/text()")
private String city;
@XmlPath("NameAndAddress/State/text()")
private String state;
@XmlPath("NameAndAddress/ZipCode/text()")
private String zipCode;
}
詳細については
Unmarshaller のインスタンスに XML スキーマを設定できます。これにより、JAXB は XML をオブジェクトに変換する際に入力を検証します。
XML スキーマからオブジェクト モデルを生成する場合は、JAXB を使用してそれを行うこともできます。