📅  最后修改于: 2023-12-03 14:47:30.206000             🧑  作者: Mango
SOAP(简单对象访问协议)是一种用于交换信息的协议,可以在分布式环境中使用。它是一个基于 XML 的协议,可以用于在 web 上交换信息,并以编程语言无关的方式描述 web 服务接口。
SOAP 通常使用 HTTP 作为底层传输协议,通过使用 SOAP 消息,可以在不同的操作系统、编程语言和网络协议之间进行通信。
SOAP 消息主要由三个部分组成:
当客户端发送一个 SOAP 请求时,它会构建一个包含在 Envelope 元素中的 XML 文档,然后将其发送到服务器。服务器会解析请求,处理它,并将响应发送回客户端。
在处理 SOAP 请求时,服务器需要知道要调用哪个 web 服务。为了实现这一点,SOAP 使用了 WSDL(Web Services Description Language)文件,WSDL 文件描述了 web 服务所提供的操作、参数以及输入和输出的格式。
创建一个 SOAP 程序通常需要以下步骤:
以下是一个简单的 SOAP 示例,用于将两个数字相加:
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
name="CalculatorService"
targetNamespace="http://example.com/CalculatorService">
<message name="AddRequest">
<part name="x" type="xsd:int"/>
<part name="y" type="xsd:int"/>
</message>
<message name="AddResponse">
<part name="result" type="xsd:int"/>
</message>
<portType name="CalculatorPortType">
<operation name="Add">
<input message="tns:AddRequest"/>
<output message="tns:AddResponse"/>
</operation>
</portType>
<binding name="CalculatorSoapBinding" type="tns:CalculatorPortType">
<soap12:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Add">
<soap12:operation soapAction="http://example.com/CalculatorService/Add"/>
<input>
<soap12:body use="literal"/>
</input>
<output>
<soap12:body use="literal"/>
</output>
</operation>
</binding>
<service name="CalculatorService">
<port name="CalculatorPort" binding="tns:CalculatorSoapBinding">
<soap12:address location="http://example.com/CalculatorService"/>
</port>
</service>
</definitions>
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import example.com.calculatorservice.Calculator;
public class CalculatorClient {
public static void main(String[] args) throws Exception {
URL url = new URL("http://example.com/CalculatorService?wsdl");
QName qname = new QName("http://example.com/CalculatorService",
"CalculatorService");
Service service = Service.create(url, qname);
Calculator calculator = service.getPort(Calculator.class);
int result = calculator.add(1, 2);
System.out.println("Result: " + result);
}
}
import javax.jws.WebService;
import example.com.calculatorservice.Calculator;
@WebService(endpointInterface = "example.com.calculatorservice.Calculator")
public class CalculatorImpl implements Calculator {
public int add(int x, int y) {
return x + y;
}
}