Axis2构建Web Service应用(无需Stub方式)

2023-10-30 09:38

本文主要是介绍Axis2构建Web Service应用(无需Stub方式),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介:Web Service是现在最适合实现SOA的技术,而Axis2是实现Web Service的一种技术框架(架构)

 

本文介绍了如何使用tomcat和Axis2开发、部署和使用Web Service,并且开发了一个简单的例子,通过例子开发流程来向大家展示如何创建Axis2的服务端和客户端。该例子与其他例子最大的不同是不是用客户端stub存根方式调用web服务,提供了一种统一的客户端调用方式。希望读者读完本文后能够快速上手Axis2的应用开发。

   一、开发环境和软件下载

  开发环境是:Eclipse3.4 + JDK1.6 + Tomcat6.0 + Axis2 1.3。这些软件都是各个软件最新版本,下载方式由于软件网站的更新,地址也会更新,这里就不再贴出来了,就请读者到相应网站下载。
  软件下载和安装:
    (1) JDK1.6环境变量配置:
    JAVA_HOME: C:\Program Files\Java\jdk1.6.0_07,其中C:\Program Files\Java是我的JDK安装目录。
    Path: %JAVA_HOME%\bin
    Classpath: .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
   
    (2) tomcat6.0环境变量配置:
    CATALINA_HOME:C:\Program Files\Apache Software Foundation\Tomcat 6.0, 其中C:\Program Files\Apache Software Foundation是我的Tomcat 6.0安装目录。
    其实这里tomcat6.0不需要配置环境变量,因为最新版本不需要配置。

    (3) Axis2 1.3下载:从[url]http://apache.justdn.org/ws/axis2/1_4_1/[/url]网站上下载axis2-1.3-war.zip 。将其解压,把其中的axis2.war文件复制到tomcat的webapps目录下即可完成Axis2的安装。
  安装完成后,启动tomcate,在地址栏内输入[url]http://localhost:8080/axis2/[/url],打开如下图界面,表明安装正确:



    (4) Eclipse3.4下载:到[url]www.eclipse.org[/url]官方网站下载,直接解压后配置Windows/Preference中的JDK即可。

    (5) 下载Eclipse Axis2插件:axis2-eclipse-codegen-wizard-1.4.zip和axis2-eclipse-codegen-wizard-1.4.zip。下载地址是:[url]http://apache.justdn.org/ws/axis2/tools/1_4_1/      [/url] 这两个插件解压到Eclipse安装目录下plugins中即可。打开Eclipse,选择File/New/Other菜单项,看到如下界面表明安装成功:



    安装这两个插件的目的是:方便生成Axis2服务和生成Axis2客户端,这里我使用了无Stub方式的客户端调用服务,因此就不演示生成Axis2客户端的功能了。

  二、构建服务
   

在开发环境及 Axis2 环境搭建好后,我们便可着手 Web Services 服务的开发:
1.建立要发布的Web Service

      (1) Eclispse 中添加一个用户库命名为 axis2 ,将 axis2\lib 下的包均添加进来。 这一步操作的目的是为了以后工程添加 axis2 所需的 jar 文件方便。
    (2)
建立一个 JavaProject 命名为 ws ,将 axis2 用户库加入到 build path 中。
    (3)
现在开始编写要发布的 WebSevice ,在 src 中建包 briup ,建立 Hello 类如下:
package briup;

public class Hello {
  public String sayHello(String user) {
    return "Hello, " + user;
  }
}

      2.发布Web Service

      打包要发布的 Service Eclipse New --> File --> Other --> Axis2 wizards --> Axis2 Services Archiver ,按照向导选择刚建立的类编译后的 class 文件。
    (1)
选择 class 文件目录,注意,不是 java 源文件,而是 classes 目录,这里需要注意由于你的类是带包briup的,因此不要选到包这个目录。
(2) 连按两次 “Next>” ,选中 “Generate the service xml automatically”
(3) 按下一步,输入 service 名称和类名,我这里输入的服务名是:ws;类名是我们刚刚写的类名:briup.Hello,这里需要注意加入完整的包名。
(4) 按下一步,输入 service 文件的保存路径和文件名,完成。
选择生成目录为:C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\services,也可以选择其他目录,然后copy到这一目录下。

3.测试Web Service

打开[url]http://localhost:8080/axis2/services/listServices[/url]页面,可以看到ws服务,点击进到ws的wsdl页面:[url]http://localhost:8080/axis2/services/ws?wsdl[/url],表明服务部署正确。

三、编写客户端代码调用服务

我的这个例子与其他例子最大的不同就在这里,其他例子一般需要根据刚才的服务wsdl生成客户端stub,然后通过stub来调用服务,这种方式显得比较单一,客户端必须需要stub存根才能够访问服务,很不方面。
本例子的客户端不采用stub方式,而是一种实现通用的调用方式,不需要任何客户端存根即可访问服务。只需要指定对于的web servce地址、操作名、参数和函数返回类型即可。代码如下:

package briup;

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 WsClient {

    private RPCServiceClient serviceClient;
    private Options options;
    private EndpointReference targetEPR;
   
    public WsClient(String endpoint) throws AxisFault {
        serviceClient = new RPCServiceClient();
        options = serviceClient.getOptions();
        targetEPR = new EndpointReference(endpoint);
        options.setTo(targetEPR);
    }
    public Object[] invokeOp(String targetNamespace, String opName,
            Object[] opArgs, Class<?>[] opReturnType) throws AxisFault,
            ClassNotFoundException {
        // 设定操作的名称
        QName opQName = new QName(targetNamespace, opName);
        // 设定返回值
       
        //Class<?>[] opReturn = new Class[] { opReturnType };

        // 操作需要传入的参数已经在参数中给定,这里直接传入方法中调用
        return serviceClient.invokeBlocking(opQName, opArgs, opReturnType);
    }
   
    public static void main(String[] args) throws AxisFault, ClassNotFoundException {
        // TODO Auto-generated method stub
        final String endPointReference = "http://localhost:8080/axis2/services/ws";
    final String targetNamespace = "http://briup";
    WsClient client = new WsClient(endPointReference);
    
    String opName = "sayHello";
    Object[] opArgs = new Object[]{"Repace中心"};
    Class<?>[] opReturnType = new Class[]{String[].class};
    
    Object[] response = client.invokeOp(targetNamespace, opName, opArgs, opReturnType);
    System.out.println(((String[])response[0])[0]);
  }

}

运行该程序,点击Run As->Java application,可以看到控制台端口的输出是:Hello, Repace中心  表明客户端调用成功。
该例子最大的不同和优势表现在客户端的调用方式,或者说是发起服务调用的方式,虽然比起客户端stub存根的方式,代码稍多,但是这种方式统一,不需要生产stub存根代码,解决了客户端有很多类的问题。如果读者对这些代码进一步封装,我想调用方式很简单,只需要传递相关参数,这更好地说明了服务调用的优势。而且这种方式更加简单明了,一看便知具体含义。而不需要弄得stub类的一些机制。
原文地址: http://panpan.blog.51cto.com/489034/ 119204

这篇关于Axis2构建Web Service应用(无需Stub方式)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/307006

相关文章

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用TomCat,service输出台出现乱码的解决

《使用TomCat,service输出台出现乱码的解决》本文介绍了解决Tomcat服务输出台中文乱码问题的两种方法,第一种方法是修改`logging.properties`文件中的`prefix`和`... 目录使用TomCat,service输出台出现乱码问题1解决方案问题2解决方案总结使用TomCat,

Java中List转Map的几种具体实现方式和特点

《Java中List转Map的几种具体实现方式和特点》:本文主要介绍几种常用的List转Map的方式,包括使用for循环遍历、Java8StreamAPI、ApacheCommonsCollect... 目录前言1、使用for循环遍历:2、Java8 Stream API:3、Apache Commons

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

虚拟机与物理机的文件共享方式

《虚拟机与物理机的文件共享方式》文章介绍了如何在KaliLinux虚拟机中实现物理机文件夹的直接挂载,以便在虚拟机中方便地读取和使用物理机上的文件,通过设置和配置,可以实现临时挂载和永久挂载,并提供... 目录虚拟机与物理机的文件共享1 虚拟机设置2 验证Kali下分享文件夹功能是否启用3 创建挂载目录4

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3