默认命名空间出错

时间:2015-07-16 14:59:49

标签: xml soap

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://data.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <Sachin>
              <aRoute>
                <name>ToTheTop</name>
                <grade xsi:type="FrencGrade">
                <gradeNumber>7</gradeNumber>
                <gradeModifier>a</gradeModifier>
                </grade>
            </aRoute>
     </Sachin>
   </soapenv:Body>
</soapenv:Envelope> 

当我尝试使用默认命名空间发送请求时,获取错误响应为Unmarshalling Error。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <soap:Fault>
         <faultcode>soap:Client</faultcode>
         <faultstring >Unmarshalling Error: unexpected element </faultstring>
      </soap:Fault>
   </soap:Body>
</soap:Envelope>

1 个答案:

答案 0 :(得分:0)

我必须看到完整的架构,但要从上面评论中给出的WSDL小片段的组合中看到:

<schema xmlns="http://www.w3.org/2001/XMLSchema"
    targetNamespace="Uri" elementFormDefault="unqualified"
    attributeFormDefault="unqualified">

使用elementFormDefault="unqualified",使用xsi:type的示例请求,我怀疑您正在使用期望Sachin元素位于目标中的架构名称空间,但其子项位于 no 名称空间中。 &#34;不合格的意思&#34;这里是顶级元素声明采用模式的目标命名空间,但是&#34; local&#34; complexType中的声明不会。因此,如果架构看起来像

<element name="Sachin" type="SachinType"/><!-- top-level declaration -->

<complexType name="SachinType">
  <sequence>
    <!-- local declaration -->
    <element name="aRoute" maxOccurs="unbounded" type="tns:routeType"/>
  </sequence>
</complexType>

<complexType name="routeType">
  <sequence>
    <element name="name" type="string"/>
    <element name="grade" type="gradeType" />
  </sequence>
</complexType>

<!-- etc. -->

然后一个有效的实例必须是

<u:Sachin xmlns:u="Uri">
  <aRoute>
    <name>...</name>
    <grade ....></grade>
  </aRoute>
</u:Sachin>

使用xmlns="Uri"会将aRoute及其子项放在命名空间中,这不是架构所期望的。