2016-04-13 5 views
0

私はいくつかのJavaコードを生成していたからXSDを持っている:jaxb生成コードからJAXBElementを削除しますか?

<xs:element name="full-account-v2" > 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="ban" type="xs:string" /> 
     <xs:element name="status" type="xs:int" /> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

これは、[OK]を働いて、私にFullAccountV2と呼ばれる生成されたクラスを提供してきました。

私は別の場所で同じ複合型を使用したいので、私は、私はXSDファイルで指定された複合型を作成し、このようにそれを参照してくださいだろうと思った:

<xs:element name="full-account-v2" type="fullAccountV2Type"/> 

次のように複合型が定義されています:

<xs:complexType name="fullAccountV2Type"> 
    <xs:sequence> 
     <xs:element name="ban" type="xs:string" /> 
     <xs:element name="status" type="xs:int" /> 
    </xs:sequence> 
</xs:complexType> 

突然、アンマーシャラーは動作を停止します。次のXMLはFullAccountV2にうまく非整列化された:

<er-response id="100058" version="2"> 
    <payload> 
    <full-account-v2> 
    <ban>BAN_P146058461158163004</ban> 
    <status>401</status> 
    </full-account-v2> 
    </payload> 
</er-response> 

しかし、今、そのクラスが表示されなくなり、そしてXMLがQnamefull-account-v2declaredTypeFullAccountV2TypeJAXBElementにJAXBによって非整列化されます。

ErResponseペイロードは以下のように他の場所で定義される:

<xs:complexType name="payloadType"> 
    <xs:sequence> 
     <xs:any processContents="lax" minOccurs="0" /> 
    </xs:sequence> 
</xs:complexType> 

Iは、要素宣言に別個のXMLファイルのタイプを定義しようとしたが、同じ結果を得ました。

どのようにこのような単純なリファクタリングが私に8時間の苦労をもたらしましたか?私は間違って何をしていますか?

NBこれは

<xs:element name="full-account-v2" type="fullAccountV2" /> 
<xs:complexType name="fullAccountV2"> 
    <xs:sequence> 
     <xs:element name="ban" type="xs:string" /> 
     <xs:element name="status" type="xs:int" /> 
    </xs:sequence> 
</xs:complexType> 

からthis problem

+0

「作業を停止する」は役に立ちません。特定のエラーメッセージまたは条件の詳細を指定してください – Black

答えて

0

変更の逆数であるように思われる、JAXBスキーマコンパイラは、以前のようFullAccountV2名前でアーティファクトを生成します。

nametypeの値を同じにすることもできます。つまり、FullAccountV2です。変更するには、以下のも正常に動作します -

<!-- one is element and other is complexType --> 
<xs:element name="fullAccountV2" type="fullAccountV2" /> 
<xs:complexType name="fullAccountV2"> 
    <xs:sequence> 
     <xs:element name="ban" type="xs:string" /> 
     <xs:element name="status" type="xs:int" /> 
    </xs:sequence> 
</xs:complexType> 

スキーマ定義の上にも、以前のようアーティファクトFullAccountV2を生成します。 typeに割り当てられたものは、スキーマコンパイラによってアーティファクト名を導出するために使用されます。

を使用してスキーマxsdを生成している場合は、これも特に目立ちます。たとえば - クラス定義の

@XmlRootElement 
public class Pojo { 
    public Pojo p; 
} 

schemagen下に示すスキーマ定義の下に生成

<xs:element name="pojo" type="pojo"/> 
<xs:complexType name="pojo"> 
    <xs:sequence> 
     <xs:element name="p" type="pojo" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 

注意、nametypeはデフォルトで同じ値すなわち、クラス名を有しています。

+0

が失敗する: 'javax.xml.bind。MarshalException - リンクされた例外: [com.sun.istack.internal.SAXException2:型が "com.mycompany.global.er.decoupling.binding.response.v2.FullAccountV2"型を整列できません。 @XmlRootElementアノテーション] ' – mdarwin