SOAPMessage的組成和傳送
WebService傳遞的時候實際上是傳遞一個SOAPMessage,我們來探究一下SOAPMessage的組成。
SOAPMessage由一個個的SOAP塊組成,這些SOAPPart被封裝到一個SOAPEnvelope(信封)中,信封中包括head和body。我們可以自己建立一個SOAPMessage傳送到服務提供端,從而返回WebService呼叫結果。
WebService服務建立程式碼參考上篇,本篇探討SOAPMessage的組成和傳送。
TestClient.java
package com.smile.service;
import java.io.IOException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import org.junit.Test;
public class TestClient {
private String wsdlUrl = "http://localhost:8889/ns?wsdl";
private String ns = "http://service.smile.com/";
@Test
public void test(){
try {
//建立訊息工廠
MessageFactory factory = MessageFactory.newInstance();
//根據訊息工廠建立SOAPMessage
SOAPMessage message = factory.createMessage();
//建立SOAPPart
SOAPPart part = message.getSOAPPart();
//獲取SOAPEnvelope soap信封
SOAPEnvelope envelope = part.getEnvelope();
//可以通過SOAPEnvelope獲取head body等資訊
SOAPBody body = envelope.getBody();
//根據QName 建立相應的節點
QName qname = new QName("http://smile.web.com/webservice", "add", "ws");
//<ws:add xmlns="http://smile.web.com/webservice"/>
//使用以下方式設定< > 會被轉義
// body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");
SOAPBodyElement element = body.addBodyElement(qname);
element.addChildElement("a").setValue("1");
element.addChildElement("b").setValue("2");
try {
message.writeTo(System.out);
} catch (IOException e) {
e.printStackTrace();
}
} catch (SOAPException e) {
e.printStackTrace();
}
}
@Test
public void test2(){
try {
//建立服務(Service)
URL url = new URL(wsdlUrl);
QName sname = new QName(ns,"MyServiceImplService");
Service service = Service.create(url, sname);
//建立Dispatch
Dispatch<SOAPMessage> dispatch = service.createDispatch(new QName(ns,"MyServiceImplPort"),
SOAPMessage.class,Service.Mode.MESSAGE);
//建立訊息工廠
MessageFactory factory = MessageFactory.newInstance();
//根據訊息工廠建立SOAPMessage
SOAPMessage message = factory.createMessage();
//建立SOAPPart
SOAPPart part = message.getSOAPPart();
//獲取SOAPEnvelope soap信封
SOAPEnvelope envelope = part.getEnvelope();
//可以通過SOAPEnvelope獲取head body等資訊
SOAPBody body = envelope.getBody();
//根據QName 建立相應的節點
QName ename = new QName(ns, "add", "ws");
//<ws:add xmlns="http://smile.web.com/webservice"/>
//使用以下方式設定< > 會被轉義
// body.addBodyElement(qname).setValue("<a>1</a><b>2</b>");
SOAPBodyElement element = body.addBodyElement(ename);
element.addChildElement("a").setValue("22");
element.addChildElement("b").setValue("33");
message.writeTo(System.out);
System.out.println("\t");
System.out.println("Invoking.....");
SOAPMessage response = dispatch.invoke(message);
response.writeTo(System.out);
} catch (Exception e) {
e.printStackTrace();
}
}
}
作者:爪哇天河
原文:https://blog.csdn.net/ps_zhanglei/article/details/40351171
相關文章
- 郵箱傳送模組
- Go的Channel傳送和接收Go
- 【python】用SMTP模組傳送帶附件的郵件Python
- 0229-UDP 傳送和接收UDP
- 0230-TCP 傳送和接收TCP
- 郵件和簡訊傳送
- 排查MQ訊息傳送和接收MQ
- java傳送GET和post請求Java
- PHP 傳送GET 和 POST資料的方法分析PHP
- 郵件的傳送
- 伺服器的組成和作用伺服器
- truffle 和 ganache 列印賬號列表和傳送eth
- Go之傳送釘釘和郵箱Go
- 如何安全共享和傳送大檔案?
- 傳送陣
- 怎麼把資料夾變成壓縮包傳送
- Ubuntu的郵件傳送Ubuntu
- 【測試】echo傳送和接收TCP/UDP資料包|shell 傳送TCP/UDP資料包TCPUDP
- 用Packet Tracer傳送超大報文(3600位元組)
- JavaMailSender怎麼傳送163和qq郵件JavaAI
- Java Mail 郵件傳送(二):簡單封裝的郵件傳送JavaAI封裝
- 利用ASP傳送和接收XML資料的處理方法XML
- Udp接收和傳送的多執行緒進行(新手)UDP執行緒
- SpringBoot整合Mail傳送郵件&傳送模板郵件Spring BootAI
- SpringBoot專案實現檔案上傳和郵件傳送Spring Boot
- 傳送郵件
- ReactPortals傳送門React
- 郵件傳送
- 1111傳送門
- ton jetton 傳送字串的方式字串
- 陣列的最小不可組成和問題陣列
- 優化基於文字的資產的編碼和傳送大小優化
- 使用 request 和 cheerio 庫來傳送 HTTP 請求HTTP
- 使用 Vim 傳送郵件和檢查日曆
- 圖解RocketMQ訊息傳送和儲存流程圖解MQ
- cURL實現傳送Get和Post請求(PHP)PHP
- 在Thymeleaf和HTMX中使用伺服器傳送的事件 - Wim伺服器事件
- 網路核心之TCP是如何傳送和接收訊息的TCP