JAVA 6.0 之后,其中JDK自带有个轻量级的web service 服务器。如果你比较细心一定发现在你安装java的路径下,有java webservice 的示例代码。
   我以前也用java开发过web service ,但是当初用了一个apache 下axis 开源项目。如果axis夜进化了,反正我不认识了。不过java自带有何必舍近求远呢。今天我就把自己创建的最简单java webservice 范例过程记录下来,与大家分享。
   我用的是netbeans 6,首先建立一个java 应用程序工程,名为WebServices。建立一个服务端程序。
		
				package
				 WebServices;
				import
				 javax.jws.
				*
				;
				import
				 javax.xml.ws.Endpoint;
				/**
				
						
 * 
				@author
				 hecm
 
				*/
				
						
@WebService(targetNamespace 
				=
				 
				"
				http://www.blogjava.net/JAVA-HE
				"
				, serviceName 
				=
				 
				"
				HelloService
				"
				)
				public
				 
				class
				 WSProvider
{
   
				//
				 @WebResult(name = "Greetings")
				//
				自定义该方法返回值在WSDL中相关的描述    
				
						
				
				    @WebMethod(action 
				=
				 
				"
				sayHi
				"
				, operationName 
				=
				 
				"
				sayHi
				"
				)
    
				public
				 String sayHi(@WebParam(name 
				=
				 
				"
				MyName
				"
				) String name)
    {
        
				return
				 
				"
				Hi,
				"
				 
				+
				 name; 
				//
				@WebParam是自定义参数name在WSDL中相关的描述
				
						
				
				
						
    }
    @Oneway 
				//
				表明该服务方法是单向的,既没有返回值,也不应该声明检查异常
				
						
				
				
						
    @WebMethod(action 
				=
				 
				"
				printSystemTime
				"
				, operationName 
				=
				 
				"
				printSystemTime
				"
				)
				//
				自定义该方法在WSDL中相关的描述
				
						
				
				    
				public
				 
				void
				 printTime()
    {
        System.out.println(System.currentTimeMillis());
    }
    
				public
				 
				static
				 
				void
				 main(String[] args)
    {
        Thread wsPublisher 
				=
				 
				new
				 Thread(
				new
				 WSPublisher());
        wsPublisher.start();
    }
    
				private
				 
				static
				 
				class
				 WSPublisher 
				implements
				 Runnable
    {
        
				public
				 
				void
				 run()
        {
            
				//
				发布WSProvider到http:
				//
				localhost:8888/hechangmin/WSProvider这个地址,之前必须调用wsgen命令
            
				//
				生成服务类WSProvider的支持类,命令如下:
            
				//
				wsgen -cp . WebServices.WSProvider
				
						
				
				             Endpoint.publish("http://localhost:8888/JAVA-HE/WSProvider", new WSProvider());
      
				}
    }
}
		 
		当然建立对应的包,就不用说了。
然后编译文件。
进入命令提示符下,进入classes目录,运行:wsgen -cp . WebServices.WSProvider
可以看到将刚才的class 生成了几个java文件和class文件。
现在要做的是发布ws到http://localhost:8888/chinajash/WSProvider
而实际上的动作就是:Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider());
当然直接运行WSProvider 。
然后输入http://localhost:8888/JAVA-HE/WSProvider?wsdl
就已经查看到生成的wsdl (webservice 描述语言)。
也就是服务端就OK了。
保持运行。编写一个测试客户端:
首先选择项目,右键新建 web服务客户端。其中ws url填入刚才生成的wsdl地址:
http://localhost:8888/JAVA-HE/WSProvider?wsdl
(实际上:和wsimport http://localhost:8888/JAVA-HE/WSProvider?wsdl 一样的效果)
产生一个效果:在classes下 按照 之前指定的名字空间产生的包下(目录结构)生成了7个帮助class。
然后我们建立一个包 client 建立测试文件:
		
				/*
				
						
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 
				*/
				
						
						
				
				package
				 client;
				import
				 net.blogjava.java_he.
				*
				;
				/**
				
						
 *
 * 
				@author
				 hecm
 
				*/
				
						
				
				public
				 
				class
				 Test {
    
				public
				 
				static
				 
				void
				 main(String args[])
    {
        HelloService hs 
				=
				 
				new
				 HelloService();
        WSProvider ws 
				=
				 hs.getWSProviderPort();
        System.out.println(ws.sayHi(
				"
				hechangmin
				"
				));
        ws.printSystemTime();
    }
}
		
		
				
运行这个测试类:
Hi,hechangmin
输出了。顺利完成!
一点个人经验,你发布的地址最好写成可配置。还有就是wsdl 中会严格按照你指定的url来访问,比如你指定的127.0.0.1 那么你用本机IP的时候也许并不能顺利访问。
	posted on 2008-07-08 02:59 
-274°C 阅读(64594) 
评论(3)  编辑  收藏  所属分类: 
JAVA 、
WebService 、
JSP