java6开发webservice详解
本文将向大家讲述如何使用java6自带的webservice功能进行ws开发。
废话不多说,用实例说明问题:
环境:eclipse3.2 jdk6 本例中没有用到web容器
1.服务端代码
服务1
- package com.jlqu.count.service;
- import javax.jws.WebService;
- /**
- * Java6开发WebService
- */
- @WebService
- public class J6WS1 {
- //WS中的业务方法
- public String echo(String str) {
- return "J6WS1>echo:"+str;
- }
- }
服务2
- package com.jlqu.count.service;
- import javax.jws.WebService;
- /**
- * Java6开发WebService
- */
- @WebService
- public class J6WS2 {
- //WS中的业务方法
- public String echo(String str) {
- return "J6WS2>echo:"+str;
- }
- }
新建Publish类用来发布服务
- package com.jlqu.count.service;
- import javax.jws.WebService;
- import javax.xml.ws.Endpoint;
- /**
- * Java6开发WebService
- * Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.ws.jaxws.DoSomething is not found. Have you run APT to generate them?解决办法:apt com/jlqu/count/service/Java6WebService.java
- */
- @WebService
- public class Publish {
- public static void main(String[] args) {
- //java6提供了api级别的发布方式
- Endpoint.publish("http://127.0.0.1:6016/axis/com.jlqu.count.service.J6WS1", new J6WS1());
- Endpoint.publish("http://127.0.0.1:6016/axis/com.jlqu.count.service.J6WS2", new J6WS2());
- }
- }
运行该main方法,发布服务。
这个时候在浏览器中输入http://127.0.0.1:6016/axis/com.jlqu.count.service.J6WS1?wsdl就会看到wsdl了
这里要注意一点,如果报Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.ws.jaxws.DoSomething is not found. Have you run APT to generate them?
解决办法是使用apt编译
apt com/jlqu/count/service/J6WS1.java
apt com/jlqu/count/service/J6WS2.java
2.
在dos下输入
wsimport -p com.jlqu.count.service.wsclient -keep http://127.0.0.1:6016/axis/com.jlqu.count.service.J6WS1?wsdl
wsimport -p com.jlqu.count.service.wsclient -keep http://127.0.0.1:6016/axis/com.jlqu.count.service.J6WS2?wsdl
成功后在com.jlqu.count.service包下会多出个文件夹wsclient,里面就是生成的客户端文件了
3.接下来就可以写个测试用例来测一下了
新建一个junit4的类,具体测试代码如下:
- /**
- *
- * 测试Java6 WS
- */
- @Test
- public void testJ6WS() {
- //创建一个客户端服务对象
- J6WS1 j6WS1 = new J6WS1Service().getJ6WS1Port();
- //调用服务方法,并得到方法返回值
- String ret1 = j6WS1.echo("你好!java6的web服务!");
- System.out.println(ret1);
- J6WS2 j6WS2 = new J6WS2Service().getJ6WS2Port();
- String ret2 = j6WS2.echo("看到我,你的web服务就成功了!");
- //打印服务的返回值
- System.out.println(ret2);
- }
OK!控制台输出了
J6WS1>echo:你好!java6的web服务!
J6WS2>echo:看到我,你的web服务就成功了!