【问题标题】:[javax.xml.bind.UnmarshalException: unexpected element[javax.xml.bind.UnmarshalException:意外元素
【发布时间】:2014-06-08 19:38:29
【问题描述】:

在调用 Web 服务时,出现以下异常:

[javax.xml.bind.UnmarshalException:意外元素(uri:“urn:partner.soap.sforce.com”,本地:“metadataServerUrl”)。预期元素是 、、、、、、]

预期的响应实际上是一个名为 LoginResult 的对象。但是我在异常 strace 中看到了元素名称。

loginResult 类是 web 服务调用的预期输出对象。请建议如何解决此问题。

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "result")

公共类登录结果 {

@XmlElement(name = "metadataServerUrl")
protected String metadataServerUrl;
@XmlElement(name = "passwordExpired")
protected boolean passwordExpired;
@XmlElement(name = "sandbox")
protected boolean sandbox;
@XmlElement(name = "serverUrl")
protected String serverUrl;
@XmlElement(name = "sessionId")
protected String sessionId;`
@XmlElement(name = "userId")
protected String userId;
@XmlElement(name = "userInfo")
protected GetUserInfoResult userInfo;

【问题讨论】:

    标签: jaxb cxf mule


    【解决方案1】:

    您需要利用包级别 @XmlSchema 注释(在名为 package-info 的特殊类上指定命名空间限定条件。如果您已经有一个 package-info.java 文件,请确保它正在编译。

    package-info.java

    以下是package-info.java 文件的完整内容。您需要将包从 example 更改为包含您希望应用命名空间限定的域模型的包。

    @XmlSchema(
        namespace = "urn:partner.soap.sforce.com",
        elementFormDefault = XmlNsForm.QUALIFIED)
    package example;
    
    import javax.xml.bind.annotation.*;
    

    更多信息

    您可以在我的博客上找到有关 JAXB 和命名空间限定的更多信息:

    【讨论】:

    • 我已经检查过了。正如您所提到的并正在编译。我仍然继续收到此错误。任何想法,还有什么可能是原因。
    【解决方案2】:

    正如@Blaise Doughan 已经提到的,您需要确保您拥有package-info 文件并且该文件也是正确的package

    您是否确保package-info.java 中的package com.company.project 行与您的LoginResult 类的包结构匹配?

    此外,在解组之前打印 Web 服务的 XML 响应,并确保该元素实际上具有关联的 命名空间

    【讨论】:

    • 你确定它在服务器上的jdk1.0...谁使用jdk1
    【解决方案3】:

    在我的情况下,问题是由于使用 marshaller 和 unmrashaller 的并行进程,这些进程由单吨的 JAXBUtil 设置和获取。当我使编组器和解组器同步时,这个不一致的问题得到了解决

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 2014-01-02
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多