Java Axis2 1.6.2使用说明
下载axis
下载最新的axis2jar包以及配置文件。下载地址:
貌似需要翻墙。我用的是火狐插件翻墙的。绝体步骤你不懂得可以百度一下吧。
配置axis2
首先你的需要安装好一个tomcat。版本这个用6、7都可以。至于5以下的我没试过可否支持axis2。
首先配置和tomcat
Tomcat的配置步骤
这里我不详细说了,不知道的朋友可以百度一下,网上这种帖子多的是。
配置axis2
将axis2-1.6.2-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>\webapps目录下,并启动Tomcat。
在浏览器地址栏中输入如下的URL:
如果在浏览器中显示出wellcome页面,则表示Axis2安装成功。
发布webservices
编写一段java代码,然后编译成class文件。将编译后的class文件放到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中(如果没有pojo目录,则建立该目录)。
这样就可以发布webservices服务了。
比方说
public class Hello{
public String hello(){
return "hello";
}
}
将编译后的class文件放到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中。然后进入http://localhost:8080/axis2点击页面的services 。然后就显示出来webservices服务了。
配置axis2热部署和热发布。避免每次发布需要重启tomcat。
打开<Tomcat安装目录>\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置。把false改为true即可。如下:
<parameter name="hotdeployment">true</parameter>
<parameter name="hotupdate">true</parameter>
然后重新启动一下tomcat。
注意:
1. POJO类不能使用package关键字声明包。
2. 在浏览器中测试WebService时,如果WebService方法有参数,需要使用URL的请求参数来指定该WebService方法参数的值,请求参数名与方法参数名要一致。
3. 发布WebService的pojo目录只是默认的,如果想在其他的目录发布WebServices,可以打开axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:
<deployer extension=".class" directory="mypojo" class="org.apache.axis2.deployment.POJODeployer"/>
上面的配置允许在<Tomcat安装目录>\webapps\axis2\WEB-INF\mypojo目录中发布WebService。
使用axis2实现webservices自定义参数,webservices自定义返回值
对于配置axis2的过程不是很麻烦。可能很多人对于如何调用webservices比较疑惑。下面我将介绍给大家如何使用axis2使用自定义类型的参数、获取自定义类型的返回值、获取返回List<自定义泛型>类型的数据。
下面为我自己封装的请求webservices的类核心代码
/**
* 执行webservices方法
*
* @return List<HashMap<String,String>>类型的结果集
* @throws AxisFault
* Axis异常
*/
publicList<HashMap<String, Object>> invokeBlocking() throws AxisFault {
List<HashMap<String,Object>> returns = new ArrayList<HashMap<String, Object>>();
RPCServiceClient serviceClient = new RPCServiceClient();
Optionsoptions = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
QName opAddEntry = new QName(targetNamespace, method);
Object[] so = serviceClient.invokeBlocking(opAddEntry, parameters,
newClass[] { returnType });
if(so.length > 0) {
if(so[0] instanceof Object[]) {
Object[] elements = (Object[]) so[0];
for(Object o : elements) {
HashMap<String,Object> maps = new HashMap<String, Object>();
OMElementImpl ome = (OMElementImpl) o;
maps.put(ome.getLocalName(),ome.getText());
while (ome.getNextOMSibling() != null) {
ome= (OMElementImpl) ome.getNextOMSibling();
maps.put(ome.getLocalName(),ome.getText());
}
returns.add(maps);
}
}else {
Objectob = so[0];
if(ob instanceof OMElementImpl == false) {
HashMap<String,Object> maps = new HashMap<String, Object>();
maps.put("simple",ob);
returns.add(maps);
}else {
OMElementImpl ome = (OMElementImpl) so[0];
HashMap<String,Object> maps = new HashMap<String, Object>();
maps.put(ome.getLocalName(),ome.getText());
returns.add(maps);
}
}
return returns;
}else {
return null;
}
}
下面是代码里面提到的变量,以及说明
/**
* url :webservices 连接地址不包含方法及参数
*
* 例如: http://127.0.0.1:8080/axis2/services/Hello
*/
private String url;
/**
* method :调用webservices的方法名称例如: getTime
*/
private Stringmethod;
/**
* targetNamespace :webservices的targetNamespace名词
* 默认值为:http://ws.apache.org/axis2
*/
private StringtargetNamespace = "http://ws.apache.org/axis2";
/**
* parameters :请求方法的参数
*
*/
private Object[]parameters;
/**
* returnType :方法返回值类型
*/
@SuppressWarnings("rawtypes")
private ClassreturnType;
代码里用到的到均可以在axis2-bin包下找到。
axiom-api-1.2.13.jar
axiom-impl-1.2.13.jar
axis2-adb-1.6.2.jar
axis2-kernel-1.6.2.jar
axis2-metadata-1.6.2.jar
axis2-transport-http-1.6.2.jar
axis2-transport-local-1.6.2.jar
commons-codec-1.3.jar
commons-httpclient-3.1.jar
commons-logging-1.1.1.jar
htpcore-4.0.jar
mail-1.4.jar
neethi-3.0.2.jar
wsdl4j-1.6.2.jar
XmlSchema-1.4.7.jar
这些包一个不能多,多了也没用。一个也不能少,少了就报错。是我整理的1.6.2最新的jar包。
源代码我也提供给大家。你们可以在我的csdn上下载。
源代码包含:webservices代码和client端代码。里面有详细的注释。可以借鉴学习使用axis2使用自定义类型的参数、获取自定义类型的返回值、获取返回List<自定义泛型>类型的数据。
http://download.csdn.net/detail/woaixinxin123/5388995
Jar包和axis2的配置文件,提供另外一个下载地址。无须积分即可下载。[由于csdn文件大小限制,所以分开下载]
http://download.csdn.net/detail/woaixinxin123/5389051
http://download.csdn.net/detail/woaixinxin123/5389071
本人web、android开发 、qq群255825960