写在前面

 本文只说Axis2的用法。

1、下载与部署

  需要下载两个文件:

  下载地址:http://mirrors.cnnic.cn/apache/axis/axis2/java/core/1.7.1/axis2-1.7.1-war.zip,该文件是部署所用;

下载地址:http://mirrors.cnnic.cn/apache/axis/axis2/java/core/1.7.1/axis2-1.7.1-bin.zip,该文件是开发所用;

解压axis2-1.7.1-war.zip会得到一个axis2.war,将之扔到tomcat之webapps目录之下,启动tomcat,war包会自动解压;

测试:http://localhost:8080/axis2,看到欢迎界面了吧,恭喜第一步成功了!

2、配置axis2

   打开/axis2/WEB-INF/conf/axis2.xml配置文件,找到<parameter name="hotupdate">false</parameter>改为true;

只是为了热更新,方便调试。不配置也可以的。

3、HelloWorld

在/axis2/WEB-INF目录下,新建一个目录pojo,在该目录下新建一个java文件:

public class HelloWorld
{
public String sayHello(){
return "hello world!";
}
}

编译之,shift,在此处打开命令行,javac HelloWorld.java, 不用解释吧?

看到多了一个HelloWorld.class文件吧,就是它!

打开浏览器,输入:http://localhost:8080/axis2/services/HelloWorld;

4、pojo目录说明

   为什么是pojo目录,新建个不行么?

当然行,不过需要配置一下下,打开/axis2/WEB-INF/conf/axis2.xml配置文件,找到如下内容,新增目录

 <deployer extension=".class" directory="pojo" class="org.apache.axis2.deployment.POJODeployer"/>
<!--新增的目录-->
<deployer extension=".class" directory="pojo2" class="org.apache.axis2.deployment.POJODeployer"/>

注意:这里面放置的类不能保护package,另外如果多个目录,service名称不能重复.

5、no package?那怎么能行!

    打开eclipse,建一个java project,并建立com.ws.test.services包,在该包下创建一个类HelloService,代码如下:

package com.ws.test.services;

public class HelloService {

	/**
* 没有返回值
* @param info
*/
public void send(String info) {
System.out.println(info);
} /**
* 有返回值
* @param x
* @param y
* @return
*/
public int add(int x, int y) {
return x + y;
}
}

在src目录下新建META-INF文件夹,在其下建立两个文件:MANIFEST.MF和services.xml

serviecs.xml代码如下:

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

<service name="HelloService">
<description>一个简单的WebService</description>
<!-- 服务全类名 -->
<parameter name="ServiceClass">com.ws.test.services.HelloService</parameter> <operation name="send">
<!-- 信息接收器, 无返回值用:RPCInOnlyMessageReceiver-->
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation>
<operation name="add">
<!-- 信息接收器, 有返回值用:RPCMessageReceiver-->
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation> </service>

注:\axis2-1.7.1\samples\pojo\src\META-INF目录下有services.xml例子,可以复制过来修改。

6、打包

     选择包名和META-INF,export为server.jar,修改为servier.aar,扔进\webapps\axis2\WEB-INF\services目录下,重启tomcat

     测试:http://localhost:8080/axis2,点击services,出现如下界面:

     

成功了一大步!

   测试:http://localhost:8080/axis2/services/HelloService/send?info=hello,如果tomcat控制台输出hello,测试成功!

测试:http://localhost:8080/axis2/services/HelloService/add?x=1&y=4,如果返回5,测试成功!

7、如何发布多个Service呢?

    在com.ws.test.services目录下新建HelloService2,代码如下:

package com.ws.test.services;

public class HelloService2 {
public int sub(int x, int y) {
return x - y;
}
}

修改services.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
<service name="HelloService">
<description>一个简单的WebService</description>
<!-- 服务全类名 -->
<parameter name="ServiceClass">com.ws.test.services.HelloService
</parameter> <operation name="send">
<!-- 信息接收器, 无返回值用:RPCInOnlyMessageReceiver -->
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
</operation>
<operation name="add">
<!-- 信息接收器, 有返回值用:RPCInOnlyMessageReceiver -->
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation> </service> <service name="HelloService2">
<description>一个简单的WebService 2</description>
<parameter name="ServiceClass">com.ws.test.services.HelloService2
</parameter>
<operation name="sub">
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</operation>
</service> </serviceGroup>

重新打包,扔进\webapps\axis2\WEB-INF\services目录下;

测试:http://localhost:8080/axis2/services/HelloService2/sub?x=5&y=2,返回3,则测试成功!

8、如何在程序中调用webservice呢?

     先加入jar包,jar包路径:\axis2-1.7.1\lib\*.jar

(1)直接看代码吧,这个方法比较麻烦

package com.ws.test.client;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient; public class TestClient { public static void main(String[] args) throws AxisFault { RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions(); EndpointReference targetEPR = new EndpointReference(
"http://localhost:8080/axis2/services/HelloService");
options.setTo(targetEPR); Object[] entryArgs = new Object[] { 4, 2 };
//命名空间:wsdl:definitions标签targetNamespace属性
QName opName = new QName("http://services.test.ws.com", "add"); //有返回值
Object result = serviceClient.invokeBlocking(opName, entryArgs,
new Class[] { int.class })[0];
System.out.println(result); opName = new QName("http://services.test.ws.com", "send"); //无返回值
serviceClient.invokeRobust(opName, new Object[]{"hello world!"}); } }

 (2)使用wsdl2java

使用方法:

①先配置axis2客户端环境变量

AXIS2_HOME:D:\Program Files\axis2-1.7.1

path追加:%AXIS2_HOME%\bin

②在项目目录下,即跟src目录同级,shift进入命令行窗口,输入如下命令:

wsdl2java -uri http://localhost:8080/axis2/services/HelloService?wsdl -p com.ws.test.stubs -s

③进入项目F5

是不是多了一个包叫做:com.ws.test.stubs下面有给类叫做HelloServiceStub,打开看看,吓死宝宝了,好多内容,还好不用管他。

④客户端代码,直接看代码了

package com.ws.test.client;

import java.rmi.RemoteException;
import com.ws.test.stubs.HelloServiceStub;
import com.ws.test.stubs.HelloServiceStub.Add; public class TestClient2 { public static void main(String[] args) throws RemoteException {
HelloServiceStub stub = new HelloServiceStub();
Add add = new Add();
add.setX(1);
add.setY(2);
int result = stub.add(add).get_return();
System.out.println(result);
}
}

 宝宝用起来很舒服!

9、wsdl2java好强大,是不是可以转换任何的WebService啊?

当然可以了,废话少说,代码如下:

①干啥?当然运行命令了

wsdl2java -uri http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl -p com.ws.test.stubs -s

②客户端测试代码

package com.ws.test.client;

import java.rmi.RemoteException;
import com.ws.test.stubs.WeatherWebServiceStub;
import com.ws.test.stubs.WeatherWebServiceStub.ArrayOfString;
import com.ws.test.stubs.WeatherWebServiceStub.GetSupportCity; public class TestWeather { public static void main(String[] args) throws RemoteException {
WeatherWebServiceStub stub = new WeatherWebServiceStub();
GetSupportCity gsc = new GetSupportCity();
gsc.setByProvinceName("山东");
ArrayOfString as = stub.getSupportCity(gsc).getGetSupportCityResult();
for (String city : as.getString()) {
System.out.println(city);
}
}
}

看控制台输出:

济南 (54823)
青岛 (54857)
淄博 (54830)
威海 (54774)
曲阜 (54918)
临沂 (54938)
烟台 (54765)
枣庄 (58024)
聊城 (54806)
济宁 (54915)
菏泽 (54906)
泰安 (54827)
日照 (54945)
东营 (54736)
德州 (54714)
滨州 (54734)
莱芜 (54828)
潍坊 (54843)

ok了,结束。

大脑再牛逼,不如写博客!

WebService之Axis2的更多相关文章

  1. webservice的Axis2入门教程java版

    本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebServi ...

  2. WebService之Axis2 (3):使用services.xml文件发布WebService

    用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中.这 ...

  3. webservice wsdl axis2报错 Provider com.bea.xml.stream.MXParserFactory not found

    错误信息: Exception in thread "main" javax.xml.stream.FactoryConfigurationError: Provider com. ...

  4. WebService之Axis2 后续(6)~(10)目录

    WebService大讲堂之Axis2(6):跨服务会话(Session)管理 WebService大讲堂之Axis2(7):将Spring的装配JavaBean发布成WebService WebSe ...

  5. WebService之Axis2(5):会话(Session)管理

    WebService给人最直观的感觉就是由一个个方法组成,并在客户端通过SOAP协议调用这些方法.这些方法可能有返回值,也可能没有返回值.虽然这样可以完成一些工具,但这些被调用的方法是孤立的,当一个方 ...

  6. WebService之Axis2(4):二进制文件传输

    在<WebService大讲堂之Axis2(2):复合类型数据的传递>中讲过,如果要传递二进制文件(如图像.音频文件等),可以使用byte[]作为数据类型进行传递,然后客户端使用RPC方式 ...

  7. Java动态调用webService,axis2动态调用webService

    Java动态调用webService axis2动态调用webService >>>>>>>>>>>>>>>& ...

  8. Axis2 WebService客户端Axis2调用

    第一RPC方式,不生成客户端代码 第二,document方式,不生成客户端代码 第三,用wsdl2java工具,生成客户端方式调用 package samples.quickstart.client; ...

  9. WebService之Axis2(2):复合类型数据的传递

    在实际的应用中,不仅需要使用WebService来传递简单类型的数据,有时也需要传递更复杂的数据,这些数据可以被称为复合类型的数据.数组与类(接口)是比较常用的复合类型.在Axis2中可以直接使用将W ...

随机推荐

  1. VS单元测试入门实践教程

    摘要:本教程不会介绍单元测试的基本理论知识,也不会和大家讨论在实际项目中是否需要写单元测试代码的问题.但是如果你此时想使用VS中的单元测试的工具来测试某个方法是否正确,可你又从来没真正实践过,那么本教 ...

  2. HTML——window.document对象练习题

    1.选项卡效果 第一种方法:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  3. L10 安装网卡驱动

    一.安装网卡驱动 1. 检查各种依赖包是否安装 2. 安装 加载网卡驱动: ip:

  4. [string]Roman to Integer,Integer to Roman

    一.Roman to Integer Given a roman numeral, convert it to an integer. Input is guaranteed to be within ...

  5. C++ Primer 读书笔记:第10章 关联容器

    第10章 关联容器 引: map set multimap multiset 1.pair类型 pair<string, int> anon anon.first, anon.second ...

  6. Linux定时任务Crontab命令详解

    linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另 外, 由于使用者自己也可以设置计划任务,所以, ...

  7. phpcms在自定义模块中的自定义标签分页

    如果你是一个经验丰富的phpcms二次开发人员,本篇文章可以忽略不计,因为这里的写法自己都觉得很恶心        今天在开发一个网站自建了一个模块叫做论坛模块,目录名称:luntan        ...

  8. php 文件操作类

    class fileInit { /** * 创建空文件 * @param string $filename 需要创建的文件 * @return */ public function create_f ...

  9. SQL Server 分离与附加数据库

    前期准备: 创建数据库 create database Studio     on primary     (name ='Studio',filename ='E:\Studio.mdf'),    ...

  10. 【git】error: Your local changes to the following files

    今天在服务器上git pull是出现以下错误: error: Your local changes to the following files would be overwritten by mer ...