【问题标题】:javax.xml.bind.UnmarshalException - with linked exception:javax.xml.bind.UnmarshalException - 带有链接异常:
【发布时间】:2014-09-29 01:06:42
【问题描述】:

我收到了一个带有 URLConnection 的 xml 输入流。但是,当我尝试解组输入流时。它抛出一个异常。 javax.xml.bind.UnmarshalException - 有关联的例外: [javax.xml.stream.XMLStreamException: ParseError at [row,col]:[53088,40] 消息:对实体“T”的引用必须以“;”结尾分隔符。]

代码:

try {
    URL url = new URL(hostURL);  
    URLConnection urlConnection = url.openConnection();  
    urlConnection.setRequestProperty("Accept", "application/xml");
    urlConnection.setRequestProperty("Authorization", "Basic " + authDetails);

    InputStream inputStream = urlConnection.getInputStream();

    XMLInputFactory xif = XMLInputFactory.newInstance();
    xif.setProperty("javax.xml.stream.isCoalescing", true); 
    XMLStreamReader xsr = xif.createXMLStreamReader(inputStream);

     // Advance to the "Packages" element.
     while(xsr.hasNext()) {
         if(xsr.isStartElement() && "packages".equals(xsr.getLocalName())) {
             break;
         }
         xsr.next();
      }

     JAXBContext jaxbContext = JAXBContext.newInstance(Packages.class);
     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
     packages = (Packages) jaxbUnmarshaller.unmarshal(xsr);
    }catch (JAXBException e) {
     e.printStackTrace();
    }catch (MalformedURLException e) {
     e.printStackTrace();
    }catch (IOException e) {
     e.printStackTrace();
    }catch(Exception e){
     e.printStackTrace();
     }finally{

    }

PS: [row,col]:[53088,40] = T&T evol 的新产品站点

您可以在链接http://pastebin.com/LuhbnMQq中找到堆栈跟踪

伙计们对这件事很陌生并坚持下去,任何帮助将不胜感激

BR 萨拉

【问题讨论】:

    标签: java xml xmlstreamreader


    【解决方案1】:

    您的 XML 文件格式不正确。

    newproductsite for T&T evol
    

    XML 文件中不能有“&”,它必须表示为

    &
    

    XML 是如何产生的?错误就在那里...

    【讨论】:

    • 事实上 xml 是从 URLconnection 请求到服务器的响应,不能修改我需要转义特殊字符但不知道如何
    • 与负责响应您请求的服务器应用程序的负责人对峙,并使用错误消息和该行 [53088,40] 添加周围的行,以便他们可以看到完整的 XML 元素。听到他们的回答会很有趣。
    • 不使用xif.setProperty("javax.xml.stream.isCoalescing", true); 也很有趣,看看错误是否仍然存在。
    【解决方案2】:

    您的 xml 输入格式不正确。在文本newproductsite for T&T evol 中,与号是保留字符。它用于转义(例如< 表示< 符号或A 是字母A。因此,在文本中的& 之后,解析器需要一个值和一个; 来查看转义序列已完成。 如果你想在你的 xml 元素中使用 & 符号,它必须被转义,例如&.

    要解决问题,源需要生成格式正确的 xml,或者您需要在处理之前对收到的数据进行清理。我会推荐第一个。

    【讨论】:

    • 清理是否是真正的 XML 的 XML?请解释如何可靠地做到这一点。
    • 事实上 xml 是从 URLconnection 请求到服务器的响应,不能修改我需要转义特殊字符但不知道如何
    • @laune:不能在所有情况下都可靠地完成,但可能足以可靠地帮助原始发布者解决问题。如果非转义 & 符号是 xml 的唯一问题,只需将 & 替换为 & 可能会有所帮助。
    • 如果某个文本节点中有< 怎么办?还是 CDATA 中的“&”?
    猜你喜欢
    • 2012-11-19
    • 2015-06-12
    • 1970-01-01
    • 2017-05-13
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多