2016-10-07 3 views
-2

Xerces jars에 이상한 문제가 있습니다. 코드를 다른 작업 영역으로 마이그레이션했습니다. org.w3c.dom XML 클래스를 사용하는 일부 코드가있었습니다. 이제 코드를 마이그레이션 했으므로 같은 코드가 예외를 던지고 있습니다. 내가 그것을 만든 객체를 디버깅 할 때Xerces JAR 예외가 발생합니다.

import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Text; 
import org.xml.sax.SAXException; 

는 그러나 유형은 다음과 같습니다

org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 

있는지 아니의 Xerces 클래스는 그림으로 온 곳. 그리고 이로 인해 코드가 실패하게됩니다. 코드로 업데이트

:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
domFactory.setIgnoringComments(true); 
DocumentBuilder builder = domFactory.newDocumentBuilder(); 
InputSource inputSource = new InputSource(); 
inputSource.setCharacterStream(new StringReader(xmlString)); 
Document document = builder.parse(inputSource); 

String grade = "A"; 
NodeList nodes = document.getElementsByTagName("student"); 
if (!routeLimit.equals("")) { 
    Text gradeText = document.createTextNode(grade); 
    Element gradeTag = document.createElement("grade"); 
    gradeTag .appendChild(gradeText); 
    nodes.item(0).appendChild(gradeTag); 
} 

라인 : nodes.item (0) .appendChild (gradeTag);

널 포인터 예외가 발생합니다.

또한 코드를 디버깅 할 때 문서 변수 [#document : null]의 값을보고이 사이트를 확인하여 많은 사람들이 동일한 문제를 겪고있는 것을 보았습니다. 그러나 구체적인 답변은 거의 없습니다.

+0

지금까지 던져진 예외가 정확히 무엇인지 아는 것이 가능합니까? 'org.apache.xerces.jaxp.DocumentBuilderFactoryImpl'는'javax.xml.parsers.DocumentBuilderFactory'를 구현하고 있으므로 가져 오기가 예외의 루트가 아닙니다. – potame

+0

null 포인터 예외입니다. –

+0

이전 작업 영역의 종속성을 확인하십시오. 동일한 버전의 xerces를 사용했거나 XML 클래스의 다른 구현을 사용하셨습니까? Xerces에서 Saxon으로 전환 한 후에도 비슷한 문제가있었습니다. –

답변

0

문제는 XML 네임 스페이스에서 발생했습니다.

domFactory.setNamespaceAware(true); 

한 후 사용하여 노드 가져 오기 : 솔루션 우연히의

NodeList nodes = document.getElementsByTagName("ml:student"); 

종류를

는 내가 설정했다. 이전과 동일한 코드가 네임 스페이스없이 작동했습니다.

관련 문제