您的位置:首页 > 编程语言 > Java开发

Java Axis2发布及调用webservice接口

2014-05-23 11:09 363 查看
因为推荐系统改造的事情,需要研究下webservice。本来以为很简单的东西,结果折腾了两天,才勉勉强强搭了个示例。一方面是因为本身对这块不熟悉,另一方面是因为网上教程说的不明确,走了很多弯路。所以这里总结一个详细的教程。

Java发布webservice有多种方式,如Xfire、Axis、Axis2,每种方式都有所不同。我这里采用Axis2的方式。
1、发布webservice之前,我们要做些准备工作。首先要在linux上安装JDK,apache我不知道要不要安装,我测试机之前已经安装过了,没研究。这两个是基础,不懂的话自己先去学习学习吧。
然后安装tomcat,比较简单,官网上下载tar.gz包,这个貌似32和64通用。解压到安装目录,比如/opt/tomcat,然后配置文件/etc/profile,配置以下内容:
export CATALINA_HOME=/opt/tomcat
export CLASSPATH=.:$JAVA_HOME/lib:$CATALINA_HOME/lib
export PATH=$PATH:$CATALINA_HOME/bin
启动:进到bin
目录下,./catalina.sh start
关闭./shutdown.sh stop

测试:netstat -ntl |grep 8080 查看端口是不是起来了
或者 http://192.168.2.41:8080/ (输入你自己配置的那个IP) 看看是不是出现了tomcat的界面

2、然后安装Axis2,这个也非常简单。去官网上下一个Axis2。下载地址:http://axis.apache.org/axis2/java/core/download.cgi。把war的zip包下下来就好



下完后解压,把axis2.war这个文件拷贝到tomcat/webapps目录下
重启tomcat,会在这个目录下生成一个axis2目录,如图所示



3、下面进入正式发布环节。Axis2发布webservice有两种方式,一种是pojo方式,也就是我这里要发布的,它功能相对较弱,不支持类加包名。我们先实验这种方式。
在Linux任意目录新建一个HelloWorld的java程序,这里我们就新建两个函数:getName和add函数,用于测试



编译,把class文件拷贝到tomcat/webapps/axis2/WEB-INF/pojo目录下,没有pojo目录就新建一个



重启tomcat,在浏览器中输入http://192.168.2.41:8080/axis2/services/listServices 就可以看到你发布的webservice服务了,很简单吧



4、开发接口
服务发布好了之后,我们需要开发接口。我这里用的是myeclipse8.5。刚才linux里面axis2/WEB-INF/lib里有N多jar,拷出来,导进myeclipse里,待会我们会用得到。也可以官网上去下个axis2-1.6.*-bin.zip,解压出里面的jar文件。

eclipse里新建一个普通的工程即可,把刚才提到的那些包导进去,



新建一个class文件,命名为test.java,里面代码如下

package MZ.GetWebService;

import javax.xml.namespace.QName;

import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class test {
private static String EndPointUrl;
private static String QUrl="http://ws.apache.org/axis2";
private QName opAddEntry;
private static String WSUrl;
public RPCServiceClient setOption() throws AxisFault
{
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(WSUrl);
options.setTo(targetEPR);
return serviceClient;
}

public QName getQname(String Option){
return new QName (QUrl,Option);
}
// 返回一维String数组
public String[] getArray(String Option) throws AxisFault
{
RPCServiceClient serviceClient =this.setOption();
opAddEntry =this.getQname(Option);
String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry,new Object[]{1,2}, new Class[]{String[].class })[0];
return strArray;
}

public static void main(String[] argv) throws Exception
{
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(WSUrl);
options.setTo(targetEPR);

test ws=new test);
ws.WSUrl="http://192.168.2.41:8080/axis2/services/HelloWorld";
String[] hello= ws.getArray("add");
System.out.println(hello[0]);
}
}


运行,就可以得到返回的结果了

还有种方式还在研究
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: