jaxb - [javax.xml.bind.UnmarshalException : unexpected element

标签 jaxb cxf 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")

公共(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 和命名空间限定的更多信息:
  • http://blog.bdoughan.com/2010/08/jaxb-namespaces.html
  • 关于jaxb - [javax.xml.bind.UnmarshalException : unexpected element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23253314/

    相关文章:

    java - JAX-WS 服务中根元素的属性

    jaxb - MOXy @XmlPath 被忽略

    java - 如何构建 Spring 代码以进行 JAXB 编码和 XML 处理

    cxf - 让 CXF JAX-RS 客户端使用 Jackson

    java - 将输入流转换为pdf到字节数组

    java - Mule单机无法读取架构文档 'http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd'

    http - Mule 中的接收器线程配置文件 HTTP 配置

    java - 正确修复 Java 10 提示 jaxb-impl 2.3.0 非法反射访问?

    java - CXF 与 WebSphere JRE 之间的不兼容性

    java - 为 JAXB.unmarshal() 提取 XML 节点的最简单方法是什么?