2011-06-15 6 views
1

私はXMLファイルを持ち、xmlスキーマにはカップルcomplexTypeが含まれています。ですから、xmlファイルをアンマーシャリングするときに、xmlパーサーに私のxml schemaを与えたいと思います。もしそうなら、それをする方法は可能でしょうか?JAXB:与えられたXMLスキーマを持つXMLファイルを非整列化します。

EDITunmarshalの後、オブジェクトのすべてのフィールドがnullです。どんな考え?

答えて

1

UPDATE

あなたが見ている問題は、NameAndAddress要素内にネストされているコンテンツに起因するものです。あなたはNameAndAddressクラスを導入して、PackageLabelのインスタンスを保持することができます。

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; 

} 

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拡張

別の方法としては、で@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; 

} 

詳細情報

  • http://bdoughan.blogspot.com/2010/07/xpath-based-mapping.html

  • あなたはたUnmarshallerのインスタンスにXMLスキーマを設定することができます。これは、オブジェクトにXMLを変換しながら、JAXBは、入力を検証するようになります:

    あなたがXMLスキーマからオブジェクト・モデルを生成したい場合は、あなたもそれを行うためにJAXBを使用することができます:

    +1

    @Harryファム - 以下は役立つかもしれhttp://wiki.eclipse.org/EclipseLink/UserG uide/MOXy/Simple_Values/Enums。先に進まずに新しい質問をすれば、私はそのように手助けすることができます。 –

    +0

    こんにちは、私は別にその問題を投稿しますが、あなたは私の元の投稿をもう一度見てみることができます。何らかの理由で、 'unmarshal'の後に、私のオブジェクトのすべてのフィールドがすべてnullです。私は元の投稿にいくつかのコードを投稿します。ありがとう、Blaise。 btw、あなたのブログは最高です。 –

    +1

    @ハリー・パム - あなたの質問に対する私の答えを更新しました。私はあなたがブログを楽しんでいると聞いてうれしいです:)。 –

    関連する問題