一、工具

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. 1055: [HAOI2008]玩具取名

    Description 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用"WING" ...

  2. [f]动态判断js加载完成

    在正常的加载过程中,js文件的加载是同步的,也就是说在js加载的过程中,浏览器会阻塞接下来的内容的解析.这时候,动态加载便显得尤为重要了,由于它是异步加载,因此,它可以在后台自动下载,并不会妨碍其它内 ...

  3. URAL - 1920 Titan Ruins: the Infinite Power of Magic(乱搞)

    搞死人的题目,,, 就是在n*n的方格中找路径长度为L的回路. 开始的思路值适合n为偶数的情况,而忽视了奇数的case,所以wa了一次. 然后找奇数case的策略,代码从70多行变成了100多,然后改 ...

  4. Windows2003 架设VPN服务

    一.确保Windows防火墙关闭. 在我的电脑上右键=>管理,在左边窗口找到“服务和应用程序”,展开,单击“服务”,在右边窗口中找到“Windows Firewall/Internet Conn ...

  5. 基于 IdentityServer3 实现 OAuth 2.0 授权服务数据持久化

    最近花了一点时间,阅读了IdentityServer的源码,大致了解项目整体的抽象思维.面向对象的重要性; 生产环境如果要使用 IdentityServer3 ,主要涉及授权服务,资源服务的部署负载的 ...

  6. HttpClient读取ASP.NET Web API错误信息的简单方法

    在C#中,用HttpClient调用Web API并且通过Content.ReadAsStringAsync()读取响应内容时,如果出现500错误(InternalServerError),会得到一个 ...

  7. 初识ASP.NET 5中的Sake与KoreBuild

    从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命令,build.sh是针对Mac/Linux的编译命令,这本 ...

  8. VS2012 生成事件

    在一个解决方案中有多个项目的时候,我们常需要拷贝一些文件,dll到指定的目录下,或者遇到com组件还需要提前注册dll,这个就需要用到VS的生成事件. 一.位置: 项目-->右键-->属性 ...

  9. Nim教程【五】

    妈蛋,花了两天时间才搞定博客园的API, 比预期的时间整整多了1天, 不管怎么说,总算把博客园的客户端搞定了 这篇文章就是用博客园的客户端发布的, 先贴张图,给大家看看, 后面我会和博客园的领导商量一 ...

  10. HTTP权威指南阅读笔记一:HTTP概述

    HTTP协议版本: 1.HTTP/0.9:HTTP的1991原型版本称为HTTP/0.9.这个协议有很多严重的缺陷,只应该用与与老客户端的交互.HTTP/0.9只支持GET方法,不支持多媒体内容的MI ...