0

私に起こっているいくつかの奇妙な脳のラックがあります。特定の xsd ファイルで、次のような xml 要素を見つけます。

<xsd:element name="getAllOperationsSystemsRequest">
    <xsd:annotation>
      <xsd:documentation>
      </xsd:documentation>
    </xsd:annotation>
</xsd:element>

wsdl 操作が要素にリンクされている

   <wsdl:operation name="getAllOperationsSystems">
     <wsdl:input message="tns:getAllOperationsSystemsRequest"/>
     <wsdl:output message="tns:getAllOperationsSystemsResponse"/>
     <wsdl:fault name="getAllOperationsSystemsException" message="tns:getAllOperationsSystemsException"/>
  </wsdl:operation> 

どうやら、getAllOperationsSystemsRequest は既知のタイプにバインドされていません (属性「タイプ」がありません。その結果、wsdl2java ツールを実行した後、最終的にメソッド定義を取得します。

public org.tmforum.mtop.mri.xsd.osr.v1.MultipleObjectsResponseType getAllOperationsSystems(
    javax.xml.ws.Holder<org.tmforum.mtop.fmw.xsd.hdr.v1.Header> mtopHeader,
    java.lang.**Object** mtopBody
  )throws GetAllOperationsSystemsException

OperationsSystemsRequest の代わりにオブジェクトが入力パラメータ タイプとして生成されます (実際には OperationsSystemsRequest は存在​​しません。

最後に、marshall/unmarshall で太字の実行時エラーが発生します。

原因: com.sun.istack.SAXException2: 「javax.xml.bind.JAXBElement」のインスタンスが「java.lang.Object」を置換していますが、「javax.xml.bind.JAXBElement」は匿名型にバインドされています。

それを解決するための情報をくれた人には本当に感謝しています。事前にTnanks。

4

1 に答える 1

0

XML スキーマの仕様によると、getAllOperationsSystemsRequest 要素の「タイプ」は xsd:anyType です。基本、なんでも。そのため、コード内で Object が生成されます。コード ジェネレーターは、要素ではなく型に対して生成します (ほとんどの場合)。型が要素でのみ表現されている場合は、 @XmlRootElement アノテーションを取得しますが、ほとんどの場合、型について考える必要があります。

スキーマを次のように変更することをお勧めします。

<xsd:element name="getAllOperationsSystemsRequest">
    <xsd:annotation>
      <xsd:documentation>
      </xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
        <xsd:sequence/>
    </xsd:complexType>
</xsd:element>

これにより、型が生成され、要素が空の要素に制限されます。

于 2013-11-07T13:33:31.340 に答える