在JAX-B中映射序列化产生不需要的XML名称空间和前缀

时间:2011-07-06 21:37:46

标签: java xml xml-serialization jaxb jax-rs

问题:

我正在尝试在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中)

1 个答案:

答案 0 :(得分:4)

由于您的地图不使用泛型,序列化程序会写入每个元素值的数据类型。

尝试使用:

public Map<String,String> getParameters()

即使您使用Map<String,Object>,序列化程序也必须编写相应类型的value元素。