今天完成了第一个用axis2开发的webservice程序。用axis2来开发webservice简直太简单了
关于什么axis:大家可以参考这里
https://www.bugkong.com/archives/2015_08_486.html
下面我们就开始说说步骤吧:
1,从官方网站下载最新的jar包
http://axis.apache.org/axis2/java/core/download.cgi 当前我下载到的最新版本是1.6.3
需要下载axis2-1.6.3-bin和axis2-1.6.3-war
2,下载好后,先将war压缩包下的axis2.war拷贝到tomcat下哦,即webapps目录下
然后启动tomcat
然后在地址栏输入 http://localhost:8080/axis2/ 能够正常打开,表示我们axis2.war发布成功了
[caption id="attachment_477" align="alignnone" width="786"] axis2.war[/caption]
3,下面我们开始编写事例代码吧
public class SimpleWebservice { public String helloworld(){ return "hello world"; } public int HowOldYou(int old){ return old; } public void voidHowOldYou(int old){ System.out.println("您今年已经"+old+"岁了吗?"); } }注意,该代码是在默认包下哦
demo.java是一个后面我们要用到的测试类,先不管哈
SimpleWebservice类里面有三个方法,
第一个方法 helloworld 直接返回一个字符串:向世界打个招呼
第二个方法 HowOldYou 直接返回一个年龄
第三个方法 voidHowOldYou 没有返回值哦
4,接起来编译这段代码,并且将这个编译后的class文件拷贝到 \Tomcat 8.0\webapps\axis2\WEB-INF\pojo 如果没有pojo文件,请新建一个哦。
5,重启我们的tomcat
打开http://localhost:8080/axis2/ 你会发现点击Services这个连接,在下面我们可以看到我们刚刚写的那个类的方法名
并且你还可以点击SimpleWebservice,可以查看到的wsdl描述文档
并且您还可以这样访问这三个方法:
http://localhost:8080/axis2/services/SimpleWebservice/HowOldYou?old=21
http://localhost:8080/axis2/services/SimpleWebservice/helloworld
http://localhost:8080/axis2/services/SimpleWebservice/voidHowOldYou?old=21
注意红色标记的连接,因为该方法没有返回值,所以什么也没有显示,后面我们会继续说
6,我们开始编写测试类吧,测试类的图上面已经贴出,这里就不在贴出了
首先,我们需要将jar包拷贝到我们的项目下,jar包刚刚我们已经下载。
然后就可以开始编写了
我这里贴上测试类的全部代码和注释,希望您能够看懂
public class demo { public static void main(String[] args) { //使用RPC方式调用WebService RPCServiceClient serviceClient = null; try { serviceClient = new RPCServiceClient(); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } //开启Options请求 Options options = serviceClient.getOptions(); // 指定调用WebService的URL EndpointReference er = new EndpointReference("http://localhost:8080/axis2/services/SimpleWebservice"); options.setTo(er); //指定HowOldYou方法的参数值 Object[] opAddArgs = new Object[]{21}; //指定HowOldYou方法返回值的数据类型的class对象 Class[] classs = new Class[]{int.class}; //指定要调用的HowOldYou方法及wsdl文件的命名空间,第一个参数表示WSDL文件的命名空间 //通过访问http://localhost:8080/axis2/services/SimpleService?wsdl 就可以看见 元素的targetNamespace属性值 QName qname = new QName("http://ws.apache.org/axis2","HowOldYou"); //调用HowOldYou方法并输出该方法的返回值 //这里有三个参数的意思:1,是QName对象,表示要调用的方法名;2,webservice的参数值,参数类型是Object[];3,返回值class对象,参数类型是Class[],即int类型, try { System.out.println(serviceClient.invokeBlocking(qname, opAddArgs,classs)[0]); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } //下面是调用helloworld方法的代码,这些代码与调用HowOldYou方法的代码类似 classs = new Class[]{String.class}; qname = new QName("http://ws.apache.org/axis2","helloworld"); //如果没有参数,参数不能为null,应该为new Object[]{} try { System.out.println(serviceClient.invokeBlocking(qname, new Object[]{},classs)[0]); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); }
//下面开始调用没有返回值的voidHowOldYou方法 //指定该方法的参数值 opAddArgs = new Object[]{22}; //设置命名空间 qname = new QName("http://ws.apache.org/axis2","voidHowOldYou"); //这里需要注意的是,没有返回值,我们应该使用invokeRobust方法 try { serviceClient.invokeRobust(qname, opAddArgs); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } }
7,运行测试结果
[caption id="attachment_480" align="alignnone" width="424"] 测试结果[/caption]
上面的结果只在控制台打印出了helloworld和HowOldYou方法的值,第三个却没有打印出来。
这是因为第三个方法voidHowOldYou他是没有返回值的。他的输出结果在后端tomcat那里
[caption id="attachment_481" align="alignnone" width="510"] webservice hello world[/caption]
8,axis2提供了一个工具,他可以将我们的类进一步封装
首先,打开我们下载的jar文件夹这个文件在这里:axis2-1.6.3-bin\axis2-1.6.3\
将里面的bin目录拷贝出来,复制到任意盘,这是我们需要的哦
比如我复制到了这里D:\axis2\bin
现在我们需要设置环境变量
AXIS2_HOME:D:\axis2
Path 添加 ;%AXIS2_HOME%\bin
现在我们可以测试下
在cmd下输入 %axis2_home%\bin\axis2server.bat 能够正确看到欢迎信息
9,一切准备就绪后,我们运行如下命令
wsdl2java -uri http://localhost:8080/axis2/services/SimpleWebservice?ws
dl -p com.client.test -s -o stub
-uri 是你的 wsdl描述文档的地址
-p 是包名,这个包名是我们要用到的哦
-o 是生成文件的目录名
运行上面的命令后,我们会在这里看到我们的java文件,如图:
10,我们将这个java文件拷贝到我们客户端的工程目录下,同时将src下生成的build.xml文件也拷贝到工程目录下的src下,需要注意的是包名要一致
[caption id="attachment_484" align="alignnone" width="269"] webService[/caption]
11,现在我们开始编写demoClient测试类
编写这个测试类就很简单了,这里贴出调用一个方法的代码如下:
public class demoClient { public static void main(String[] args) { SimpleWebserviceStub ss = null; try { ss = new SimpleWebserviceStub(); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } //下面开始获得hello world SimpleWebserviceStub.Helloworld helloworld = new SimpleWebserviceStub.Helloworld(); try { System.out.println(ss.helloworld(helloworld).get_return()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } 这里神略了调用其他方法,方法是类似的哦 }自此,我们的第一个关于axis2的hello world程序就完成了哦
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情