2013-06-11 25 views
9

Dom elemanı dönüştüren Aşağıdaki kodda NullPointerException alıyorum:iken dize

String str = SOME_HTML_STRING; 
Node node = convertStrIntoNodeUsingJTidy(); 
domToString(node); 

//converts node to string  
public static String domToString(org.w3c.dom.Node node)throws Exception { 
    try { 
     StringWriter sw = new StringWriter(); 
     TransformerFactory tf = TransformerFactory.newInstance(); 
     Transformer transformer = tf.newTransformer(); 
     transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); 

     // NullPointerException at this line, although node is not null 
     transformer.transform(new DOMSource(node), new StreamResult(sw)); 
     return sw.toString(); 
    } catch (Exception ex) { 
     throw new Exception("Error converting to String", ex); 
    } 
} 

StackTrace geçerli: http://geekymeeky.blogspot.in/2008/10/javaxxmltransform-transformerexception.html

:

Caused by: javax.xml.transform.TransformerException: java.lang.NullPointerException 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(Unknown Source) 
at com.example.Util.domToString(Util.java:3179) 
... 128 more 
Caused by: java.lang.NullPointerException 
at com.sun.org.apache.xml.internal.serializer.ToXMLStream.processingInstruction(Unknown Source) 
at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.processingInstruction(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(Unknown Source) 
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(Unknown Source) 
... 131 more 

Zaten alttaki linki kontrol ettikten

Yukarıdaki yazı, bir metin düğümü boşsa, bu özel durumun oluştuğunu belirtir.

str değişkeninin hangi değerinin, metin düğümü değerinin null değerine neden olduğunu ve bu özel duruma yol açtığını bilmek istiyorum.

+0

Ve SOME_HTML_STRING nedir? – fge

+0

'Düğümün boş olmadığından emin misiniz? Dönüştürmeden önce 'assert node! = Null' eklemeyi deneyin. – user1516873

+0

@fge Bu bilmek istediğim şey. Aslında müşterimizden biri bu hatayı bildirdi. SOME_HTML_STRING işlevinin olası tüm senaryolarını denedim, ancak hatayı yeniden oluşturamıyorum. –

cevap

10

Yığın izlemede görebileceğiniz gibi, ayrıştırıcı bazı yanlış ayrıştırmak için çalışırken özel durum oluştu processing instruction.

Kolayca aşağıda kodla üretebilir:

Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); 
    Node n = d.createProcessingInstruction("test", null); 
    System.out.println(domToString(n)); 

neredeyse kardeşin gibi özel durum neyi.

Caused by: javax.xml.transform.TransformerException: java.lang.NullPointerException 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:732) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:336) 
    at TestNode.domToString(TestNode.java:63) 
    ... 31 more 
Caused by: java.lang.NullPointerException 
    at com.sun.org.apache.xml.internal.serializer.ToXMLStream.processingInstruction(ToXMLStream.java:281) 
    at com.sun.org.apache.xml.internal.serializer.ToUnknownStream.processingInstruction(ToUnknownStream.java:886) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:235) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:90) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:679) 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:723) 
    ... 33 more 

DÜZENLEME:

Node n = d.createComment("test"); 
    n.setTextContent(null); // throws exception on parse 


    Node n = d.createTextNode(null); // throws exception on parse 

O değil ortak durum ve sadece yanlış ise mümkündür/bozuk xml: örneğin, boş yorum veya textNodes olsun

Benzer istisna olur giriş kaynağı olarak geçti.

+0

Cevabınız için çok teşekkürler. Bir şey daha, sizden bu istisnanın gerçekleşmesi için tek koşul olup olmadığını sormak istiyorum. Bunu düzeltdikten sonra, bu özel durumu başka bir senaryoda tekrar alamayacağımdan emin olmak istiyorum. –

+0

@DheerajKumarAggarwal see edit – user1516873

+0

Hataya çözümümüzü gösterdiğiniz için çok teşekkür ederim. İzin verilmiyorsa bir istisna atması gereken bir metin değerini "null" olarak ayarlamak! – Hidde