[javax.xml.bind.UnmarshalException:意外元素

rst*_*rst 4 cxf jaxb mule

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

[javax.xml.bind.UnmarshalException:意外元素(uri:“urn:partner.soap.sforce.com”,本地:“metadataServerUrl”)。预期元素为<{}sessionId>、<{}sandbox>、<{}userId>、<{}passwordExpired>、<{}metadataServerUrl>、<{}userInfo>、<{}serverUrl>]

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

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

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "result")
Run Code Online (Sandbox Code Playgroud)

公共类登录结果 {

@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;
Run Code Online (Sandbox Code Playgroud)

bdo*_*han 5

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

包信息.java

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

@XmlSchema(
    namespace = "urn:partner.soap.sforce.com",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.*;
Run Code Online (Sandbox Code Playgroud)

想要查询更多的信息

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