使用 JAX-WS 创建简单 Web 服务和客户端(文档文字)
这是项目目录。
- 服务端点接口
首先,我们将创建一个服务端点接口。javax.jws.WebService @WebService
批注将类定义为 Web 服务端点。
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.jws.soap.SOAPBinding.Use;
// Service Interface with customize targetNamespace
@WebService(targetNamespace = "http://hello-soap/ws")
@SOAPBinding(style = Style.DOCUMENT, use=Use.LITERAL) //optional
public interface HelloSoap {
@WebMethod String getHelloSoap(String name);
}
- 服务端点实施(SEI)
接下来我们将创建服务端点实现。我们将通过将 endpointInterface
元素添加到实现类中的 @WebService
注释来创建显式接口。以下是一些规则集 28.1.1 JAX-WS 端点必须遵循的 JAX-WS 端点的要求。getHelloSoap 方法向客户端返回一个问候语,并将名称传递给它。
import javax.jws.WebService;
// Customized Service Implementation (portName,serviceName,targetNamespace are optional)
@WebService(portName = "HelloSoapPort", serviceName = "HelloSoapService",
endpointInterface = "com.wonderland.hellosoap.HelloSoap", targetNamespace = "http://hello-soap/ws")
public class HelloSoapImpl implements HelloSoap {
@Override
public String getHelloSoap(String name) {
return "[JAX-WS] Hello : " + name;
}
}
- Web 服务端点发布者
import javax.xml.ws.Endpoint;
public class HelloSoapPublisher {
public static void main(String[] args) {
// creating web service endpoint publisher
Endpoint.publish("http://localhost:9000/ws/hello-soap", new HelloSoapImpl());
}
}
- 接下来的步骤,我们将运行
HelloSoapPublisher.java
作为 java 应用程序。然后,我们将通过在 Web 浏览器中请求 URLhttp://localhost:9000/ws/hello-soap?wsdl
来查看 WSDL 文件。
HTTP://本地主机:9000 / WS /你好皂 WSDL
如果在 Web 浏览器上显示 XML 数据格式,那么我们就可以开始下一步了。
注意:
如果你收到某种错误消息,可能需要使用wsgen
工具生成必要的 JAX-WS 可移植工件。我们在这里没有涉及wsgen
工具。
- Web 服务客户端
最后一步,我们将创建一个访问我们已发布服务的客户端。
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
public class HelloSoapClient {
public static void main(String[] args) throws Exception {
// create wsdl url
URL wsdlDocumentUrl = new URL("http://localhost:8000/ws/hello-soap?wsdl");
QName helloSoapService = new QName("http://hello-soap/ws", "HelloSoapService");
// create web service
Service service = Service.create(wsdlDocumentUrl, helloSoapService);
// get object of pointed service port
HelloSoap helloSoap = service.getPort(HelloSoap.class);
// testing request
System.out.println(helloSoap.getHelloSoap("Soap "));
}
}
输出: [JAX-WS] Hello : Soap
注意: 我们的 Web 服务客户端中的端口号已更改为 8000
。这里的原因是,我使用 Eclipse IDE,内置 TCP/IP monitor
工具来跟踪消息(更多信息: 如何在 Eclipse IDE 中跟踪 SOAP 消息 )。出于功能测试目的尝试 SoapUI | SOAP 和 REST API 的功能测试 。