使用 JAX-WS 创建简单 Web 服务和客户端(文档文字)

这是项目目录。

StackOverflow 文档

  1. 服务端点接口

首先,我们将创建一个服务端点接口。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);

}
  1. 服务端点实施(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;
    }

}
  1. 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());
    }

}
  1. 接下来的步骤,我们将运行 HelloSoapPublisher.java 作为 java 应用程序。然后,我们将通过在 Web 浏览器中请求 URL http://localhost:9000/ws/hello-soap?wsdl 来查看 WSDL 文件。

HTTP://本地主机:9000 / WS /你好皂 WSDL

如果在 Web 浏览器上显示 XML 数据格式,那么我们就可以开始下一步了。

StackOverflow 文档

注意:
如果你收到某种错误消息,可能需要使用 wsgen 工具生成必要的 JAX-WS 可移植工件。我们在这里没有涉及 wsgen 工具。

  1. 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 的功能测试