使用 Axis2 和 JiBX 将 Java 类转换成 Web 服务,第 2 部分: 把 XML 转换成功能全面的 Web 服务 [ http://blog.csdn.net/phantomhu/archive/2008/02/26/2121653.aspx ] Apache Axis2 提供了好几种 XML 解决方案,可以轻松的开发功能强大的 Web 服务。Axis2 是实现 Web 服务的一个非常不错的选择。由于 Apache Axis2 和 Apache Geronimo duo 是免费而且开放源码的,因此可以考虑使用这两者。 在本系列的前一部分中,我向您介绍了在本系列两篇文章中使用到的 Java 类(参见 参考资料)。我们通过 WSDL 将这些类作为 Web 服务公开,然后创建了一个 JiBX 定义描述,该定义描述将在文本中与 JiBX 数据绑定通信,来测试 Web 服务。在测试过程中,我们通过编译 JiBX 绑定类来创建包装类,使数据绑定类成为整个 Web 服务中的一个功能部分。 在继续深入开发之前,先要确保 <axis2_home>/lib 中的所有的 JAR 文件(包括您在本系列文章第一部分中拷贝的 JiBX 文件)都在您的类路径下,并且在本文整个过程中要一直存在。同时,还需确保您的系统中已安装 Ant。Ant 可以从 Apache 下载获得(参见 参考资料)。 让我们开始生成服务吧。 首先,需要使用 Axis2 生成服务,这样您就可以使用稍后创建的客户机来对它进行测试。在上篇文章开始之前,您应该已下载好必要的工具,并且设置好 AXIS2_HOME 环境变量。要开始创建服务,键入清单 1 中的命令。 java org.apache.axis2.wsdl.WSDL2Java
-uri C:appswebappsIBM-JiBXSimpleService.wsdl -p com.ibm.devWorks.xml.simpleService -d jibx -s -ss -sd -ssi -Ebindingfile ../binding.xml 这将为您创建最基本的服务!下列部分显示了各命令开关的注解:
现在已经有了一个 Web 服务,但是还没有任何定义。下一部分 将对服务进行定义。 只要成功调用了 Web 服务的一项操作,便会调用服务主干中的方法。Web 服务操作的实现代码包含在一个叫做 SimpleServiceSkeleton.java 的文件中(在本例中)。该文件位于 src/com/ibm/devWorks/xml/simpleService 目录,并且是空文件。对它进行定义,如清单 2 所示。 package com.ibm.devWorks.xml.simpleService;
public class SimpleServiceSkeleton implements SimpleServiceSkeletonInterface...{ public void OneWay ( com.ibm.devWorks.xml.simpleService.OneWayRequest OneWayRequest ) ...{ System.err.println("Request data: " + OneWayRequest.getRequestData()); } public com.ibm.devWorks.xml.simpleService.TwoWayResponse TwoWay ( com.ibm.devWorks.xml.simpleService.TwoWayRequest TwoWayRequest ) ...{ System.err.println("Echo String : " + TwoWayRequest.getEchoString()); System.err.println("Booolean : " + TwoWayRequest.getBooolean()); TwoWayResponse res = new TwoWayResponse(); res.setEchoString(TwoWayRequest.getEchoString()); res.setInvertedBoolean(!TwoWayRequest.getBooolean()); return res; } } 清单 2 中的代码含有两个方法,分别对应于本系列第一篇文章中讨论的两个操作(请参见 参考资料)。第一个方法, 第二个方法, 服务已经定义好了。接下来,我们将构建服务并创建 JiBX 数据绑定包装类。 在编译和创建 JiBX 数据绑定包装类之前,我们必须首先编译各类。要编译项目,键入: 此时切换到 build/classes 目录创建包装类,键入: 您会发现四个新的 请注意,您不必构建代码两次。此处通过 Ant 可以知道代码已构建好,但是看到还有新文件,因此需要重新打包 Axis2 存档文件。 服务已经就绪,下节将在 Geronimo 上部署服务。 现在我们将部署刚刚创建和编译好的服务。如果 Geronimo 还未运行,应启动它,键入: 现在将服务存档文件 build/lib/SimpleService.aar 拷贝到 <geronimo_home>/repository/default/axis2/1166439304031/axis2-1166439304031.war/WEB-INF/services 目录(需注意,准确的目录将有所不同)。 服务将很快自动部署好,现在一切已就绪,下节将创建一个客户机对其进行测试。 客户机允许您测试 Web 服务的功能和部署的正确性。同样,我们将使用 JiBX 数据绑定创建一个客户机,用于测试已部署好的 Web 服务。 键入清单 3 中的命令,生成 Web 服务。 java org.apache.axis2.wsdl.WSDL2Java
-uri C:appswebappsIBM-JiBXSimpleService.wsdl -p com.ibm.devWorks.xml.simpleService -d jibx -Ebindingfile ../binding.xml -s 上面的命令简单地创建了客户桩(client stub)代码。有关使用到的开关的解释,请参见 生成服务。接下来,我们将定义真正的客户机代码,其代码将用于测试 Web 服务。 现在我们将编写用于测试 Web 服务已成功部署的代码,这会使用到我们刚刚使用 JiBX 数据绑定创建的客户桩。创建一个 src/com/ibm/devWorks/xml/simpleService/Client.java 文件,并对它进行定义,如清单 4 所示。 package com.ibm.devWorks.xml.simpleService;
public class Client...{ public static void main(java.lang.String args[])...{ try...{ SimpleServiceStub stub = new SimpleServiceStub ("http://localhost:8080/axis2/services/SimpleService"); oneWay(stub); twoWay(stub); } catch(Exception e)...{ e.printStackTrace(); System.out.println(" "); } } public static void oneWay(SimpleServiceStub stub)...{ try...{ OneWayRequest req = new OneWayRequest(); req.setRequestData("Here is your requested data!"); stub.OneWay(req); } catch(Exception e)...{ e.printStackTrace(); System.out.println(" "); } } public static void twoWay(SimpleServiceStub stub)...{ try...{ TwoWayRequest req = new TwoWayRequest(); req.setEchoString("echo!... echo!"); req.setBooolean(false); TwoWayResponse res = stub.TwoWay(req); System.out.println("Echo String : " + res.getEchoString()); System.out.println("Inv Boolean : " + res.getInvertedBoolean()); } catch(Exception e)...{ e.printStackTrace(); System.out.println(" "); } } } 粗体显示了值得注意的代码。这个客户机首先初始化客户桩对象,然后将其传递给两个可用方法。第一个方法, 第二个方法, 我们已经完成了客户机定义。现在我们只需编译 JiBX 绑定包装类,与前面构建服务中的编译一样。 在为客户机编译和创建 JiBX 数据绑定包装类之前,我们首先需要编译各类。要编译项目,键入: 现在切换到 build/classes 目录创建包装类,键入: 我们应该注意到四个新创建的 这就全部完成了!最后剩下要做的就是完成测试。 现在,运行我们刚刚定义的客户机代码,我们应该在屏幕上看到正确的输出。在运行客户机之前,必须确保含有客户机代码(build/lib/SimpleService-test-client.jar)的 JAR 文件在您的类路径下。 要运行客户机,键入如下内容: 我们应该能看到服务的输出,如图 1 所示。 请注意,正确的值已发送给服务。现在我们将检验发回客户机的值是否同样正确,这可以通过查看客户机的输出来完成,如图 2 所示。 一切都工作良好,您现在就可以施展 Jibx 魔法了! 现在,您应该算是一员 JiBX-Axis2 Web 服务开发人员了,能够使用 Axis2 和 JiBX 将您喜欢的一些 Java 类转换成 Web 服务。 在本系列的两篇文章中,我们通过 WSDL 将 Java 类公开,并使用 JiBX 定义描述将它们映射到 XML 数据。在这篇文章中,我们创建了一个实时的 Web 服务,这个服务是使用 Axis2 和 Geronimo 部署的。然后使用 Axis2 创建和运行客户机,来测试最终的实现。对于客户机和服务,我们都指定了 JiBX 数据绑定并分别为它们成功地创建了数据绑定包装类。
学习
|
|