通过XSLT将Java对象转换为JSON

时间:2014-01-30 16:57:20

标签: java xml json xslt jaxb

我已经

  • Schema A的工作JAXB设置
  • Schema B的工作JAXB设置
  • 从A的实例到B的实例的XSLT转换(反之亦然)

如果我有一个类型为A的XML实例,我可以使用XSLT和Jettsion生成一个合理的B的JSON表示。但我真正想做的是采用A类型的Java对象,一个JAXB编组器,我现有的A-> B XSLT和Jettsion XMLStreamWriter生成类型B的JSON,而不必在它们之间生成B(XML或Java)的实例。

Java Object A --> JAXB Marshaller --> ? --> XSLT A to B transfrom --> JSON B

我有一个想法,我应该能够通过编组到SAXResult来实现这一点,而SAXResult又可以作为可以提供XSLT转换的XMLReader。我需要一种可以协调编组与转换的ContentHandlerAdapter。

但是我的头开始旋转。

有没有人看到或写过这样的设置,希望能给我一个例子?

2 个答案:

答案 0 :(得分:0)

这是trax TransformerHandler接口的目的。

TransformerFactory tf = TransformerFactory.newInstance();
// or just use new net.sf.saxon.TransformerFactoryImpl() for Saxon (XSLT 2.0)

Source xslt = new StreamSource(....);
TransformerHandler handler =
    ((SAXTransformerFactory)tf).newTransformerHandler(xslt);
Result result = new StAXResult(theJettisonStreamWriter);
handler.setResult(result);

SAXResult marshallerResult = new SAXResult(handler);
// marshal to the marshallerResult as normal

答案 1 :(得分:0)

您可以在Marshaller中包装对象和JAXBContext(或JAXBSource)的实例,并将其传递给Transformer