Axis2快速入门:http://axis.apache.org/axis2/java/core/docs/quickstartguide.html
一、Eclipse axis2插件安装
Axis2主页上有关于插件的安装方法;见http://axis.apache.org/axis2/java/core/tools/eclipse/wsdl2java-plugin.html#Installation
Axis2下载:http://axis.apache.org/axis2/java/core/download.cgi
这两个压缩包解压后放到eclipse安装目录下的plugins目录,重启eclipse服务器,File new ->other,可以看到下面的这两个选项,表示插件安装成功
二、Axis2服务端开发
1、在tomcat中部署axis2(为了接下来发布webservice服务)
下载axis2-1.7.6-war.zip,解压到tomcat的webapps目录下,启动tomcat服务器,会发现webapps目录下多了axis2文件夹,在浏览器里输入http://localhost:8080/axis2,会发现对应的网页,说明已经成功了
2、建立要发布的WebService
2.1、new java project:AxisService
2.2、编写需要发布的WebService,在src目录下建包samples.quickstart.service.pojo,new class StockQuoteService如下
package samples.quickstart.service.pojo; import java.util.HashMap; import java.util.Map.Entry; public class StockQuoteService { private HashMap<String, Double> map = new HashMap<String, Double>(); public double getPrice(String symbol) { Double price = (Double) map.get(symbol); if (price != null) { return price.doubleValue(); } return 42.00; } public String list() { String result = "{"; for (Entry<String, Double> entry : map.entrySet()) { result += entry.getKey() + ":" + entry.getValue() + ","; } result += "}"; return result; } public void update(String symbol, double price) { map.put(symbol, new Double(price)); } public String sayHello(String name) { return "hello" + name + "axis2"; } }
3、发布WebService
3.1、打包要发布的Service, 点击Eclipse中New -> File -> Other -> Axis2 wizards -> Axis2 Services Archiver
3.2、按上图填写,class File Location为工作目录对应项目的bin文件夹,并勾上Include .class files only,点击next
3.3、默认选择Skip WSDL,点击next
3.4、默认,继续next
3.5、默认,继续next
3.6、如上图所示,选择正确的Class Name,否则load不到class
3.7 、如上图所示,output file location填写tomcat目录的axis2\web-inf\services下,点击Finish后,可以发现:F:\apache-tomcat-6.0.45\webapps\axis2\WEB-INF\services目录下增加了StockQuoteService.aar
3.8、测试发布的WebService
打开http://localhost:8080/axis2/services/listServices页面,可以看到所发布的服务:
点击StockQuoteService链接查看wsdl
webservice发布成功。
三、Axis2客户端开发
1、File-new 选择Axis2 Code Generator 点击next
2、选择从wsdl生成java文件,点击next
3、选择生成好的wsdl文件
4、Codegen option选择default,点击next
5、选择将生成的java代码保存到工作空间的特定工程里面
生成的客户端代码如下
添加axis2需要的jar包到工程里面。不然会报错,具体需要的jar从axis2-1.7.6-bin.zip这个下载包里面的lib目录去取。
新建包test,然后new class StockQuoteServiceTest,代码如下:
package test; import java.rmi.RemoteException; import samples.quickstart.service.pojo.GetPrice; import samples.quickstart.service.pojo.GetPriceResponse; import samples.quickstart.service.pojo.ListResponse; import samples.quickstart.service.pojo.SayHello; import samples.quickstart.service.pojo.StockQuoteServiceStub; import samples.quickstart.service.pojo.Update; public class StockQuoteServiceTest { public static void main(java.lang.String args[]){ try{ StockQuoteServiceStub stub = new StockQuoteServiceStub ("http://localhost:8080/axis2/services/StockQuoteService?wsdl"); getPrice(stub); update(stub); list(stub); getPrice(stub); sayHello(stub); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* fire and forget */ public static void update(StockQuoteServiceStub stub){ try{ Update update = new Update(); update.setSymbol("ABC"); update.setPrice(43.35); stub.update(update); update.setSymbol("CDE"); update.setPrice(12.00); stub.update(update); System.err.println("price updated"); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } /* two way call/receive */ public static void getPrice(StockQuoteServiceStub stub){ try{ GetPrice price = new GetPrice(); price.setSymbol("ABC"); GetPriceResponse response = stub.getPrice(price); System.err.println(response.get_return()); } catch(Exception e){ e.printStackTrace(); System.err.println("\n\n\n"); } } public static void list(StockQuoteServiceStub stub){ try { ListResponse listResponse = stub.list(); System.out.println(listResponse.get_return()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void sayHello(StockQuoteServiceStub stub){ SayHello sayHello = new SayHello(); sayHello.setName("weir"); try { System.out.println(stub.sayHello(sayHello).get_return()); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }运行代码结果如下:
update 方法执行无效,价格没设置进去,这个问题还得查资料。
使用Axis2框架实现webservice就先写到这边了。