2

这是我的请求Envelopexsi:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"声明放在我的myRequestMethodXML 标记中:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:sd="http://www.foo.bar/ws" 
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soapenv:Header/>
    <soapenv:Body >
     <sd:myRequestMethod xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
       <sd:name xsi:nil="true"/>

这有效(用 SoapUI 测试),但是当我的用户生成soap客户端时,xsi:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"声明会自动放在Envelope这样的标签中(最外面的标签):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:sd="http://www.foo.bar/ws" 
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header/>
    <soapenv:Body >
     <sd:myRequestMethod>
       <sd:name xsi:nil="true"/>

这给了他

The namespace associated with the prefix 'xsi' could not be resolved.   

这是正常的行为吗,如果肥皂不在内部标签中,肥皂就无法理解它吗?或者我可以以某种方式配置我的 spring-ws 以允许它?用户自动生成客户端和请求,所以他不能改变他的立场。

4

3 回答 3

1

两种 XML 都是合法使用 XML 命名空间的实例。我怀疑文档处理基础架构中存在错误,在该错误中处理正文的内容时没有正确传播所有声明的命名空间前缀。

于 2013-01-02T12:23:47.623 回答
0

在创建 WebService 方法时,您可以指定名称空间。如果你让它自己生成,它给了我类似的错误。更改命名空间后,就解决了。

尝试做这样的事情,

@WebMethod(operationName = "operation")

@WebResult(name = "Response",targetNamespace = ServiceConstant.TARGET_NAME_SPACE)

Response operation(@WebParam(name = "input", mode = WebParam.Mode.IN)Request Request);

所以这一次你已经定义了自定义的命名空间,无论是 SOAPUI/ SOA Client...

希望这可以帮助

于 2013-01-02T12:34:34.200 回答
0

我从 castor JIRA 中找到了相关的错误。

我认为还没有解决。所以这仍然是一个错误。

http://jira.codehaus.org/browse/CASTOR-2813

更具体地说,当提供命名空间信息时出现问题,例如,在 XML 文档的根元素处,并且有人想要解组该文档的子节点(调用 Unmarshaller#unmarshal(org.w3c.dom.节点))。由于命名空间是在根元素中声明的,因此子节点将不具有 Castor 正在寻找的任何 XML 命名空间属性。

在这种情况下,某个元素遇到了一个属性 (xsi.*),而 Castor 不知道命名空间。所以它可能认为 XML 无效并抛出错误。

于 2013-01-03T07:14:41.807 回答