对Webservice的支持是JavaSE6的一大新特性。我们知道,想要发布一个Webservice,首先要创建相关的业务逻辑类,然后把这些业务逻辑类部署到SOAP服务器上,生成客户端访问的代码,最后部署到客户端进行测试。这是创建一个简单Webservice的主要步骤,事实上,部署和发布Webservice要复杂的多。而JavaSE6中实现了一个内置的轻量级SOAP服务器,我们可以把Webservice部署到Java平台中,并进行简单的测试。另外,JavaSE 6中加入了@Webservice等注解(Annotation),有了这些注解,创建Webservice变得十分简单。本实验将在JavaSE 6中创建和发布一个Webservice,并通过Netbeans创建Webservice客户端对已发布的Service进行测试,通过实验来理解JavaSE 6对Webservice的支持。
软件需求:
1、jdk 1.6以上版本
2、Netbeans 6.0以上的版本
实验步骤:
1、建立项目:在Netbeans中建立一个简单的Java应用程序项目,并新建一个Java类,命名为HelloService。
2、以下是HelloService的代码:
package jdk6demo;
import java.util.Date;
import javax.jws.Oneway;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService(serviceName="HelloService")
public class HelloService {
@WebResult(name="Greetings")
@WebMethod
public String sayHi(@WebParam(name="MyName") String name){
return "Hi,"+name;
}
@Oneway
@WebMethod(action="printSystemTime",operationName="printSystemTime")
public void printTime(){
System.out.println(new Date(System.currentTimeMillis()));
}
public static void main(String[] args) {
Thread wsPublisher = new Thread(new WSPublish());
wsPublisher.start();
}
private static class WSPublish implements Runnable{
public void run() {
Endpoint.publish("http://localhost:8888/HelloService",new HelloService());
}
}
}
注意代码中使用到的几个Annotation,@WebService注解将 Java 类标记为实现Web Service,或者将Java接口标记为定义Web Service接口,其中serviceName属性指定了Web Service的服务名称,当映射到WSDL时,此名称被用作 此名称被用作 wsdl:service 的名称。这一个注解对应的是javax.jws.WebService,我们可以在jdk1.6的API文档里查看到所有的属性和用法。@WebResult指定Web Service返回的值和WSDL之间的映射。@WebMethod指定了Web Service中要暴露的方法。标记了@WebMethod的方法可以通过Web Service客户端来远程调用(RPC)。@WebParam注解用来向Web Service传递参数的。注意,@WebMethod标注的方法必须带有返回类型,除非同时标注了@Oneway。
3、生成业务逻辑帮组类:在netbeans里点击HelloService的右键,选择编译文件,然后打开命令行,进入工程所在的路径,进入build/classes,执行命令:
wsgen -cp . jdk6demo.HelloService
执行完毕后,我们可以查看一下wsgen工具帮助我们生成了些什么。进入jaxws路径,我们可以看到3个类的java文件及其class文件,其中需要返回值的SayHi方法映射为SayHi.java和SayHiResponse方法,分别是在服务器端的行为和传给客户端的响应(返回值)
4、发布Web Service,只需运行HelloService就可以了:java jdk6demo.HelloService,注意,不要关闭命令行窗口,也不要结束运行java的进程。
5、查看Web Service:在浏览器中输入http://localhost:8888/HelloService?WSDL,既可读取HelloService的WSDL定义:
6、创建Web Service客户端:首先在源包里创建一个名为wsclient的包,然后在Netbeans中点击项目的右键,新建 - Web服务客户端,在WSDL URL中填入http://localhost:8888/HelloService?WSDL,如下图所示:
点击完成后,将会在build/classes/wsclient中创建客户端class文件,结构如下:
其中HelloService_Service.class相当于客户端的stub,在wsclient源包中创建测试类TestService:
package client;
/**
*
* @author sunsite
*/
public class TestService {
public static void main(String[] args) {
HelloService_Service hs = new HelloService_Service();
HelloService ws = hs.getHelloServicePort();
System.out.println(ws.sayHi("Yuanxin Li"));
ws.printSystemTime();
}
}
运行该文件,我们可以在Netbeans的控制台输出(相当于客户端)中看到"Hi,Yuanxin Li"的输出,而在命令行窗口(相当于远程服务器端)中,我们可以看到
Sun May 11 02:13:45 CST 2008
的输出,因为printTime()方法没有返回任何值给客户端,只是在服务器端打印当前时间,如下图所示:
参考资料:
1、http://yufeimen.javaeye.com/blog/68192
2、JSR 181: Web Services Metadata for the JavaTM Platform:
http://jcp.org/en/jsr/detail?id=181
3、JDK1.6 API document
在JavaSE 6中发布和测试Web服务的实例: Sun Functional Campus Ambassador
最新推荐文章于 2024-08-31 00:34:39 发布