5

もうどうしたらいいのかわからない。すべてが正しいようです。入出力。

xml ファイルを生成し、いくつかのサービスに送信して検証します。

応答は次のとおりです。

11:10:34,922 INFO  [STDOUT] printing out the input stream
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><Response>
    <Method name="XML/Release/New" time="2013-04-23T15:10:35.1446238Z">
        <ResponseStatus>100</ResponseStatus>
    </Method>
</Response>
finished printing out the input stream
11:10:34,922 INFO  [STDOUT] got the unmarshaller
11:10:34,925 ERROR [PRNDataAccessUtil] Caught an error: javax.xml.bind.UnmarshalException
 - with linked exception: [org.xml.sax.SAXParseException: Premature end of file.] : null

コード:

try {
            out = connection.getOutputStream();
            ByteArrayOutputStream bos = PRNPostNewsReleaseUtil.createNewsReleaseXml(newsRelease);
            bos.writeTo(out);

            JAXBContext context = JAXBContext.newInstance(Response.class.getPackage().getName());
            in = connection.getInputStream();

            BufferedReader inp = new BufferedReader(new InputStreamReader(in));
            System.out.println("printing out the input stream");
            String line;
            while((line = inp.readLine()) != null) {
                System.out.println(line);
            }
            System.out.println("finished printing out the input stream");

            Unmarshaller unmarshaller = context.createUnmarshaller();
            response = (Response) unmarshaller.unmarshal(in);

        } catch (Exception ex) {
            log.error("Caught an error: " + ex + " : " + ex.getMessage());
            return null;
        } finally {
            if (null != in) connection.disconnect();
        }
4

3 に答える 3

3

ある時、間違ったクラス名を使用して JAXBContext オブジェクトを作成していたことがありました。そのため、オブジェクトをマーシャリングしようとすると、空の XML ファイルが作成され、アンマーシャラーが失敗しました。

したがって、マーシャリングしようとしているクラスで JAXBContext オブジェクトがインスタンス化されていることを確認してください。

于 2014-09-01T02:26:23.550 に答える
1

ここで注意すべきもう 1 つの点は、コードでバッファを明示的に読み取っていなくても、入力を読み取るエクスプレッション ウォッチがある場合でも、ストリーム ヘッドをインクリメントするのと同じ効果が得られることです。この例外のデバッグに何時間も費やした後、それを理解しました。

于 2014-03-19T21:11:00.060 に答える