axis2_1.6.2之构建web端和客户端 .
参考资料:
http://blog.csdn.net/apei830/article/details/5448897
axis2的官网
http://axis.apache.org/axis2/java/core/docs/pojoguide.html
1、先来构建web端,搭建服务平台
a、从这 http://axis.apache.org/axis2/java/core/download.cgi 下载 axis2-1.6.2-war.zip
然后将里面的 axis2-web文件夹复制到你新建的java web的WerRoot下面
将axis2\WEB-INF\lib包里面的jar复制到你的lib下
b、然后配置你的web.xml文件 加上AxisServlet配置 并且修改你项目的首页
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>/axis2-web/index.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping> </web-app>
c、构建你对外发布的服务 这里测试用的 如下 包含对外两个方法
一个输入文本 返回文本
一个上传二进制文件 返回布尔值
package com.undergrowth.ws.test; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream; import javax.activation.DataHandler; public class WSTest { public String sayHello(String name){
return name+"\tHello World\t"+"WebServices Axis2";
} public boolean uploadWithDataHandle(DataHandler dHandler,String fileName){ FileOutputStream fos=null;
try {
File file=new File("d:/upload_res/");
if(!file.exists()) file.mkdir();
fos=new FileOutputStream(new File(file,fileName));
writeFileToOutput(fos,dHandler.getInputStream());
System.out.println("上传成功!");
fos.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return false;
}finally{
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} return true;
} private void writeFileToOutput(FileOutputStream fos, InputStream inputStream) throws IOException {
// TODO Auto-generated method stub
int n=0;
byte[] data=new byte[1024*8];
while((n=inputStream.read(data))!=-1){
fos.write(data,0,n);
}
} }
d、向AXIS2的框架描述你要提供的服务 即services.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
<service name="WSTest">
<description>Web Service例子</description>
<parameter name="ServiceClass">com.undergrowth.ws.test.WSTest</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
</serviceGroup>
对于services.xml文件的位置 只用放在你项目的web-inf下面即可 当然还有很多种放置方式
对于services.xml的文件位置 我查看了AsixServlet源码 有如下这么一段 关于services.xml的放置位置的
当然中间经过很多转换 最终是在 WarBasedAxisConfigurator类下有这么一个方法
public void loadServices() {
String repository = config.getInitParameter("axis2.repository.path");
if (repository != null) {
super.loadServices();
log.debug((new StringBuilder()).append(
"loaded services from path: ").append(repository)
.toString());
return;
}
String repository = config.getInitParameter("axis2.repository.url");
if (repository != null) {
loadServicesFromUrl(new URL(repository));
log.debug((new StringBuilder())
.append("loaded services from URL: ").append(repository)
.toString());
return;
}
loadServicesFromWebInf();
if (config.getServletContext().getRealPath("") != null
|| config.getServletContext().getRealPath("/") != null) {
super.loadServices();
log.debug("loaded services from webapp");
return;
}
try {
URL url = config.getServletContext().getResource("/WEB-INF/");
if (url != null) {
loadServicesFromUrl(url);
log.debug("loaded services from /WEB-INF/ folder (URL)");
}
} catch (MalformedURLException e) {
log.info(e.getMessage());
}
return;
}
接下来有一个方法
private void loadServicesFromWebInf() {
try {
InputStream servicexml = config.getServletContext()
.getResourceAsStream("/WEB-INF/services.xml");
if (servicexml != null) {
HashMap wsdlServices = new HashMap();
ArchiveReader archiveReader = new ArchiveReader();
String path = config.getServletContext()
.getRealPath("/WEB-INF");
if (path != null)
archiveReader.processFilesInFolder(new File(path),
wsdlServices);
org.apache.axis2.description.AxisServiceGroup serviceGroup = DeploymentEngine
.buildServiceGroup(servicexml, Thread.currentThread()
.getContextClassLoader(), "annonServiceGroup",
configContext, archiveReader, wsdlServices);
axisConfig.addServiceGroup(serviceGroup);
}
} catch (AxisFault axisFault) {
log.info(axisFault);
} catch (FileNotFoundException e) {
log.info(e);
} catch (XMLStreamException e) {
log.info(e);
}
}
看上面那个方法 就是从web-inf下面获取services.xml文件啊 然后调用
axisConfig.addServiceGroup(serviceGroup);
添加axisConfig.addServiceGroup 添加ajaxService
附 目录结构如下:
e、经过上面几步 发布项目 测试
http://localhost:8888/Axis2Web/
http://localhost:8888/Axis2Web/services/WSTest?wsdl
2、构建客户端 客户端也有很多中方式 这里采用 RPCServiceClient 进行调用
调用HelloWorld
package com.undergrowth.webservices; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.rpc.client.RPCServiceClient; public class RPCClientHelloWorld { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub try {
//1.创建webServices客户端
RPCServiceClient rpClient=new RPCServiceClient();
rpClient.getOptions().setTo(new EndpointReference("http://localhost:8888/Axis2Web/services/WSTest"));
//2.设置调用参数
QName opEntryQNama=new QName("http://test.ws.undergrowth.com","sayHello");
//输入参数
Object[] opEntryArgs=new Object[]{"google"};
//返回参数
Class[] returnClassArgs=new Class[]{String.class};
//3,进行调用
System.out.println(rpClient.invokeBlocking(opEntryQNama, opEntryArgs, returnClassArgs)[0]);
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
调用文件上传
package com.undergrowth.webservices; import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.xml.namespace.QName; import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.rpc.client.RPCServiceClient; public class RPCClientUploadFile { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub try {
//1.创建webServices客户端
RPCServiceClient rpClient=new RPCServiceClient();
rpClient.getOptions().setTo(new EndpointReference("http://localhost:8888/Axis2Web/services/WSTest"));
//2.设置调用参数
QName opEntryQNama=new QName("http://test.ws.undergrowth.com","uploadWithDataHandle");
//输入参数
Object[] opEntryArgs=new Object[]{new DataHandler(new FileDataSource("/csg.jpg")),"csg.jpg"};
//返回参数
Class[] returnClassArgs=new Class[]{Boolean.class};
//3,进行调用
System.out.println("上传结果为:"+rpClient.invokeBlocking(opEntryQNama, opEntryArgs, returnClassArgs)[0]);
} catch (AxisFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
好了 记录学习的脚步
axis2_1.6.2之构建web端和客户端 .的更多相关文章
- 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)
摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(六)Electron打包,同时构建客户端和web端
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
- 《深入浅出Node.js》第8章 构建Web应用
@by Ruth92(转载请注明出处) 第8章 构建Web应用 一.基础功能 请求方法:GET.POST.HEAD.DELETE.PUT.CONNECT GET /path?foo=bar HTTP/ ...
- Asp.net SignalR 实现服务端消息推送到Web端
之前的文章介绍过Asp.net SignalR, ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信. 今天我 ...
- Node.js高级编程读书笔记 - 4 构建Web应用程序
Outline 5 构建Web应用程序 5.1 构建和使用HTTP中间件 5.2 用Express.js创建Web应用程序 5.3 使用Socket.IO创建通用的实时Web应用程序 5 构建Web应 ...
- Comet技术详解:基于HTTP长连接的Web端实时通信技术
前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Ser ...
- 高效构建Web应用 教你玩转Play框架 http://www.anool.net/?p=577
Play 框架是一个完整的Web应用开发框架,覆盖了Web应用开发的各个方面.Play 框架在设计的时候借鉴了流行的 Ruby on Rails 和 Grails 等框架,又有自己独有的优势.使用 P ...
- 使用XFire+Spring构建Web Service(一)——helloWorld篇
转自:http://www.blogjava.net/amigoxie/archive/2007/09/26/148207.html原文出处:http://tech.it168.com/j/2007- ...
- 使用XFire+Spring构建Web Service
XFire是与Axis 2并列的新一代Web Service框架,通过提供简单的API支持Web Service各项标准协议,帮助你方便快速地开发Web Service应用. 相 对于Axis来说,目 ...
随机推荐
- 词频统计(WEB版)
通过点击浏览按钮输入文件: 点击查询按钮后返回结果: 前台代码: <%@ Page Language="C#" AutoEventWireup="true" ...
- 交叉报表列头排序时遇到的oracle问题—oracle ORA-12704:字符集不匹配、varchar2转化为nvarchar2字符缺失、case when else后的字符类型要一致
在做交叉报表列头的排序时,遇到这三个问题,下面具体来说一下. 设计的数据库的表结构如图1所示: 图1 要处出来student_name_,s.grade_,s.subject_name_,这三个属性, ...
- MySQL 数据库设计 笔记与总结(4)维护优化
[维护和优化的工作] ① 维护数据字典 ② 维护索引 ③ 维护表结构 ④ 在适当的时候对表进行水平拆分或垂直拆分 [维护数据字典] a 使用第三方工具对数据字典进行维护 b 利用数据库本身的备注字段来 ...
- php实现多任务并发探讨
如果是后台任务,需要通过队列转换为异步执行 如果是网络任务,可以使用socket_select 或者stream_select来执行(基于select模型) 如果一定要使用多线程可以安装多线程扩展,用 ...
- sqrt函数实现
感谢杨工,让我更加认识到自己技术薄弱,这道题源自于和杨工的非正式面试,当时根本没思路,甚至没和查找有丝毫的联系,看来做自己想做的还是要付出努力的.sqrt()即开平方运算,y=x*x,已知Y的情况下求 ...
- DirectX 常用选项(转)
内存池表面和其它一些Direct3D资源被放在多种内存池中.内存池的种类由D3DPOOL枚举类型的一个成员来指定.可用到的内存池有下列几种:D3DPOOL_DEFAULT--表示Direct3D将根据 ...
- lvs简单配置
负载均衡服务器将会用到两块网卡,eth0为公网地址(此处将局域网ip作为公网地址),IP地址为192.168.1.104,eth0:1,IP地址为192.168.2.1在负载均衡器上添加一个ip别名, ...
- 5 个 Composer 小技巧
Composer是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<Composer PHP依赖管理的新时代>.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方 ...
- 大话数据结构(十)java程序——队列
1.队列的定义 队列(queue):是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的线性表,简称FIFO(First out firts in).允许插入的一头是队尾 ...
- word size
Computer Systems A Programmer's Perspective Second Edition Running throughout the system is a collec ...