Axis2学习笔记

Axis2学习笔记

目录:

1.准备

2.发布service

3.生成客户端代码

1.     准备

下载axis2 binwar两种发行版本。

Bin版本用于使用自带的命令生成客户端代码。

War包中的WEB-INF目录下的文件用于服务提供方使用。

2.     发布service

新建一个Maven项目,在pom.xml中新增以下依赖:

        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-kernel</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-ant-plugin</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-corba</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-jaxws</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-spring</artifactId>
            <version>1.7.3</version>
        </dependency>


在本例中是使用springaxis2集成一起,所以有axis2-spring 依赖。

web.xml中新增一个axis2 servlet ,代码如下:

    <servlet>
       <servlet-name>AxisServlet</servlet-name>
       <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
    </servlet>


配置servlet-mapping

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
</servlet-mapping>


把下载的war包中的WEB-INF目录下的confservicesmodules文件夹复制到工程中的WEB-INF目录下。

 

新建一个Service Pojo类:

 

publicclass NameService {
    
    publicvoid print(String name)
    {
        System.err.println("print :"+name);
    }
    
    public String getFullName(String name)
    {
        return"Your name is "+name;
    }
 
}

spring中注册NameService类为一个bean

    
<bean name="nameService" class="com.hikvision.ws.service.NameService"></bean>

services目录下新建META-INF目录,在META-INF目录中新建services.xml文件,用于描述该服务。


services.xml:

 

<servicename="NameService">
    <description>
        NameService
    </description>
    <parametername="ServiceObjectSupplier">
       org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier
    </parameter>
 
    <messageReceivers>
        <messageReceivermep="http://www.w3.org/ns/wsdl/in-only"
            class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
        <messageReceivermep="http://www.w3.org/ns/wsdl/in-out"
            class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
    </messageReceivers>
 
    <parametername="SpringBeanName">
        nameService
    </parameter>
</service>

 

其中

<parameter name="SpringBeanName">

 

注意,services.xml中不要出现

<?xml version=”1.0”encoding=”UTF-8” ?>

 

在命令行中进入services目录,输入命令:jar –cvf NameService.arr ./META-INF

这个命令是将当前目录中的META-INF中的文件打包成一个NameService.arr文件。

注意:这个命令是jdk中的jar命令,需要本地安装jdk并且设置环境变量。


这样会在services目录生成对应的arr文件,本例生成的是NameService.arr文件。arr文件其实和jar文件类似,两者的区别是:

 

*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。

*.aar:包含所有资源,class以及res资源文件全部包含。

 

NameService.arr文件中包含的是services.xml,是对该服务的描述。

至此,NameService服务配置完毕。启动tomcat,在浏览器中输入http://localhost:port/项目发布目录/services/NameService?wsdl,即可得到服务的wsdl

 

3.     生成客户端代码

保存上一章节中得到的wsdl文件为NameService.xml

解压axis2bin版本,在命令行中切换到当前目录,执行以下命令:

 

D:\axis2-1.7.3\bin\wsdl2java -uriNameService.xml -p com.test.webService.stub –s

 

其中“D:\axis2-1.7.3\”是axis2bin版本解压到是目录。 -uri指定wsdl文件,-p指定了包名, -s代表同步执行。

  

该命令会在当前目录生成src文件夹,文件夹中有*stub.java文件,调用这个文件即可调用ws

 

新建一个Maven项目,在pom.xml中加入以下依赖:

        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-kernel</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-ant-plugin</artifactId>
            <version>1.7.3</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-jaxws</artifactId>
            <version>1.7.3</version>
        </dependency>


将生成的stub.java文件复制到项目中的指定包中(指生成stub–p 指定的包)。

新建一个NameServiceClient.java文件:

import java.rmi.RemoteException;
 
import com.hikvision.ws.stub.CaculateServiceStub;
import com.hikvision.ws.stub.CaculateServiceStub.Plus;
import com.hikvision.ws.stub.NameServiceStub;
import com.hikvision.ws.stub.NameServiceStub.GetFullName;
 
publicclass NameServiceClient {
    
    
    publicstatic String getFullName(String name)throwsRemoteException
    {
        NameServiceStub stub=new NameServiceStub("http://127.0.0.1:8011/Axis2/services/NameService");
        GetFullName getfull=new GetFullName();
        getfull.setName(name);
        return stub.getFullName(getfull).get_return();
    }
    
    publicstaticvoid main(String[] args)throwsRemoteException {
        
        System.err.println(getFullName("12313416546-****************************"));
        
    }
 
}


 

运行该文件就完成了对webservice的调用。

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章