Axis2与Web项目整合

article/2025/9/14 2:17:01

一、说明:

       上一篇介绍了通过使用Axis2来发布和调用WebService,但是是把WebService发布在Axis2提供的项目中,如果我们需要在自己的Web项目中来使用Axis2发布WebService该怎么做呢?

       本篇即介绍在Web项目中使用Axis2来发布WebService.

二、具体操作:

①   新建一个动态的web工程 (Dynamic Web project)

      本例中新建的工程名为:AxisWebDemo

②  将上次下载的  axis2-1.6.4-war.zip 文件解压到相应的目录,将目录中的axis2.war文件放到Tomcat服务器的webapps目录中(本文使用的Tomcat的版本是7.x),并启动Tomcat。 这时在Tomcat的webapps文件夹中会出现一个 名为 axis2 的文件夹(其实这就是部署好的 axis2工程),如下图

  

③   将 axis2 下的 axis2-web 文件夹移动到我们 AxisWebDemo 工程的 WebContent目录下

       将WEB-INF 下的 lib 、conf  、modules文件夹移动到 AxisWebDemo工程的 WEB-INF目录下 ,结构如下图:

④   在src右键,新建package : com.elgin.webservice  

       在这个包中新建一个我们需要发布的 WebService 服务的类: WebServiceDemo

      代码如下:

package com.elgin.webservice;public class WebServiceDemo {public String  sayHello(String name){return "hello " + name;}public int getAge(){return 26;}
}
⑤   在 AxisWebDemo 工程的 WEB-INF 下新建如下层次结构目录 : services/webservices/META-INF/services.xml  ,如下图所示:

经过我的验证,发现 :目录层次必须是  services / 任意名称文件夹  / META-INF / services.xml   ,否则 WebService发布会失败 ,也就是说上图的层次中 ,只有webservice这个文件夹的名字是可以自由指定,其它的文件、文件夹名字都是固定的!

services.xml 配置文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>  
<!- name属性配置WebService的名称 -><service name="myService">  <description>Web Service</description>  
<!-- ServiceClass属性配置提供WebService服务类的全类名 --><parameter name="ServiceClass">com.elgin.webservice.WebServiceDemo</parameter>  <messageReceivers>  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />  </messageReceivers>  </service>  
</serviceGroup> 
⑥   在  AxisWebDemo 工程的 web.xml 文件中加入axis2的配置支持:

<!-- 加入axis2支持 --><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>

经过以上6个步骤 , axis2 已经整合到工程中了 ,把项目加入的Tomcat中,启动Tomcat服务器 ,在浏览器中输入以下URL:

http://localhost:8080/AxisWebDemo/services/listServices 

如果出现下图所示的信息,说明你的 WebService服务发布成功了:


上图中的 myService 即是你在 services.xml 中配置的 WebService的名称

输入下面URL:

http://localhost:8080/AxisWebDemo/services/myService?wsdl

出现下图所显示的关于服务的xml信息:

注意上图中  <wsdl:definitions> 元素中的 targetNamespace的值  ,上一篇介绍中也提到过 ,是提供WebService服务的类所在的包名倒过来。

三、调用上面工程中发布的WebService服务:

Java调用代码:

package com.elgin.webservice.axis2;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
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 RPCClient {public static String address2="http://localhost:8080/AxisWebDemo/services/myService?wsdl";public static void main(String[] args) throws IOException{testWebDemo();}@SuppressWarnings("rawtypes")public static Object[] invoke(String method,Object[] params,Class[] classes) throws AxisFault{//使用RPC方式调用WebServiceRPCServiceClient client=new RPCServiceClient();Options option=client.getOptions();//指定调用的URLEndpointReference reference=new EndpointReference(address2);option.setTo(reference);/** 设置要调用的方法* http://ws.apache.org/axis2 为默认的(无package的情况)命名空间,* 如果有包名,则为 http://axis2.webservice.elgin.com ,包名倒过来即可* method为方法名称* */QName  qname=new QName("http://webservice.elgin.com", method);//调用远程方法,并指定方法参数以及返回值类型Object[] result=client.invokeBlocking(qname,params,classes);return result;}public static void testWebDemo() throws AxisFault{Object[] result=invoke("sayHello", new Object[]{"elgin"}, new Class[]{String.class});System.out.println(result[0]);result=invoke("getAge", new Object[]{}, new Class[]{int.class});System.out.println(result[0]);}}

运行结果:




http://chatgpt.dhexx.cn/article/Y36bo6Wg.shtml

相关文章

Axis2中文手册

中文原文 http://tenn.javaeye.com/blog/100736 英文原文 http://ws.apache.org/axis2/1_0/userguide.html 概述 这个说明文档涉及以下内容&#xff1a;  如何使用 axis2 创建 web service 和客户端程序  如何定制一个模块 (Module) 并在 web service 中使用它  Sam…

axis2的使用(转载)

通过axis2发起WS请求时添加SOAP header 首先要获得一个ServiceClient对象&#xff0c;因为这个对象是org.apache.axis2.client.Stub里面定义的&#xff0c;所以你生成的stub里面应该直接就可以使用这个对象&#xff0c;或者调用stub的_getServiceClient()方法来获取这个对象。 …

SpringBoot2 整合 AXIS2 服务端和客户端

文章目录 一、AXIS2服务端1. 版本选型2.导入依赖3. services.xml4.Axis2配置类5.服务接口6.服务接口实现类7. FileCopyUtils工具类8. 测试验证 二、AXIS2服务端2.1. 客户端类2.2. 服务调用测试开源源码. 一、AXIS2服务端 1. 版本选型 阿健/框架版本spring-boot2.5.5axis21.7.…

WebService之Axis2系列教程(一)Axis2的下载、安装和使用

Axis2是目前比较流行的WebService引擎。WebService被应用在很多不同的场景。例如&#xff0c;可以使用WebService来发布服务端 Java类的方法&#xff0c;以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。WebService还经常被使用在SOA中&#x…

Axis2 webservice学习总结

一、学习课件目录&#xff1a; Axis2(WebService)培训资料1 - 百度文库 (baidu.com) WebService大讲堂之Axis2 - 百度文库 (baidu.com) 二、学习总结&#xff1a; Web Service是构建互联网分布式系统的基本部件&#xff0c;它是一个应用程序&#xff0c;它向外界暴露出一个…

小白轻松使用axis2构建webservice

引言&#xff1a; 使用axis2是来实现webservice接口是比较常见的&#xff0c;就我来说&#xff0c;如果要学一个首次接触东西&#xff0c;简单了解相关基础概念后&#xff0c;就希望自己能够简单快速的实现一个例子&#xff0c;在学习一门开发语言的时候&#xff0c;一个hello…

模板引擎 Velocity语法

Velocity是一个基于java的模板引擎&#xff08;template engine&#xff09;&#xff0c;它允许任何人仅仅简单的使用模板语言&#xff08;template language&#xff09;来引用 由java代码定义的对象。作为一个比较完善的模板引擎&#xff0c;Velocity的功能是比较强大的&…

velocity 模板语法

velocity 模板语法 前言1. 访问1.1 变量1.2 属性1.3 方法 2. 指令2.1 #set 创建变量2.2 #if/#elseif/#else 分支控制2.3 #foreach 循环控制2.4 #include - 引入本地文件&#xff0c;文本展示2.5 #parse - 引入本地文件&#xff0c;velocity 解析后展示2.6 #stop - 停止模板解析…

finalize() 原理

finalize 方法的作用是&#xff1a; 如果对象在进行可达性分析后发现没有与 GC Roots 相连接的引用链&#xff0c;那他将会被第一次标记并且进行一次筛选&#xff0c;筛选的条件是此对象是否有必要执行 finalize 方法。 注意&#xff1a;当对象没有覆盖 finalize 方法&#xf…

finalize()

注&#xff1a;本文的目的并不是鼓励使用finalize方法&#xff0c;而是大致理清其作用、问题以及GC执行finalize的过程。 1. finalize的作用 finalize()是Object的protected方法&#xff0c;子类可以覆盖该方法以实现资源清理工作&#xff0c;GC在回收对象之前调用该方法。fina…

java finalize方法详解

1. finalize的作用 finalize()是Object的protected方法&#xff0c;子类可以覆盖该方法以实现资源清理工作&#xff0c;GC在回收对象之前调用该方法。finalize()与C中的析构函数不是对应的。C中的析构函数调用的时机是确定的&#xff08;对象离开作用域或delete掉&#xff09;&…

java中finalize()方法

finalize 垃圾回收机器&#xff08;Garbage Collection&#xff09;,也叫GC&#xff0c;垃圾回收器主要有一下特点&#xff1a; 当对象不再被程序所使用的时候&#xff0c;垃圾回收器将会将其回收垃圾回收是在后台运行的&#xff0c;我们无法命令垃圾回收器马上回收资源&…

Finalize详解

finalize()方法详解&#xff0c;前言&#xff0c;finalize()是Object的protected方法&#xff0c;子类可以覆盖该方法以实现资源清理工作&#xff0c;GC在回收对象之前调用该方法。 finalize的作用: (1)finalize()与C中的析构函数不是对应的。C中的析构函数调用的时机是确定的…

finalize的理解

finalize的理解 一般的回答&#xff1a;它是Object中的一个方法&#xff0c;子类重写它&#xff0c;垃圾回收时候方法会被调用&#xff0c;可以再其中进行一些资源的解释和清理工作。 优秀的回答&#xff1a;将资源的释放和清理放在finalize方法中是非常不好的&#xff0c;影…

Java FX swt_DOC-13-08 JavaFX与SWT的协作性

DOC-13-08 JavaFX与SWT的协作性 本章展示了如何在SWT应用程序中加入一个JavaFX场景图&#xff0c;以及如何使SWT和JavaFX控件协作。 介绍 如果你开发SWT应用程序&#xff0c;你知道SWT使用本地操作系统的控件&#xff0c;而且并不能简单的配置来使用高级GUI特性&#xff0c;比如…

Java SWT 表格Table如何动态显示信息

让Table显示信息用到的是TableItem类。创建一个TableItem类对象&#xff0c;通过调用该对象的setText( new String[ ] )方法可以显示一行数据&#xff0c;循环调用则可以显示多条不同的数据。 一、步骤: 1. 创建Table类 。最好将Table类设置为全局变量。并且设置该表格有多少列…

Java ——SWT利用DateTime获取日历控件

1、话不多说&#xff0c;先看效果图&#xff1a; 19是我选择的日期&#xff0c;其他功能就不一一介绍了&#xff0c;这个看你们自己。 2、Test01界面&#xff1a; Test01代码如下&#xff1a; package test; import org.eclipse.swt.widgets.Display; import org.eclipse.swt…

shell swt 样式_SWT之路:SWT图像显示

简明现代魔法 -> Java编程语言 -> SWT之路&#xff1a;SWT图像显示 SWT之路&#xff1a;SWT图像显示 2009-10-03 程序演示 还是先用SWT Desiner创建界面程序。然后创建一个Display对象和Image对象&#xff0c;和一个GC对象。类org.eclipse.swt.graphics.GC是一个封装了所…

eclipse java swt_Eclipse下搭建SWT开发环境

0.序言 还是老风格&#xff0c;从头写些基本的东西&#xff0c;帮助自己&#xff0c;也帮助正处于困惑中的别人。今天介绍的是Eclipse下的SWT的配置过程。自己前两天要做个项目&#xff0c;配置了半天都不正确&#xff0c;后来慢慢总结了一下&#xff0c;不同环境配置的方法可能…

java swt button_JAVA.SWT/JFace: SWT基本组件之按钮(Button)

《Eclipse SWT/JFACE 核心应用》 清华大学出版社 5.2 按钮(Button) 按钮有普通按钮(SWT.PUSH)、单选按钮(SWT.RADIO)、多选按钮(SWT.CHECK)、箭头按钮(SWT.ARROW)和切换按钮(SWT.TOGGLE)几种类型。 同时&#xff0c;也可以设置按钮的样式。设置按钮文字对齐的样式有SWT.LEFT、S…