您的位置:首页 > 编程语言 > Java开发

在myEclipse上快速开发基于Axis框架的webservice服务

2011-10-25 09:47 399 查看
一: 准备工作
1:JDK MyEclipse Tomcat6的安装与配置(略过)

2:安装Axis2

去http://axis.apache.org/axis2/java/core/download.cgi下载Axis2的应用包,源码包,文档,War包

推荐使用Axis2 1.4.1(本文中的内容都以Axis2 1.4.1版本作为演示)

配置环境变量

例如我的机子上Axis的应用包位于:E:\axis2-1.4.1,那么我需要新增一个环境变量AXIS2_HOME,值为E:\axis2-1.4.1,并且在Path的最后面添加上:E:\axis2-1.4.1\bin

配置完成后试着进入命令行里输入axis2,java2wsdl(由于dos环境不区分大小写,这里大小写随意),如果没有报错并且能展示相应的Help信息,则标志你配置成功了。

3:安装Axis2的Eclipse插件

(插件在我的附件里有提供)下载Axis2的Eclipse插件,可以在我本文的附件里直接下,或者去官方网站下载http://axis.apache.org/axis2/java/core/tools/index.html

我选择的是1.4.1的插件,注意官方给的插件包里的版本号还是写着1.3.0,所以需要你解压完成后手动修改文件目录名为1.4.1以及目录中plugin.xml为1.4.1

安装Eclipse插件因Eclipse版本的不同而有很多种方法,我机器上的MyEclipse的版本是5.5,我的安装方法是:

解压插件包,将其置于MyEclipse的E:\myeclipse\dropins下面(注意之前的版本号一定要改,不然后续做插件集成的时候会出错)。

解压完成后,需要做以下的修改操作.

第一步:从Axis2包的lib目录下拷贝2个文件到你插件Axis2_Codegen_Wizard_1.4.1位置的lib下。例如在我的机器上就需要执行:

cp E:\axis2-1.4.1\lib\backport-util-concurrent-3.1.jar E:\myeclipse\dropins\Axis2_Codegen_Wizard_1.4.1\lib\backport-util-concurrent-3.1.jar

cp E:\axis2-1.4.1\lib\geronimo-stax-api_1.0_spec-1.0.1 E:\myeclipse\dropins\Axis2_Codegen_Wizard_1.4.1\lib\geronimo-stax-api_1.0_spec-1.0.1

第二步:进入Axis2_Codegen_Wizard_1.4.1,打开plugin.xml,找到runtime文档元素节点末尾前面,加上:

Xml代码







<library name="lib/backport-util-concurrent-3.1.jar"> <export name="*"/> </library> <library name="lib/geronimo-stax-api_1.0_spec-1.0.1"> <export name="*"/> </library>

<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1">
<export name="*"/>
</library>


OK,Eclipse插件集成完成。打开你的MyEclipse,点击New->other查看是否出现了如下所示的界面:



二:你可以开始快速开发Axis2的Webservice了

1: 新建一个Java web工程,起名为SayHello,在classpath里导入Axis2的所有JAR包

2:在src目录下,新建一个SayHello.wsdl文件,并将其修改成如下样式:



3:开始利用它生成客户端代码

右键点击src,点击new->other->Axis2 Wizards->Axis2 Code Generator,点击下一步(next):

选中Generate Java source from a WSDL file然后继续点击下一步

在如下所示的界面中,输入你的wsdl所在位置:



继续点击下一步,按照如下界面进行配置:



点击下一步,按照如下所示界面进行配置:



然后点击finish即可

4:最后利用它生成服务器端代码

还是跟刚才一样,选中codeGenerator,一直下一步到如下界面修改下:



然后下一步直到完成。

当你完成的时候,是不是发现有很多红叉叉?不要紧,那是因为你生成的包名有错误,也算是Axis2插件的问题吧。



如图所示,你生成的文件应该是跟这里面的红叉叉文件一样。不要紧,只需要修改包名即可,去掉最开头的src,就像resources上面的那个包一样。

三:发布Webservice服务

拷贝你刚才下的Axis2.war包到tomcat的webapps下面,并启动tomcat,启动后输入http://localhost:8080/axis2,可以看到axis2的欢迎界面。可以进入Administration里,查看当前可用的服务(默认用户名/密码是admin/axis2)

点击new->other-Axis2 Wizards ,不过这里选择的是Service Archiver,点击下一步。

在出现的界面中,安装如下图片配置:



点击下一步:



配置OK后,继续下一步&下一步:



继续下一步,然后配置文件输出目录,我选择的是所在工程下新建一个dist目录,让文件输出到该目录下:



最后点击finish,即可。将工程目录dist文件夹下生成的SayHello.aar拷贝到tomcat的axis2的对应目录下。例如在我的机器上需要拷贝到:E:\apache-tomcat-6.0.28\webapps\axis2\WEB-INF\services目录下面

启动Tomcat,进入Axis2的控制台,查看SayHello的服务是否可用。你会发现它提示你服务错误。这时你需要修改resources目录下面services.xml文件。将它修改成:

Html代码







<parameter name="useOriginalwsdl">true</parameter> 修改成: <parameter name="useOriginalwsdl">false</parameter>
<parameter name="useOriginalwsdl">true</parameter>
修改成:
<parameter name="useOriginalwsdl">false</parameter>


重新走一次发布流程。这回应该不会有错误了。

四:测试Webservice

修改org.example.www.sayhello目录下SayHelloSkeleton类。将SayHello方法修改成这样:

Java代码







public org.example.www.sayhello.SayHelloResponse SayHello(
org.example.www.sayhello.SayHello sayHello) {
try {
SayHelloResponse response
= new SayHelloResponse();
response.setOut("Hi," + sayHello.getIn() + ".How are you");
return response;
} catch (Exception e) {
throw new RuntimeException(e);
}
}

public org.example.www.sayhello.SayHelloResponse SayHello(
org.example.www.sayhello.SayHello sayHello) {
try {
SayHelloResponse response
= new SayHelloResponse();
response.setOut("Hi," + sayHello.getIn() + ".How are you");
return response;
} catch (Exception e) {
throw new RuntimeException(e);
}
}


然后在org.example.www.sayhello下新建一个SayHelloTest,然后输入以下内容:

Java代码







package org.example.www.sayhello;

public class SayHelloTest extends junit.framework.TestCase {

public void testSayHello() throws java.lang.Exception {
org.example.www.sayhello.SayHelloStub stub =
new org.example.www.sayhello.SayHelloStub(
"http://localhost:8080/axis2/services/SayHello");
org.example.www.sayhello.SayHelloStub.SayHello sayHello2 =
(org.example.www.sayhello.SayHelloStub.SayHello)
getTestObject(org.example.www.sayhello.SayHelloStub.SayHello.class);
sayHello2.setIn("sweet");
System.out.println(stub.SayHello(sayHello2).getOut());
assertNotNull(stub.SayHello(sayHello2));
}

// Create an ADBBean and provide it as the test object

public org.apache.axis2.databinding.ADBBean getTestObject(
java.lang.Class type) throws java.lang.Exception {
return (org.apache.axis2.databinding.ADBBean) type.newInstance();
}
}

package org.example.www.sayhello;

public class SayHelloTest extends junit.framework.TestCase {

public void testSayHello() throws java.lang.Exception {
org.example.www.sayhello.SayHelloStub stub =
new org.example.www.sayhello.SayHelloStub(
"http://localhost:8080/axis2/services/SayHello");
org.example.www.sayhello.SayHelloStub.SayHello sayHello2 =
(org.example.www.sayhello.SayHelloStub.SayHello)
getTestObject(org.example.www.sayhello.SayHelloStub.SayHello.class);
sayHello2.setIn("sweet");
System.out.println(stub.SayHello(sayHello2).getOut());
assertNotNull(stub.SayHello(sayHello2));
}

// Create an ADBBean and provide it as the test object
public org.apache.axis2.databinding.ADBBean getTestObject(
java.lang.Class type) throws java.lang.Exception {
return (org.apache.axis2.databinding.ADBBean) type.newInstance();
}
}


重新走一次发布流程,然后运行这个Junit类,就可以正确查看到结果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: