【问题标题】:CXF don't accept SOAP req with default xml namespaceCXF 不接受带有默认 xml 命名空间的 SOAP 请求
【发布时间】:2013-06-13 19:12:11
【问题描述】:

这个被接受(显式声明的身份验证命名空间)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:auth="http://foo.pro/Auth/">
   <soapenv:Header/>
   <soapenv:Body>
     <auth:login>
      <login>xxx</login>
      <password>xxxx</password>
     </auth:login>
   </soapenv:Body>
</soapenv:Envelope>

这个给出“Unmarshalling Error: unexpected element (uri:"http://foo.pro/Auth/", local:"login")。预期的元素是 ,"

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Header/>
            <soap:Body> <login xmlns="http://foo.pro/Auth/"
                           xmlns:xs="http://www.w3.org/2001/XMLSchema"
                           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <login>login</login>
            <password>password</password>
            </login></soap:Body>
</soap:Envelope>

客户端无法修复,应该在cxf服务端做点什么

【问题讨论】:

    标签: java xml soap cxf xml-namespaces


    【解决方案1】:

    嗯,这很明显。当您定义命名空间时:http://foo.pro/Auth/ 在第二个示例中 &lt;login&gt;&lt;password&gt;&lt;login&gt; 包装的元素属于 http://foo.pro/Auth/ 命名空间。因为您在根&lt;login&gt; 标记中使用xmlns 声明它,所以其中的所有内容都属于这个命名空间:http://foo.pro/Auth/。与第一个示例一样,您仅通过 auth 前缀分配根 &lt;login&gt; 元素,该前缀指向:http://foo.pro/Auth/ 命名空间,而其中的其他元素没有分配给它们的任何命名空间,这是您的第二个示例为您提供的方式一个错误。

    【讨论】:

    • 好的,这避免了我的注意,将尝试从客户端修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2013-06-03
    • 2022-01-04
    相关资源
    最近更新 更多