0

単純な Web サービスを実行していますが、応答の作成と検証に問題があります。この問題は名前空間に関連しています。

私のWSDLには次のものがあります。

    <wsdl:definitions targetNamespace="http://me.com/mystuff">
      <wsdl:types><xs:schema targetNamespace="http://me.com/mystuf">
          ....

        <xs:complexType name="MyResponse">
        <xs:all>
           <xs:element name="Value" type="xs:boolean"/>
            <xs:element name="ResponseString" type="xs:string"/>
        </xs:all>
      </wsdl:types>

      //MyResponse is bound as a response for a soap operation
     </wsdl:definitions>

私は最初に次のように応答を作成しようとしました:

        String NAMESPACE_URI="http://me.com/mystuff";

    Namespace namespace = Namespace.getNamespace("xyz", NAMESPACE_URI);
    Element response = new Element(txType + "Response", namespace);

    Element value = new Element("Value");
    value.setText("true");
    response.addContent(value);

    Element responseString = new Element("ResponseString");
    response.addContent(responseString);
    responseString.setText("");

しかし、私は得るでしょう:

        org.xml.sax.SAXException: Exception in startElement: NAMESPACE_ERR: An attempt  is made to create or change an object in a way which is incorrect with regard to namespaces.

org.jdom.JDOMException: startElement の例外: NAMESPACE_ERR: 名前空間に関して正しくない方法でオブジェクトを作成または変更しようとしました。

そこで、応答の子要素に名前空間宣言を追加しました。

    Element value = new Element("Value", namespace);
    Element responseString = new Element("ResponseString", namespace);

しかし、私は得る:

    ERROR PayloadValidatingInterceptor:238 - XML validation error on response: cvc-complex-type.2.4.a: Invalid content was found starting with element 'xyz:Value'. One of '{Value, ResponseString}' is expected.

これを解決する方法についてのアイデアはありますか?

4

1 に答える 1

2

スキーマを制御する場合は、スキーマelementFormDefault="qualified"の xs:schema 要素に追加します。これにより、現在生成している Value と ResponseString の名前空間修飾バージョンが有効になります。

スキーマを制御しない場合、Value 要素と ResponseString 要素を名前空間で修飾する必要はありません。これは、元の試行が行っていたように見えます。そこで何がうまくいかなかったのかわかりません。特にどのステートメントがそのエラーを引き起こしているかを突き止めることができれば、それは役に立ちます。

于 2012-12-13T20:07:58.120 に答える