Java 如何避免System.out从回调关闭
我想将生成的模式输出到标准输出。因此,我将System.out设置为SchemaOutputResolver的outputStream<代码>StreamResult结果=新的StreamResult(System.out); 但在声明之后:Java 如何避免System.out从回调关闭,java,callback,jaxb,system.out,Java,Callback,Jaxb,System.out,我想将生成的模式输出到标准输出。因此,我将System.out设置为SchemaOutputResolver的outputStreamStreamResult结果=新的StreamResult(System.out); 但在声明之后: jc.generateSchema(outputResolver) System.out.println()不再工作。通过调试代码,我得到System.out在jc.generateSchema方法之后关闭 JAXBContext jc = JAXBCont
jc.generateSchema(outputResolver)
System.out.println()不再工作。通过调试代码,我得到System.out在jc.generateSchema
方法之后关闭
JAXBContext jc = JAXBContext.newInstance(SomeObject.class);
SchemaOutputResolver outputResolver = new SchemaOutputResolver() {
@Override
public Result createOutput(String namespaceUri, String suggestedFileName)
throws IOException {
StreamResult result = new StreamResult(System.out);
result.setSystemId(namespaceUri);
// return result
return result;
}
};
jc.generateSchema(outputResolver);
System.out.println("this String can't be output");
我的问题是,如何使用
jc.generateSchema
将生成的模式输出到stdout而不关闭System.out?创建一个PrintStream
类(例如,UncloseablePrintStream
),该类只包装另一个PrintStream
并忽略close
调用,然后执行以下操作:
StreamResult result = new StreamResult(new UncloseablePrintStream(System.out)));
完全未经测试,但可能很简单:
import java.io.PrintStream;
public class UncloseablePrintStream extends PrintStream {
public UncloseablePrintStream(PrintStream ps) {
super(ps);
}
@Override
public void close() {
// Do nothing
}
}
创建一个
PrintStream
类(例如,UncloseablePrintStream
),该类只包装另一个PrintStream
,并忽略close
调用,然后执行以下操作:
StreamResult result = new StreamResult(new UncloseablePrintStream(System.out)));
完全未经测试,但可能很简单:
import java.io.PrintStream;
public class UncloseablePrintStream extends PrintStream {
public UncloseablePrintStream(PrintStream ps) {
super(ps);
}
@Override
public void close() {
// Do nothing
}
}
您可以打印到ByteArrayOutputStream,然后根据需要使用它:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
StreamResult result = new StreamResult(ps);
System.out.println(new String(baos.toByteArray(), StandardCharsets.UTF_8));
result.setSystemId(namespaceUri);
您可以打印到ByteArrayOutputStream,然后根据需要使用它:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
StreamResult result = new StreamResult(ps);
System.out.println(new String(baos.toByteArray(), StandardCharsets.UTF_8));
result.setSystemId(namespaceUri);
谢谢,这正是我想要的。我写了一些类似的类,但不知道如何将System.out分配给wrap类。:)谢谢你的代码。谢谢,这正是我想要的。我写了一些类似的类,但不知道如何将System.out分配给wrap类。:)谢谢你的代码。