WebService-axis2
WebService框架有好多,常用的cxf,axis2等,axis2的配置过程相对简单,不用编写接口,在实现。只需要一个Service服务类即可。配置过程大致如下:
1,导入jar包(这里我是把axis2使用的所有jar全部放到项目当中,可以根据自己使用的功能进行增删,使用的版本是1.6.2,开发环境jdk 1.6):



2,实现服务端WebService服务,会使用到javax.ws的注解
import javax.jws.WebMethod;
import javax.jws.WebService;
public class TestService {
@WebMethod(action="sayHello",operationName="sayHello")
public String sayHello(String name){
return "hello "+name;
}
}
3,修改Web.xml文件,添加如下内容:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<display-name>Apache-Axis Servlet</display-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>AxisAdminServlet</servlet-name>
<servlet-class>org.apache.axis2.webapp.AxisAdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
4,创建service.xml,测试用的service.xml文件内容如下:
<serviceGroup>
<!-- servlet拦截serices/后面的请求,此处配置为TestService对应的服务名称,则访问时为/services/services/mehtod?param=xxx -->
<service name="TestService" scope="application">
<parameter name="ServiceClass">com.sample.axis2.serivce.TestService</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
</service>
</serviceGroup>
5,发布服务,通过浏览器访问:


6,测试,axis2属于resetFul WebService,即可以通过post请求传入参数,例如:http://localhost:8090/axis2-webService/services/TestService/sayHello?name=test%20for%20axis2
返回值就会出现如下内容:

7,通过应用程序调用webserice服务:
aixs2的调用方可以直接使用webservice地址进行,也可以将webservice接口文件下载本地进行调用,不同方式获取接口文件的可以查看 http://axis.apache.org/axis2/java/core/docs/quickstartguide.html官网地址给出的内容。
1)在测试程序里,使用动态代理的方式进行调用,内容如下:
public static String RPCInvoke() throws AxisFault{
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
Class<?>[] opReturnType = new Class[] { String[].class };//返回值类型
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8090/axis2-webService/services/TestService?wsdl");
options.setTo(targetEPR);
QName opAddEntry = new QName("http://serivce.axis2.sample.com", "sayHello");//调用webservice方法
Object[] opAddEntryArgs = new Object[] { "test" };//传入参数
Object[] res = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs,opReturnType);//调用方法并获取返回值
System.out.println(((String[]) res[0])[0]);//输出返回值
return ((String[]) res[0])[0];
}
2)另一种调用方式会显得麻烦一些,使用OMElement,在调用请求之前你需要创建这个对象,OMElement继承自OMNode对象,如果想要更深入了解可以查看这个链接:http://ws.apache.org/axiom/apidocs/org/apache/axiom/om/OMElement.html下的doc说明。
public static OMElement getEchoOMElement() { //这个方法主要是创建OMElement对象
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://serivce.axis2.sample.com", "example1");//webservice的targetNameSpaces,
OMElement method = fac.createOMElement("sayHello", omNs); //调用的webservice方法
OMElement value = fac.createOMElement("name", omNs);//参数名称
value.addChild(fac.createOMText(value, "Axis2 Echo String "));//参数
method.addChild(value);
return method;
}
public static void OMEInvoke() throws AxisFault{ //调用webservice,这种调用方式和在浏览器里调用返回结构相同。所以你需要将返回值在xml和object之间进行转换,获得需要数据
Options options = new Options();
EndpointReference targetEPR = new EndpointReference(
"http://localhost:8090/axis2-webService/services/TestService");
options.setTo(targetEPR);
options.setAction("urn:echo");
//Blocking invocation
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMElement result = sender.sendReceive(getEchoOMElement());
System.out.println(result);
}
可以看一下他的返回值:
<ns:sayHelloResponse xmlns:ns="http://serivce.axis2.sample.com"><ns:return>hello Axis2 Echo String </ns:return></ns:sayHelloResponse>
WebService-axis2的更多相关文章
- webservice axis2客户端设置代理方法(公司网络通过代理访问时)
webservice axis2客户端设置代理方法(公司网络通过代理访问时) UploadProcessInServiceStub stub = new UploadProcessInServic ...
- WebService(axis2),整合springmvc
webservice:不同组织或者部门之间互通数据 https://www.cnblogs.com/buggou/p/8183738.html 1 package com.sh.test; 2 3 4 ...
- Java动态调用webService,axis2动态调用webService
Java动态调用webService axis2动态调用webService >>>>>>>>>>>>>>>& ...
- 使用axis2进行WebService的开发
使用axis2进行WebService的开发 Apache Axis2 是 Apache Axis SOAP 项目的后继项目.此项目是 Web 服务核心引擎的重要改进,目标是成为 Web 服务和面向服 ...
- Axis2与Web项目整合
一.说明: 上一篇介绍了通过使用Axis2来发布和调用WebService,但是是把WebService发布在Axis2提供的项目中,如果我们需要在自己的Web项目中来使用Axis2发布WebServ ...
- JAVA实现WEBSERVICE 上传下载
因公司新项目决定使用webservice与其它项目做交互,于是开始了webservice之旅. 初入webservice的时候第一个接触的工具叫axis2,网上有着大量的简单案例.功能很强大,代 ...
- java-webService(调用wsdl接口)
使用Axis或XFire实现WebService: Axis2是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是Web ...
- axis2开发webservice程序
一.环境 eclipse + jdk 6.0 + win7 64位 +tomcat7.0 二.创建服务端程序 1.新建web项目,webserviceTest 2.下载axis2,将lib目录下的ja ...
- Java借助axis2发布WebService
Webservice: 1.Xml: 2.WSDL: Web service描述语言(WSDL)就是这样一个基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web service及其函数.参 ...
- 使用Axis2建立WebService
Axis是apache重量级的WebService框架,虽然相比Xfire和CXF而言相对比较臃肿,但是企业中最常用的就是Axis,Axis2是Axis的升级版: 建立一个最简单的Axis2 W ...
随机推荐
- OpenVPN CentOS7 安装部署配置详解
一 .概念相关 1.vpn 介绍 vpn 虚拟专用网络,是依靠isp和其他的nsp,在公共网络中建立专用的数据通信网络的技术.在vpn中任意两点之间的链接并没有传统的专网所需的端到端的物理链路,而是利 ...
- HelloWorld改编,仿bilibili手机端(一)——侧滑菜单界面布局
讲解目录: 1.要实现的效果图展示及详细分析HelloWorld项目的xml布局文件(基于navigation drawer activity) 2.简单修改menu及menu相关详解 ...
- FPGA与PCI-E
从并行到串行: PCI Express(又称PCIe)是一种高性能.高带宽串行通讯互连标准,取代了基于总线的通信架构,如:PCI.PCI Extended (PCI-X) 以及加速图形端口(AGP). ...
- MySQL 高效查询
在“现场加号&预约排队”项目中,“号贩子排查任务”在线下测试的时候没有问题,但是线上后,由于线上的数据量较大,导致在执行查询的时系统崩溃:后来经过查找,发现写的sql不合理,查出了许多用不到的 ...
- Mysql安装后打开MySQL Command Line Client闪退解决方法
1.开始菜单下;Mysql--->mysql server 5.6-->mysql command line Client ---右击,选择属性 2.在属性下查看目标位置: 3.将安装目录 ...
- CSS3实现3D旋转相册
静态效果图: 代码如下: <!doctype html><html lang="en"><head> <meta charset=&quo ...
- Selenium 设置浏览器下载 Firefox 和Chrome
当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这 ...
- win10 uwp 自定义控件 SplitViewItem
本文主要是因为汉堡菜单里面列出的菜单很多重复的图标和文字,我把它作为控件,因为是随便写,可能存在错误,如果发现了,请和我说或关掉浏览器,请不要发不良言论. 我们使用汉堡菜单,经常需要一个 需要一个图标 ...
- Python线程的常见的lock
IO阻塞分析: 下面该需求很简单将一个数值100做自减处到0.主函数中有0.1秒的IO阻塞 import threading import time def sub(): global num # 掌 ...
- Fedora 下 Google-Chrome 经常出现僵尸进程的权宜办法
对于Chrome_ProcessL 和Chrome_FileThre这两僵尸进程,估计遇到过的人都对其各种无奈吧,放任不管吧,越来越多,然后卡死,只能另开个X环境或者在其他的TTY里干掉他俩再切回去, ...