我的JAXB层次结构中有一个域对象,该域对象必须表示为逗号分隔的值文本。不幸的是,显式构造CSV String的成本非常高,因此不是一种选择。

我创建了一个自定义的@XmlJavaTypeAdapter,它返回了一个DataHandler(按照supported data types的定义),但是始终将数据写到BASE64中……但是我保留了一个遗留API,希望在那里能找到ASCII字符串。更改DataHandler的MIME不会更改编码,但是会影响XSD对其中包含的对象的定义。

有什么方法可以设置DataHandler(或任何其他受支持的Java类型)以从流输入返回未编码的String

我还考虑过返回一个Object(实际上是一个CharacterData),但这需要实现public String getData() ...要求我显式构造要尝试流式传输的String

最佳答案

如果没有人提出与DataHanler相关的解决方案...以下只是不涉及DataHandler的“替代方法”的另一种想法。它需要访问编组器。


修改您的XML类型适配器,使其不返回内容,而是一种简短的地址以保留流数据(例如,文件名)。
定义XMLStreamWriter包装器,如下所示:JAXB marshalling XMPP stanzas。覆盖writeStartElementwriteCharacters以拦截CSV元素和紧随其后的startElementwriteCharacters调用。
传递给writeCharacters的特定调用的数据将成为获取流数据的地址。将其分块传输到包装的XMLStreamWriter的writeCharacters。

10-04 11:20