Jersey 2 (JAXB) XML 元素大小写,列表不支持 XmlRootElement
Jersey 2 (JAXB) XML element case with list not honoring XmlRootElement
我们刚刚将一项服务从 Jersey 1.x 升级到 2.10.x,并且发现了一些意外行为。我们有一个像这样的 class 被注释为编组为 'User' 而不是 'user':
@XmlRootElement(name = "User", namespace = "security.services.pml.com")
public class User {
@XmlElement(namespace = "security.services.pml.com", required = true)
protected String name;
@XmlElement(namespace = "security.services.pml.com", required = true)
protected String nickname;
}
当我们有一个 return 用户列表的资源方法时,我们得到 XML 具有以下格式(注意小写 "users" 父元素):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<users>
<User xmlns="security.services.pml.com">
<name>John Doe</name>
<nickname>Jackie</nickname>
</User>
</users>
我们希望 Jersey 将 User 复数化(来自注释)以提出 Users 而不是 users .
在 Jersey 1.x 中,我们通过将以下配置 属性 放入我们的 web.xml 来处理这个 Jersey 错误:
<init-param>
<param-name>com.sun.jersey.config.feature.XmlRootElementProcessing</param-name>
<param-value>true</param-value>
</init-param>
但这似乎在 Jersey 2.x 中没有效果,我们找不到新的 属性 来给出相同的结果。我们显然可以 return 一个名为 Users 的正确注释的对象,它包含一个 User 列表并获得所需的结果,但我们不必使用 Jersey 1.x.
有人知道我们遗漏了什么吗?
在 servlet 定义中,在 web.xml 中新的 属性 名称是:
<init-param>
<param-name>jersey.config.jaxb.collections.processXmlRootElement</param-name>
<param-value>true</param-value>
</init-param>
如果在代码中设置,则为:
.property("jersey.config.jaxb.collections.processXmlRootElement", true);
参见:Jersey 2 Constants
哪个链接到 MessageProperties constant JAXB_PROCESS_XML_ROOT_ELEMENT
这修复了 Jersey 2.x 中的问题,该问题由 com.sun.jersey.config.feature.XmlRootElementProcessing 在 Jersey 1.x 中解决。
我们刚刚将一项服务从 Jersey 1.x 升级到 2.10.x,并且发现了一些意外行为。我们有一个像这样的 class 被注释为编组为 'User' 而不是 'user':
@XmlRootElement(name = "User", namespace = "security.services.pml.com")
public class User {
@XmlElement(namespace = "security.services.pml.com", required = true)
protected String name;
@XmlElement(namespace = "security.services.pml.com", required = true)
protected String nickname;
}
当我们有一个 return 用户列表的资源方法时,我们得到 XML 具有以下格式(注意小写 "users" 父元素):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<users>
<User xmlns="security.services.pml.com">
<name>John Doe</name>
<nickname>Jackie</nickname>
</User>
</users>
我们希望 Jersey 将 User 复数化(来自注释)以提出 Users 而不是 users .
在 Jersey 1.x 中,我们通过将以下配置 属性 放入我们的 web.xml 来处理这个 Jersey 错误:
<init-param>
<param-name>com.sun.jersey.config.feature.XmlRootElementProcessing</param-name>
<param-value>true</param-value>
</init-param>
但这似乎在 Jersey 2.x 中没有效果,我们找不到新的 属性 来给出相同的结果。我们显然可以 return 一个名为 Users 的正确注释的对象,它包含一个 User 列表并获得所需的结果,但我们不必使用 Jersey 1.x.
有人知道我们遗漏了什么吗?
在 servlet 定义中,在 web.xml 中新的 属性 名称是:
<init-param>
<param-name>jersey.config.jaxb.collections.processXmlRootElement</param-name>
<param-value>true</param-value>
</init-param>
如果在代码中设置,则为:
.property("jersey.config.jaxb.collections.processXmlRootElement", true);
参见:Jersey 2 Constants 哪个链接到 MessageProperties constant JAXB_PROCESS_XML_ROOT_ELEMENT
这修复了 Jersey 2.x 中的问题,该问题由 com.sun.jersey.config.feature.XmlRootElementProcessing 在 Jersey 1.x 中解决。