1

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

我的 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;
    ....
4

1 回答 1

2

我假设您想要以下之一:

  1. 定义“默认命名空间”(没有前缀的)以绑定到元素的 URI,以避免前缀——这一次只能用于单个命名空间。或者,
  2. 让 Woodstox 使用其他基础作为它根据需要生成的前缀
  3. 您想提供使用前缀的建议(因为 StaxXMLStreamWriter允许这样做)。

Jackson XML 模块此时没有处理前缀的机制(尽管欢迎 RFE 和拉取请求)。但除了基本的 Stax API(非常有限)之外,Woodstox 本身具有相当多的可配置性。

寻找其他输出配置属性的地方(文档、博客)是类:

  1. org.codehaus.stax2.XMLOutputFactory2用于 Stax2 扩展属性(由 Woodstox 和 Aalto 实现)
  2. com.ctc.wstx.api.WstxOutputProperties伍德斯托克斯特有的属性

并且这些属性是通过 设置的XMLOutputFactory.setProperty(),与标准的 Stax 属性相同。

这里感兴趣的属性是org.codehaus.stax2.XMLOutputFactory2#P_AUTOMATIC_NS_PREFIX,默认为“wstxns”,但可以更改为任何其他有效的 XML id 字符串。

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

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

于 2014-07-29T17:35:54.867 回答