AXIS2的WEBSERVICE集成

如何将基于Axis2的Web Service集成到自己的webapp

本文主要描述如何使用Apache开源项目Axis提供的API来实现Web Services并集成到我们的应用程序当中。

    本文的读者应有JAVA web 应用开发基础。应该具有看过WSDL,SOAP,XML等的基本规范。熟悉Eclipse+MyEclipse开发环境。

一、环境准备

使用Axis来开发Web services 需要准备 web 服务器,Axis API。本文使用的Web container 是Tomcat5.5, Axis API 采用版本2。

1.1软件下载准备

Tomcat下载地址:http://tomcat.apache.org/download-55.cgi#5.5.20

Axis标准包:

http://apache.etoak.com/ws/axis2/1_5_1/axis2-1.5.1-bin.zip

Axis War包:

http://apache.etoak.com/ws/axis2/1_5_1/axis2-1.5.1-war.zip

Eclipse+MyEclipse:可以到官方网站下载(本文为3.3+6.5GA)

1.2安装

A.首先搭建开发环境,需要将下载到的Eclipse解压缩到一个目录。

B. 安装MyEclipse6.5GA。然后启动MyEclipse。

C.下面开始搭建Web Services的部署环境。将下载的tomcat包解压缩到一个目录。完成web container的安装。

E.将axis2.war包拷贝到tomcat安装目录下的webapps目录中。

F.启动Tomcat(windows 下为TOMCA_HOME/bin中的startup.bat;Linux,unix环境为startup.sh文件),打开浏览器输入并访问:http://ip:port/axis2来查看。(如果没有进行配置文件的修改此地址应该为http://localhost:8080/axis2),如果能看到下面的页面则说明已经安装完成。

二、Quick Start

环境准备好后,先从一个简单的例子开始。以便对使用Axis来开发Web services的大致流程有个了解。

2.1编写自己的应用服务端。

A.启动MyEclipse,新建立一个WebApps(File->New->Project->Web Project),给Project Name 为SayHello,其他保持不改变。目录结构如下图所示:

B.我们需要一个简单的web service,建包com.dm.service , 包下新建类MyService。代码如下:

package com.dm.service;

 

publicclass MyService {

    public String sayHello(String name) {

        return"Hello, " + name + ".";

    }

}

 

C.将Axis2集成到我们自己的webapp中。首先我们需要将Axis2 Servlet写到我们的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>

 

D.把tomcat安装目录下的webapps/axis2/WEB-INF下的service和conf文件件拷至SayHello下的WEB-INF目录下,并修改conf目录下的axis2.xml,找到<module ref="addressing"/>并将其注释掉。把lib下的jar包也拷过去。以下jar包是必须的。

activation-1.1.jar

axiom-api-1.2.8.jar

axiom-impl-1.2.8.jar

axis2-adb-1.5.1.jar

axis2-kernel-1.5.1.jar

axis2-transport-http-1.5.1.jar

axis2-transport-local-1.5.1.jar

commons-fileupload-1.2.jar

commons-httpclient-3.1.jar

geronimo-javamail_1.4_spec-1.6.jar

geronimo-stax-api_1.0_spec-1.0.1.jar

geronimo-ws-metadata_2.0_spec-1.1.2.jar

httpcore-4.0.jar

neethi-2.0.4.jar

woden-api-1.0M8.jar

wsdl4j-1.6.2.jar

wstx-asl-3.2.4.jar

XmlSchema-1.4.3.jar

 

E.接下来,我们需要为MyService写一个部署描述。在services下新建SayHello/META-INF路径,META-INF下新建services.xml,内容如下:

<service name="SayHello">

    <description> 

        HelloWorld Service Example  

    </description> 

    <parameter name="ServiceClass"> 

        com.dm.service.MyService    

    </parameter> 

    <operation name="sayHello"> 

        <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 

    </operation>

</service>

 

F.启动tomcat后访问http://localhost:8080/SayHello/services/SayHello?wsdl能看到服务信息了。

2.2 编写客户端。

A.新建立一个java工程(File->New->Project->java Project),给Project Name 为SayHelloClient。

B.导入SayHello项目中相同的jar包。

C.编写客户端调用程序。在src下建包client,在包中写一个Client.java类。内容如下:

package client;

 

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.rpc.client.RPCServiceClient;

 

public class Client {

    public static void main(String[] args) {

        try{

            RPCServiceClient secl = new RPCServiceClient();// 使用RPC方式调用WebService

            Options op = secl.getOptions();

            EndpointReference targetEPR = new EndpointReference("http://localhost:8080/SayHello/services/SayHello");

            op.setTo(targetEPR);// 指定调用WebServiceURL

            Object[]opAddEntryArgs=new Object[]{"香帅"}; // 指定sayHello方法的参数值

            Class[] classes= new Class[]{String.class}; // 指定sayHello方法返回值的数据类型的Class对象

            QName opAddEntry=new QName("http://service.dm.com","sayHello"); // 指定要调用的sayHello方法及WSDL文件的命名空间

            System.out.println(secl.invokeBlocking(opAddEntry,opAddEntryArgs,classes)[0]);  //调用sayHello方法并输出该方法的返回值

        }catch(Exception e){

            e.printStackTrace();

        }

    }

}

 

D.运行,结果为

Hello, 香帅.

 

 

至此,实现了在我们的应用中集成Axis2开发WebService的一个简单demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值