XSD验证错误 - xml命名空间问题

时间:2012-12-13 18:36:43

标签: soap xsd xml-namespaces

我正在运行一个简单的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.

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:2)

如果您控制架构,请将elementFormDefault="qualified"添加到架构中的xs:schema元素;这应该使您现在生成的Value和ResponseString的名称空间限定版本有效。

如果您不控制架构,那么Value和ResponseString元素将需要 not 才能进行命名空间限定,这看起来就像您原来的尝试所做的那样;我无法看到那里出了什么问题。如果你能弄清楚哪个语句特别引起了这个错误,那会有所帮助。