SOAP 语法学习笔记

SOAP(Simple Object Access Protocol)是一种基于XML的通讯协议,用于在不同的应用程序之间交换信息。它可以通过HTTP、SMTP等协议来发送和接收消息。

SOAP 消息结构

SOAP 消息由以下部分组成:

  1. Envelope: 定义消息的开始和结束,必须包含 xmlns 属性指向 SOAP 命名空间。
  2. Header: 可选的,包含头部信息。
  3. Body: 必须包含消息体,也就是实际传输的数据。
  4. Fault: 可选的,用于描述错误信息。

以下是一个简单的 SOAP 消息示例:

xmlCopy Code
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header /> <soap:Body> <m:GetStockPrice xmlns:m="http://www.example.org/stock"> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> </soap:Envelope>

SOAP 元素类型

SOAP 元素有以下几种类型:

  1. 基本类型:如字符串、数字、布尔值等。
  2. 结构类型:由多个元素组成的复合类型。
  3. 数组类型:包含多个相同的元素的类型。
  4. 枚举类型:指定一组可能的值。

以下是一个由结构类型和数组类型组成的 SOAP 消息示例:

xmlCopy Code
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header /> <soap:Body> <m:GetStockPrices xmlns:m="http://www.example.org/stock"> <m:StockNames> <m:StockName>IBM</m:StockName> <m:StockName>Microsoft</m:StockName> <m:StockName>Apple</m:StockName> </m:StockNames> </m:GetStockPrices> </soap:Body> </soap:Envelope>

SOAP 实例

以下是一个使用 SOAP 来调用 Web 服务的示例:

javaCopy Code
import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Service; import org.example.stock.StockService; public class StockClient { public static void main(String[] args) throws Exception { URL url = new URL("http://localhost:8080/stock?wsdl"); QName qname = new QName("http://www.example.org/stock", "StockService"); Service service = Service.create(url, qname); StockService stockService = service.getPort(StockService.class); System.out.println(stockService.getStockPrice("IBM")); } }

以上代码通过创建一个 Service 对象,然后调用 getPort() 方法来获取一个 StockService 对象,最终调用 StockService 的 getStockPrice() 方法来获取 IBM 股票的价格。