java - 使用 JDOM 解析 XML 时出错 - 序言中不允许内容

标签 java xml xml-parsing jdom


我在使用 JDOM 解析 xml 文件时收到此错误。
发生的情况是,我收到了一个数据流,它是一个 xml 与一个 pdf 结合在一起作为其中的附件。因此,当我尝试创建它的文档时,会抛出此错误。
我尝试打印此流,并在控制台上得到以下内容,它包含很多垃圾字符(pdf 内容),但在写字板中它看起来像 -

------=_Part_2_23286828.1296553488632
Content-Type: text/xml; charset=utf-8

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
....
....
....
    <Attachment>
        <URI>Filename.pdf</URI>
    </Attachment>
</SOAP-ENV:Envelope>
------=_Part_2_23286828.1296553488632
Content-Type: application/pdf; name="Filename.pdf"
Content-Transfer-Encoding: binary
Content-ID: </Attachment[1]/URI[1]>
Content-Disposition: attachment; filename="Filename.pdf"

%PDF-1.4
%âãÏÓ
4 0 obj <</Type/XObject/ColorSpace/DeviceRGB/Subtype/Image/BitsPerComponent 8/Width 579/Length 52722/Height 480/Filter/DCTDecode>>stream
ÿØÿà 

请注意 <SOAP-ENV:Envelope> 之间的 xml和</SOAP-ENV:Envelope>格式良好。
我怎样才能用它创建一个 JDOM 文档呢?我想,通过删除 xml 开始/结束标记之前和之后的内容,但如何以干净的方式?
我读到来自 Apache IO Commons 的 BOMInputStream 很有帮助,但我相信它是版本 2.* 并且我正在使用版本 1.3.1

我希望这能解释我的问题,如果不能,请告诉我。
谢谢。

UPDATE
一开始我并没有意识到会这么麻烦。
实际上,我正在使用 HttpURLConnection 从一个 servlet 到另一个 servlet (doPost) 进行调用。返回就是这个流的形式。
现在,我也在尝试探索是否可以使用 Http/URLConnection 提供的一些方法来提取 xml 部分。
如果有人能对此提供更多说明,我将不胜感激。

最佳答案

此消息符合 SOAP with Attachment 规范 (http://www.w3.org/TR/SOAP-attachments)。在 java 中,解析这些消息的方法是使用 SAAJ 的实现(适用于 Java 的带有附件 API 的 Soap:http://download.oracle.com/javaee/5/tutorial/doc/bnbhf.html。)SAAJ 有几种不同的实现。我个人最喜欢的是 Spring-WS 实现,另一个选择是 Apache Axiom。

我对您的建议是使用 Spring-WS 或 Apache Axis 来处理此消息,而不是尝试从输入流手动执行此操作。您想在服务器端还是客户端执行此操作?

关于java - 使用 JDOM 解析 XML 时出错 - 序言中不允许内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4861831/

相关文章:

java - 没有找到适合响应类型的 HttpMessageConverter

xml - 如何使用xpath连接多个节点

java - Java/Clojure 中的 XML 解析 - 使用 XSD 进行类型强制转换?

java - 错误 :Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'

java - 为什么 Java 并发处理不能处理新实例化的对象,而可以处理同一类的反序列化对象?

java - 在 url 中传递用户和密码时无法使用基本身份验证

java - 将 XPath 表达式与简单 XML 结合使用

android - 如何在 Recycler View 中将项目从一个部分交换到另一个部分,反之亦然?

ruby - Nokogiri::XML.parse 是否应该为换行符创建单独的文本节点?

java - 如何关闭 Stanford CoreNLP Redwood 日志记录?