JAX-WS 学习一:基于java的最简单的WebService服务

时间:2021-09-25 00:21:15

JAVA 1.6 之后,自带的JAX-WS API,这使得我们可以很方便的开发一个基于Java的WebService服务。

基于JAVA的WebService 服务

1、创建服务端WebService服务接口

package com.st.services;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.jws.soap.SOAPBinding.Use; @WebService(serviceName="calculator",targetNamespace="com.st.services")
@SOAPBinding(style=Style.RPC,use=Use.LITERAL)
public class CalculatorService { public int sum(int a,int b){
return a+b ;
} }

 

@WebService

此注示用来标明此java类为某个WebService的实现类或者标明此java接口定义了某个WebService的接口。

@WebService有六个参数可以用来配置这个WebService的定义:

  1、endpointInterface:指向一个定义此WebService抽象定义接口的完整类路(如果没有定义接口,直接写的实现类,则该参数不需要)

  2、name:WebService名;默认的port名为"实现类名+Port",binding名为"实现类名+PortBinding",通过指定name的值来替换 实现类名。

  3、portName:指定port名,可以完成替换默认port名,或由上面的"name"指定的port名。

  4、targetNamespace:指定targetNamespace值,默认的值为 "http://包名/",可以通过此变量指定一个自定义的targetNamespace值。(注:如果分别定义和接口和实现,则他们有各自的targetNamespace)

5、serviceName:指定service名

6、wsdlLocation:指向一个预定义的wsdl的文件,替代自动生成的wsdl文件。

!如果不想定义的话,可以直接写一个@WebService ,其他的属性用默认的。

@WebMethod

  1. action:指定此方法对应的action
  2. exclude:true --表示此方法包含在web服务中;false表示排除此方法
  3. operationName:指定方法对应的operation的名字。

!如果你对你的WebService方法没有啥特殊要求的话,该参数可以不写,那将会使你的所有的方法发布出去。

2、发布服务

 public static void main(String[] args) {
Endpoint.publish("http://localhost:8088/calculator",
new CalculatorService());
}

 

这里publish方法需要两个参数:

  • address:服务对外暴露的用于调用服务的地址
  • implementor:服务的实现对象

启动这个Server类,就可以访问服务了。要测试服务有没有启动,可以输入http://localhost:8088/calculator?wsdl,如果一切正常,就可以看到一个wsdl定义内容,表示服务已经成功启动。

3、客户端程序的调用

客户端的代码建议使用wsimport 去生成(前提:在你的电脑上已经配置了JDK的环境变量)

直接在CMD中运行:

wsimport -keep -p com.st.client http://localhost:8088/calculator?wsdl

-p : 定义生成包的包名(可以不写)

然后将生成的java类放到项目中进行调用

!使用java发布WebService,默认是发布到了JDK的WEB容器中了,但在具体的项目中,更多的是有独立WEB容器(eg:Tomcat),所有这里只是对此做个简单的介绍。