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

时间:2014-04-23 19:18:50

标签: jaxb cxf mule

在调用Web服务时,我收到以下异常:

[javax.xml.bind.UnmarshalException:unexpected element(uri:“urn:partner.soap.sforce.com”,local:“metadataServerUrl”)。预期元素包括< {} sessionId&gt ;,< {} sandbox>,< {} userId>,< {} passwordExpired>,< {} metadataServerUrl>,< {} userInfo>,< {} serverUrl&gt ]

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

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;

3 个答案:

答案 0 :(得分:4)

您需要利用包级别@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和命名空间限定的更多信息:

答案 1 :(得分:0)

正如@Blaise Doughan已经提到的那样,你需要确保你package-info文件正确package

您确定package com.company.project中的package-info.java行符合LoginResult类的包结构吗?

此外,在解组之前打印网络服务的XML响应,并确保该元素实际上与命名空间相关联。

答案 2 :(得分:0)

在我的案例中,

是由于使用marshaller和unmrashaller的并行进程导致的,而并行进程是由JATBUtil设置和获取的,它是单吨。当我使编组器和解组器同步时,这个不一致的问题得到解决