JAX-B 中的映射序列化会产生不需要的 XML 命名空间和前缀
问题:
我试图在 JAX-RS 应用程序中使用 JAX-B 对 HashMap 进行简单的序列化,并遇到我想避免的额外输出。 HashMap 的默认序列化包括无用的 XML 命名空间和前缀(对于我的应用程序)。
我得到的 Map 输出是:
<params>
<entry>
<key xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">keyName</key>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">123</value>
</entry>
...
</params>
而不是:
<params>
<entry>
<key>keyName</key>
<value>123</value>
</entry>
...
</params>
该类基本上是这样布局的:
@XmlRootElement(name="example")
public ExampleClass
{
private params HashMap<String,Object> = new HashMap<String,Object>();
public ExampleClass() { }
@XmlElementWrapper(name="params", required=true)
public Map getParameters()
{
return params;
}
}
可以采取什么措施来简化 XML 输出?
库参考:
- JAX-RS(Resteasy 2.0,未与此版本结合)
- JAX-B(包含在 Resteasy 2.0 中)
Problem:
I'm trying to do a simple serialization of a HashMap with JAX-B in a JAX-RS application and running into extra output that I'd like to avoid. The default serialization of the HashMap includes XML namespaces and prefixes that are useless (for my app).
The output I'm getting for the Map is:
<params>
<entry>
<key xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">keyName</key>
<value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">123</value>
</entry>
...
</params>
instead of:
<params>
<entry>
<key>keyName</key>
<value>123</value>
</entry>
...
</params>
The class is basically laid out like so:
@XmlRootElement(name="example")
public ExampleClass
{
private params HashMap<String,Object> = new HashMap<String,Object>();
public ExampleClass() { }
@XmlElementWrapper(name="params", required=true)
public Map getParameters()
{
return params;
}
}
What can be done to simplify the XML output?
Library reference:
- JAX-RS (Resteasy 2.0, not married to this version)
- JAX-B (included in Resteasy 2.0)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
由于您的映射不使用泛型,因此序列化程序会写入每个元素值的数据类型。
尝试使用:
即使您使用
Map
序列化程序也必须写入值元素的相应类型。Since your map doesn't use generics the serializer writes the data type of each element value.
Try using:
Even if you use
Map<String,Object>
the serializer has to write the corresponding type of the value element.