Axis+webservice教程
- 格式:doc
- 大小:185.00 KB
- 文档页数:24
A XIS2之WEBSERVICE新手超详细教程---------------尚明Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。
Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON 等技术,本教程是主要阐述如何构建一个基本的Axis2 webservice应用,里面的许多环节高手可直接略过,本教程完全针对新手。
一、环境安装安装myeclipse下载地址::///file/4238159/48030981-6b56-40a4-a93b-8f424ee4f33a安装mysql下载地址::///file/4238159/de64cf2f-4217-4e11-bb98-8e6c5dd24155安装mysql-workbench(mysql可视化工具)下载地址::///file/4238159/becf913f-56a6-4d68-b248-134113b73535安装tomcat下载地址::///file/4238159/ec6a2250-99ff-464e-a978-be184c96e4e7下载Axis2服务包下载地址::///file/4238159/bb3db6e3-2f7d-4343-b472-c1fa714dba95下载Axis2开发插件包下载地址::///file/4238159/aa39505f-079b-43be-9479-15a2d3e98cbb安装jdk下载地址::///file/4238159/7ba342f9-277f-4b9c-b5e7-b0c5b7dfc151二、环境配置1)Java环境配置a)设置JAVA_HOME图1.图2设置JAVA_HOME=D:\Program Files\Java\jdk1.6.0_10* D:\Program Files\Java\jdk1.6.0_10为笔者本机的JDK安装目录,请开发者根据实际安装路径来填写,注意环境变量最后面不能加分号,D:\Program Files\Java\jdk1.6.0_10;这么写是错误的。
Axis2.x WebService上次介绍了axis1.x的用法,这次继续上次的,将叙述axis2的用法。
Axis1.x在线博文:/hoojo/archive/2010/12/20/1911349.html一、准备工作1、开发准备首先需要下载axis2的相关jar包,到axis的官方网站即可获得开发的依赖包。
下载地址:/axis2/java/core/download.cgi现在最高的版本是1.5.4的然后你需要下载官方提供的axis的eclipse插件工具,可以帮助我们打包(aar)及其生产客户端调用代码。
下载页面:/axis2/java/core/tools/index.htmlService Archive Wizard - Eclipse Plug-inCode Generator Wizard - Eclipse Plug-in2、安装eclipse插件如果你的eclipse插件安装成功后,会看到如下效果:3、分析axis2-bin文件目录结构下载下来的axis2的依赖库,其中有一个axis2-1.5.3-bin.zip的库文件,目录结构如下:bin文件夹是axis2的常用工具,其中有将wsdl文件转换成客户端调用的wsdl2java工具及将java转换成wsdl文件的工具conf是axis2的配置文件lib运行所要的依赖库repository是发布过的axis服务和文件sample是示例webapp是web文件和jsp页面等4、我们需要将下载下来的axis2-1.5.3-war.zip中的axis2.war这个文件放在我们的tomcat目录下,启动tomcat就会把war文件转成一个可以跑起来的axis2的项目。
Tomcat启动后,在浏览器中输入:http://localhost:8080/axis2/你可以看到二、Axis2的简单WebService示例注意,上面的HelloWorldService是没有package的。
Axis2 教程文章分类:Java编程Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。
Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。
这些都将在后面的系列教程中讲解。
在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java和C#调用这个WebService。
一、Axis2的下载和安装读者可以从如下的网址下载Axis2的最新版本:/axis2/在本文使用了目前Axis2的最新版本1.4.1。
读者可以下载如下两个zip包:axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip其中axis2-1.4.1-bin.zip文件中包含了Axis2中所有的jar文件,axis2-1.4.1-war.zip文件用于将WebService发布到Web容器中。
将axis2-1.4.1-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>\webapps目录中(本文使用的Tomcat的版本是6.x),并启动Tomcat。
在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/如果在浏览器中显示出如图1所示的页面,则表示Axis2安装成功。
图1二、编写和发布WebService对于用Java实现的服务程序给人的印象就是需要进行大量的配置,不过这一点在Axis2中将被终结。
在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
其中POJO中所有的public方法将被发布成WebService方法。
下面我们来实现一个简单的POJO,代码如下:public class SimpleService{public String getGreeting(String name){return "你好 " + name;}public int getPrice(){return new java.util.Random().nextInt(1000);}}在SimpleService类中有两个方法,由于这两个方法都是public方法,因此,它们都将作为WebService方法被发布。
利用AXIS开发Webservice(一) ——如何发布自己的webservice先介绍下本人开发环境吧。
JDK 1.4.2 + Myeclipse (实在经不起诱惑,尝尝鲜)+ Tomcat + AXIS 。
AXIS 包可以在找到。
假设所有的环境你已经搭好,并且AXIS包也已经下好了。
OK,Here we go~解压这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到%TOMCA T_HOME%\webapps目录下,之后拷贝、、到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。
启动tomcat,访问如果访问成功,恭喜你!基本的配置你已经做完了。
PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,J2EE 库里就能找的到。
现在来说一下最关键的Webservice的发布。
AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。
即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。
这里也将会以定制发布为重点来介绍。
1.即时发布JWS (Java Web Service) Files - Instant Deployment即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是java web service的缩写)拷贝到%TOMCAT_HOME%\webapps\axis目录下即完成了所有的发布工作。
AXIS的编译引擎会处理接下来的所有事情。
下面是一段示例代码:java 代码public class HelloAXIS {public String Hello(String name){return "AXIS say hello to " + name;}}把文件改成然后拷贝到%TOMCAT_HOME%\webapps\axis目录下,启动Tomcat之后访问如果能看到Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。
使用axis实现Web Service一、实践过程1、在MyEclipse中新建一个testaxis应用工程,导入11个jar包文件后刷新testaxis应用工程,然后部署testaxis应用工程到Tomcat服务器中,截图如下:2、配置环境变量的信息CATALINA_HOME= C:\Tomcat_5_0AXIS_HOME= %CATALINA_HOME%\webapps\testaxis\WEB-INFAXIS_LIB=%AXIS_HOME%\libAXISCLASSPATH=%AXIS_LIB%\activation.jar;%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-disc overy-;%AXIS_LIB%\commons-logging-;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\log4j-;%AXIS_LI B%\mail.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\wsdl4j-;%AXIS_LIB%\xercesImpl.jar;%AXIS_ LIB%\xml-apis.jar3、确认testaxis应用的lib中包括上述的jar文件,包括文件名必须一样。
4、我要发布的服务是UserManage,待发布的java文件是UserManageInter.java和UserManageSoapBindingImpl.java,发布的方法是addPerson,JA V A代码如下:程序代码1:UserManageInter.javapackage ;import ;import ;public interface UserManageInter extends Remote {public void addUser(UserBean userBean) throws RemoteException;}程序代码2:UserManageSoapBindingImpl.javapackage ;import ;public class UserManageSoapBindingImpl implements UserManageInter{public void addUser( userBean) throws { return;}}//不用加处理代码程序代码3:UserBean.javapackage ;public class UserBean {private String ID;private String name;private String address;public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getID() {return ID;}public void setID(String id) {ID = id;}public String getName() {return name;}public void setName(String name) { = name;}}5、修改testaxis应用的web.xml文件,增加相关内容<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "/web-app_2_3.dtd"><web-app><display-name>Apache-Axis</display-name><listener><listener-class></listener-class></listener><servlet><servlet-name>AxisServlet</servlet-name><display-name>Apache-Axis Servlet</display-name><servlet-class></servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><display-name>Axis Admin Servlet</display-name><servlet-class></servlet-class><load-on-startup>100</load-on-startup></servlet><servlet><servlet-name>SOAPMonitorService</servlet-name><display-name>SOAPMonitorService</display-name><servlet-class></servlet-class><init-param><param-name>SOAPMonitorPort</param-name><param-value>5001</param-value></init-param><load-on-startup>100</load-on-startup></servlet><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping><servlet-mapping><servlet-name>SOAPMonitorService</servlet-name><url-pattern>/SOAPMonitor</url-pattern></servlet-mapping><!-- uncomment this if you want the admin servlet --><servlet-mapping><servlet-name>AdminServlet</servlet-name><url-pattern>/servlet/AdminServlet</url-pattern></servlet-mapping><session-config><!-- Default to 5 minute session timeouts --><session-timeout>5</session-timeout></session-config><!-- currently the W3C havent settled on a media type for WSDL;/2003/WD-wsdl12-/#ietf-draftfor now we go with the basic 'it's XML' response --><mime-mapping><extension>wsdl</extension><mime-type>text/xml</mime-type></mime-mapping><mime-mapping><extension>xsd</extension><mime-type>text/xml</mime-type></mime-mapping></web-app>6、重启应用,访问,应该可以看到目前系统所提供SOAP服务的列表,应该只有两个,都是自带的,(AdminService和Version),如图:7、根据deploy.wsdd 生成server-config.wsdd。
一、准备工作1.下载axis2相关jar包目前最新版本为 1.6.2;将axis2-1.6.2-bin.rar,axis2-1.6.2-war.zip一并下载下来,下载地址:/axis2/java/core/download.cgi2.下载axis2插件:axis2-eclipse-codegen-plugin-1.6.2.zip、axis2-eclipse-serv ice-plugin-1.6.2.zip,下载地址:/axis2/jav a/core/tools/index.html3安装Eclipse插件,安装成功如下图:5.新建Web Project(axis2_Serv ice)将axis2-1.6.2-bin\lib下的jar拷贝到axis2_Serv ice\lib下,打开axis2-1.6.2-war.zip\axis2\WEB-INF下的conf、modules、services 解压到项目(axis2_Serv ice)WebRoot\WEB-INF下6.修改web.xml文件,添加如下代码:7.添加两个类:bean类和服务类Bean类:package .zjl.entity;import java.io.Serializable;public class User implements Serializable{/****/private static final long serialVersionUID = 1L;private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}}要发布的服务类:package .zjl.service;import er;public class UserService {public User getUser(User user) {System.out.println("service:"+user.getId());System.out.println("service:"+user.getName());User po2 = new User();po2.setId(1);po2.setName("zjl");return po2;}}8.Axis2插件工具生成aar文件,发布WebService在项目上右击->new->other选择Axis2 Serv ice Archiv er,点击nextClass File Location选择工程路径下的classes文件,点击Next勾选Skip WSDL项,点击next这里没有jar文件,所以默认,点击Next勾选Generate the serv ice xml automatically项,点击NextServ ice Name 随便写记住就行,Class name包名点类名称点击Load会出现这个类下的所有方法名称,点击NextOutput location选择输出文件位置(具体位置根据具体而定),点击Finsh说明成功。
利用AXIS开发Webservice(一) --- 如何发布自己的webservice先介绍下本人开发环境吧。
JDK 1.4.2 + MyecHpse 6.0 (实在经不起诱惑,尝尝鲜)+ Tomcat5.0.28 + AXIS 1.4。
AXIS 1.4包可以在/axis/找到。
假设所有的环境你已经搭好,并且AXIS包也已经下好了。
OK, Herewego~MUaxis-bui-l_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到 %TOMCAT_HOME%¥webapps 目录下,之启拷贝activation.jar、mail.jar、tools.jar?)J%TOMCAT_HOME%¥webapps¥axis¥WEB-INF¥lib 目录下。
启动tomcat,访问littp://localliost:8080/axis/happyaxis.jsp如果访问成功,恭喜你!基本的配置你已经做完了。
PS;此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包, J2EE 1.4库里就能找的亂现在来说一下最关键的Webseivice的发布。
AXIS提供了两种发布方式,一种是即时发布(Instant Deployment) >另外一种是定制发布(Custom Deployment)。
即时发布提供了一种非常简单的webseivice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。
这里也将会以定制发布为重点来介绍。
1 .即时发布 JWS (Java Web Service) Files ■ Instant Deployment即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件), 然后把其后缀名改成jws (也就是java web service的缩写)拷贝到%TOMCAT_HOME%¥webapps¥axis目录下即完成了所有的发布工作。
基于Axis的WebService测试,开发,部署带抓图的word文档在:下面是从word里保存出来的文字:1 WebService测试不编写代码的情况下,对webservice进行测试,编写代码进行测试的方法.1.1 使用xmlspy测试接口测试webservice接口地址为:在xmlspy中的测试步骤:1. 启动XmlSpy,主菜单–>SOAP –> Create new SOAP request.2. 选择wsdl文件或者提供wsdl的网址:3. 选择要测试的方法4. 填写调用参数5. 发送请求6. 查看服务端返回的结果7. 由于wsdl描述的webservice入口和我们要连接的服务器不一定是同一个地址,因此还可以改变连接参数8. 因此参考:这种方式的优点是:门槛低,只要会填参数就可以测试webservice。
缺点是:xmlspy不是免费的,xmlspy文件超大,携带不方便。
无法查看http header.1.2 用tcpmon测试捕获SOAP数据包工具来源,下载地址:优点,文件小巧,不只是测试webserice可以用,测试其它http 接口也很方便。
缺点,没法设置contenttype,所以会有乱码。
1.3 用xmlhttp发送SOAP数据包优点,简单的html可以存放在各地,可以在预先准备好SAOP数据的情况下,将该测试用例发给工程人员在现场进行测试。
缺点,soap数据要靠自己组装。
2 WebService开发2.1 客户端代码开发2.1.1 Wsdl2java命令方式2.1.1.1 预备wsdl2java.batwsdl2java.bat的内容为:%JAVA_HOME%/bin/java.exe -classpath “./axis-ant.jar;./axis.jar;./commons-discovery-0.2.jar;./commons-logging-1.0.4.jar;./jaxrpc.jar;./log4j-1.2.8.jar;./saaj.jar;./wsdl4j-1.5.1.jar” org.apache.axis.wsdl.WSDL2Java -v -n -O -1 -D -W -t -a -o E:\mywork\wsdl2javatest\src(没有–s –S两个选项, -s用来生成服务端代码,使用-s后, -t无效).-o是原代码输出的地方。
AXIS框架搭建webservice简易教程1.1 Axis介绍Axis(A pache e X tendsible I nteraction S ystem 的缩写) 是一款开源的WebService运行引擎,它是SOAP协议的一个实现,其本身来源于Apache的另一个项目Apache SOAP.Axis分为1.x和2.x两个系列1.2 Axis 安装1) 下载Axis---axis-bin-1_4.zip---/dyn/closer.cgi/ws/axis/1_4axis-bin-1_4.zip目录内容docs:说明文档lib: Axis用到的所有jar包samples: 示例代码webapps: Axis的web应用程序xmls:说明文档2) 解压axis-bin-1_4.zip,将其中的webapps下的axis 复制到tomcat的webapps目录下,本文介绍使用的服务器为tomcat6.03) 检测Axis是否安装成功,在浏览器中输入:http://localhost:8080/axis,如果页面显示如下图说明安装成功4) 检查Axis是否缺少组件,点击页页上的Validation 链接,跳转后出现如下页面,看页面中的needed components 必须安装的列表中是否有链接,如果有链接则是缺少的组件,这个地方的组件是必须安装的,Optional components是可选组件,可装可不装,安装缺少的组件只要点击页面上的链接,到跳转到的网页上下载其发布包就可以了,下载后将其压缩包内的Action.jar,mail.jar,xmlsec-xxx.jar,xalan.jar放到axis的lib目录下即可,安装完所有的组件如下面第二张图致此安装准备工作就完成了,接下来就可以使用Axis 进行WebService 的开发了1.3 Axis 开发WebService1.3.1 Axis 的发布方式1) 即时发布(Instant Deployment),jws 文件形式的2) 定制发布(Custom Deployment),wsdd 形式的1.3.2 即时发布(Instant Deployment)即时发布操作比较简单,编写好java 类后,将其后缀名改为.jws ,然后复制到Axis 的目录中就发布完成了 比如有个HelloService.java 的类文件,首先将其改为HelloService.jws,然后把它放到Axis 的根目录中,例如:E:\apache-tomcat-6.0.20\webapps\axis\HelloService.jws,这就是发布时的完整路径,盘符和tomcat 的路径根据自 己的来设置就可以了注:使用jws 发布所编写的类不能打包代码示例:服务端://package com.service; //请不要写类似的代码,否则将发布失败/*** 使用jws 方式发布WebService* @author Administrator**/public class TestService {/*** 加法运算* @param x* @param y* @return结果*/public String add(int x,int y) {return x+" + "+y+" = "+(x+y);}/*** 问候语* @param name* @return*/public String sayHello(String name) {return"你好: "+name;}}把TestService类文件复制到%TOMCAT_HOME%webapps/axis/目录下,启动tomcat服务器,打开浏览器输入地址http://localhost:8080/axis/TestService.jws,如果出现Click to see the WSDL 的链接说明此WebService 发成功,如下图点击链接会出现一个xml格式的内容,接下来编写客户端客户端:package com.client;import java.rmi.RemoteException;import space.QName;import javax.xml.rpc.ServiceException;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class HelloClient {/*** @param args*/public static void main(String[] args) {/*** 访问webservice的url地址即webservice的命名空间* 组成:Axis的访问地址+发布的类名.jws**/String url = "http://localhost:8080/axis/TestService.jws";Service s = new Service(); //创建服务对象try {/*** 从服务对象中获取客户端对象,返回的是javax.xml.rpc.Call实例* 我们接收的是org.apache.axis.client.Call* 而org.apache.axis.client.Call是javax.xml.rpc.Call的一个子类* 所以要向下竖形*/Call call = (Call) s.createCall();call.setTargetEndpointAddress(url);//设置连接点/*** 设置要调用的方法* setOperationName的参数是space.QName实例* 创建space.QName实例,第一个参数是webservice的url* 第二个对数是你调用的webservice方法名*/call.setOperationName(new QName(url,"sayHello"));/*** 利用java的返射机制进行方法调用* invoke方法有不同参数的,下面的是代表传递给webservice方法的参数,* 如果参数为空传new Object[]{},不能传null,因为参数是一个object数组* 输出:你好:小王*/System.out.println(call.invoke(new Object[]{"小王"}));/*** 相当于setOperationName+invoke* 输出:2 + 3 = 5*/System.out.println(call.invoke(new QName(url,"add"), new Object[]{2,3}));/*** 直接使用命名空间+调用的方法名+参数* * 输出:3 + 4 = 7*/System.out.println(call.invoke(url, "add", new Object[]{3,4}));//就介绍这几种,其它如果用到自己研究下吧} catch (ServiceException e) {e.printStackTrace();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}在实际工作中,我们所写的类不带包的很少很少,如果有包则此种方法就无能为力了,只能用定制发布1.3.3 定制发布(Custom Deployment) ------WSDD定制发布需要编写一个WSDD(Web Service Deployment Descriptor),是一个xml文件,主要用来描述发布信息WSDD文件内容:<?xml version="1.0" encoding="UTF-8"?><!-- 这段基本上是固定的,定义解析wsdd的命名空间--><deployment xmlns=/axis/wsdd/ xmlns:java="/axis/wsdd/providers/java"> <!—name发布的webservice名,provider是服务类型:RPC, Document,Wrapped,Message--><service name="TestService" provider="java:RPC" ><!-- name="className"固定参数,value="发布的webservice类" --><parameter name="className" value="com.service.TestService"/><!-- name="allowedMethods"固定参数,value="发布的方法*代表所有方法,分别发布每个方法之间用空格分开"--><parameter name="allowedMethods" value="*"/><!-- name="scope"固定参数,value="类的作用域" --><parameter name="scope" value="request"/></service></deployment>编写完后将其复制到axis的WEB-INF目录下,%TOMECAT_HOME%webapps/axis/WEB-INF/服务端:package com.service; //定制方式发布可以打包/*** 使用wsdd方式发布WebService* @author Administrator**/public class TestService {/*** 加法运算* @param x* @param y* @return结果*/public String add(int x,int y) {return x+" + "+y+" = "+(x+y);}/*** 问候语* @param name* @return*/public String sayHello(String name) {return"你好: "+name;}}这个服务端类与jws的服务端类内容是一样的,只是这个打包了,将TestService类编译生成其.class文件,把类的整个包复制Axis的class目录下,TestService复制后的路径是:%TOMCAT_HOME%webapps/axis/WEB-INF/class/com/service/TestService.class使用axis提供的客户端布署工具进行发布操作:打开cmd->进入到axis的WEB-INF目录%TOMCAT_HOME%webapps/axis/WEB-INF进入目录后输入:java –Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd回车客户端:调用代码与jws 方式基本一样,只是url不同,请注意观察package com.client;import java.rmi.RemoteException;import space.QName;import javax.xml.rpc.ServiceException;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class HelloClient {/*** @param args*/public static void main(String[] args) {/*** 访问webservice的url地址即webservice的命名空间* 组成:Axis的访问地址+services+发布的webservice名**/String url = "http://localhost:8080/axis/services/TestService";Service s = new Service(); //创建服务对象try {/*** 从服务对象中获取客户端对象,返回的是javax.xml.rpc.Call实例* 我们接收的是org.apache.axis.client.Call* 而org.apache.axis.client.Call是javax.xml.rpc.Call的一个子类* 所以要向下竖形*/Call call = (Call) s.createCall();call.setTargetEndpointAddress(url);//设置连接点/*** 设置要调用的方法* setOperationName的参数是space.QName实例* 创建space.QName实例,第一个参数是webservice的url* 第二个对数是你调用的webservice方法名*/call.setOperationName(new QName(url,"sayHello"));/*** 利用java的返射机制进行方法调用* invoke方法有不同参数的,下面的是代表传递给webservice方法的参数,* 如果参数为空传new Object[]{},不能传null,因为参数是一个object数组*/System.out.println(call.invoke(new Object[]{"小王"}));/*** 相当于setOperationName+invoke*/System.out.println(call.invoke(new QName(url,"add"), new Object[]{2,3}));/*** 直接使用命名空间+调用的方法名+参数*/System.out.println(call.invoke(url, "add", new Object[]{3,4}));//就介绍这几种,其它如果用到自己研究下吧} catch (ServiceException e) {e.printStackTrace();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}1.3.4 取消发布的WebService取消已发布的webservice,编写wsdd文件,undeploy.wsdd文件内容:<undeployment xmlns="/axis/wsdd/">固定的<service name="TestService"/>要取消的webservice名</undeployment>打开cmd->进入到axis的WEB-INF目录%TOMCAT_HOME%webapps/axis/WEB-INF进入目录后输入:java –Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd 回车取消发布与发布只是wsdd文件名不同,使用的命令是一样的至此使用axis手工编写和发布webservice就结束了,也可以使用eclipse生成wsdd文件,然后将生成的deploy.wsdd,server-config.wsdd文件复制到axis的WEB-INF目录下,%TOMECAT_HOME%webapps/axis/WEB-INF/目录下,在将.class文件放到axis的classes目录下即可1.4 使用Eclipse生成WSDD文件1.5 使用Wsdl2Java 生成客户端类文件Axis2: wsdl2java 参数注解WSDL2Java.batjava -Djava.ext.dirs=./lib org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true -p com.hello http://localhost:8080/Webservice/HelloWorldService?wsdlpausewsdl2java 用于根据WSDL生成相应的服务端和客户端代码的生成工具。
部署Axis1.Apache Axis可以从[url]/axis/[/url]下载,可用版本是1.4。
2.安装Axis的过程3.解压Axis到任意目录下;4.拷贝Axis目录下的webapps/axis目录到%TOMCA T_HOME%/webapps下;为了便于编译和测试程序,注意路径的文件名与目录存在的一致,添加环境变量:AXIS_HOME Axis的解压目录AXIS_LIB %AXIS_HOME%/libAXISCLASSPA TH %AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery-0.2.jar;%AXIS_ LIB%\commons-logging-1.0.4.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB %\log4j-1.2.8.jar;%AXIS_LIB%\axis-ant.jar;%AXIS_LIB%\wsdl4j-1.5.1.jar5.把编译好的class拷贝到axis的class目录下。
(如:D:\tomcat6\webapps\axis\WEB-INF\classes)6.启动tomcat,使用wsdd.bat 运行deploy.wsdd生成服务的配置文件server-config.wsdd,部署webservice时用到,一般用一次。
生成后的server-config.wsdd在tomcat的D:\Tomcat\webapps\axis\WEB-INF目录下。
7.完成上述工作后,启动Tomcat,并用IE打开:[url]http://localhost:8080/axis/[/url],点击其中的V alidation、List两个链接,如果没有报告任何错误,则说明Axis安装成功。
关于Apache Axis安装的更多信息可以参考官方文档:[url]/axis/java/install.pdf[/url]。
一:服务器端:先简短的说一下Web Service的概念,简略的总结一下:所谓Web Service 就是客户端以标准的SOAP消息将服务请求发给服务提供者,不论服务提供者用什么样的技术,Java、EJB、或者.NET执行相应的程序得到结果,然后将结果以SOAP消息返回给服务请求者。
下面以Axis为例,创建一个简单的Web Service。
首先到上去下载最新的axis版本。
最新版本是的。
下载之后观察其目录,lib下就是所要用到的所有jar包了。
这里少2个jar包,分别是和,需要单独下载。
好了,现在我们创建一个Web Service项目,命名为webservice_begin。
首先把lib目录下的所有jar包拷贝到WEB-INF的lib目录下。
ok,现在我们创建接口和实现类。
代码如下Java代码1.package server;2.3.public interface Hello {4.5.public String getHello(String name);6.7.}Java代码1.package server;2.3.public class HelloService implements Hello {4.5.public String getHello(String name) {6.return "hello, " + name;7.}8.}接着我们修改下文件。
修改文件的目的是为创建一个Axis的Servlet。
Axis Servlet最核心的实现类为,然后定义一个Servlet的请求路径为services/*,客户端就可以通过这个路径发布SOAP的请求消息了,下面是修改后的文件Java代码1.<xml version="" encoding="UTF-8">2.<web-app xmlns="" xmlns:xsi="" version="" xsi:schemaLocation=" ">3.4.<servlet>5.<servlet-name>AxisServlet</servlet-name>6.<servlet-class>7.</servlet>8.9.<servlet-mapping>10. <servlet-name>AxisServlet</servlet-name>11. <url-pattern>/servlet/AxisServlet</url-pattern>12. </servlet-mapping>13.14. <servlet-mapping>15. <servlet-name>AxisServlet</servlet-name>16. <url-pattern>*.jws</url-pattern>17. </servlet-mapping>18.19. <servlet-mapping>20. <servlet-name>AxisServlet</servlet-name>21. <url-pattern>/services/*</url-pattern>22. </servlet-mapping>23.</web-app>接下来,要配置wsdd文件。
如何用Axis2 1.5开发WebService服务目录简要概述Axis2部分优点开发环境文档提纲详述注意事项简要概述WebService 是一种新的web应用程序分支。
Apache Axis是WebService开发平台之一,其核心是一个SOAP处理器,用于开发客户端、服务端等各种应用。
Axis2部分优点:所占用的内存要远小于Axis1所占用的内存。
支持的传输协议:HTTP、SMTP、TCP。
Axis支持三种web service的部署和开发,分别为:1、Dynamic Invocation Interface (DII)2、Dynamic Proxy方式3、Stubs方式本文档主要介绍如何利用Axis2开发Web服务以及如何利用Axis2提供的客户端API进行Web服务的调用。
开发环境MyEclipse 5.5.1 GA、Tomcat6.0(端口8088)、JDK1.5、Axis2文档提纲(即:开发步骤)1、下载war包(可作为部署用的Web工程)、axis2的2进制的包(内有些小samples)及相关lib包。
2、部署axis2.war.至tomcat(可直接部署aar文件到TOMCAT_HOME\webapps\axis2\WEB-INF\services)。
3、安装eclipse插件axis2-eclipse-codegen-wizard.zip、axis2-eclipse-service-archiver-wizard.zip4、利用axis2来发布一个web service 的服务(即生成wsdl文件)。
a)aar文件方式b)配置方式5、客户端访问web服务a)生成stub client访问web服务(用eclipse的axis2的插件来生成stub代码(2个类:**Stub、**CallbackHandler)。
b)request SOAP见文件目录samples\soap下的实例.(前提:发布服务类HelloWorldService 得到wsdl文件)c)RPCServiceClient见文件目录samples\rpcserviceclient下的实例.(前提需要得到wsdl文件)d)其他详述第3步:①【axis2 data】目录中Axis-Plugin-Dir文件夹拷至*\MyEclipse 5.5.1 GA\目录.②Copy axis-eclipse-plugin.link文件至*\MyEclipse 5.5.1 GA\eclipse\links目录.③打开eclipse鼠标焦点定位至Package Explorer试图右键—>New—>Other—看到如下图所示界面,至此插件安装完毕:第4步:A方式(此方式较简单,具体截图步骤略):①aar打包:1)jar cvf **.aar . 注意后面有一个点,演示时打包没成功就缺了这个点。
一、Axis安装 1、环境 J2SE SDK 1.5 or 1.6: 我使用 1.6 Servlet Container: 我使用的Tomcat 6.02、到 /Axis/网站下载Axis安装包3、先在eclipse下新建web project为WebServiceDemo.在Tomcat的配置xml 配置上:<Context path="/webservice"docBase="D:\workspace\WebServiceDemo\WebRoot"/>.解压下载的axis安装包,将webapps\axis下的lib文件夹和web.xml文件拷到工程对应目录4、启动tomcat,访问http://localhost/webservice检查安装是否成功,我的端口设置为80,页面index.html自动跳转后出错,是因为没把类拷入,先不管。
5、以上步骤执行成功,可以开发webservice例子了Axis支持三种web service的部署和开发,分别为:1、Dynamic Invocation Interface ( DII)2、Stubs方式3、Dynamic Proxy方式二、编写DII(Dynamic Invocation Interface )方式web服务1.新建包com.qdl.server,编写服务端程序SayHellopackage com.qdl.server;public class SayHello{public String getName(String name){return "hello "+name;}}2、将源码拷贝到WebRoot下,重命名为 SayHello.jws (注意不用拷上面的package ...行)3、访问连接http://localhost/webservice/SayHello.jws?wsdl,页面显示Axis 自动生成的wsdl,同时会在WEB-INF下创建jwsClasses文件夹,在此生成SayHello.class文件4、新建包com.qdl.client,编写访问服务的客户端 SayHelloClient.javaimport space.QName;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class SayHelloClient {public static void main(String[] args){//程序访问即时发布的服务try{//创建访问点String endpoint = "http://localhost/webservice/SayHello.jws";//创建serviceService service = new Service();Call call = null;//创建callcall = (Call) service.createCall();//设置操作名call.setOperationName(newQName("http://localhost/webservice/SayHello.jws","getName"));//设置访问点call.setTargetEndpointAddress(new .URL(endpoint));//调用服务,返回值String ret = (String) call.invoke(new Object[]{"zhangsan"});System.out.println("返回的信息是:" + ret);}catch (Exception ex){ex.printStackTrace();}}}三、编写Dynamic Proxy方式访问服务1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的SayHello2、新建包com.qdl.dao编写代理接口package com.qdl.dao;import java.rmi.Remote;public interface HelloClientInterface extends Remote {public String getName(String name) throws java.rmi.RemoteException; }3、编写并执行客户端程序TestHelloClient.javapackage com.qdl.client;import .URL;import space.QName;import javax.xml.rpc.ServiceFactory;import javax.xml.rpc.Service;import com.qdl.dao.HelloClientInterface;public class TestHelloClient {public static void main(String[] args) {try {String wsdlUrl ="http://localhost/webservice/SayHello.jws?wsdl";String nameSpaceUri ="http://localhost/webservice/SayHello.jws";//注意下面的serviceName和portName,//http://localhost/webservice/SayHello.jws?wsdl页面的xml最下端有String serviceName = "SayHelloService";String portName = "SayHello";ServiceFactory serviceFactory = ServiceFactory.newInstance();Service afService = serviceFactory.createService(newURL(wsdlUrl), new QName(nameSpaceUri, serviceName));HelloClientInterface proxy = (HelloClientInterface)afService.getPort(new QName(nameSpaceUri, portName), HelloClientInterface.class);System.out.println("返回信息是:" + proxy.getName("zhangsan"));} catch (Exception ex) {ex.printStackTrace();}}}四、编写wsdd发布web服务,编写stub client访问web服务(定制发布服务)1、编写服务端程序SayHellopackage com.qdl.server;public class SayHello{public String getName(String name){return "hello "+name;}}2.编写LogHandler.java(好像这个并没什么用)import java.util.Date;import org.apache.axis.AxisFault;import org.apache.axis.Handler;import org.apache.axis.MessageContext;import org.apache.axis.handlers.BasicHandler;public class LogHandler extends BasicHandler {public void invoke(MessageContext msgContext) throws AxisFault { try {Handler serviceHandler = msgContext.getService();Integer numAccesses = (Integer)serviceHandler.getOption("accesses");if (numAccesses == null) {numAccesses = new Integer(0);}numAccesses = new Integer(numAccesses.intValue() + 1);Date date = new Date();String result = date + ": service " + msgContext.getTargetService() + " accessed " + numAccesses + " time(s).";serviceHandler.setOption("accesses", numAccesses);System.out.println(result);} catch (Exception e) {throw AxisFault.makeFault(e);}}}3、先在WEB-INF目录下编写server-config.wsdd文件:文件名server-config.wsdd:<?xml version="1.0" encoding="UTF-8"?><deployment xmlns="/axis/wsdd/"xmlns:java="/axis/wsdd/pr oviders/java"><globalConfiguration><parameter name="adminPassword" value="admin"/><parameter name="attachments.Directory" value="./attachments"/><parameter name="attachments.implementation"value="org.apache.axis.attachments.Attachmen tsImpl"/><parameter name="sendXsiTypes" value="true"/><parameter name="sendMultiRefs" value="true"/><parameter name="sendXMLDeclaration" value="true"/><parameter name="axis.sendMinimizedElements" value="true"/><requestFlow><handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="session"/></handler><handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="request"/><parameter name="extension" value=".jwr"/></handler></requestFlow></globalConfiguration><handler name="LocalResponder"type="java:org.apache.axis.transport.local.LocalRe sponder"/><handler name="URLMapper"type="java:org.apache.axis.handlers.http.URLMapper "/><handler name="Authenticate"type="java:org.apache.axis.handlers.SimpleAuthenti cationHandler"/><service name="AdminService" provider="java:MSG"><parameter name="allowedMethods" value="AdminService"/><parameter name="enableRemoteAdmin" value="false"/><parameter name="className" value="org.apache.axis.utils.Admin"/><namespace>/axis/wsdd/</namespace></service><service name="Version" provider="java:RPC"><parameter name="allowedMethods" value="getVersion"/><parameter name="className" value="org.apache.axis.Version"/></service><transport name="http"><requestFlow><handler type="URLMapper"/><handlertype="java:org.apache.axis.handlers.http.HTTPAuthHandler"/></requestFlow></transport><transport name="local"><responseFlow><handler type="LocalResponder"/></responseFlow></transport></deployment>然后在WEB-INF下再编写deploy.wsdd文件:文件名deploy.wsdd<deployment xmlns="/axis/wsdd/"xmlns:java="/axis/wsdd/providers/java"><service name="MyService" provider="java:RPC"><parameter name="className" value="com.qdl.server.SayHello"/> <parameter name="allowedMethods" value="*"/></service></deployment>4、发布服务:java org.apache.axis.client.AdminClient -lhttp://地址:端口/context模块/services/AdminService deploy.wsdd这一命令主要是把deploy.wsdd的service配置到server-config.wsdd中,同时更新内存注意:上面命令的前提是要把axis的jar包配置到系统classpath环境变量中,否则报找不到类的错误5、生成client stub文件a:方式1(本人用得此种方式)将SayHello.java拷贝到WebRoot下(前面已经拷贝),重命名为SayHello.jws,执行下面的命令生存client stubjava org.apache.axis.wsdl.WSDL2Java -p com.qdl.clienthttp://localhost/webservice/SayHello.jws?wsdlb:方式2执行如下命令生成SayHello.wsdljava org.apache.axis.wsdl.Java2WSDL -oSayHello.wsdl-lhttp://localhost/webservice/SayHello -nsayhellocom.qdl.server.SayHello执行如下命令生成client stubjava org.apache.axis.wsdl.WSDL2Java SayHello.wsdl -p com.qdl.client此时在文件夹WEB-INF下com.qdl.client下生成的stub client文件列表为:1.SayHello.java2.SayHelloService.java。
一、准备工作1.下载axis2相关jar包目前最新版本为 1.6.2;将axis2-1.6.2-bin.rar,axis2-1.6.2-war.zip一并下载下来,下载地址:/axis2/java/core/download.cgi2.下载axis2插件:axis2-eclipse-codegen-plugin-1.6.2.zip、axis2-eclipse-serv ice-plugin-1.6.2.zip,下载地址:/axis2/jav a/core/tools/index.html3安装Eclipse插件,安装成功如下图:5.新建Web Project(axis2_Serv ice)将axis2-1.6.2-bin\lib下的jar拷贝到axis2_Serv ice\lib下,打开axis2-1.6.2-war.zip\axis2\WEB-INF下的conf、modules、services 解压到项目(axis2_Serv ice)WebRoot\WEB-INF下6.修改web.xml文件,添加如下代码:7.添加两个类:bean类和服务类Bean类:package .zjl.entity;import java.io.Serializable;public class User implements Serializable{/****/private static final long serialVersionUID = 1L;private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}}要发布的服务类:package .zjl.service;import er;public class UserService {public User getUser(User user) {System.out.println("service:"+user.getId());System.out.println("service:"+user.getName());User po2 = new User();po2.setId(1);po2.setName("zjl");return po2;}}8.Axis2插件工具生成aar文件,发布WebService在项目上右击->new->other选择Axis2 Serv ice Archiv er,点击nextClass File Location选择工程路径下的classes文件,点击Next勾选Skip WSDL项,点击next这里没有jar文件,所以默认,点击Next勾选Generate the serv ice xml automatically项,点击NextServ ice Name 随便写记住就行,Class name包名点类名称点击Load会出现这个类下的所有方法名称,点击NextOutput location选择输出文件位置(具体位置根据具体而定),点击Finsh说明成功。
搭建WebService操作手册2010-10-25修订记录1.引言 (4)1.1 目的 (4)1.2 为什么要使用WebService (4)1.3 什么是WebService (4)1.4 WebService WSDL SOAP关系 (5)1.5 Web Service服务器工作流程 (5)1.6 Web Service客户端工作流程 (6)2.系统所需环境 (6)3.构建WebService服务器 (6)3.1 使用AXIS2构建WebService服务器 (6)3.1.1 POJO方式 (6)3.1.2 使用框架构建webservice (11)3.1.3 使用独立安装模式 (20)4. 构建WebService客户端 (21)4.1.1 使用插件创建WebService客户端 (21)1.引言1.1 目的本操作手册具体介绍了WebService的工作原理并详细描述了使用axis2构建WebService的流程,主要面向刚刚接触WebService的开发人员。
1.2 为什么要使用WebServiceWebService是一个新的概念,它并不是微软首先提出的,但是微软的dotnet战略让它最广泛的发挥它的潜能。
也许它流行的根本原因并不是微软,也许是因为带宽与存储量的飞速发展,但是dotnet战略确实起到了很大的作用,令它能够在更加广泛的开发平台上施展。
dotnet战略领导着微软前进,微软为了dotnet计划也花费了近300亿美元。
为什么?因为微软要它的理念、方式不但在单机软件,甚至在Internet上也被最广泛的认同。
WebService 最早被应用在Sun等对网络先知先觉的平台上,并且在苦苦的期待发展。
而J2EE是最早的成功开发WebService的平台,它的理念就是在网上最广泛的传播、使用,成为一种真正的服务。
当微软的dotnet计划即将实施的时候,微软也开始发掘WebService的潜力。
Axis1.x一、搭建简单的axis web服务1、在官方网站下载axis的工程(这个等下就有用的)和源码、jar包等,下载地址是:/apache-mirror//ws/axis/1_4/2、解压下载的工程或源码(两个中任意一个都可以),解压axis-bin-1.4可以看到大致目录是这样的:docs是文档、lib是jar包、sample是示例、xmls是当前工程所需的xml、webapps是当前工程的webroot目录;我们打开webapps目录就可以看到一个axis的文件夹,这个文件夹里面有WEB-INF文件夹和一些页面,将axis复制到你的tomcat的webapps目录下。
然后启动tomcat服务,访问http://localhost:8080/axis/,看到下面的解码就说明部署成功了:以后我们将和这个工程不离不弃,它将在我们的axis1.x的webService中发挥很大的作用!3、创建我们自己的web工程,这里我新建的AxisWebService;创建好工程后,将刚才解压的axis-bin中的lib的jar包copy到当前工程的lib中;axis-ant.jaraxis.jarcommons-discovery-0.2.jarcommons-logging-1.0.4.jarjaxrpc.jarlog4j-1.2.8.jarsaaj.jarwsdl4j-1.5.1.jaractivation-1.1.jarmail-1.4.jar创建webService类文件,代码如下:4、复制HelloWorldService.java到我们刚才复制的axis文件夹下即可;也就是tomcat 下的webapps下的axis下即可;注意:还有重要的一般就是要将这个java文件中的包名去掉,并且将这个文件重命名为HelloWorldService.jws;如果带包名的话,请求后编译的class将会在包路径下,这样我们在全球当前jws的时候就会出现找不到class,详细的你可以到发布在tomcat下的工程看看WEB-INF目录下的jwsClass就一目了然了。
服务端开发Axis环境的搭建Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范的开放源代码实现,它为java 应用服务器提供了标准的webservice能力。
1. 下载Axis并解压2. 加入所需lib将axis/webapps/axis/WEB-INF/lib/目录下的jar文件复制到自己的WEB-INF/lib目录下。
应包括以下jar文件:3. 修改web.xml在WEB-INF/web.xml文件里增加以下内容a) Servelet部分加入:<servlet><servlet-name>AxisServlet</servlet-name> <display-name>Apache-AxisServlet</display-name><servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class></servlet><servlet><servlet-name>AdminServlet</servlet-name><display-name>Axis Admin Servlet</display-name><servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class><load-on-startup>100</load-on-startup></servlet>b) servlet-mapping部分加入<servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/servlet/AxisServlet</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>*.jws</url-pattern></servlet-mapping><servlet-mapping><servlet-name>AxisServlet</servlet-name><url-pattern>/services/*</url-pattern></servlet-mapping>c) 还有listener<listener><listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class ></listener>d) 最后再加入mime设定<mime-mapping><extension>wsdl</extension><mime-type>text/xml</mime-type></mime-mapping><mime-mapping><extension>xsd</extension><mime-type>text/xml</mime-type></mime-mapping>4. 在WEB-INF下增加server-config.wsdd文件如果我们不使用jws(java文件后缀改为jws)文件而是使用class文件进行webservice服务端的部署,就需要在在WEB应用程序服务端的WEB-INF/目录下部署一个名字为server-config.wsdd的xml文件。
用Axis2开发Web Service及客户端在《使用Eclipse的Axis1.4插件开发Web Service及客户端》介绍的Axis是用的Axis1.x,而Axis2是改进版本,进行了重新的设计,应该是Axis的第二代,本文介绍Axis2的使用方法。
/axis2/是Axis2的主页,写这篇文章的时候最新版本是1.5,从/axis2/download/1_5/download.cgi下载axis2-1.5-bin.zip、axis2-1.5-war.zip。
axis2-1.5-war.zip是web发布版本,可以在网页上进行Web Service的动态部署,提供Web Service服务。
解压缩后把axis2.war放到tomcat的webapps下面,启动tomcat,在网页中输入http://localhost:8080/axis2(取决于tomcat的设置)就可以进行操作了。
这方面的资料很多,就不详细介绍了。
下面介绍使用Eclipse插件开发的方法,环境与《使用Eclipse的Axis1.4插件开发Web Service及客户端》的相同。
启动Eclipse后,首先设置Axis2的主目录,需要先解压缩axis2-1.5-bin.zip,然后把解压缩之后的路径填入Eclipse的Window|Preferences|Web Services|Axis2 Preferences的界面上,如下图所示:图1在Eclipse中设置Axis2的runtime建立一个简单的类:package demo.axis; public class User{public String sayHello(String userName){return "hello " + userName;}}把这个类发布为Web Service的步骤与《使用Eclipse 的Axis1.4插件开发Web Service及客户端》中的相同,只是要注意选择Axis2,生成之后的目录结构是:图2生成Web Service后的目录结构但生成之后的项目中缺少.jar文件,可以把%AXIS2-HOME%/lib下的所有文件复制到项目的WEB-INF/lib下面,部署到tomcat就可以运行了,在浏览器中输入http://localhost:8080/Axis2ServerDemo/services/User?wsd l就可以看到发布的Web Service的wsdl了。
利用AXIS开发Webservice(一) ——如何发布自己的webservice先介绍下本人开发环境吧。
JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜)+ Tomcat 5.0.28 + AXIS 1.4。
AXIS 1.4包可以在/axis/找到。
假设所有的环境你已经搭好,并且AXIS包也已经下好了。
OK,Here we go~解压axis-bin-1_4.zip这个包可以看到webapps目录,双击进入把里面的AXIS文件夹拷到%TOMCAT_HOME%\webapps目录下,之后拷贝activation.jar、mail.jar、tools.jar 到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目录下。
启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了。
PS:此处的%TOMCAT_HOME%指的是Tomcat的安装目录,至于那另外的三个jar包,J2EE 1.4库里就能找的到。
现在来说一下最关键的Webservice的发布。
AXIS提供了两种发布方式,一种是即时发布(Instant Deployment),另外一种是定制发布(Custom Deployment)。
即时发布提供了一种非常简单的webservice的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。
这里也将会以定制发布为重点来介绍。
1.即时发布JWS (Java Web Service) Files - Instant Deployment即时发布提供了一种非常简单发布方式,发布者只要有Java源代码(也就是.java文件),然后把其后缀名改成jws(也就是java web service的缩写)拷贝到%TOMCAT_HOME%\webapps\axis目录下即完成了所有的发布工作。
AXIS的编译引擎会处理接下来的所有事情。
下面是一段示例代码:java 代码public class HelloAXIS {public String Hello(String name){return "AXIS say hello to " + name;}}把HelloAXIS.java 文件改成HelloAXIS.jws 然后拷贝到%TOMCAT_HOME%\webapps\axis目录下,启动Tomcat之后访问http://localhost:8080/axis/HelloAXIS.jws 如果能看到Click to see the WSDL这个超链接就说明已经发布成功了,点击进去就可以看到这个Webservice的WSDL描述文件。
server端的发布已经完成了,接下来就是编写Client端测试代码了。
java 代码package com.chnic.test;import .URL;import space.QName;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class Test {public static void main(String[] args) throws Exception{String targetEendPoint = "http://localhost:8080/axis/HelloAXIS.jws";Service service = new Service();Call call = (Call) service.createCall();call.setOperationName(new QName(targetEendPoint, "Hello"));call.setTargetEndpointAddress(new URL(targetEendPoint));String result = (String) call.invoke(new Object[]{"Robert"});System.out.println(result);}}测试代码很简单,如果熟悉java反射机制的朋友不用两分钟就能看明白。
运行后客户端控制台出现AXIS say hello Robert。
测试成功。
果然很简单吧。
不过在这简单背后却是以牺牲灵活性为代价的。
假如你现在手里只有.class 或者一个jar包,jws就不再能满足你的需求了,最要命的就是即时发布不支持带包的类,这点AXIS的用户手册上写的也很明白。
Important: JWS web services are intended for simple web services. You cannot use packages in the pages, and as the code is compiled at run time you can not find out about errors until after deployment. Production quality web services should use Java classes with custom deployment.2.定制发布Custom Deployment - Introducing WSDD比起即时发布定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。
定制发布需要你自己编写一个WSDD(Web Service Deployment Descriptor)文件,这个东东类似与XML稍后会做出介绍。
废话不多说,我们来看代码:java 代码package com.chnic.webservice;public class HelloWorld {public HelloWorld(){}public String hello(String str){return "Hello " + str;}public int add(int a, int b){return a + b;}}一个带包的很简单的类,在eclipse下编译后按照包名拷到%TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目录下(axis工程名)。
以这个类为例,拷贝完之后这个HelloWorld.class的路径就是%TOMCAT_HOME%\webapps\axis\WEB-INF\classes\com\chnic\webservice。
PS:如果嫌这样太麻烦,可以另外建一个Java Web工程用myeclipse的发布工具发布到Tomcat之后,整体一次性拷贝到websericve的工程中。
接下来就需要编写发布文件deploy.wsdd。
到%TOMCAT_HOME%\webapps\axis\WEB-INF 目录下建立这个文件并在其中添加如下内容:xml 代码<deployment xmlns=/axis/wsdd/xmlns:java="/axis/wsdd/providers/java"><service name="HelloWorld" provider="java:RPC"><parameter name="className" value="com.chnic.webservice.HelloWorld"/><parameter name="allowedMethods" value="*"/></service></deployment>简单的介绍下各个节点的含义,"HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。
这里一共有有4种类型,分别是:RPC, Document, Wrapped 和Message。
有兴趣可以看下org.apache.axis.providers这个包和子包下面的类的API文档。
之后的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。
这里的配置告诉引擎可以调用所有的public方法,当然你也可以自己指定。
编写完配置发布文件之后,cmd打开windows的控制台,进入%TOMCAT_HOME%\webapps\axis\WEB-INF目录下键入如下命令java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd之后控制台返回Processing file deploy.wsdd 和Done processing 这两段话即说明发(此时会在同级目录生成一个server-config.wsdd文件)在这里的AdminClient是AXIS 布成功。
提供的一个客户端管理工具。
至于java.ext.dirs的含义可以去了解一下classloader和JVM类装载机制方面的知识,在这里就不多解释。
还有一点要注意的是在发布的时候Tomcat服务必须处于启动状态,否则就会抛出一堆无法连接的异常信息。
发布成功之后你可以通过访问http://localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。
客户端测试代码String targetEendPoint = "http://localhost:8080/axis/services/HelloWorld";Service service = new Service();Call call = (Call) service.createCall();call.setTargetEndpointAddress(new URL(targetEendPoint));call.setOperationName(new QName(targetEendPoint, "hello"));String result = (String) call.invoke(new Object[]{"Robert"});System.out.println(result);call.setOperationName(new QName(targetEendPoint, "add"));Integer res = (Integer) call.invoke(new Object[]{new Integer(1), new Integer(2)});System.out.println("The result is: " + res);运行测试代码,控制台显示Hello Robert 和The result is: 3 这两句话,说明发布成功。