1. Webserivces背景
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是说能用编程的方法通过Web来调用这个应用程序。我们把调用这个WebService的应用程序叫做客户端,而把提供这个WebService的应用程序叫做服务端。从深层次看,WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何在Web上实现互操作性,可以用任何语言,在任何平台上写Web service ,只要可以通过Web service标准对这些服务进行查询和访问。Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。
2. XFire介绍
最近在研究JAVA开发Webservice,发现网络上比较流行的几种选择AXIS、XFire、CFX(XFire的下一代)。在BOMC系统中主要采用XFire进行webservice接口计, XFire使得在JavaEE应用中发布Web服务变得轻而易举, XFire的配置非常简单,可以非常容易地和Spring集成。下面部署一个具体例子:
开发环境:Myeclipse 8, jdk版本-1.5.0,tomcat版本-6.0.37;
1、 新建一个Web Service Project项目,新建项目截图如下:
2、 打开项目结构,发现已经将XFire相关jar包引入到项目中,我们只需开发具体的接口就可以,
打开WebRoot下WEB-INF\web.xml文件,会发现项目已经将XFire拦截添加到xml中,内容如下:
<servlet> <servlet-name>XFireServlet</servlet-name> <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> |
访问是通过http://XXXX/ services/XXX?wsdl形式,如果这里不配置,将访问不到,当然这里的<url-pattern>内容你也可以定义成自己的访问方式。
3、 接下来开始设计自己的接口内容;
这里我定义两个比较简单的方法说明下,复杂方法都差不多,都要看你具体业务逻辑是怎样。Ok,我定义接口类如下:
接口比较简单,一个是获取传入参数,另一个是判断字符串是否相等。这是只是一个简单的说明,复杂接口要看你业务需求逻辑是怎样,做调整即可。
package com.gzinfo.unlock; //Generated by MyEclipse
public interface IxfireService {
public String example(String message);
public boolean StrCompare(String pre,String fix) ; } |
接口实现类如下:
package com.gzinfo.unlock; //Generated by MyEclipse public class xfireServiceImpl implements IxfireService {
public String example(String message) { return message; }
public boolean StrCompare(String pre, String fix) { boolean flag = false ; if(pre!=null){ if(pre.equals(fix)){ flag = true ; } } return flag; } } |
Ok,接口和实现类定义完之后,接下来这一步比较重要。要将接口类和实现类配置在service.xml中,具体路径如下/WebServices/services.xml,配置的内容也是有规范的,如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xfire.codehaus.org/config/1.0"> <service> <name>xfireService</name> <serviceClass>com.gzinfo.unlock.IxfireService</serviceClass> <implementationClass> com.gzinfo.unlock.xfireServiceImpl </implementationClass> <style>wrapped</style> <use>literal</use> <scope>application</scope> </service> </beans> |
<serviceClass>标签中定义的是接口类的完整包名,<implementationClass>则是对应实现类的完成包名;配置成之前设计的接口地址即可。
接下来就是开启服务,测试下webserivice能否正常访问了。
本机访问地址如下:http://localhost:2000/XfireDemo/services/xfireService?wsdl
出现以下页面,证明接口访问正常。
红色区域部分就是之前定义的两个接口,这里我们写一个测试类去调用下看是否正常;
package com.gzinfo.unlock; import java.net.MalformedURLException; import java.net.URL;
import org.codehaus.xfire.client.Client; public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub @SuppressWarnings("unused") Client client =null ; try { client = new Client(new URL("http://localhost:2000/XfireDemo/services/xfireService?wsdl")); Object[] results=client.invoke("example", new Object[] {"com.gzinfo.unlock"}) ; Object[] str=client.invoke("StrCompare", new Object[] {null,"UNLOCK"}) ; System.out.println(results[0].toString()); System.out.println(str[0].toString()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) {, // TODO Auto-generated catch block e.printStackTrace(); } } } |
运行结果: