这是我的请求Envelope
,我的xsi:xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
XML标记中包含myRequestMethod
声明:
<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以某种方式允许它? 用户自动生成客户端和请求,因此他无法改变他的一面。
答案 0 :(得分:1)
这两个XML都是合法使用XML命名空间的实例。我怀疑文档处理基础结构中的一个错误是处理 body 的内容而没有正确传播所有声明的名称空间前缀。
答案 1 :(得分:0)
在创建WebService方法时,您可以指定nameSpace。如果你让它自己生成,它给了我类似的错误。更改命名空间后,它将被解析。
尝试做这样的事情,
@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还是客户端......
希望这有帮助
答案 2 :(得分:0)
我发现了蓖麻JIRA的相关错误。
我认为还没有解决。所以这仍然是一个错误。
http://jira.codehaus.org/browse/CASTOR-2813
更具体地说,当提供名称空间信息时会出现问题,例如,在XML文档的根元素处,并且有人想要解组该文档的子节点(调用Unmarshaller #unmarshal(org.w3c) .dom.Node))。子节点将不具有Castor正在寻找的任何XML命名空间属性,因为在根元素处声明了命名空间。
在这种情况下,Castor会在某个元素处满足属性(xsi。*) 不知道命名空间。所以它可能认为XML是 无效并抛出错误。