axis2的初探

[/code]    闲扯axis2,axis2听说功能很强大,一直没有机会接触,由于变态的普元esb使用的wsdl都是需要axis2生成,不是axis2生成的他还不支持了。做的产品还是非常的demo,不过也是一直秉承普元的风格,在融合项目的过程中来改善产品的性能,这样也好我就有机会来看看axis2到底有多强大,对新规范的支持好像也是比较符合潮流的。下面就一个简单的helloworld例子来开启axis2之旅。
1. 准备工作:
这部分基本上和其他的axis1一样的风格,不过好像axis2对于pojo有了更加简单的部署方法。这个就不介绍了。下面ps中有介绍的。就来看看需要做哪些准备工作:
1.1下载安装JDK,不要低于1.4版本,不过现在也很少1.4的版本在用了。
1.2下载axis2,它分为三部分。bin zip war可以都下载下来。
1.3把war文件复制到servlet容器(tomcat)下的webapps下,启动tomcat。war会自动解开。
1.4配置axis2环境变量。设置AXIS2_HOME环境变量来指出目标目录,注意Axis2生成的所有脚本和构建文件依赖于这个值,所以不要遗漏了这个步骤。
大多数情况下,我们的服务也将需要一个WSDL文件,Axis2的Java2WSDL可以用来生成一个WSDL。执行以下步骤来从一个Java类生成一
个WSDL文件:
1,创建并编译Java类
2,使用该命令生成WSDL:
%AXIS2_HOME%/bin/java2wsdl -cp . -cn samples.quickstart.service.pojo.StockQuoteService -of StockQuoteService.wsdl
移动你生成WSDL文件,你可以做你需要的任何更改。例如,你可能添加自定义的过错或者改变生成的元素名。例如,该StockQuoteSer
vice.wsdl位于%AXIS2_HOME%/samples/quickstartadb/resources/META-INF文件夹,我们将在本指南的其他部分使用它,代替生成过
程创建的一般参数。
2.编写和发布webservice
2.1 通过简单的pojo来发布webservice服务
2.1.1建立一个工程
对于用Java实现的服务程序给人的印象就是需要进行大量的配置,不过这一点在Axis2中将被终结。在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。

下面我们来实现一个简单的POJO,代码如下:
[code="java"]public class SimpleService
{
public String getGreeting(String name)
{
return "你好 " + name;
}
public int getPrice()
{
return new java.util.Random().nextInt(1000);
}
}

在SimpleService类中有两个方法,由于这两个方法都是public方法,因此,它们都将作为WebService方法被发布。

编译SimpleService类后,将SimpleService.class文件放到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录)。现在我们已经成功将SimpleService类发布成了WebService。在浏览器地址栏中输入如下的URL:
http://localhost:8080/axis2/services/listServices
2.1.2这时当前页面将显示所有在Axis2中发布的WebService,如图2所示。

在浏览器地址栏中输入如下的两个URL来分别测试getGreeting和getPrice方法:
http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill
http://localhost:8080/axis2/services/SimpleService/getPrice

图3和图4分别显示了getGreeting和getPrice方法的测试结果。

2.1.3pojo发布服务需要注意的问题
在编写、发布和测试0配置的WebService时应注意如下几点:
1. POJO类不能使用package关键字声明包。
2. Axis2在默认情况下可以热发布WebService,也就是说,将WebService的.class文件复制到pojo目录中时,Tomcat不需要重新启动就可以自动发布WebService。如果想取消Axis2的热发布功能,可以打开<Tomcat安装目录>\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置代码:
<parameter name="hotdeployment">true</parameter>
将true改为false即可。要注意的是,Axis2在默认情况下虽然是热发布,但并不是热更新,也就是说,一旦成功发布了WebService,再想更新该WebService,就必须重启Tomcat。这对于开发人员调试WebService非常不方便,因此,在开发WebService时,可以将Axis2设为热更新。在axis2.xml文件中找到<parameter name="hotupdate">false</parameter>,将false改为true即可。

3. 在浏览器中测试WebService时,如果WebService方法有参数,需要使用URL的请求参数来指定该WebService方法参数的值,请求参数名与方法参数名要一致,例如,要测试getGreeting方法,请求参数名应为name,如上面的URL所示。
4. 发布WebService的pojo目录只是默认的,如果读者想在其他的目录发布WebService,可以打开axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:
<deployer extension=".class" directory="my" class="org.apache.axis2.deployment.POJODeployer"/>
上面的配置允许在<Tomcat安装目录>\webapps\axis2\WEB-INF\my目录中发布WebService。例如,将本例中的SimpleService.class复制到my目录中也可以成功发布(但要删除pojo目录中的SimpleService.class,否则WebService会重名)。

2.2 通过原始的方法发布webservice服务
2.2.1带有包的类就不能用第一种的方法来发布。
建立一个java工程(这里也可以建立一个web工程)

package com.starit.pojo;

public class SimpleService
{
public String getGreeting(String name)
{
return "你好 " + name;
}
public int getPrice()
{
return new java.util.Random().nextInt(1000);
}
}



2.2.2对这个类进行编译,并把他拷贝到一个目录里(E:\java技术学习\webservice技术\AXIS2\axis2-1.5.2\samples\test)
2.2.3在下面建立一个META-INF并在services.xml。内容为:

<service name="WeatherService" scope="application">
<description>Weather POJO Service</description>
<messageReceivers>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver
mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">
com.starit.pojo.SimpleService
</parameter>
</service>

2.2.4生成一个.aar文件
通过cmd进入到E:\java技术学习\webservice技术\AXIS2\axis2-1.5.2\samples\test目录下敲入命令:jar cvf helloworld.aar .
2.2.5把aar文件拷贝到axis2的webapps/axis2/WEB-INF/services下
启动tomcat
通过http://localhost:8080/axis2/services/WeatherService?wsdl来验证下。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值