本文讨论WebLogic Server 9(下简称WLS9)中的新特性:java Web Service (JWS)。WLS9的Web Services子系统实现了J2EE 1.4中的Web Services的新标准: EnterPRise Web Services 1.1 specification (JSR-921)。该规范定义了标准的J2EE Web Service打包格式,部署模块以及运行时服务。
public class StringChanger { @WebMethod() public String toUpper(String upperReqString) { …… 这个类的源代码和普通的JAVA代码没太多区别,但和普通JAVA代码不同的是这里面还包含了很多以@开头的代码,或者称为注释,也就是在Java 5中的新语法,JSR-175。JSR-175规范只是定义这种语法规则,而用这种语法来如何将这个类生成一个Web Service接口,则需要由JSR-181规范来决定。所以这些JSR-175的注释才真正决定了这个Web Service的行为和外观。
假如希望Eclipse的配置尽量吻合本文的环境,可参考我的另一篇文章:“使用Eclipse加速Weblogic Server开发”的第一步到第二步。配置好后在Eclipse的File->New Project中选取Java Project,在Project Name中将我们这个练习的名字设为JSR-181 Web Services或任何你喜欢的名字,JDK Compliance中选择“Use a project specific compliance 5.0”,其余保持默认。一个符合我们需要的Project就建好了。
做好1到4步骤就可以按照后面几节所述完成练习。但假如想快速看一下练习结果,将本文附件solution包括所有源代码。解压到您磁盘任何位置,用Eclipse创建好一空的名为JSR-181 Web Services的Project后,用solution解出的JSR-181 Web Services文件夹替换这个Project的文件夹。最后在Eclipse的Package Explorer中刷新一下,就浏览已经开发配置好Eclipse Project代码了。修改项目的wls-build-tools路径下weblogicServer.properties中的WLS和JDK环境变量,然后就可以执行ANT脚本中的任务来编译,部署,测试等步骤。
Buildfile: C:/project/eclipse31/workspace/JSR-181 Web Services/build.xml build.jbClient: [clientgen] Generating client from http://localhost:7001/jb/StringChangerService?WSDL ... [clientgen] Getting partner link [clientgen] Package name is client.test [clientgen] DestDir is C:/project/eclipse31/workspace/JSR-181 Web Services [clientgen] class name is StringChangerPort_Stub [clientgen] service class name is StringChangerService [clientgen] Porttype name is StringChangerPort [clientgen] service impl name is StringChangerService_Impl [javac] Compiling 4 source files to C:/temp BUILD SUCCESSFUL Total time: 20 seconds
回到Eclipse的Package Explorer视图,在“JSR-181 Web Services”上右键选Refresh,能看到在项目中增加了一个名为client.test的包。展开这个包能看到里面包含若干JAVA文件,XML文件和WSDL文件。这些文件就是自动生成的客户端代码。打开资源治理器到C:/TEMP/client/test,能看到生成的客户端代码的class文件。
toUpper request: This is my test String ;-) toUpper results: THIS IS MY TEST STRING ;-) toLower request: This is my test String ;-) toLower results: this is my test string ;-)
Buildfile: C:/project/eclipse31/workspace/JSR-181 Web Services/build.xml build.ejbClient: [clientgen] Generating client from jar:file:C:/temp/ejb/PurchaseOrder.jar!/META-INF/PurchaseOrderService.wsdl … [clientgen] Getting partner link [clientgen] Package name is client.test [clientgen] DestDir is C:/project/eclipse31/workspace/JSR-181 Web Services [clientgen] class name is PurchaseOrderPort_Stub [clientgen] service class name is PurchaseOrderService [clientgen] Porttype name is PurchaseOrderPort [clientgen] service impl name is PurchaseOrderService_Impl [javac] Compiling 4 source files to C:/temp BUILD SUCCESSFUL Total time: 11 seconds
import client.test.PurchaseOrderPort; import client.test.PurchaseOrderService; import client.test.PurchaseOrderService_Impl; public class TestDriver_EJB { public static void main(String[] args) throws ServiceException, RemoteException{ String url = “http://localhost:7001/ejb/PurchaseOrderService?WSDL”; PurchaseOrderService service = new PurchaseOrderService_Impl(url); PurchaseOrderPort port = service.getPurchaseOrderPort(); String testString = “This is my test String ;-)”;