调用 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")
公共(public)类登录结果 {
@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;
最佳答案
您需要利用包级别 @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.*;
更多信息
您可以在我的博客上找到有关 JAXB 和命名空间限定的更多信息:
关于jaxb - [javax.xml.bind.UnmarshalException : unexpected element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253314/