雖然開發一個Web服務適配器,我已經結束了面對這樣的反應:(裏面的每一個元素和)多個XML「文件」
<?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(讀卡器);):
[email protected]
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文件在一個單一的流)?
感謝您的快速反應,埃德。你能否詳細說明一些代碼是否簡單?事件序列(如果這是流內XML文件的順序)總是相同的,我確實是這樣。 –
我沒有時間把東西放在一起。你可能想看看[這個過濾器](http://stackoverflow.com/questions/277502/jaxb-how-to-ignore-namespace-during-unmarshalling-xml-document)。它正在做一些不同的事情,但希望能給你足夠的整體設計感,你可以在文檔末仿真中加入 –
的確如此,它足以讓我檢測到我想在文檔的最後放置的位置。現在想想如何放棄它。 –