1

Java オブジェクトを XML にマーシャリングすると、ルート タグの終了後に余分な文字が追加されます。

XML からファイルにアンマーシャリングした後に、結果の Java オブジェクトを保存する方法を次に示します。

public void saveStifBinConv(ConversionSet cs, String xmlfilename) {
    FileOutputStream os = null;
    try {
        os = new FileOutputStream(xmlfilename);
        this.marshaller.marshal(cs, new StreamResult(os));
    }
    catch (IOException e) {
        log.fatal("IOException when marshalling STIF Bin Conversion XML file");
        throw new WmrFatalException(e);
    }
    finally {
        if (os != null) {
            try {
                os.close();
            }
            catch (IOException e) {
                log.fatal("IOException when closing FileOutputStream");
                throw new WmrFatalException(e);
            }
        }
    }
}

余分な文字は、ルート タグの終了タグの後にパディングされます。

追加された文字は、XML の一部の文字です。例:tractor-to-type><bin-code>239</bin-code><allowed>YES</allowed></extractor-to></extractor-mapping><extractor-mapping><e

Spring OXMJaxb2Marshallerと JAXB 2 を使用しています。

ありがとう ;)

4

1 に答える 1

1

これは、ファイルを保存する際に 2 つの手順を実行するためですXML

  1. を にマーシャリングXMLFileOutputStreamXMLファイルを生成します
  2. 次に、手順 1 でファイルの a を開き、aにFileInputStream書き込みXMLます。FileInputStreamServletOutputStream

buffer underflowハプニングがあるはずです。

解決

XMLを に直接マーシャリングしServletOutputStreamます (Web ユーザーがXMLファイルをダウンロードするため)。

        JAXBContext jc = JAXBContext.newInstance(pkg);
        Marshaller m = jc.createMarshaller();
        m.marshal(cs, os);

はどこosですかServletOutputStream

    //return an application file instead of html page
    response.setContentType("text/xml");//"application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename="
        + xmlFilename);

    OutputStream out = null;
    out = response.getOutputStream();
于 2011-08-25T06:42:24.450 に答える