在JavaSE 6中发布和测试Web服务的实例: Sun Functional Campus Ambassador
2010-05-24 08:35
507 查看
对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
软件需求:
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
相关文章推荐
- weblogic服务上传word等文件直接打开问题解决 博客分类: web应用服务器 在weblogic上发布的web项目,测试中发现出现当上传word、excel、pdf等文件在下载的时候出现
- Sun发布Java路线 更好地支持Web服务和XML
- 【托管服务qin】Web 服务器压力测试实例详解
- dubbo发布web服务实例
- java restful风格服务报错:javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException
- 利用resteasy框架构建rest webservice----第二波:使用不同的方式让resteasy发布我们的restful webservice 服务(实例、教程)
- 利用resteasy框架构建rest webservice----第四波:resteasy与spring真正集成发布我们的restful webservice 服务(实例、教程)
- Ab工具压力测试.及相应查看web服务排查问题
- (六)Java Ee平台上实现Web服务及多种客户端实例-小结
- (五)Java EE 5实现Web服务(Web Services)及多种客户端实例-移动客户端
- (四)Java EE 5实现Web服务(Web Services)及多种客户端实例-胖客户端
- jboss发布com.sun.faces.config.WebConfiguration cannot be cast to com.sun.faces.config.WebConfiguration
- GeoServer地图开发解决方案(四):发布Web地图服务(WMS)篇(转)
- [笔记-架构探险]web服务框架-cxf-4.1.多种方式的发布与客户端调用
- javaWeb服务详解(含源代码,测试通过,注释) ——web.xml
- IBM Lotus Domino 7 中的实用 Web 服务,第 2 部分: 编写和测试简单的 Web 服务
- XFire 入门 - 轻松将 POJO 发布成 Web 服务
- Web服务测试与传统的Web测试
- linux系统web服务性能测试最重要的两个参数
- Maven搭建webService (二) 创建服务端---使用web方式发布服务