<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>
答案 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
及其子项放在命名空间中,这不是架构所期望的。