使用CXF 2.2.3调用WebService时出现以下错误。 WebService返回数据时发生错误。
Unmarshalling Error:意外元素(uri:“http://service.claimservice.hospital.www.wcb.ab.in”,local:“accidentAddress”)。预期的元素是< {http://domain.claimservice.hospital.www.wcb.ab.in} employerContactInfo>,< {http://domain.claimservice.hospital.www.wcb.ab.in} accidentCountry> ,< {http://domain.claimservice.hospital.www.wcb.ab.in} denialReason>,< {http://domain.claimservice.hospital.www.wcb.ab.in} workerContactInfo>,&LT {http://domain.claimservice.hospital.www.wcb.ab.in} accidentPostalCode>,< {http://domain.claimservice.hospital.www.wcb.ab.in} entitlementDecisionDate>中
如果可以通过更改我的wsdl来摆脱这个错误,任何人都可以打电话给我吗?
谢谢,
答案 0 :(得分:1)
简短的回答是,请求在XML中包含一个元素,其中包含{http://service.claimservice.hospital.www.wcb.ab.in}accidentAddress
的完全限定名称,其中只有“预期元素”列表中的元素才有效。
这是基于unmarshaller的上下文,它最终基于从中读取数据类型的模式(应该是呈现/导入到WSDL“类型”部分中的模式)。
根据问题中的信息,响应管道是问题,因此服务器端编组器和客户端unmarshaller不同步(从不同的模式创建)。
建议的故障排除(假设在服务器端使用marshaller对象):
捕获XML以查找有问题的消息。
确定XML是否与WSDL的types部分中显示的内容一致。
如果XML符合WSDL,那么可能的问题是客户端unmarshaller提供的数据类型与WSDL中提供的数据类型不同。
如果XML不符合WSDL,则服务器端XML编组器正在创建不正确的消息(或者它正在创建正确的消息,并且WSDL是不正确的......它会发生)。在这种情况下,可能是针对过时的数据类型创建了编组器。
如果没有使用marshaller对象而是手动创建服务响应,问题是当factAddress元素不是XML消息的有效部分或者它是消息的有效部分但是在相对于包含元素的错误位置。
这有点啰嗦,但希望包含足够的信息来帮助解决。