Axis2学习笔记

Axis2学习笔记

目录:

1.准备

2.发布service

3.生成客户端代码

1.     准备

下载axis2 的bin和war两种发行版本。

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>

在本例中是使用spring与axis2集成一起,所以有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目录下的conf、services、modules文件夹复制到工程中的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。

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

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

其中“D:\axis2-1.7.3\”是axis2的bin版本解压到是目录。 -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的调用。

时间: 2024-12-23 05:34:26

Axis2学习笔记的相关文章

Axis2学习笔记:用户身份认证

说明:此处的用户身份认证不是基于证书系统的身份认证,如果需要通过证书系统进行身份认证,请使用rampart. 用户身份认证是很多业务系统必须具备的功能,webService也一样,经过本人这几天的学习研究,发现axis2的安全模块rampart不支持基于业务的用户身份认证,只能是基于证书的身份认证,而很多情况下,我们是需要基于业务用户的身份认证的,甚至需要与CAS.SHIRO等安全框架进行整合,这时rampart模块就派不上用场了.而单独的handler,经本人实际测试,在加上后,客户端直接就不

WebServices学习笔记(四)使用services.xml文件发布WebService

四.使用services.xml文件发布WebService 前面发布webservices所建立的java类都不能有包名,这里用配置文件services.xml搭建能有包名的webservice 首先创建MyService类,在service包下 package service; import javax.jws.WebParam; public class MyService { public String getGreeting(@WebParam(name="name")Str

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开

[原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Activiti 学习笔记记录(三)

上一篇:Activiti 学习笔记记录(二) 导读:上一篇学习了bpmn 画图的常用图形标记.那如何用它们组成一个可用文件呢? 我们知道 bpmn 其实是一个xml 文件

HTML&CSS基础学习笔记8-预格式文本

<pre>标签的主要作用是预格式化文本.被包围在 pre 标签中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre>标签的一个常见应用就是用来表示计算机的源代码.当然你也可以在你需要在网页中预显示格式时使用它. 会使你的文本换行的标签(例如<h>.<p>)绝不能包含在 <pre> 所定义的块里.尽管有些浏览器会把段落结束标签解释为简单地换行,但是这种行为在所有浏览器上并不都是一样的. 更多学习内容,就在码芽网http://www.

java/android 设计模式学习笔记(14)---外观模式

这篇博客来介绍外观模式(Facade Pattern),外观模式也称为门面模式,它在开发过程中运用频率非常高,尤其是第三方 SDK 基本很大概率都会使用外观模式.通过一个外观类使得整个子系统只有一个统一的高层的接口,这样能够降低用户的使用成本,也对用户屏蔽了很多实现细节.当然,在我们的开发过程中,外观模式也是我们封装 API 的常用手段,例如网络模块.ImageLoader 模块等.其实我们在开发过程中可能已经使用过很多次外观模式,只是没有从理论层面去了解它. 转载请注明出处:http://bl