java Webservice的方式有哪些?哪种方式更好?

webservice的应用越来越广泛。下面介绍几种在Java系统中开发webservice的方法,相当于做了一个记录。

1.Axis2

Axis是apache的下一个开源webservice开发组件,出现的更早,也更成熟。本文主要介绍Axis+eclipse开发Web服务。当然,Web服务的开发和发布可以不用eclipse,但是用eclipse会更方便。

(1)下载eclipse的Java EE版本。

(2)下载axis2。

(3)下载eclipse的axis2插件。

Axis2_Codegen_Wizard

Axis2 _服务_归档程序

建议使用1.3版本。

(4)eclipse安装axis2插件。

1)在任一目录下新建一个Axis2文件夹,在该文件夹下创建一个eclipse目录,在eclipse目录下创建一个plugins目录和一个features目录,例如:d:\ program software \ Eclipse-SVN \ axis 2 \ Eclipse;

2)对下载的axis2插件进行解压缩,并将解压缩后的文件放入新建的eclipse插件目录中;

3)在%eclipse_home%目录下新建一个links目录,在links目录下新建一个axis2.link文件,内容如下:path = d:\ program software \ eclipse-SVN \ axis 2;

4)重启eclipse,点击文件-新建-其他。如果您看到Axis2向导,这意味着插件安装成功。

(5)安装轴2。

(6)用eclipse新建一个web项目,创建一个普通的java类,至少包含一个方法。

(7)发布web服务

1)点击eclipse的文件-新建-其他,打开Axis2向导,选择Axis2服务归档器,然后选择下一步;

2)选择类文件位置,即类文件的存储路径。注意:只选择类目录,不包括包文件夹,然后选择Next

3)选择跳过WSDL,然后选择下一步。

4)从下一步开始,选择要包含在服务存档中的服务XML文件,并选中自动生成服务XML;

5)服务名——填写你的服务名,类名——填写类名,包括包名,然后点击加载,再点击完成,webservice发布成功;

6)然后转到% Tomcat _ home %/Web apps/axis 2/we b-INF/Services,查看是否有额外的。aar文件;

注意:以上方法是发布到axis2.war包,也可以复制生成的。aar文件到您的实际应用程序中。同时,您还可以使用eclipse的create webservice功能发布您的webservice,并选择axis2来生成您的webservice,这样webservice就会部署在您的应用程序中。

2.Apche CXF

CXF开发webservice也很方便简单,和spring的集成可以说是非常好的。举一个CXF开发webservice的例子。

1)在eclipse中新建一个web项目,导入依赖包,如下图所示:

2)编写一个接口,比如:

注意:CXF开发的webservice的接口中方法的参数必须是这样的,否则客户端调用时CXF服务器不会收到参数的值。name:参数名可选(建议写),targetNamespace: namespace必须填写,默认为包名的逆序,mode:参数类型,in表示输入。

3)编写实现类实现接口的方法;

4)集成spring,写一个bean文件,比如cxf-beans.xml,内容如下:

Cxf-beans.xml代码

& lt?xml版本="1.0 "编码="UTF-8 "?& gt

& ltimport resource = " class path:META-INF/cxf/cxf . XML "/& gt;

& ltimport resource = " class path:META-INF/cxf/cxf-extension-soap . XML "/& gt;

& ltimport resource = " class path:META-INF/cxf/cxf-servlet . XML "/& gt;

& ltjaxws:endpoint id = " Vote " implementor = " com . zcl . cxf . service . Vote impl " address = "/Vote "/& gt;

& lt/beans & gt;

这个文档比较好理解,就不解释了。

5)配置CXFServlet

在web.xml文件中配置CXFServlet,加载cxf-beans.xml文件,内容如下:

Web.xml代码

id="WebApp_ID" version="2.5 " >

& lt上下文参数& gt

& ltparam-name & gt;contextConfigLocation & lt/param-name & gt;

& lt参数值& gtwe b-INF/cxf-beans . XML & lt;/param-value & gt;

& lt/context-param & gt;

& lt听众& gt

& lt侦听器类& gtorg . spring framework . web . context . context loader listener & lt;/listener-class & gt;

& lt/listener & gt;

& ltservlet & gt

& ltservlet-name & gt;cxf & lt/servlet-name & gt;

& ltservlet-class & gt;org . Apache . cxf . transport . servlet . cxf servlet & lt;/servlet-class & gt;

& lt启动时加载& gt1 & lt;/load-on-startup & gt;

& lt/servlet & gt;

& ltservlet映射& gt

& ltservlet-name & gt;cxf & lt/servlet-name & gt;

& lturl模式& gt/services/* & lt;/URL-pattern & gt;

& lt/servlet-mapping & gt;

& lt/we B- app & gt;

将项目部署到中间件,比如tomcat,就可以访问webservice了。

3.JDK发展网络服务

1)如下编写一个Java类:

Jdkwebservice.java电码

包演示;

导入javax . jws . web param;

导入javax . jws . web service;

导入javax . XML . ws . endpoint;

@WebService

公共类JdkWebService {

返回“照做就是了,”+ value +“!”;

}

公共静态void main(String[] args) {

}

}

2)运行java类,可以在浏览器上访问webservice。

注意:在开发web项目时,这种方法不是很友好。我们可以写一个servlet类,在servlet类的初始化方法中发布一个webservice,这样我们的中间件服务器就会在webservice启动的时候帮我们自动启动。

4) xfire

开发web服务有很多框架,每个框架都有自己的优势。最近练习用xfire开发web服务。下面是一个开发web服务的小例子,希望对初学者有所帮助。

1.新建一个名为TestWebService的java web项目,将xfire相关的jar包添加到lib目录中,编写接口类和实现类。

Java代码

包com . lamp . service;

公共接口消息服务{

公共字符串getName(字符串名);

}

【java】查看plaincopyprint?

包com . lamp . service;

公共接口消息服务{

公共字符串getName(字符串名);

}

实现类

Java代码

包com . lamp . service . impl;

导入com . lamp . service . messageservice;

公共类MessageServiceImpl实现MessageService {

公共字符串getName(字符串名称){

返回“hello”+name+”,欢迎来到web service world”;

}

}

【java】查看plaincopyprint?

包com . lamp . service . impl;

导入com . lamp . service . messageservice;

公共类MessageServiceImpl实现MessageService {

公共字符串getName(字符串名称){

返回“hello”+name+”,欢迎来到web service world”;

}

}

在src目录下新建一个文件夹META-INF,然后在其下新建一个文件夹xfire,在xfire目录下新建一个配置文件services.xml。

Xml代码

& lt?xml版本="1.0 "编码="UTF-8 "?& gt

& lt服务& gt

& lt名称& gtMessageService & lt/name & gt;

& ltserviceClass & gtcom . lamp . service . messageservice & lt;/service class & gt;

& lt实现类& gtcom . lamp . service . impl . messageserviceimpl & lt;/implementation class & gt;

& lt/service & gt;

& lt/beans & gt;

[xml]查看plaincopyprint?

& lt?xml版本="1.0 "编码="UTF-8 "?& gt

& lt服务& gt

& lt名称& gtMessageService & lt/name & gt;

& ltserviceClass & gtcom . lamp . service . messageservice & lt;/service class & gt;

& lt实现类& gtcom . lamp . service . impl . messageserviceimpl & lt;/implementation class & gt;

& lt/service & gt;

& lt/beans & gt;

最后,在web.xml中配置xfire的servlet。

Xml代码

& ltservlet & gt

& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;

& ltservlet-class & gt;

& lt/servlet-class & gt;

& lt/servlet & gt;

& ltservlet映射& gt

& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;

& lturl模式& gt/servlet/XFireServlet/* & lt;/URL-pattern & gt;

& lt/servlet-mapping & gt;

& ltservlet映射& gt

& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;

& lturl模式& gt/services/* & lt;/URL-pattern & gt;

& lt/servlet-mapping & gt;

[xml]查看plaincopyprint?

& ltservlet & gt

& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;

& ltservlet-class & gt;

& lt/servlet-class & gt;

& lt/servlet & gt;

& ltservlet映射& gt

& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;

& lturl模式& gt/servlet/XFireServlet/* & lt;/URL-pattern & gt;

& lt/servlet-mapping & gt;

& ltservlet映射& gt

& ltservlet-name & gt;XFireServlet & lt/servlet-name & gt;

& lturl模式& gt/services/* & lt;/URL-pattern & gt;

& lt/servlet-mapping & gt;

所以服务器端开发完成,现在开始客户端开发。

创建一个新的java项目也会引入xfire相关的jar。我使用ant在客户机上生成代理对象,并在项目路径下创建一个新的build.xml。代码是

Xml代码

& lt?xml版本="1.0 "编码="UTF-8 "?& gt

& lt项目名称="WebService" basedir= ","default="gen-webservice " >

& lt属性file = " build.properties " & gt

& lt/property & gt;

& ltpath id="project-classpath " >

& lt文件集dir = " $ { lib.dir } " & gt

& ltinclude name="**/*。jar "/>;

& lt/fileset & gt;

& lt/path & gt;

& lttarget name="gen-webservice " >

& lttaskdef name = " wsgen " class name = " org . code Haus . xfire . gen . wsgentask " class pathref = " project-class path "/& gt;

& ltwsgen output directory = " $ { src . dir } "

wsdl = " $ { wsdl . dir } " package = " com . lamp . ws . client " overwrite = " true "/& gt;

& lt/target & gt;

& lt/project & gt;

[xml]查看plaincopyprint?

& lt?xml版本="1.0 "编码="UTF-8 "?& gt

& lt项目名称="WebService" basedir= ","default="gen-webservice " >

& lt属性file = " build.properties " & gt

& lt/property & gt;

& ltpath id="project-classpath " >

& lt文件集dir = " $ { lib.dir } " & gt

& ltinclude name="**/*。jar "/>;

& lt/fileset & gt;

& lt/path & gt;

& lttarget name="gen-webservice " >

& lttaskdef name = " wsgen " class name = " org . code Haus . xfire . gen . wsgentask " class pathref = " project-class path "/& gt;

& ltwsgen output directory = " $ { src . dir } "

wsdl = " $ { wsdl . dir } " package = " com . lamp . ws . client " overwrite = " true "/& gt;

& lt/target & gt;

& lt/project & gt;