0

我有以下方法:

private <U> void fun(U u) throws JAXBException {
    JAXBContext context = JAXBContext.newInstance(u.getClass());
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(u, System.out);
    }

marshal() 方法采用不同类型的参数。看这里 它需要:

  1. 内容处理程序
  2. 输出流
  3. XmlEventWriter
  4. XMLStreamWriter 等

如何修改上述方法,而不是System.out,我可以在函数参数中传递编组的目的地。

例如,我想调用如下方法:

objToXml(obj1,System.out);
outToXml(obj1,file_pointer);

同样地。

我尝试跟随fun(obj1,PrintStream.class,System.out)但没有成功:

private <T, U, V> void fun(T t, Class<U> u, V v) throws JAXBException {
    JAXBContext context = JAXBContext.newInstance(t.getClass());
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.marshal(t, (U) v);
    }
4

1 回答 1

3

您不需要向您的方法添加额外的泛型参数。只需将 javax.xml.transform.Result 传递给编组器:

private <U> void fun(U u, Result result) {
  JAXBContext context = JAXBContext.newInstance(u.getClass());
  Marshaller marshaller = context.createMarshaller();
  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
  marshaller.marshal(u, result);
}

您可以使用 StreamResult 写入 System.out 或文件:

fun(foo, new StreamResult(System.out));
fun(foo, new StreamResult(file_pointer.openOutputStream()));
于 2012-08-09T09:51:44.840 回答