AXIS2 网络服务教程

欢迎学习ApacheAxis2教程。最近,我试图将我的[Apache1.3]Axis2](https://axis.apache.org/axis2/java/core/index.html)技能升级到最新的1.5.4版本,但我找不到任何不言自明、涵盖最新版本的教程。因此,它构成了我发布的Axis2Web服务教程的基础。

ApacheAxis2教程

ApacheAxis2 tutorial

谁应该使用本教程?

本教程面向对使用ApacheAxis2开发和部署Web服务感兴趣的Java程序员。

前提条件

本教程的范围是使用Axis2创建Web服务,并使用Java客户端程序调用Web服务,以及使用SOAPUI工具测试Web服务。要轻松理解本教程,需要对Java、Web服务、XML、Ant和应用服务器(Tomcat)有基本的了解。

使用的软件和工具

Java开发工具包(JDK)1.6.0(Tomcat 7需要最低版本的JDK 1.6) 2.ApacheAnt 1.7.0(Axis2要求最低版本为1.6.5) 3.ApacheAxis2 1.5.4(二进制分发版) 4.用于项目开发的eclipse 3.6.1 IDE(您也可以使用其他IDE,例如NetBeans) 5.阿帕奇Tomcat 7.0.8 6.用于测试我们的Web服务的SoapUI。 7.Mac OS X 10.6.4(我在Mac OS上工作,但本教程应该也适用于其他操作系统,但在执行命令时可能需要一些更改)

系统设置

1.下载最新版本apache Tomcat最新版本]。到目前为止,最新版本是7.0.8,这就是我在本教程中使用的版本。它需要最低版本的Java 1.6,因此请确保您的系统中安装了它。如果您的系统中未安装JAVA 6,则应首先从JAVA SE Downloads.]下载并安装下载Tomcat核心压缩包(apache-tomcat-7.0.8.zip)并解压缩以将其安装在您的系统上。设置JAVA_HOME 环境变量以启动和停止服务器。 2.从ApacheAxis2-Releases.]下载ApacheAxis2 1.5.4二进制分发压缩包这一步是创建将部署到Tomcat的axis2.war以及获取要在项目中使用的axis2库所必需的。 3.将Axis2二进制分发压缩包解压缩到任何方便的目录中。转到axis2-1.5.4/webapp目录并运行_).]下载并安装请注意,我在使用从战争分发下载的axis2.war时遇到了一些问题。后来,我发现Axis2的战争分布中少了几个罐子。WAR分布只包含58个罐子,而二进制分布包含63个罐子。(我懒得去找,哪些罐子不见了。)

 1$ant create.war
 2构建文件:Build.xml
 3
 4初始化:
 5[mkdir]已创建目录:/USERS/Pankaj/Downloads/axis2-1.5.4/dist/temp
 6[复制]59个文件复制到/USERS/Pankaj/Downloads/axis2-1.5.4/dist/temp
 7
 8Preparare.repo
 9[复制]9个文件复制到/Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF
10[mkdir]已创建目录:/Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf
11[复制]1个文件复制到/Users/pankaj/Downloads/axis2-1.5.4/dist/temp/WEB-INF/conf
12
13Create.war
14[战争]制造战争:/Users/pankaj/Downloads/axis2-1.5.4/dist/axis2.war
15[删除]删除目录/USERS/Pankaj/Downloads/axis2-1.5.4/dist/temp
16
17构建成功
18总时间:2

4.在Tomcat应用服务器中部署axis2.war,方法是将其复制到Tomcat WebApps目录中。如果服务器不支持热部署,则可能需要重新启动服务器。 5.转到https://localhost:8080/axis2/并单击验证链接。如果Happy Axis页面显示为绿色 ,则表示Axis2部署成功。我们的系统设置现在已经准备好,我们可以继续创建Axis2Web服务了。

Axis2 tutorial

创建Axis2 Web服务

为了创建Axis2 Web Service归档,我们需要以下内容:

1.包含将作为Web服务公开的类的Java项目(Axis2WSImplementation)。在我的示例中,我公开了来自MyService 类的两个操作。第一个操作是字符串,返回字符串,而第二个操作是** MyBean** Java对象,经过一些数据操作后返回MyBean Java对象。请注意,MyBean类实现了Serializable接口,因此可以通过网络进行传输。 2.antBuild.xml 文件,用于创建AAR、WSDL以及客户端存根和回调处理程序类。 3.将成为axis2存档一部分的services.xml 文件。该文件将放在axis2存档的META-INF文件夹中。

项目结构将如下图所示。Apacheaxis2Build不要与project文件夹中的内容混淆。它们将在我们执行Build.xmlant文件时创建。

Axis2 Web Service项目说明

MyService.java :将作为Axis2 Web服务公开的实现类。

 1package com.journaldev.ws;
 2
 3import com.journaldev.bean.MyBean;
 4
 5public class MyService {
 6
 7    public String getData(String input) {
 8    	return "Hi" + input;
 9    }
10
11    public MyBean getObjectData(MyBean myBean) {
12
13    	String name = myBean.getName();
14    	int id = myBean.getId();
15    	myBean.setId(id + 100);
16    	myBean.setName("Output: " + name);
17
18    	return myBean;
19    }
20}

MyBean.java :Java Bean类,是Web服务中getObjectData操作的输入和输出。

 1package com.journaldev.bean;
 2
 3import java.io.Serializable;
 4
 5public class MyBean implements Serializable {
 6
 7    private static final long serialVersionUID = -1129402159048345204L;
 8
 9    private String name;
10
11    private int id;
12
13    public String getName() {
14    	return name;
15    }
16
17    public void setName(String name) {
18    	this.name = name;
19    }
20
21    public int getId() {
22    	return id;
23    }
24
25    public void setId(int id) {
26    	this.id = id;
27    }
28
29}

services.xml :Axis2Web服务相关参数是此XML文件的一部分。ServiceClass参数指定将作为Web服务公开的类。其他重要的参数是目标名称空间和模式名称空间。services.xml

 1<service name="MyService" scope="application" targetNamespace="https://journaldev.com/">
 2 <description>
 3 MyService
 4 </description>
 5 <messageReceivers>
 6 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
 7 <messageReceiver mep="https://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
 8 </messageReceivers>
 9 <schema schemaNamespace="https://journaldev.com/xsd"/>
10 <parameter name="ServiceClass">com.journaldev.ws.MyService</parameter>
11</service>

Build.xml :用于执行Axis2任务的Ant构建文件。定义了三个目标,其详细信息如下:

1.Generate.wsdl :该目标在Build文件夹中生成MyService.wsdl文件。确保Target Namesspace和schemaTargetNamesspace与service.xml文件中的相同。 2.Generate.service :该目标在Build文件夹中生成axis2存档。它将services.xml文件包含在归档文件中,归档名称为MyService.aar 3.Generate.Client :该目标生成客户端类。确保在执行Generate.wsdl之后运行此命令,以便MyService.wsdl文件位于Build文件夹中。

Build.xml

 1<project name="AxisWSImplementation" basedir="." default="generate.service">
 2
 3 <property environment="env"/>
 4 <property name="build.dir" value="build"/>
 5
 6 <path id="axis2.classpath">
 7 <fileset dir="${basedir}/lib">
 8 <include name="*.jar"/>
 9 </fileset>
10 </path>
11
12 <target name="compile.service">
13 <mkdir dir="${build.dir}"/>
14 <mkdir dir="${build.dir}/classes"/>
15 <mkdir dir="${build.dir}/resources"/>
16 <!--First let's compile the classes-->
17 <javac debug="on"
18 fork="true"
19 destdir="${build.dir}/classes"
20 srcdir="${basedir}/src"
21 classpathref="axis2.classpath">
22 </javac>
23 </target>
24
25 <target name="generate.wsdl" depends="compile.service">
26 <taskdef name="java2wsdl"
27 classname="org.apache.ws.java2wsdl.Java2WSDLTask"
28 classpathref="axis2.classpath"/>
29 <java2wsdl className="com.journaldev.ws.MyService"
30 outputLocation="${build.dir}"
31 targetNamespace="https://journaldev.com/"
32 schemaTargetNamespace="https://journaldev.com/xsd">
33 <classpath>
34 <pathelement path="${axis2.classpath}"/>
35 <pathelement location="${build.dir}/classes"/>
36 </classpath>
37 </java2wsdl>
38 </target>
39
40 <target name="generate.service" depends="compile.service">
41 <copy toDir="${build.dir}/classes" failonerror="false">
42 <fileset dir="${basedir}/resources">
43 <include name="**/*.xml"/>
44 </fileset>
45 </copy>
46 <jar destfile="${build.dir}/MyService.aar">
47 <fileset excludes="**/Test.class" dir="${build.dir}/classes"/>
48 </jar>
49 </target>
50
51 <target name="generate.client" depends="compile.service">
52 <taskdef name="wsdl2java"
53 classname="org.apache.axis2.tool.ant.AntCodegenTask"
54 classpathref="axis2.classpath"/>
55 <wsdl2java
56 wsdlfilename="${build.dir}/MyService.wsdl"
57 output="${build.dir}/resources" />
58 </target>
59
60 <target name="clean">
61 <delete dir="${build.dir}"/>
62 </target>
63</project>

生成wsdl、AXIS归档和存根文件

  • 执行Generate.wsdl ant目标生成MyService.wsdl文件。
  • 执行Generate.service ant目标以生成MyService.aar文件。
  • 执行Generate.client ant目标以生成存根类。

Axis2 Web服务部署

复制~apache-tomcat-7.0.8/webapps/axis2/WEB-INF/services目录中的MyService.aar。Axis2支持服务热部署,无需重启服务器。在列表服务页面(https://localhost:8080/axis2/services/listServices).上检查服务部署MyService应该在那里列出,其中包含两个操作。Axis2列出服务page

Axis2 Web服务测试

部署服务后,首先需要对其进行测试。在这里,我使用的是SoapUI,这是最好的Web服务测试工具之一。如果你没有,你可以从他们的网站上下载并轻松安装。SoapUI测试步骤

1.创建一个新的SoapUI项目,项目名为MyServiceTest(您可以使用任何名称)和初始wsdl/wadlURL(您可以在单击MyService链接后从Axis2list Services页面获得此https://localhost:8080/axis2/services/MyService?wsdl)。将其他选项保留为缺省值,然后单击OK按钮创建SoapUI测试项目。 2.获取任意的SOAP绑定,然后双击getData和getObjectData SOAP请求。 3.在请求中提供一些输入值,并将其提交到Web服务端点URL。您应该会从该服务获得类似于下图的输出。它确认我们的Web服务已启动并正在运行。

使用SoapUI的Axis2Web服务测试现在,我们将继续使用Axis2存根类调用Web服务的最后一个任务。

使用存根文件调用Axis2 Web服务

1.在Eclipse中创建Java项目 Axis2Client 。 2.创建lib文件夹并从下载的二进制分发lib文件夹中复制所有Axis2 jar。将这些jar添加到项目的构建路径中。 3.将之前生成的_MyServiceStub.java_和_MyServiceCallbackStub.java_用正确的包结构复制到项目src中。在我的情况下,我复制他们在com.journaldev包。如果您必须将这些类提供给其他人,我强烈建议您从这些类创建一个jar,然后与其他人一起分发,以避免任何修改。 4.创建_Axis2ClientUsingStubsFromAnt_ client类以调用Web服务操作。该项目的结构将看起来像下面的图像类似。

Axis2教程projectAxis2ClientUsingStubsFromAnt代码

 1package com.journaldev.ws.client;
 2
 3import java.rmi.RemoteException;
 4
 5import com.journaldev.MyServiceStub;
 6import com.journaldev.MyServiceStub.GetData;
 7import com.journaldev.MyServiceStub.GetDataResponse;
 8import com.journaldev.MyServiceStub.GetObjectData;
 9import com.journaldev.MyServiceStub.GetObjectDataResponse;
10import com.journaldev.MyServiceStub.MyBean;
11
12/**
13 *
14 * @author Pankaj - www.journaldev.com This class will invoke Axis2 web service
15 *         operations using Stub classes
16 *
17 */
18public class Axis2ClientUsingStubsFromAnt {
19
20    /**
21     * END_POINT is the web service endpoint
22     */
23    private final static String END_POINT = "https://localhost:8080/axis2/services/MyService";
24
25    public static void main(String[] args) throws RemoteException {
26    	System.out.println("START");
27
28    	// Create the Stub Object by passing the Web Service Endpoint URL
29    	MyServiceStub stub = new MyServiceStub(END_POINT);
30
31    	// Creating an input object for the getData operation
32    	GetData getDataInput = new GetData();
33
34    	// Setting the input part in the getData input object
35    	getDataInput.setInput("PANKAJ");
36
37    	// invoking the getData operation
38    	GetDataResponse getDataOutput = stub.getData(getDataInput);
39
40    	// get_return method returns the web service output object. Here its
41    	// String, so we can
42    	// directly print the returned value
43    	System.out.println("Output:" + getDataOutput.get_return());
44
45    	// Creating input object for the getObjectData operation
46    	GetObjectData getObjectDataInput = new GetObjectData();
47    	MyBean myBean = new MyBean();
48    	myBean.setId(1);
49    	myBean.setName("KUMAR");
50
51    	// Setting the input part in the getObjectData input object
52    	getObjectDataInput.setMyBean(myBean);
53
54    	// invoking the getObjectData operation
55    	GetObjectDataResponse getObjectDataOutput = stub
56    			.getObjectData(getObjectDataInput);
57
58    	// Get the MyBean object from the response object
59    	MyBean myBeanOutput = getObjectDataOutput.get_return();
60
61    	// Print the myBeanOutput values to check that web service operations
62    	// are getting invoked
63    	System.out.println("ID:" + myBeanOutput.getId() + "NAME:"
64    			+ myBeanOutput.getName());
65
66    	System.out.println("DONE");
67
68    }
69
70}

执行_Axis2ClientUsingStubsFromAnt_类以调用Web服务。上述程序的输出为:

1START
2log4j:WARN No appenders could be found for logger (org.apache.axis2.description.AxisService).
3log4j:WARN Please initialize the log4j system properly.
4Output:HiPANKAJ
5ID:101NAME:Output: KUMAR
6DONE

如果您觉得本教程有助于理解Axis2并开始使用它,请在评论部分分享您的想法。是的,别忘了和其他人分享。您的两次点击和5秒时间可以帮助其他人轻松学习Axis2。:)

Published At
Categories with 技术
Tagged with
comments powered by Disqus