2013-01-15 66 views
0

我有一個SOAP消息作爲字符串,需要解析它在Java中。我接收包含數據和XML數據內容爲同一的SOAP消息下面的一個單獨的XML部分簽名的XML文件是一個示例SOAP消息(是不是一個有效的XML)1接收:解析SOAP消息作爲字符串

------=_Part_2074_1202079654.1337767440483 
Content-Type: text/xml; charset=utf-8 
Content-Transfer-Encoding: binary 
Content-Id: <[email protected]lan> 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Header/> 

<soapenv:Body> 

<FileSet xmlns="http://www.mydomain.com"> 
<FileSetId>SRQ</FileSetId> 
<File> 
<FileType>SRQACK</FileType> 
<FileName>ACK-BSP2-BP2-20120523100300-01.xml</FileName> 
<FileContentId>1</FileContentId> 
</File> 
<File><FileType>SRQSIG</FileType> 
<FileName>SIG-BSP2-BP2-20120523100300-01.sig</FileName> 
<FileContentId>2</FileContentId> 
</File> 
</FileSet> 

</soapenv:Body> 
</soapenv:Envelope> 
------=_Part_2074_1202079654.1337767440483 
Content-Type: text/xml; charset=utf-8 
Content-Transfer-Encoding: binary 
Content-Id: 1 

<?xml version="1.0" encoding="UTF-8"?> 
<!--Handle SRQACK, SRSMUT, SUMMUT BP Postbank version 1.1--> 
<Acknowledgements xmlns="http://www.mydomain.com"> 
<Header> 
<BatchId>ACK-BSP2-BP2-20120523100300</BatchId> 
<InterfaceId>ACK</InterfaceId> 
<Version>02.0</Version> 
<SourceSystemId>BSP2</SourceSystemId> 
<TargetSystemId>BP2</TargetSystemId> 
<CreateDateTime>2012-05-23T10:03:00Z</CreateDateTime> 
<MessageCount>4</MessageCount> 
</Header> 
<Acknowledgement> 
<BatchId>SRQ-BP2-BSP2-20120416101400</BatchId> 
<AckTimeStamp>2012-05-23T10:03:00Z</AckTimeStamp> 
<Result>ERROR</Result> 
<ReasonCode>107</ReasonCode> 
</Acknowledgement> 
<Acknowledgement> 
<BatchId>SRQ-BP2-BSP2-20120514140516</BatchId> 
<AckTimeStamp>2012-05-23T10:03:00Z</AckTimeStamp> 
<Result>OK</Result> 
</Acknowledgement> 
<Acknowledgement> 
<BatchId>SRQ-BP2-BSP1-20120514140511</BatchId> 
<AckTimeStamp>2012-05-23T10:03:00Z</AckTimeStamp> 
<Result>ERROR</Result> 
<ReasonCode>112</ReasonCode> 
</Acknowledgement> 
<Acknowledgement> 
<BatchId>SRQ-BP2-BSP3-20120514140520</BatchId> 
<AckTimeStamp>2012-05-23T10:03:00Z</AckTimeStamp> 
<Result>ERROR</Result> 
<ReasonCode>112</ReasonCode> 
</Acknowledgement> 
</Acknowledgements> 

------=_Part_2074_1202079654.1337767440483 
Content-Type: text/xml; charset=utf-8 
Content-Transfer-Encoding: binary 
Content-Id: 2 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<!--Handle SRQSIG, SRSSIG, EXCSIG, SUMSIG BSP 2 Biller version 1.2--> 
<nl:Signature xmlns:nl="http://www.mydomain.com"> 
<SignatureValue>lJw2CNdcgEGEychSH/snpMvnXrV91775UANSZGN23n7hQnlIiak8Dqr9pe6FAtLjkZ9UZPip26VTxGVzeCHdsgYwrLt3mTLfX0h6KeRhPCYGd9QLxok1yv0Ua6iNlP0oEPaE4t6wJw/CKfCua4W0Jbnm18Ym5J7U08YB1+rc4Lw=</SignatureValue> 
<Fingerprint>166105D2F2F23663F4405B6D84A4F51B48907F77</Fingerprint> 
</nl:Signature> 

------=_Part_2074_1202079654.1337767440483-- 
+0

什麼ü想從此做! – Deepak

+0

我想整個SOAP信封,包含數據和包含簽名&指紋作爲單獨的DOM的XML的XML。 –

回答

0

使用多行正則表達式來拔出<ackowledgements*.</ackowledgements>,另一個拔出<nl:Signature.*<\nl:Signature>和這兩個字符串送入你選擇的DOM解析器 - 對於如何做到這一點的例子,請參閱In Java, how do I parse XML as a String instead of a file?

+0

我可以嘗試這一點,但問題是在第一部分:我不知道什麼'XML根tag'我將從SOAP消息得到。我可以得到標籤或任何其他根標籤。 這將在第二部分然而工作,雖然。 –

+0

你的根標記將是之後的第一個,所以你使用正則表達式來抽取整個並解析它,然後從你的dom模型中拉出第一個bodyof這會給你你的根。 –

+0

太棒了!謝謝你的工作! –

0

第一部分是從文本中提取有效的(從XML角度看)片段。

您必須手動完成第一部分(=編寫自己的代碼),或者如果你是幸運的,你可能會發現一個庫,會爲你做它。

第二部分 - 喂那些片段您使用DOM解析器。

+0

你知道這樣的圖書館嗎? –

+0

@Younis Shah不,我不知道。如果我需要它,我會自己寫一些幫手。 –