원격 위치에서 XML 문서를 가져옵니다. 이 문서는 문자열로 반환됩니다. 그런 다음 java xml 파서로 String을 구문 분석하려고합니다. 그러나 때로는 구문 분석이 java.net.NoRouteToHostException
으로 중단됩니다.String XML 문서를 구문 분석 할 때 NoRouteToHostException이 발생했습니다.
세상에 내가 알기로는 예외가 발생했을 때 문자열로 작업하고 있습니다. 스트림 또는 기타 데이터 형식이 아니라 연결을 필요로합니다. 아이러니하게도 예외 캐치에서 문자열 전체가 문제없이 인쇄됩니다.
호출 코드 :
javax.xml.parsers.DocumentBuilder build = DocumentBuilderFactory.newInstance().newDocumentBuilder();
...
try{
String deploymentDescriptor = (String) getRemoteDeploymentDescriptor(webModule);
org.w3c.dom.Document doc = build.parse(new ByteArrayInputStream(deploymentDescriptor.getBytes()));
...
} catch(Exception e){
log.error("Could not parse document '" + deploymentDescriptor + "', e);
}
로그 항목 : 어떻게 세계
[14.07.14 16:06:17:157 CEST] Could not parse document '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN" "http://java.sun.com/dtd/application_1_3.dtd">
<application>
</application>'
java.net.NoRouteToHostException: Keine Route zum Zielrechner
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:381)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:243)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:230)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:377)
at java.net.Socket.connect(Socket.java:539)
at java.net.Socket.connect(Socket.java:488)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:401)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:536)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:240)
at sun.net.www.http.HttpClient.New(HttpClient.java:313)
at sun.net.www.http.HttpClient.New(HttpClient.java:330)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:982)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:923)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:848)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1184)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at <my calling code, line "build.parse(...)">
가 가능합니까? 문자열은 항상 현재 운영 체제에서 완전히 저장되었다고 생각합니다 (실제로 중간에 연결이 끊길 수있는 InputStream과는 반대). 아니면 내 전화 코드에서 잘못된 일을하고 있는가?
호출 코드의 try-catch 블록은 동일한 원격 위치의 여러 xml 파일에 대해 여러 번 실행됩니다. 대부분의 파일에는 작동하지만 전부는 아닙니다. 실험을 반복 할 때 항상 작동하지 않는 파일과 같습니다. 그러나 로그 오류 항목은 매번 전체 파일을 완벽하게 인쇄합니다.
대단히 감사합니다! 그것은 그 문제를 해결했습니다. – subrunner