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来说,目 ...
随机推荐
- CSS3 Media Queries在iPhone4和iPad上的运用
CSS3 Media Queries的介绍在W3CPlus上的介绍已有好几篇文章了,但自己碰到的问题与解决的文章还是相对的较少.前几天在<修复iPhone上submit按钮bug>上介绍了 ...
- javascript判断非空
/* *判断非空 * */ function isEmpty(val){ if(val == null)return true; if(val == undefined || val == 'unde ...
- beta-review阶段组员贡献分分配
组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 bera-2阶段各组员的贡献分分配如下: bera-2阶段各组员的贡献分分配如下: 姓名 个人工作量 组长评价 个人评价 团队贡献总分 张 ...
- Git Shell使用笔记
1,首次打开Git shell错误(以前打开过gethub客户端) 警告: git command could not be found. Please create an alias or add ...
- HDU 1069 基础动态规划+排序
题意 给出n种立方体石头 当且仅当一块石头的底部宽度长度都小于一块石头的时候才能放在上面 问最高能放多高?石头不限数目 然而同样一种石头采用同样的摆放方式 两快相同石头一定无法进行放置 所以 一块石头 ...
- TCP移动端跟服务器数据交互
同一台笔记本下的客户端和服务端 TCPClient 客户端: // RootViewController.h#import <UIKit/UIKit.h>#import "As ...
- 修改linux系统时间的方法(date命令)
修改linux系统时间的方法(date命令) 来源:互联网 作者:佚名 时间:11-18 23:22:27 [大 中 小] date命令不仅可以显示系统当前时间,还可以用它来修改系统时间,下面简单的介 ...
- MYSQL导入导出.sql文件
MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...
- DDL DML DCL SQL
https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_ddl SQL The Structured Query Language tha ...
- 4 bytes (32 bits) or 8 bytes (64 bits)
Computer Systems A Programmer's Perspective Second Edition BusesRunning throughout the system is a c ...