【发布时间】:2011-07-15 18:45:05
【问题描述】:
在为 Web 服务开发适配器时,我最终遇到了这样的响应:
<?xml version="1.0" encoding="UTF-8"?>
<ResponseHeader version="1.0">
<ResponseCode>T100</ResponseCode>
<SubmissionIdentifier>1</SubmissionIdentifier>
</ResponseHeader>
<?xml version="1.0" encoding="UTF-8"?>
<SubmissionProgress xmlns="sss"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
status="inProgress"
submissionIdentifier="1"
submissionType="live">
<PFile status="rejected"
index="1"
pFileIdentifier="999">
<Exception errorCode="2001" outcomeType="rejectFile">
<Description>There.file. </Description>
<SourceRecord index="3">...</SourceRecord>
</Exception>
</PFile>
</SubmissionProgress>
ResponseHeader 和 SubmissionProgress (以及其中的每个元素)类已由 xjc 成功生成,如果我将此字符串拆分为 2 个不同的字符串,我可以完美地解组这两个类.
但是,如果我将它保存在同一个字符串中并尝试将它依次传递给两个解组器,它会在第一个解组器中中断。
我正在使用这段代码从一个字符串中解组:
Reader reader = new StringReader(response);
JAXBContext jcrh = JAXBContext.newInstance(ResponseHeader.class);
JAXBContext jcsp = JAXBContext.newInstance(SubmissionProgress.class);
Unmarshaller urh = jcrh.createUnmarshaller();
Unmarshaller usp = jcsp.createUnmarshaller();
ResponseHeader rh = (ResponseHeader) urh.unmarshal(reader);
SubmissionProgress sr = (SubmissionProgress) usp.unmarshal(reader);
我得到以下异常(在 ResponseHeader rh = (ResponseHeader) urh.unmarshal(reader);):
uk.co.bacs.submissions.ResponseHeader@fced4
javax.xml.bind.UnmarshalException
- with linked exception:
[org.xml.sax.SAXParseException: The processing instruction target matching "[xX][mM][lL]" is not allowed.]
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
(...)
在这些情况下是否可以使用一些 JAXB 调整(单个流中的多个 XML 文件)?
【问题讨论】:
标签: java xml-serialization jaxb