在marsahaling到XML时发生FasterXML问题

时间:2014-07-28 10:58:07

标签: java xml jackson fasterxml woodstox

我正在尝试使用jackson-dataformat-xml和woodstax将对象转换为XML,但是它添加了额外的命名空间前缀wstxns1。有什么建议吗?

My Beans如下所示

    @JacksonRootElement(localname="Blah" namespace="http://something"
    Bla {

    @JacksonXMLProperty(localname="SomeProperty" namespace="http://something"
    String SomePropety;

 @JacksonXMLProperty(localname="SomeClass" namespace="http://something-different"
    Class SomeClass;
    ....

1 个答案:

答案 0 :(得分:1)

我假设你想要以下之一:

  1. 定义"默认命名空间" (一个没有前缀)绑定到元素的URI,以避免前缀 - 这一次只能用于一个命名空间。 OR,
  2. 让Woodstox根据需要使用其他基础作为前缀
  3. 您想提供使用前缀的建议(因为Stax XMLStreamWriter允许这样做)。
  4. Jackson XML模块此时没有处理前缀的机制(尽管欢迎RFE和拉取请求)。 但是除了基本的Stax API(非常有限)之外,Woodstox本身具有相当的可配置性。

    为了输出的其他配置属性,需要超越(文档,博客)的地方是类:

    1. org.codehaus.stax2.XMLOutputFactory2用于Stax2扩展属性(由Woodstox和Aalto实现)
    2. com.ctc.wstx.api.WstxOutputProperties用于Woodstox特定属性
    3. 并且这些属性通过XMLOutputFactory.setProperty()设置,与标准Stax属性相同。

      此处感兴趣的属性为org.codehaus.stax2.XMLOutputFactory2#P_AUTOMATIC_NS_PREFIX,默认为" wstxns"但可以更改为任何其他有效的XML id String。

      除此之外,还可以为Jackson XML模块指定预先配置的XMLStreamWriter。如果是这样,也可以使用标准的Stax方法(" writeNamespace()"我认为?)来创建特定的前缀到URL命名空间绑定。

      最后,杰克逊的邮件列表是提问的最佳地点。像我这样的开发人员也会阅读StackOverflow和其他论坛,但是你注意到延迟往往会更高。