在上篇《 Java与WCF交互(一):Java客户端调用WCF服务》中,我介绍了自己如何使用axis2生成java客户端的悲惨经历。有同学问起使用什么协议,经初步验证,发现只有wsHttpBinding可行,而NetTcpBinding不可行,具体原因待查。昨晚回去重新测试WCF客户端调用Java Web Service,并将过程公布如下:
其实本不需要做web service,只是原来公开的经典的Web service像(http://soapinterop.java.sun.com/round2.base?WSDL)等不可访问了。于是邀月重写了一个本地的web service,以作演示。
第一步:建立本地java环境,并构建 web Service代码,发布web service
1、设置Java环境:
JDK6/J2SE1.6以上,必须!!后面邀月会说明原因。
Eclipse 3.6
Axis2_Codegen_Wizard_1.4.1插件,配置见上文《 Java与WCF交互(一):Java客户端调用WCF服务》
假定以上环境都OK
2、Services 服务端应用程序
在Eclipse中新建一个java project,名为JavaServiceForWCFClient,如图:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1phfgsed5N5NRlBGbWIVAQpcn7dNVkDfTawr2C3kkSygYCZR5ycByEF5bipiKkmDOcvkyH-wlTjxcjG0jOOyBBPdl66maoIJax/WCF001.png?psid=1)
选择一个运行时库
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pjT0jD9lNQQOZYbu-6vfBi-jEstryyRcuZr6YXdeA9IJHa7eGvPUKO5gfXShhbLZJxnRnEFZx7r6hZ3uZZcVNZLu7UGALID6B/WCF002.png?psid=1)
在src下新建一个package,如图:
在该package下新建一个类HelloTimeForWCF,代码如下:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pi7pcKjN8II15VlKHBGMGN8_e_HsOaLIpKQEyohpLIKffP-YUk9gT29VQMUkRnCPfgTgS2TmFEtAEJA1AWXKLQPQSNI0MKJrF/WCF006.png?psid=1)
请注意上图中:@WebService的
使用。这称为 Annotation 或元数据,由 Java SE 5 中引入的 Web Services 元数据规范 (Web Services
Metadata Specification) 所使用。开发人员在对类和方法应用 Annotation
之前定义类和方法,以向运行时引擎指明如何将类及其方法作为 Web Services 和 Web Services 操作来启用。Java SE 6
附带了这样一个引擎。@WebService Annotation 将 SayHello 类标记为实现某个 Web Services ,从而产生可部署的 Web Services 。这个特定的 Annotation 是一个 WSDL 映射 Annotation,并将 Java 源代码与表示 Web Services 的 WSDL 元素相关联。(注:本段内容来自IBM官方网站,https://www6.software.ibm.com/developerworks/cn/education/webservices/ws-eclipse-javase1/section3.html)
下一步,就是Ant工具大派用场的时候了,
在项目根路径下新建一build.xml,内容如图:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pj5uDyHJKoGQU4Q7Z9RgARr1ztGfUwf3QRUXLdxwX2wunbOD-4ZaW8a4oWiFlzXz1YXNpxvOHPRx4nBXuQgIW1SSGy79sR7av/WCF005.png?psid=1)
以"Ant Build"方式运行该文件:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pLUA53XoNdkdgRFNBxNdQKStmIkOxhpYtIaAfWKWFiQxZrGnnpoxM_UT0MqMpCSbcC0Jg0Ua-Bw1ZBXpuVEX09CJRa24i_MCn/WCF007.png?psid=1)
应该在控制台收到如下信息:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1psWhlTty0LfW_FoPtJf0jV-GoxVh_5MQbaC80tPOrZNZvbWF3MOs2u6rmy8-Q8DlKzXOTOkpmIkO2CuOhJaQFeVT61pvw7k9u/WCF008.png?psid=1)
以上信息,表明ant创建成功!此时,刷新项目视图,应该得到如图所示的结果,其中黄色部分为刚生成的内容:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pARyUoJ5jJqerPSDtiDwYrQeKr3K75j14nUTBbA7V7XFWDSz3wsJjCgj13wWZ32oHEkK0KuQX8jYi65BjXO6Z5fQm5yYJgzJh/WCF009.png?psid=1)
在package中新增一个主类,是否感觉有点像WCF中的Host引擎?其实作用就是如此。
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pm_v3hY9l-z7Rhc2F9oG-XIPbMeLpC3p53iT9ez8tmzxQKFQH4fCU4lrbeZOlgncoWgfeXm8_IP0bLW-totvUZWzHKcgALOSi/WCF010.png?psid=1)
其内容如下:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pMizbQrjLyW1ekYEUL-TAQp9YgS8FndCY9nPeYcBVFrcARlo2s1tliId8HUGEpFIp8LqGAxAF6Lsq8mWNKjo4K4iN4nJau9cR/WCF011.png?psid=1)
运行程序,就如同运行WCF中的Host:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pLnDTg8-GdSJScEqibu-5ailpg7j2xmi-r-qhuFvY2dVzNh1JEMXGtlEiHihgmc_gH0LRZVeQ1NfmZtX2p1iM5SxzvtKB3yUT/WCF012.png?psid=1)
可以用内部的浏览器来浏览这个地址:http://localhost:8080/JavaServiceForWCFClient?wsdl
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pGFA55a6Srx_z3CdQra9XBazHRJoOh7cxLB9lK0B6PPOGeKV8vK9yBwSnlJMqo47RmJt7zIaNHdw2C0jKqRb_AzaUMW7HnfBd/WCF013.png?psid=1)
至此,Java web端部署完成。
第二步:建立本地WCF客户端,调用第一步生成的web service
新建一个普通的控制台项目,名为WCFClientFromJava,,
并按下图所示使用SvcUtil命令:(Svcutil.exe,ServiceModel
元数据实用工具用于依据元数据文档生成服务模型代码,以及依据服务模型代码生成元数据文档。ServiceModel 元数据实用工具可在
Windows SDK 安装位置中找到,一般位置为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin)
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1pGFA55a6Srx8omQShtt9BfjPsX9bLL68zxRsTPPXdrJtipuNxQNT3WFY5rBjrT6wcB3uvFzuhXtC-BJ7-cfuJbvrsJ80KPDbk/WCF015.png?psid=1)
生成后,将生成的文件包含在项目中,项目结构如下:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1phBPThcsWhKlVs-GWI6Flrli7yfcKAR9zAHFyrc2fwIzjjCQMazyHzHWHJIGXZ9cR4GT_gbg8dTspy64zgM54heGPtd4klqXI/WCF016.png?psid=1)
生成的app.config文件如下:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1prFrs44m5NzdgIzUSfMl_gpp1ZeU6xdzDUoF9aFkvyUObj_l2fvl4KV-aIopu-unaVKG9mc1in5LSKEOXG-B29x_md95Iby8B/WCF017.png?psid=1)
此时,在program.cs文件中添加如下方法:
![邀月工作室](http://pdqnrg.blu.livefilestore.com/y1p7l9DXlLjB0j_VNiWbQydOOvsaGZyAs8Wvz-D6l8W2jVfh0qFv3BET8dElFpfZcgaaLmknDGawaeGfNyEcB86Eke9GisGmLXA/WCF018.png?psid=1)
至此,WCF客户端调用Java Web service成功!
小结,这是一个很简单的demo,主要技术点在于:
1、@Webservice的使用,参看http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/
2、SvcUtil的使用,参看MSDN:http://msdn.microsoft.com/zh-cn/library/aa347733%28VS.90%29.aspx
本文参考:
使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序,第 1 部分: Web Services 服务端应用程序
https://www6.software.ibm.com/developerworks/cn/education/webservices/ws-eclipse-javase1/section3.html
Introducing JAX-WS 2.0 With the Java SE 6 Platform, Part 1
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/
邀月注:本文版权由邀月和博客园(BlogJava)共同所有,转载请注明出处。
助人等于自助! 3w@live.cn