【问题标题】:SOAP re-declaring qname inside bodySOAP 在正文中重新声明 qname
【发布时间】:2012-01-11 13:21:41
【问题描述】:

我有一个这种形式的 SOAP 请求:

<soapenv:Envelope 
      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:myqname="http://example.com/hello" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <myqname:MyRequest xmlns:myqname="http://example.com/hello">
         ...
      </myqname:MyRequest>
   </soapenv:Body>
</soapenv:Envelope>

如果我让 SOAPUI “格式化 XML”这个请求, 它删除了 myqname 的第二个声明,所以我得到了这个:

<soapenv:Envelope 
      xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
      xmlns:myqname="http://example.com/hello" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Header/>
   <soapenv:Body>
      <myqname:MyRequest>
         ...
      </myqname:MyRequest>
   </soapenv:Body>
</soapenv:Envelope>

原始请求工作正常, 但应用服务器因修改后的请求而失败,并出现以下错误:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring>Unmarshalling Error: UndeclaredPrefix: Cannot resolve 'myqname:MyRequest' as a QName: the prefix 'myqname' is not declared.</faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

根据网络服务规范, qname 是否必须在soapenv:Body 节点中重新声明? 这是 SOAPUI 错误还是应用程序服务器错误?还是我的误解?

SOAPUI 4.0.1,WebLogic Server 版本:10.3.2.0

编辑:ups,即使使用WebLogic应用服务器,我也是使用CXF web services框架。我在那里发布了这个问题。 issues.apache.org/jira/browse/CXF-4026

所以:SOAPUI 4.0.1、CXF 2.5.0

【问题讨论】:

    标签: web-services soap cxf soapui


    【解决方案1】:

    我将其描述为剥离 SOAP 信封的代码中的错误;它应该保留命名空间上下文,但它没有这样做,这破坏了 XML。我猜那是因为它通过获取子字符串而不是在 DOM 元素级别进行操作来进行剥离(无论它是否使用 DOM 处理来进行剥离都是题外话)。我不确定是哪个组件在进行剥离,因为这些东西可以嵌套,但我怀疑它是 WebLogic……


    [编辑]:我检查了SOAP specification,它并没有说正文的内容必须直接声明使用的命名空间(参见§5.3.1),尽管它确实说它应该是命名空间.正因为如此,正常的 XML 命名空间规则适用——整个 SOAP 消息只是一个 XML 文档——这会使 WebLogic 的行为成为一个错误。

    【讨论】:

    • 感谢您的回答;不过,这是一个猜测,我同意,但我需要一个明确的答案。
    • @David:最终的答案是 SOAP 规范对此只字未提。正常的 XML 规则适用。 WebLogic 的错误。
    • 我很想这么说,但你会同意我的说法,这有点难以置信... :) 我已将问题发布到 weblogic 论坛:forums.oracle.com/forums/…
    • ups,即使使用 WebLogic 应用服务器,我也是使用 CXF Web 服务框架。我在那里发布了这个问题。 issues.apache.org/jira/browse/CXF-4026
    • 我在 Tomcat 中使用 CXF,从未见过像你描述的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多