发送和接收xml对象(unmarshall)

时间:2014-03-27 07:48:57

标签: rest jaxb resteasy

我正在尝试从html页面在我的Web服务中接收此对象。在eclipse打开的浏览器中工作正常,但是当我在firefox中尝试同样的事情时,我得到了一个问题:

引起:javax.xml.bind.UnmarshalException:意外元素(uri:“http://www.w3.org/1999/xhtml”,local:“userclient”)。预期元素是< {} 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>                       

1 个答案:

答案 0 :(得分: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

然后您可以在namespace注释上指定@XmlRootElement参数。

@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() {
    }
//....
}