【问题标题】:Error while calling WebService Using CXF 2.3.3Unmarshalling Error: unexpected element使用 CXF 2.3.3Unmarshalling Error 调用 WebService 时出错:意外元素
【发布时间】:2012-05-10 05:27:40
【问题描述】:

当我使用 CXF 2.2.3 调用 WebService 时出现以下错误。 WebService返回数据时发生错误。

解组错误:意外元素(uri:"http://service.claimservice.hospital.www.wcb.ab.in", local:"accidentAddress")。预期元素是 、、,,,,

如果可以通过更改我的 wsdl 来消除此错误,谁能告诉我?

谢谢,

【问题讨论】:

    标签: java web-services apache cxf unmarshalling


    【解决方案1】:

    简短的回答是,请求在 XML 中包含一个完全限定名称为 {http://service.claimservice.hospital.www.wcb.ab.in}accidentAddress 的元素,该元素位于仅“预期元素”列表中的元素有效的位置。

    这基于解组器的上下文,最终基于从中读取数据类型的架构(应该是呈现/导入到 WSDL“类型”部分的架构)。

    根据问题中的信息,响应管道是问题所在,因此服务器端编组器和客户端解组器不同步(由不同的架构创建)。

    建议的故障排除(假设在服务器端使用编组器对象):

    1. 为有问题的消息捕获 XML。

    2. 确定 XML 是否与 WSDL 的类型部分中显示的内容一致。

    3. 如果 XML 符合 WSDL,则可能的问题是客户端解组器提供的数据类型与 WSDL 中提供的数据类型不同。

    4. 如果 XML 与 WSDL 不兼容,则服务器端 XML 编组器正在创建不正确的消息(或者它正在创建正确的消息并且 WSDL 不正确......它发生了)。在这种情况下,编组器可能是针对过时的数据类型创建的。

    如果不使用 marshaller 对象而是手动创建服务响应,那么问题在于,当它不是 XML 消息的有效部分或者它是消息的有效部分但在相对于包含元素的错误位置。

    这有点啰嗦,但希望包含足够的信息来提供帮助。

    【讨论】:

    • 谢谢。我已经解决了问题 URL url = new URL(uri);服务服务 = Service.create(url, serviceName); Dispatch dispatch = service.createDispatch(portName,SOAPMessage.class,Service.Mode.MESSAGE); MessageFactory mf = MessageFactory.newInstance();复制 SOAP 请求 XML 部分,通过将该 XML 字符串作为字节传递来创建一个新的 ByteArrayInputStream 对象。从 MessageFactory 创建一个 SOAPMessage 对象,然后通过传递 SOAPMessage 的对象调用 Dispatch 的调用方法,这将为您提供 XML
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2012-05-22
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    相关资源
    最近更新 更多