0

このコードがnullドキュメントになるが、例外をスローしない方法を誰か教えてもらえますか?

document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader("<?xml version=\"1.0\"?><company>test</company>")));

元は:

private Document load(String message) throws MessagingException, IOException {
    Document document = null;

    try {
        document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(message.substring(message.indexOf(XML_BEGIN),
                                                                                                                                        message.indexOf(XML_END)))));
    }
    catch (Exception e) {
        e.printStackTrace();
    }
...
    Element element = document.getElementById(TIME_STAMP);

結果:

java.lang.NullPointerException
at ...view.MailReceiver.parse(MailReceiver.java:156)
at ...view.MailReceiver.notify(MailReceiver.java:99)
at ...view.MailReceiver.main(MailReceiver.java:72)
4

2 に答える 2

1

ドキュメントがnull.

// Parse XML into Document.
String xml = "<?xml version=\"1.0\"?><company>test</company>";
Document document = DocumentBuilderFactory
    .newInstance()
    .newDocumentBuilder()
    .parse(new InputSource(new StringReader(xml)));

// Format Document to XML again. 
StringWriter writer = new StringWriter();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(writer));

System.err.println(writer);

プリントアウト

<?xml version="1.0" encoding="UTF-8" standalone="no"?><company>test</company>

documentnull ではありませんでした。

を印刷するとdocumentが得られますが[#document: null]、これにはnull. documentただし、これはそれ自体にはなりませんnull

于 2012-04-18T19:12:55.903 に答える
0

元のコードでは、部分文字列がわずかに「オフ」になっているため、XML の形式が悪いと思われます。
「XML_END」文字列を探している場合、それが実際に解析したい XML の一部であると仮定すると (たとえば、ランダムな例として「」)、この文字列の長さも追加する必要があります。 XML の一部が欠落しています。
また、部分文字列は endIndex では排他的であるため、そこにも +1 が必要になる場合があります。

これらすべてのチェックを開始するには、XML 文字列 (サブストリング化後) を変数に割り当て、log4j (または System.out.println) を使用してログに記録します。

元のコードでは、解析例外が発生した場合、ヌル ドキュメントを使用することになります。良くありません。おそらく NullPointerException の原因です。通常は、catch ブロックで例外をスローします。

于 2012-04-18T21:31:46.620 に答える