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
- action:指定此方法对应的action
- exclude:true --表示此方法包含在web服务中;false表示排除此方法
- 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),所有这里只是对此做个简单的介绍。