2017-07-21 14 views
1

私はxsdドキュメントを持っていました。JAXBを使用してJavaクラスを生成したいと思います。XSDからJAXBを使用して要素のJavaクラスを生成

<element name="myResponse" type="param:response> 
<complexType name="response"> 
    <sequence> 
     <element maxOccurs="unbounded" minOccurs="0" name="reference" type="param:myType" /> 
     ... 
    </sequence> 
</complexType> 

とMYTYPEは、あまりにも、complexTypeのように定義されます。 は前に、一つの要素のようにありました。 次に、生成されたクラスMyResponse.javaとReference.javaを取得します。 私がで「参照」の値を割り当てることができます。

ArrayList<myType> l = new new ArrayList<myType>() 
response.getReference().addAll(l); 

、それが働きました。

今、maxOccurs = "unbounded"を削除しましたが、もう動作しません。 応答はList型でなく、JAXBElementです。 は、私が使用してみました:

myType t = new myType(); 
response.getReference().setValue(t); 

myType t = new myType(); 
response.setReference(t); 

どちらも動作します。

リストではないときに正しい方法は何か教えていただけますか?

答えて

0

私はこれまでのところ評判が足りませんので、私は質問にコメントすることはできませんので、あなたの問題が何かを推測する責任があります(Javaコードであなたの "応答"変数をどう管理するかに関する十分な情報はありません)。私はこれが、あなたのタイプが要素のシーケンスを受け入れるか、または単一のものだけを受け入れるかとは関係がないと信じています。

  1. あなたは最終的にObjectFactory.classがあなたのタイプを表す他のクラスと一緒に生成されているはずのツールを使用して、XJCスキーマからJavaクラスを生成する場合。そのオブジェクトがどのように作成されているかを理解するために、そのオブジェクトを調べます。あなたの応答要素はスキーマのトップレベルの一つであるため

  2. は、それは@XmlElementDeclannotationでアノテートさと種類を持っているJAXBElementの

  3. あなた「応答」(生成されたクラスを確認してください)タイプリストのではありませんでした。それが唯一のxmlファイルからあなたアンマーシャリングのデータでは、次の方法でそれを行う必要がある場合

だから

JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class); 
Response response = ((JAXBElement<Response>) jc.createUnmarshaller().unmarshal(new File("YOUR_FILE_PATH"))).getValue(); 
MyType t = new ObjectFactory().createMyType(); 
response.setReference(t); 

は、この基本的に適切な方法だろうList<MyType>タイプの「参照」フィールドを持っていました( ObjectFactory.classメソッドを使用して新しいオブジェクトを作成するなど)。

関連する問題