SOAP 语法学习笔记
SOAP(Simple Object Access Protocol)是一种基于XML的通讯协议,用于在不同的应用程序之间交换信息。它可以通过HTTP、SMTP等协议来发送和接收消息。
SOAP 消息结构
SOAP 消息由以下部分组成:
- Envelope: 定义消息的开始和结束,必须包含 xmlns 属性指向 SOAP 命名空间。
- Header: 可选的,包含头部信息。
- Body: 必须包含消息体,也就是实际传输的数据。
- 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 元素有以下几种类型:
- 基本类型:如字符串、数字、布尔值等。
- 结构类型:由多个元素组成的复合类型。
- 数组类型:包含多个相同的元素的类型。
- 枚举类型:指定一组可能的值。
以下是一个由结构类型和数组类型组成的 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 Codeimport 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 股票的价格。