[javax.xml.bind.UnmarshalException: unexpected element(意外元素)

问题描述 投票:4回答:3

当调用一个web服务时,我得到以下异常。

javax.xml.bind.UnmarshalException: unexpected element (uri: "urn:partner.soap.sforce.com", local: "metadataServerUrl"). 预期的元素是<{}sessionId>,<{}sandbox>,<{}userId>,<{}passwordExpired>,<{}metadataServerUrl>,<{}userInfo>,<{}serverUrl>] 。

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

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

@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "result")

公共类 LoginResult {

@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
3个回答
5
投票

你需要利用包级别的 @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和命名空间资格的信息。


0
投票

正如@Blaise Doughan已经提到的,你需要确保你已经有了 package-info 文件,而且是在正确的 package.

你确定那条线 package com.company.projectpackage-info.java 匹配您的 LoginResult 类?

同时,打印 XML 的响应,并确保该元素实际上具有以下特点 命名空间 相关的。


0
投票

在我的例子中,问题是由于使用marshaller和unmrashaller的并行进程,而这两个进程是由单吨的JAXBUtil设置和获取的。

© www.soinside.com 2019 - 2024. All rights reserved.