java axis_Java 使用Axis实现WebService实例
在上一篇WebService实例中,基于jdk1.6以上的javax.jws 发布webservice接口。这篇博文则主要用eclipse/myeclipse 使用axis插件进行发布和调用WebService。
1. 下载axis,并解压到tomcat/webapps目录下
2. 在tomcat部署axis2
启动tomcat, 可以看到多了个axis2文件
在浏览器输入:http://localhost:8080/axis2/
看到axis界面,则成功发布
3. 在eclipse/myeclipse 安装axis插件
将下载下来的axis2-eclipse-codegen-plugin-x.x.x.zip和axis2-eclipse-service-plugin-x.x.x.zip 解压,解压之后的jar文件复制到eclipse/myeclipse 的dropins目录下,重启eclipse/myeclipse,右键File->New->Other 可以看到axis插件已经安装成功。
4. 发布WebService
将下载下来的axis2-x.x.x-bin 解压,将其中的lib架包添加置项目中。
新建class类,用于发布。
编译该类之后,用axis2发布该类。
右键New -> File -> Other -> Axis2 wizards -> Axis2 Services Archiver 。
选择该class类生成的路径,注意只到classes目录下, 然后next,勾上Skip WSDL,点击next,点击next,service填写发布的名称, class name填写路径,包名加上类名,然后选择发布的方法。继续next,选择tomcat/webapps目录下的axis/web-inf/service。
发布成功后,启动tomcat,在浏览器输入:http://localhost:8080/axis2/services/listServices 。可以看到要发布的webservice ,点击该项目,进入wsdl界面。
/**
*
* Title: AxisServiceHello
* Description: Axis2 发布
* Version:1.0.0
*@author panchengming
*/
public class AxisServiceHello {
/** 供客户端调用方法
*@param name 传入参数
*@return String 返回结果
* */
public String getValue(String name){
return "Axis 欢迎你! "+name;
}
}
5. 调用WebService
新建一个class类,用于调用发布的webservice。
可以使用rpc或document两种方法调用,运行main方法,看到打印消息,调用成功。
注:调用需要将tomcat服务启动,在浏览器输入wsdl地址能够查看。
import java.io.IOException;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.rpc.client.RPCServiceClient;
/**
*
* Title: AxisClientHello
* Description: webService 客户端调用
* Version:1.0.0
*@author panchengming
*/
public class AxisClientHello {
private final static String url="http://192.168.1.105:8080/axis2/services/AxisServiceHello?wsdl"; //wsdl地址
private final static String data="PanChengMing"; //参数
private final static String tns = "http://service.pcm.com"; //命名空间
private final static String method="getValue"; //调用的方法
//调用webservice
public static void main(String[] args) throws IOException{
getRPC(); //调用方法一
getDocument(); //调用方法二
}
/**
* 方法一:
* 应用rpc的方式调用 这种方式就等于远程调用,
* 即通过url定位告诉远程服务器,告知方法名称,参数等, 调用远程服务,得到结果。
* 使用 org.apache.axis2.rpc.client.RPCServiceClient类调用WebService
*
【注】:
如果被调用的WebService方法有返回值 应使用 invokeBlocking 方法 该方法有三个参数
第一个参数的类型是QName对象,表示要调用的方法名;
第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];
当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}。
第三个参数表示WebService方法的 返回值类型的Class对象,参数类型为Class[]。
如果被调用的WebService方法没有返回值 应使用 invokeRobust 方法
该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同。
在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,
也就是 元素的targetNamespace属性值。
*
*/
@SuppressWarnings("rawtypes")
public static void getRPC() throws AxisFault{
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
// 指定要调用的WSDL文件的命名空间及getValue方法
QName qn = new QName(tns, method);
// 指定getValue方法的参数值
Object[] ob = new Object[] { data };
// 指定getValue方法返回值的数据类型的Class对象
Class[] classes = new Class[] { String.class };
// 调用getValue方法并输出该方法的返回值
System.out.println(serviceClient.invokeBlocking(qn, ob, classes)[0]);
}
/**
* 方法二: 应用document方式调用
* 用ducument方式应用现对繁琐而灵活。现在用的比较多。因为真正摆脱了我们不想要的耦合
*/
public static void getDocument() throws AxisFault{
OMElement result = null;
try {
Options options = new Options();
// 指定调用WebService的URL
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
ServiceClient sender = new ServiceClient();
sender.setOptions(options);
OMFactory fac = OMAbstractFactory.getOMFactory();
// 命名空间
OMNamespace omNs = fac.createOMNamespace(tns, "");
OMElement ot = fac.createOMElement(method, omNs);
OMElement symbol = fac.createOMElement("name", omNs);
symbol.addChild(fac.createOMText(symbol, data));
ot.addChild(symbol);
result=sender.sendReceive(ot);
System.out.println(result);
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
}
}
}
结语:使用axis实现webservice 暂时告一段落了,这次的demo和上篇的webservice的demo 我整合成了一个项目,发布到我的github上了 ,https://github.com/xuwujing/webservice_project 。 有兴趣的可以看看。
java axis_Java 使用Axis实现WebService实例相关推荐
- Java 使用Axis实现WebService实例
在上一篇WebService实例中,基于jdk1.6以上的javax.jws 发布webservice接口.这篇博文则主要用eclipse/myeclipse 使用axis插件进行发布和调用WebSe ...
- java:浅谈axis调用webservice接口
[申明:此代码已经经过测试可以正确使用:但内容解释为个人见解,如有不准确之处,请指教. 阅读前请先仔细阅读"[]"中的说明文字,以免与您的需求不符而 ...
- java 详细教程AXIS调用webservice(直接上代码)
今天遇到一个对接web service的需求,因为之前没有对接过,踩了不少坑,今天我来分享一下本次对接的经验 SOAP 1.1 以下是 SOAP 1.2 请求和响应示例.所显示的占位符需替换为实际值. ...
- java .net webservice_Java客户端调用.NET的WebService实例
项目需要去调用.NET的WebSrevice,本身是Java,研究了半天,终于有些头绪,记下来. 1,新建.NET WebService.只在原方法上加上一个string类型的参数str [WebMe ...
- axis调用java实现webservice实例
一: 首先创建个WEB工程,然后: http://ws.Apache.org/axis/网站下载Axis安装包.当然还依赖其他包的,我这里在附件里上传了所有应用到得包,方便大家. 二: 然后就写wsd ...
- Java通过axis调用WebService
转载地址:http://www.linuxidc.com/Linux/2015-06/118460.htm ------------------------------------------分割线- ...
- java:AXIS调用webService接口,返回String类型xml,并用dom4j简单解析xml
一.使用axis调用webService接口,返回String类型xml 1.导入axis依赖 2.直接贴代码 /*** 调用webservice接口的方法,并返回String类型的xml* @par ...
- java webservice实例教程
原文:java webservice实例教程 源代码下载地址:http://www.zuidaima.com/share/1590350954564608.htm 最近在学习web services, ...
- Java安全之Axis漏洞分析
Java安全之Axis漏洞分析 0x00 前言 看到个别代码常出现里面有一些Axis组件,没去仔细研究过该漏洞.研究记录一下. 0x01 漏洞复现 漏洞版本:axis=<1.4 Axis1.4 ...
- java qname 调用soap_java 调用webservice的各种方法总结
一.利用jdk web服务api实现,这里使用基于 SOAP message 的 Web 服务 1.首先建立一个Web services EndPoint: Java代码 packageHello; ...
最新文章
- 规模化敏捷框架(SAFe)的原则
- Practice:在2008 core上部署和管理DHCP服务器
- Xilinx FPGA PLL 资源与INTEL FPGA PLL资源locked信号的不同
- linux 正则表达式 视频教程,30分钟带你玩转正则表达式
- 现代软件工程 期中/期末总结博客作业
- C#的语法总结(第一版)
- 非正常关机导致无法启动MYSQL提示丢失mysql.sock的解决办法
- 内镜碎石术装置行业调研报告 - 市场现状分析与发展前景预测
- JQuery学习记录——jQuery对象和DOM对象的转换
- 剑指offer——面试题14:调整数组顺序使奇数位于偶数前面
- IE7下动态创建Iframe时,去除边框
- kuangbin专题 专题1 简单搜索
- C#类库封装SDK调用:一个函数就能实现相应功能,省得你花时间去研究底层了,使用超级简单
- 系统架构图 云架构案例
- Android APP微信第三方登录踩坑 - 微信开放平台修改应用包名后微信第三方登录失败
- 干货|手把手教你写一个串口调试助手
- <input>:1: UserWarning: The .grad attribute of a Tensor that is not a leaf Tensor is being accessed.
- Among Us 限时免费下载
- axios中put的参数怎么传_iOS开发之如何通过PUT请求上传数据
- 22-兔子生兔子问题