2011-01-20 58 views
0

我正在编写一个程序来连接到第三方url并从那里读取xml。虽然,它在我的本地机器上运行在Windows环境中的tomcat服务器上非常好,但是当我在linux环境中的weblogic上部署它时,我得到了答案。我将不胜感激,感谢您的帮助。提前致谢。为什么我从thid派对阅读xml时得到这个异常url

这里是代码片段:

HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
    connection.setRequestMethod("GET"); 
     connection.setDoInput(true); 
    connection.connect(); 

    log.info("Confirmation URL getURL(): "+connection.getURL()); 
    log.info("Confirmation URL getContentEncoding: "+connection.getContentEncoding()); 
    log.info("Confirmation URL getContentType: "+connection.getContentType()); 
    log.info("Confirmation URL getContentLength: "+connection.getContentLength()); 
    log.info("Confirmation URL getContent(): "+connection.getContent()); 
    log.info("Confirmation URL getAllowUserInteraction(): "+connection.getAllowUserInteraction()); 
    log.info("Confirmation URL getClass(): "+connection.getClass()); 
    log.info("Confirmation URL getHeaderFields(): "+connection.getHeaderFields()); 
    Map<String,List<String>> requestProperties = connection.getRequestProperties(); 

    if(requestProperties!=null){ 
    Iterator<String> keysIterator = requestProperties.keySet().iterator(); 
    while (keysIterator.hasNext()) { 
    String key = (String) keysIterator.next(); 
    log.info("********* RequestProperty "+key+" : "+requestProperties.get(key)); 
    } 
    } 
    else { 
    log.info("requestProperties is null "); 
    } 



     InputStream xmlcontent = connection.getInputStream(); 

    Date date = new Date(); 

    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory 
    .newInstance(); 
    DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); 
    Document doc = docBuilder.parse(xmlcontent); // <-- exception thrown here 

以下是例外,我得到:

org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed. 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388) 
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$TrailingMiscDriver.next(XMLDocumentScannerImpl.java:1423) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284) 
at weblogic.xml.jaxp.RegistryDocumentBuilder.parse(RegistryDocumentBuilder.java:163) 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.readXml(OrderConfirmationTask.java:337) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.getFeed(OrderConfirmationTask.java:213) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.generateUrlToHit(OrderConfirmationTask.java:161) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.processRequest(OrderConfirmationTask.java:112) 
at com.scea.shoppingcart.controller.OrderConfirmationJob.executeInternal(OrderConfirmationJob.java:22) 
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) 
at org.quartz.core.JobRunShell.run(JobRunShell.java:216) 
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) 
2011-01-20 16:06:01,539 [ERROR] - ==Exception processing Order Confirmation XML !!!==The markup in the document following the root element must be well-formed.=stackTrace=org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed. 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195) 
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:174) 
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:388) 
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1414) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$TrailingMiscDriver.next(XMLDocumentScannerImpl.java:1423) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) 
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) 
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) 
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) 
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:235) 
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284) 
at weblogic.xml.jaxp.RegistryDocumentBuilder.parse(RegistryDocumentBuilder.java:163) 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:124) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.readXml(OrderConfirmationTask.java:337) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.getFeed(OrderConfirmationTask.java:213) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.generateUrlToHit(OrderConfirmationTask.java:161) 
at com.scea.shoppingcart.controller.OrderConfirmationTask.processRequest(OrderConfirmationTask.java:112) 
at com.scea.shoppingcart.controller.OrderConfirmationJob.executeInternal(OrderConfirmationJob.java:22) 
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86) 
at org.quartz.core.JobRunShell.run(JobRunShell.java:216) 
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549) 
+1

请重新格式化您的代码:只需在代码行的起始处放置4个空格(或一个制表符) – peoro 2011-01-20 11:43:16

回答

3

的例外规定,

文档中的标记继根元素必须是良构的。

因此,我期望通过的文档是无效的,因为它不是格式良好的XML。为了解决这个问题,在调试过程中将流的输出捕获到一个字符串中(或将其重定向到一个文件等)可能是一个好主意,以便您可以调查到底是哪个字符通过了另一个字符侧。

有多种原因可能会发生这种情况(例如,您从Web服务器收到404/500错误 - HTML页面几乎可以确定为“接近XML”,但格式严重不良)。您需要查看实际数据以确定发生了什么,因为我预计它确实是来自服务器的错误消息。

0

感谢您的回复。 确实返回的服务器状态是301,所以在从Google博客(http://tech.rationalaspect.com/2010/10/301-moved-permanently-urlconnection-and.html)获得线索时,我只是追加一个'/'在基地网址的末尾,它对我有用。虽然,我不完全确定它有什么不同。

相关问题