在soap UI中,我使用以下请求,一切正常:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://types.kamal.com/5_0/">
<soapenv:Header/>
<soapenv:Body>
<_0:getNumberOfMatches>
<Id>XXX</Id>
<erPassword>XXX</erPassword>
<name>KOL</name>
<timing>
<start>XXXX</start>
</timing>
</_0:getNumberOfMatches>
</soapenv:Body>
</soapenv:Envelope>
如果我在根级别<abc>1</abc>
传递一个元素,它仍然可以正常工作。请求变成这样。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://types.kamal.com/5_0/">
<soapenv:Header/>
<soapenv:Body>
<_0:getNumberOfMatches>
<Id>XXX</Id>
<erPassword>XXX</erPassword>
<name>KOL</name>
<timing>
<start>XXXX</start>
</timing>
<abc>1</abc>
</_0:getNumberOfMatches>
</soapenv:Body>
</soapenv:Envelope>
但是,如果我在时间元素下添加此标记<abc>1</abc>
,则会开始向我提供非编组异常。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:_0="http://types.kamal.com/5_0/">
<soapenv:Header/>
<soapenv:Body>
<_0:getNumberOfMatches>
<Id>XXX</Id>
<erPassword>XXX</erPassword>
<name>KOL</name>
<timing>
<start>XXXX</start>
<abc>1</abc>
</timing>
</_0:getNumberOfMatches>
</soapenv:Body>
</soapenv:Envelope>
如果有人对JAX-WS使用的Unmarshalling机制有任何想法。 为什么它在父级别工作,并且在嵌套标记的情况下停止工作。
答案 0 :(得分:0)
请从您的wsdl确认您是否在父级别有特殊的“标签”?
<xs:any namespace="##other" />
此xmlAnyElement
的存在可能是父<getNumberOfMatches>
接受新元素的原因。
另一方面,当您将新<abc>
标记放在<timing>
标记中时,它不起作用。因为<timing>
标记在定义的wsdl中没有xmlAnyElement
。
你可以在这里找到详细的工作:http://www.w3schools.com/schema/schema_complex_any.asp
如果这解决了您的问题,请告诉我。