目录
1 定义Service
2 服务端发布Service
2.1 排除WebService中的某个方法
3 客户端访问Service
4 java2ws工具的使用
4.1 命令行使用java2ws
4.2 Maven使用java2ws
5 基于Spring的Jax-ws WebService
5.1 Service定义
5.2 服务端发布Service
5.3 客户端获取Service
6.1 wsdl2java工具
6.2 cxf-codegen-plugin
Jax-ws是WebService的一种规范。
1 定义Service
Jax-ws的WebService定义是通过注解进行的,我们必须在其WebService类的接口上使用@WebService注解进行标记。
- @WebService
- public interface HelloWorld {
- public String sayHi(String who);
- }
如上,我们把HelloWorld定义为一个WebService,其对应有一个sayHi操作。其对应的实现类如下:
2 服务端发布Service
对于Jax-ws WebService而言,发布Service有两种方式。
第一种:
第二种:
发布之后我们就可以通过发布地址?wsdl查看WebService的定义了(WSDL是Web Service Description Language的简称,即网络服务描述语言)。通过在浏览器输入http://localhost:8080/test/jaxws/services/HelloWorld?wsdl我们可以看到如下内容:
我们可以看到在上面我们的sayHi操作的参数who变成了arg0,这是因为接口在被编译为class文件的时候不能保存参数名,有时候这会影响可读性。如果需要参数名显示的可读性强一些的话,我们可以使用@WebParam来指定,如:
@WebService的serviceName可以用来指定service的名称,默认情况下如果Service是通过Endpoint.publish()方法发布的则serviceName为实现类的简单名称+Service(如HelloWorldImplService),如果是通过JaxWsServerFactoryBean的create方法发布的则为接口的简单名称+Service(如HelloWorldService)。name属性可以用来指定service对应的portName,默认情况下如果Service是通过Endpoint.publish()方法发布的则portName为实现类的简单名称+Port(如HelloWorldImplPort),如果是通过JaxWsServerFactoryBean的create方法发布的则为接口的简单名称+Port(如HelloWorldPort)。
除了@WebService、@WebParam之外,Jax-ws还为我们提供了一系列的注解,如@WebMethod、@OneWay。
@WebMethod是用来标注在WebService的方法即操作上的,通过它我们可以指定某一个操作的操作名、使用SOAP绑定时的Action名称,以及该方法是否允许发布为WebService。@WebMethod有三个属性:operationName、action和exclude。@WebMethod还是挺有用的,当你发布的WebService中有方法不希望WebService访问的时候就可以通过@WebMethod来指定将其排除在外。下面我们来介绍一下使用WebMethod排除WebService中的一个方法。
@Oneway是标注在Service接口的操作方法上的。使用@Oneway标注的方法表示它不需要等待服务端的返回,也不需要预留资源来处理服务端的返回。
2.1 排除WebService中的某个方法
首先我们往我们的HelloWorld接口中新增一个方法sayHello。