axis2创建web service(一)
http://blog.csdn.net/chnic/archive/2008/03
/13/2179760.aspx
http://www.javaeye.com/topic/284387
axis2 是新一代的web service开发工具,它会让你的web
service开发变得轻松,快捷。下面让我们以一个实际的例子来体验一下。
首先,工欲善其事,必先利其器。就让我们先做好一些必备的准备工作吧。
1.下载axis2 的2进制的包和war,现在的最新版本是1.4.1
发布时间是2008-8-25
地址 http://ws.apache.org/axis2
具体的1.4.1版本的http://ws.apache.org/axis2/download/1_4_1/download.cgi
2.把下载后的war放入tomcat的webapps目录里,然后启动tomcat,这样war包就会自动解压为目录axis2
在浏览器中输入http://localhost:8080/axis2/ ,如果一切正常你会看到下面的画面
3,就开始准备一下axis2的eclispe的插件
了。axis2的eclispe插件分为2个,一个是帮助我们生成aar文件的,另一个是帮
我们用wsdl文件生成stub代码的。
下载地址是
http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-service-archiver-wizard.zip
http://www.apache.org/dyn/mirrors/mirrors.cgi/ws/axis2/tools/1_4_1/axis2-eclipse-codegen-wizard.zip
下载完2个压缩文件后,可以直接把解压后的文件拷贝到plugins目录中,也可以在links目录中写文件路径的方式来安装插件,安装完插件后,
打开eclipse,在package explorer 中点击右键--->选择new---->other
如果安装正确你会看到
这样准备工作就都做好了。接下来就是正式开发了。
开发的过程,下回分解。。。。。
工具都已经准备齐全了。我们来动手做一个小例子来小试牛刀!
这一节我们先利用axis2来发布一个web service 的服务,然后在下一节我们做一客户端来调用这个服务。
我们的服务很简单的,就是输入一个字符串,然后打印出一段字符串。
代码很简单,主要是测试用。
- package com.deltaj.server;
-
- public class SimpleServer {
-
- /**
- * 简
单的测试方法
- *
- */
- public String simpleMethod(String name) {
- return name + "Say this is a Simple method ^-^";
- }
-
- }
package com.deltaj.server;
public class SimpleServer {
/**
* 简单的测试方法
*
*/
public String simpleMethod(String name) {
return name + "Say this is a Simple method ^-^";
}
}
主要的过程就是如何利用axis2的eclispe插件来发布这个服务啦。
1。在eclispe 的package Explorer
中点击右键,在菜单中选择新建--->other...----->Axis2 Service Archiver
2.然后点击next进入了类选择页面,在这个页面中的Class File Location选择框中选择类所在的文件夹。
3.点击next之后进入了选择 wsdl文件,这里我们选择skip wsdl。
4. 点击next之后,进入的是选择jar文件的页面,这里我们没有外部的jar,所以点击next直接跳过这个页面。
4.点击next之后,进入的是选择xml页面,这里我们选择的是自动生成xml,也就是勾选
Generate the service xml automatically这一项
5.点击next之后,进入的是生成xml文件的页面,在service name
里填写这个服务所起的名字,这里我起名为simpleServer,然后在class name
中填写要发布的类,这里一定要写全路径,写好后就可以点击load 按钮,如果一切ok的话,你会看到如下画面
6 点击next 后,进入的是输出artiver文件的页面,先要在output File location 中选择要输出的路径,
在output File Name中输入artiver文件的名称。我起的名字是simpleServer
7.点击finish ,如果看到如下的画面,恭喜你,服务发布成功啦
8.接下来,我们就可以把这个aar文件放入tomcat中发布,首先把生成的aar文件拷贝到tomcat目录中的axis2项目的
service目录中位置如图。
9.接下来启动tomcat,在地址栏中输入http://localhost:8080/axis2 ,
你会看到axis2的欢迎画面
10.点击Service连接,你会看到发布的服务列表。这里面就能看到我们发布的simpleService
11.点击我们的服务simpleServer的连接,我们会看到。至此,服务发布成功。
这节我们就来写一个客户端来调用一下这个服务。主要关注一下如何用elispe的axis2的插件来生成stub代码。
1.在eclispe 的package Explorer
中点击右键,在菜单中选择新建--->other...----->Axis2 Code Generator
2.点击next,进入下一个页面,选择从wsdl文件来产生java文件。
3. 点击next,然后选择wsdl文件,注意此处要填写上一节我们
4.点击next,进入设置页面,这里我们就用默认的设置。
5. 点击next,选择输出文件的路径。
(出错解决方案:
除了把backport-util-
concurrent-2.2.jar加到lib中, 加<library
name="lib/backport-util-concurrent-2.2.jar">
<export name="*"/>
</library> 到plugsin.xml
还要
1.
把Axis2_Codegen_wizard_1.3.0(eclipse/plugins/Axis2_Codegen_wizard_1.3.0)的
名字改成Axis2_Codegen_wizard_1.4.0
2. 在plugin.xml中在<plugin>中
把Axis2_Codegen_wizard的version="1.3.0"改成version="1.3.0"
在MyEclipse6.5中会报错:
An error ocurred while completing process
-java.lang.reflect.InvocationTargetException
主要的问题在于 Code Generator plugin 内缺少了 backport-util-concurrent-3.1.jar
包和geronimo-stax-api_1.0_spec-1.0.1.jar 包。
[解决方案] :
1.关闭 Eclipse
2.copy %AXIS2_HOME%"lib" 下的
backport-util-concurrent-3.1.jar 和 backport-util-concurrent-3.1.jar
复制到 MyEclipse 6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"lib
文件夹下。
3.注册此 jar 包:
修改MyEclipse
6.5"eclipse"plugins"Axis2_Codegen_Wizard_1.3.0"plugin.xml 文件
在 <runtime> 內加入下面的字串
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
到plugin.xml文件中,保存后重新启动Eclipse即可。
)
6.点击next,如果看到这个页面,恭喜你已经生成代码成功。
7.在package
Explorer中刷新一下项目,然后你发现出现2个新的文件SimpleServerStub和
SimpleServerCallbackHandler 。打开SimpleServerStub你会惊喜的发现。著名的小红叉一个接一个的
这是因为没有axis2的类包。我们可以在下载的axis2-1.4.1-bin中找到lib包,把其中的jar都加入我们的工程中。
然后重新编译一下工程,这时我们发现SimpleServerStub还是有几个小红叉。这个是因为这个插件有个小bug。
生成的代码没有实现序列化方法。我们可以自己来加上,在小红叉上点一下,弹出一个小菜单,选择
Add unimplemented methods .
8.
- /**
- * 调
用发布的服务。
- *
- */
- public class SimpleClient {
-
- public static void main(String[] args) throws Exception{
-
- //初始化桩文件
- SimpleServerStub stub = new SimpleServerStub();
- //初始化SimpleMethod方法。
- SimpleServerStub.SimpleMethod request = new SimpleServerStub.SimpleMethod();
- //调用simpleMethod的setName方法。
- request.setName("zt");
- //
- System.out.println(stub.simpleMethod(request).get_return());
-
-
- }
- }
/**
* 调用发布的服务。
*
*/
public class SimpleClient {
public static void main(String[] args) throws Exception{
//初始化桩文件
SimpleServerStub stub = new SimpleServerStub();
//初始化SimpleMethod方法。
SimpleServerStub.SimpleMethod request = new SimpleServerStub.SimpleMethod();
//调用simpleMethod的setName方法。
request.setName("zt");
//
System.out.println(stub.simpleMethod(request).get_return());
}
}
如果一切正常,你就会看到结果
log4j:WARN No appenders could be found for logger
(org.apache.axis2.description.AxisService).
log4j:WARN Please
initialize the log4j system properly.
ztSay this is a Simple method
^-^。
调用服务成功。这是个简单的例子,下节我们再做一个复杂一点的例子,来更好的学习axis2