【问题标题】:Sending and Receiving a xml object (unmarshall)发送和接收 xml 对象(解组)
【发布时间】:2014-03-27 07:48:56
【问题描述】:

我试图在我的网络服务中从一个 html 页面接收这个对象。在 eclipse 打开的浏览器中工作正常,但是当我在 Firefox 中尝试相同的事情时,我遇到了问题:

原因:javax.xml.bind.UnmarshalException:意外元素(uri:“http://www.w3.org/1999/xhtml”,本地:“userclient”)。预期元素是

@XmlRootElement
public class Userclient {

    @XmlElement
    private String first_name;

    @XmlElement
    private String last_name;

    @XmlElement
    private String email;

    public Userclient() {
    }
//....
}

//Reciving

    @PUT
    @Consumes("application/xml")
    public Response addUser(Userclient user,
            @CookieParam("sessionId") String sessionCookie) {
}


//Sending
<script>

RestServlet.addUser({
$entity : userclient
});

</script>                       

【问题讨论】:

  • 请显示您发送到 Web 服务的 XML?您是否为 userclient 根元素使用命名空间?

标签: rest jaxb resteasy


【解决方案1】:

以下是根据您的 XML 外观解决问题的几个选项:

选项 #1 - elementFormDefault="unqualified"

输入 XML

如果在您的 XML 中只有全局(顶级)元素是命名空间限定的:

<ns:userclient xmlns:ns="http://www.w3.org/1999/xhtml">
    <first_name>Jane</first_name>
<ns:userclient>

Userclient.java

那么你可以在@XmlRootElement注解上指定namespace参数。

@XmlRootElement(namespace="http://www.w3.org/1999/xhtml"
public class Userclient {

选项 #2 - elementFormDefault="qualified"

输入 XML

如果所有元素都是命名空间限定的,例如:

<userclient xmlns="http://www.w3.org/1999/xhtml">
    <first_name>Jane</first_name>
<userclient>

package-info.java

您可以使用包级别的@XmlSchema 注释将命名空间限定应用于您的模型。

@XmlSchema(
    namespace = "http://www.w3.org/1999/xhtml",
    elementFormDefault = XmlNsForm.QUALIFIED)
package example;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

更多信息

下面是我博客上一篇文章的链接,其中包含有关 JAXB 和命名空间限定的更多信息:


注意

您当前添加的注释过多。 JAXB 是异常配置,因此您只需在希望 XML 表示与默认值不同的地方添加注释。

更多信息

下面是我博客上一篇文章的链接,其中包含有关 JAXB 的默认 XML 表示的更多信息:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Userclient {

    private String first_name;

    private String last_name;

    private String email;

    public Userclient() {
    }
//....
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2018-05-03
    相关资源
    最近更新 更多