一、工具

1、下载 Axis2以及eclipse的Axis2插件。http://axis.apache.org/axis2/java/core/download.cgi

2、axis2-1.7.1-war.zip解压,将压缩包内的axis2.war部署到%TOMCAT-HOME%/webapps下,启动tomcat,访问http://localhost:8080/axis2/看是否正常。

点击Service会进入Service列表页面,当前只有一个Version服务。http://localhost:8080/axis2/services/Version?wsdl

3、解压缩eclipse插件 axis2-eclipse-codegen-plugin-1.7.1.zip,axis2-eclipse-service-plugin-1.7.1.zip。解压后将plugins 复制到%ECLIPSE_HOME%\plugins。

二、Axis2发布Webservice

a、新建名称为Axis2Service1 的java工程。新建TestWs.java

b.1、打包部署--arr部署方式

有手动打包和插件打包两种方式,在此我用了插件打包的方式

  1. 手动打包
    • 新建\Axis2Service1\deploy文件夹,将\Axis2Service1\bin下的class文件复制过来。
    • 新建\Axis2Service1\deploy\META-INF\services.xml文件
<service name="AxisService">
<description>AxisService</description>
<parameter name="ServiceClass">ws.TestWs</parameter>
<operation name="showName">
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
<operation name="getName">
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation>
</service>

生成aar包 \Axis2Service1\deploy>jar cvf AxisService.aar . (注意带.号)

2 . 插件打包

    • IDE中选择New->other->Axis2 Service Archiver,点击Next;
    • Class File Location:选择Axis2Service1\bin目录,点击Next;
    • 勾选Skip WSDL,点击Next;
    • Service Archiver 选择jar位置,如果没有jar包就直接点击Next;
    • 勾选Generate the service xml automatically 自动生成service.xml file文件,点击Next
    • service name,输入:AxisService,然后在class name 中填写要发布的类(全路径,如:ws.TestWs),点击load。勾选 Search declared methods only。点击next
    • output File location,输入:D:\ ; output File Name,输入artiver文件的名称 AxisService。点击finish。
    • 提示 Service Archvie generated successfully! 注册表明,生成成功。

3、发布AxisService

AxisService.aar复制到%TOMCAT-HOME%/webapps/axis2/WEB-INF/services下。(不打aar包,\Axis2Service1\deploy下面复制过去也是可以)

打开http://localhost:8080/axis2/services/listServices 就可以看到刚才发布的AxisService服务了,下面有两个函数:showName,getName。

b.2 独立部署

1、新建java web project工程。

2、文件复制

%TOMCAT-HOME%\webapps\axis2\WEB-INF\lib 复制到 \Axis2Service2\WebRoot\WEB-INF\lib 下,并加入工程引用。

%TOMCAT-HOME%\webapps\axis2\WEB-INF\conf 复制到 \Axis2Service2\WebRoot\WEB-INF\conf

%TOMCAT-HOME%\webapps\axis2\WEB-INF\modules 复制到 \Axis2Service2\WebRoot\WEB-INF\modules

3、web.xml 代码如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="wmf" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<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-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>

2、新建 \Axis2Service2\src\ws\TestWs.java

package ws;
public class TestWs {
public String showName(String name) {return name; }
public String getName() {return "Axis2Service Sample"; }
}

3、新建\Axis2Service2\WebRoot\WEB-INF\services目录。

4、新建一个AxisService服务

AxisService\META-INF\services.xml

<service name="AxisService">
<description>AxisService</description>
<parameter name="ServiceClass">ws.TestWs</parameter>
<operation name="showName">
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
<operation name="getName">
<messageReceiver
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation>
</service>

启动tomcat后,访问http://localhost:8085/Axis2Service2/services/AxisService?wsdl看是否正常。

三、AXIS2调用Web Services

一、客户端stub文件生成

我用的是插件生成方式

1、脚本生成方式

去AXIS2的解压目录下bin(%AXIS2_HOME%\bin\)下执行下面语句

wsdl2java -uri http://localhost:8085/Axis2Service2/services/AxisService?wsdl -p ws -s -o stub

-p参数指定了生成的Java类的包名

-o参数指定了生成的一系列文件保存的根目录

在stub\src\ws自动生成AxisServiceStub.java

2、插件生成方式

IDE中选择New->other->Axis2 Code Generator,点击Next;

勾选Generate Java source code from a WSDL file,点击Next;

WSDL file location,输入:http://localhost:8085/Axis2Service2/services/AxisService?wsdl,点击Next;

如果路径不对会提示:Specified WSDL is invalid!, Please select a validated *.wsdl/*.xml file on previous page. 正确的话,点击next;

指定输入路径,点击Next 提示:All operations completed successfully! 生成成功。

在D:\src\ws 自动生成了stub一系列文件,其中ws是包名。

上面2种方式生成的stub类有点不一样,脚本生成方式是单一文件,插件生成方式生成的一系列文件。

二、客户端调用 脚本生成方式为例子,插件生成的类似。

1、新建 java工程 Axis2Client

新建\Axis2Client\lib文件夹 将%AXIS2_HOME%\lib\ 下的所有jar包复制到\Axis2Client\lib,并加入工程引用中,加入工程引用的方式如下

点击工程右键--》Build Path --->Configure Build Paht--->

将通过插件生成在stub文件加入到src\ws下,(若是脚本生成方式,则是单一AxisServiceStub.java文件加入到src\ws下 )

2、新建TestWs.java,在test包下 主要代码如下

//初始化Sub类
AxisServiceStub stub = new AxisServiceStub();
//传递AxisServiceStub.ShowName对象,相关参数在这边赋值。
AxisServiceStub.ShowName command = new AxisServiceStub.ShowName();
command.setName("Hello!");
//取得返回值
String name = stub.showName(command).get_return();
System.out.println(name);

调用成功后控制台输出:Hello!

扩展学习---AXIS2调用REST Web Services

使用http://localhost:8086/Axis2Rest/services/AxisService/showName?name=rest的方式访问刚才发布成功的WebService。从上面可以看出这个就是rest风格。

Axis1.0是无法通过showName?name=rest来获取信息的。

2、使用axis客户端调用

public class TestRest {

    private static String toEpr = "http://localhost:8086/Axis2Rest/services/AxisService";

    public static void main(String[] args) throws AxisFault {
Options options = new Options();
options.setTo(new EndpointReference(toEpr)); //客户端REST方式调用服务跟普通服务的区别,REST调用必须加上下面这个代码。
options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
ServiceClient sender = new ServiceClient();
//axis2-1.5.4不需要下面这句代码,否则会报错
//sender.engageModule(new QName(Constants.MODULE_ADDRESSING));
sender.setOptions(options);
OMElement result = sender.sendReceive(getPayload());
try {
XMLStreamWriter writer = XMLOutputFactory.newInstance()
.createXMLStreamWriter(System.out);
result.serialize(writer);
writer.flush();
} catch (XMLStreamException e) {
e.printStackTrace();
} catch (FactoryConfigurationError e) {
e.printStackTrace();
}
}
private static OMElement getPayload() {
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://ws", "example1");
OMElement method = fac.createOMElement("showName", omNs);
OMElement value = fac.createOMElement("name", omNs);
value.addChild(fac.createOMText(value, "Rest"));
method.addChild(value);
return method;
}

说明:

1、sender.engageModule(new QName(Constants.MODULE_ADDRESSING)); axis2-1.5.4不需要下面这句代码,否则会报错

2、客户端REST方式调用服务跟普通服务的区别,就是Rest有下面这个代码;

options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);

两者返回的数据都是

<ns:showNameResponse xmlns:ns="Resthttp://ws"><ns:return>Rest</ns:return></ns:showNameResponse>

3、getPayload方法

OMNamespace omNs = fac.createOMNamespace("http://ws", "example1");

指定命名空间,如果没对的话会报如下错误namespace mismatch require http://ws found http://ws1 OMElement method = fac.createOMElement("showName", omNs);

要传递的方法名为 "showName" OMElement value = fac.createOMElement("name", omNs);

传递的参数为name value.addChild(fac.createOMText(value, "Rest"));

传递参数name的值为Rest。

webService发布和调用--Axis2的更多相关文章

  1. axis2 webservice 发布、调用与项目集成

    发布 1.在apache官网下载axis2包,下载Binary Distribution和War Distribution两个zip. 2.将war放入tomcat webapps下部署.并输入 ht ...

  2. 使用axis2进行webservice发布与调用

    一.介绍下cxf.axis.axis2区别 新一代的Web Services 框架如Axis2.CXF 都是由现有的项目中逐渐演化而来的,Axis2 是由大家熟悉的Axis 1.x 系列演化过来,而A ...

  3. webservice发布服务:AXIS2及客户端调用

    1.Axis2: 到官网下载axis2的压缩包. 解压后: 1.将lib文件下的jar包复制到项目中 2.在web-inf下创建services->META-INF->services.x ...

  4. webservice -- cxf客户端调用axis2服务端

    背景: 有个项目, 需要由第三方提供用户信息, 实现用户同步操作, 对方给提供webservice接口(axis2实现)并也使用axis2作主客户端调用我方提供的webservice接口 起初, 由于 ...

  5. Apache CXF实现WebService发布和调用

    第一种方法:不用导入cxf jars 服务端: 1. 新建Web工程 2.新建接口和实现类.测试类 目录结构图如下: 接口代码: package com.cxf.spring.service; imp ...

  6. WebService发布与调用问题:expected: {http://schemas.xmlsoap.org/soap/envelope/}Envelope but found: {http://schemas.xmlsoap.org/wsdl/}definitions

    Mailbox===AsYVzdwoY_b6uD s>>>>>>>javax.xml.ws.Service@103bf65 hs>>>> ...

  7. 使用Axis2实现WebService的发布和调用

    一.Axis2的下载和安装 1.可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:      可以下载如下三个zip包: axis2-1.7.3-bin.zip(用 ...

  8. Axis2 webservice入门--Webservice的发布与调用

    一.Webservice发布 参考 http://www.cnblogs.com/demingblog/p/3263576.html 二.webservice 调用 部分参考:http://www.c ...

  9. C# webservice 编写、发布、调用

    采用的工具VS2010生成工程 1. 生成webservice工程:建 ASP.NET 空WEB 应用程序. 2. 在建好的ASP.NET 空WEB应用程序中新建项“web 服务”. 完成上述内容工程 ...

随机推荐

  1. SQL语言和DML相关操作以及相应的运算符

    SQL 1.结构化查询语言 2.特点 a.第四代编程语言,更接近自然语言 b必须有数据库系统解释执行 c.对象名,关键字不区分大小写 d.字符串必须要用单引号引起来,不能用双引号 e.每条语句最后用分 ...

  2. 多线程JAVA篇(一)

    解析AsyncTask源码之前,首先讲述与之相关的Java线程知识: 知识点清单 1.Thread类 2.Runnable接口 3.Callable接口 4.synchronized关键字 5.vol ...

  3. shell语法快速入门(1)

    #得到绝对路径 DIR=$(cd `dirname $0`;pwd) $DIR/file.txt #去掉#注释 egrep -v "(#|^$)" /etc/zabbix/zabb ...

  4. web可用性测试

    1.软件质量模型 2.什么是可用性测试 a. 用户体验   Google搜索界面  ipod  iphone b.使用感受   清爽 ,美观,简洁 3. 一位局长使用B/S系统 今天我点名买了个B/S ...

  5. 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能

    首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...

  6. [ACM] hdu 1025 Constructing Roads In JGShining's Kingdom (最长递增子序列,lower_bound使用)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  7. SR触发器和JK触发器

    SR触发器(电平触发器) 基本RS触发器的逻辑方程为:Q(n+1)=一S+RQ(n); 约束方程:R+S=1; 根据上述两个式子得到它的四种输入与输出的关系: 1.当R端有效(0),S端无效时(1), ...

  8. IOS笔记之UIKit_UIScrollView

    //通过系统的一个接口 拿到是不是第一次启动这个程序 如果是就调用导航页 如果不是 直接进入下一个视图 NSUserDefaults *userDefaults = [NSUserDefaults s ...

  9. libqrencode 3.4.3 发布,二维码的C解析库

    libqrencode 3.4.3 的命令行增加了 --rle 参数,修复了开发库和命令行工具的一些小 bug. libqrencode (QRencode) 是一个用C语言编写的用来解析二维条形码( ...

  10. GitLab:解决Merge Request中Commits不更新的问题

    最近在使用 GitLab 的 Merge Requests 功能进行 Code Review .操作流程是这样的: 1)开发人员A要给一个项目增加一个新功能,先在这个项目上创建一个 Git 分支. 2 ...