0

次のコードを使用して JAXB を使用して XML を作成していますが、XML の作成時に XML 宣言が含まれていません。

コード:

ServletContext ctx = getServletContext();
            String filePath = ctx.getRealPath("/xml/"+username + ".xml");

            File file = new File(filePath);
            JAXBContext context= JAXBContext.newInstance("com.q1labs.qa.xmlgenerator.model.generatedxmlclasses");
            Marshaller jaxbMarshaller = context.createMarshaller();

            jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            OutputStream os = new FileOutputStream(file);
            jaxbMarshaller.marshal(test, os);

            response.setContentType("text/plain");
            response.setHeader("Content-Disposition",
                             "attachment;filename=xmlTest.xml");

            InputStream is = ctx.getResourceAsStream("/xml/"+username + ".xml");

XML 宣言:

<?xml version="1.0" encoding="ISO-8859-1"?>

XML 宣言を出力するにはどうすればよいですか?

4

2 に答える 2

1

この質問はここでかなりよく答えられています

要約すると、あなたがする必要があるのはこれだけです:

marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE);
于 2013-04-14T13:53:15.827 に答える
1

ファイルに書き込む必要はありません。次のようにメモリ内で行うことができます。

...
ByteArrayOutputStream os = new ByteArrayOutputStream();
jaxbMarshaller.marshal(test, os);

StringBuffer content = new StringBuffer("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>");
content.append(os.toString());
System.out.println("jaxb xml = " + os.toString());

response.setContentType("text/plain");
response.setHeader("Content-Disposition", "attachment;filename=xmlTest.xml");

String generatedXML = content.toString();
System.out.println("full xml = " + generatedXML);
InputStream is = new ByteArrayInputStream(generatedXML);

final int bufferSize = 4096;
OutputStream output = new BufferedOutputStream(response.getOutputStream(), bufferSize);
for (int length = 0; (length = is.read(buffer)) > 0;) {
  output.write(buffer, 0, length);
}
output.flush();
output.close();

ところで、UTF-8 の使用を検討する必要があります。

于 2013-04-13T22:27:01.107 に答える