JDK 1.6 环境下开发 WebService
JDK1.6 中已经支持用Java开发WebService应用了,而且很方便。这样就大大减少了项目安装部署的代价,因为选择开源的框架依赖大量第三方包,程序的尺寸倍增。下面为大家提供一个一个JDK1.6开发Web Service的入门例子 HellService。
1、服务端
首先创建一个简单的接口 IHello ,这个接口就只有一个方法 say:
package com.spr.ws.service; public interface IHello { public String say(String msg); }
然后编写HelloService的服务类 Hello ,实现上面的接口:
package com.spr.ws.service.impl; import javax.jws.WebService; import com.spr.ws.service.IHello; @WebService public class Hello implements IHello{ public String say(String msg) { return "Hello "+msg; } }
接着在项目的classpath根目录(工程项目 .classpath 文件所在目录)对服务端代码进行 apt 编译:
E:\etl\webService>apt com/spr/ws/service/impl/Hello.java
编译的结果是在 com.spr.ws.service.impl 包下生成 jaxws 子包,该包下生成两个源文件:Say.java 和 SayResponse.java。
最后,编写WebService的服务启动类。这里JDK1.6已经将这个过程提升到了API级别:
package com.spr.ws.soap.server; import javax.xml.ws.Endpoint; import javax.xml.ws.soap.SOAPBinding; import com.spr.ws.service.impl.Hello; public class SoapServer { /** * <b>Summary: </b> * main(WebService的发布) * @param args */ public static void main(String[] args) { System.out.println("准备启动WebService服务:http://127.0.0.1:8080/helloService"); Endpoint endpoint = Endpoint.publish("http://127.0.0.1:8080/helloService",new Hello()); SOAPBinding binding = (SOAPBinding) endpoint.getBinding(); binding.setMTOMEnabled(true); System.out.println("已成功启动WebService服务:http://127.0.0.1:8080/helloService"); } }
运行之后,打开浏览器,输入 http://127.0.0.1:8080/helloService?wsdl 就能看到WebService的xml结构了。至此,该WebService的服务端基本开发完毕。因为ws基本上是一个远程调用的过程(RMI),所以,关键还是在,客户端该怎么调用。
2、客户端
这里的客户端调用,当然还是在JDK1.6自带的环境。首先介绍两个命令:
a、wsgen(生成WebService服务端文件)
参数说明(工程根目录):
- -cp 定义classpath
- -r 生成 bean的wsdl文件的存放目录
- -s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)
- -d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)
E:\etl\webService>wsgen -cp ./WebRoot/WEB-INF/classes -r ./WebRoot/ws -s ./src -d ./WebRoot/WEB-INF/classes -wsdl com.spr.ws.service.impl.Hello
运行之后,会将前面开发的服务端java文件,转化成为webservice(HelloService.wsdl 和 HelloService_schema1.xsd)文件,存放在 WebRoot/ws 目录下。
b、wsimport(一直WebService服务端地址,生成客户端文件,实现本地API式的调用,需要在ws运行的状态下进行)
参数说明(工程根目录):
- -d:生成客户端执行类的class文件的存放目录
- -s:生成客户端执行类的源文件的存放目录
- -p:定义生成类的包名
E:\etl\webService>wsimport -d ./WebRoot/WEB-INF/classes -s ./src -p [存放客户端代码的包名,如 com.spr.ws.soap.client] -keep [WebService 访问地址,如:http://127.0.0.1:8080/helloService?wsdl]
运行之后,会在 com.spr.ws.soap.client 包下,生成若干客户端文件。这里才是关键。利用生成的客户端文件我们就可以把远端的WebService当做本地类来使用了。
package com.spr.ws.soap.client; import com.spr.ws.soap.client.Hello; import com.spr.ws.soap.client.HelloService; public class TestHelloClient { public static void main(String[] args) { Hello hello = new HelloService().getHelloPort(); System.out.println("----------HelloService.say()-------------"); String result = hello.say("Web Service"); System.out.println("result:"+result); } }
上一篇: 软件国际化与本地化
下一篇: AngularJS表单和输入验证实例
推荐阅读
-
mac下Apache + MySql + PHP搭建网站开发环境
-
windows下wxPython开发环境安装与配置方法
-
win7 下搭建sublime的python开发环境的配置方法
-
Windows下搭建Android开发环境
-
Linux下Android开发环境搭建详细步骤
-
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
-
用Shell脚本快速搭建Ubuntu下的Nodejs开发环境
-
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
-
Windows下搭建python开发环境详细步骤
-
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)