簡體   English   中英

在Java 1.5中使用SOAP信封包裝和拆解XML

[英]Wrap and unwrap XML with SOAP envelope in Java 1.5

我有一個XML文檔作為字符串,這是一個沒有SOAP信封的SOAP請求。 我現在需要執行以下操作:

  • 將請求發布到包裝在SOAP信封中的Web服務
  • 返回未封裝SOAP信封的響應

實際的HTTP連接是可以的,但是我真的在包裝和展開方面苦苦掙扎。 我試圖弄清楚如何在Java中進行XML處理,但並不能真正弄清楚。 例如,查看了javax.xml pacakge,但發現它大部分都是一團糟。 不幸的是,我僅限於Java 1.5並且沒有外部庫,否則我可能會使用一些Apache Commons之類的東西。

基本上我正在尋找的是這樣的一對方法:

/* Wraps the xml in a standard soap envelope */
String wrap(String xml)

/* Removes soap envelope from the xml */
String unwrap(String xml)

我猜想的wrap方法可能像soapStart + xml + soapEnd一樣簡單,盡管xml標頭如果不小心可能會使事情搞砸。 但是解包對於我來說太棘手了,因為您需要實際提取<soapenv:Body> 並確保獲得所需的名稱空間聲明等。

我已經在這里坐了幾個小時了,但我仍然不知道...希望你們中的一些人會:)

您可以嘗試使用正則表達式。 查找信封內容:

String regex = "^<(soapenv:Envelope).*?>(.*?)</\\1>$";
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(xml);
matcher.matches();
String body = matcher.group(2);

像這樣

消息的SOAP部分包含一個信封,該信封包含一個正文(可以包含數據或故障信息)和一個可選的標頭。 使用JAXM創建SOAP消息時,將為您創建SOAP部件,信封和正文:您只需要創建正文元素。 為此,您需要到達body元素的父元素,即SOAP body。

為了到達SOAPMessage樹中的任何對象,您必須從根開始遍歷該樹,如以下代碼行所示。 例如,假設SOAPMessage是MyMsg,則以下是您必須進行的調用才能獲取SOAP正文:

SOAPPart MyPart = MyMsg.getSOAPPart();

SOAPEnvelope MyEnv = MyPart.getEnvelope();

SOAPBody MyBody = envelope.getBody();

此時,您可以為body元素創建一個名稱(如Namespaces中所述),然后將body元素添加到SOAPMessage中。

例如,以下代碼行為body元素創建一個名稱(XML標記的表示形式):

Name bodyName = envelope.createName("Temperature");

下一行代碼將body元素添加到body:

SOAPBodyElement myTemp = MyBody.addBodyElement(bodyName);

最后,此代碼行為body元素bodyName定義了一些數據:

myTemp.addTextNode("98.6");

參考: http : //docs.oracle.com/cd/E19263-01/817-6026/SOAP.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM