Spring WS在架构实例的名称空间声明方面存在问题

时间:2013-01-02 12:21:04

标签: java spring soap soapui spring-ws

这是我的请求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以某种方式允许它? 用户自动生成客户端和请求,因此他无法改变他的一面。

3 个答案:

答案 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是   无效并抛出错误。