2013-01-15 7 views
0

SOAP 메시지를 String으로 가지고 있으며이를 Java로 구문 분석해야합니다.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

무엇 U 싶어 참조 이걸로 해! – Deepak

+0

나는 Signature & Fingerprint를 포함하는 XML과 데이터를 포함하는 XML 전체 SOAP Envelope를 별도의 DOM으로 원합니다. –

답변

0

를 사용하여 여러 줄의 정규 표현식 <ackowledgements*.</ackowledgements>을 당겨 다른 하나는 <nl:Signature.*<\nl:Signature>을 끌어와 선택의 DOM 파서로 두 문자열을 공급 - 그 작업을 수행하는 방법의 예를 들면, In Java, how do I parse XML as a String instead of a file?

+0

나는 그것을 시도 할 수 있었지만 문제는 첫 번째 부분에있다. SOAP 메시지에서 얻을 XML 루트 태그가 무엇인지 알지 못한다. 나는 태그 나 다른 루트 태그를 얻을 수있다. 그러나 이것은 두 번째 부분에도 적용됩니다. –

+0

루트 태그가 다음에 오는 첫 번째 것이므로 정규식을 사용하여 전체 를 추출하고 구문 분석 한 다음 dom 모델에서 첫 번째 childof Body를 꺼냅니다 그것은 당신에게 당신의 뿌리를 줄 것입니다. –

+0

위대한! 그 덕분에 일했습니다! –

0

: 난 내가 수신 (유효한 XML을하지 않음) 샘플 SOAP 메시지를 데이터와 같은 SOAP 메시지 다음 별도의 XML의 일부로서 XML 데이터 내용의 서명을 포함하는 XML 파일입니다받을 첫 번째 부분은 텍스트에서 유효한 (XML 관점에서) 조각을 추출하는 것입니다.

수동으로 첫 번째 부분을해야합니다 (= 자신의 코드를 작성하십시오). 또는 운이 좋다면 라이브러리를 찾을 수 있습니다.

두 번째 부분 - 당신이 사용하는 DOM 파서에 그 조각들을 공급하십시오.

+0

그러한 라이브러리를 알고 계십니까? –

+0

@Younis Shah 아니요, 아닙니다. 내가 그것을 필요로한다면, 나 자신 도우미를 쓸 것이다. –