Axis2开发webservice案例详解
最近公司在一个项目上与另外一家公司做接口集成,需要webservice来处理数据的传递,本来我用的CXF简单配置下就可以发布了(关于CXF发布webservice的过程,在后面的博客中也会给个案例,欢迎扔板儿砖!~_~),但是对方用的是axis,本来以为用wsimport解析下wsdl文件就可以生成客户端程序,然后就可以调用了,后来才发现,解析不了~_~,没办法只能研究下怎么通过axis发布webservice吧! 环境准备:
你会注意到几乎每个java案例都会从HelloWorld开始,这里惯例,我们也遵守下吧~_~
package com.burns;
public class HelloWorld {
public HelloWorld() {
}
public String hello(String str) {
return "Hello " + str;
}
public int add(int a,int b) {
return a + b;
}
}
如果这里你是在eclipse做的话,设置eclipse自动编译,就能获取class文件。 class文件如图:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="HelloWorld" provider="java:RPC">
<parameter name="className" value="com.burns.HelloWorld" />
<parameter name="allowedMethods" value="*" />
</service>
</deployment>
简单的介绍下各个节点的含义,"HelloWorld"当然是这个webservice的名字,后面紧跟的java:RPC指的是服务类型。这里一共有有4种类型,分别是:RPC,Document,Wrapped 和 Message。有兴趣可以看下 org.apache.axis.providers这个包和子包下面的类的API文档。之后的parameter节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的public方法,当然你也可以自己指定。 编写完配置发布文件之后,cmd打开windows的控制台,进入%TOMCAT_HOME%webappsaxisWEB-INF目录下键入如下命令 java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
package com.burns;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloWorldTest {
public static void main(String[] args) {
try {
String targetEendPoint = "http://localhost:8080/axis/services/HelloWorld" ;
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress( new URL(targetEendPoint));
call.setOperationName( new QName(targetEendPoint,"hello" ));
String result = (String) call.invoke( new Object[]{ "Robert" });
System.out.println(result);
call.setOperationName( new QName(targetEendPoint,"add" ));
Integer res = (Integer) call.invoke( new Object[]{ new Integer( 1 ),new Integer( 2 )});
System.out.println( "The result is: " + res);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
测试结果:
网上也发现一些不错的资源,粘贴如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |