Java与WCF交互(一):Java客户端调用WCF服务
2016-07-29 20:37
489 查看
最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信。没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参考:
第一步:生成WCF服务
新建WCF解决方案,分别添加三个项目,HelloTimeService(类库),HelloTimehost(控制台程序),HelloTimeClient(控制台程序),项目结构如图:
![](http://p69ouq.blu.livefilestore.com/y1pV7yjpJjm8y6kvU079St9Q-BL1GW7TuDUV4J_tguj1JF43fNZMYOiOTPe3U-iiYigS3SrerHPHNqc2u7qPcxuea1OGSKJEBsZ/2010-08-24%2012-21-23.png?psid=1)
各个项目的主要代码:
service:
![](http://p69ouq.blu.livefilestore.com/y1ph72_wq3kYktPz459lRndxrxHABaKaMB6MtvVWf426fJ1M11gIncLqbV6r27iyC5ODbgHg6UwHRN92dfHYoy8kYB1sU-FOwLB/2010-08-24%2012-15-45.png?psid=1)
Host:
![](http://p69ouq.blu.livefilestore.com/y1pdjwV2HbLhlimz8O7-svRuBOvYMk1oQi-3E_JXAyHGIffB5C22exnDNH4JhqEqaUmWnT7TgX5KFy8gpstvknUJXeFqVtTvd1_/2010-08-24%2012-17-03.png?psid=1)
Client:
![](http://p69ouq.blu.livefilestore.com/y1pzZDLgRgh8PY5RmoeXuxKkMA5WAyOw9sWw8EiLXu4N41MUBccy2K2oL9Q4r2TW3nQbneQgpEBLgVUUIhl3Z5-sk8GsURBD3DC/2010-08-24%2012-17-54.png?psid=1)
编译通过后,测试Host和Client分别成功:
![](http://p69ouq.blu.livefilestore.com/y1prWDCrMHVV3kMYsmDQNidfUeKZuepbLk_58WqEuZmr5EcbCYDKlBKtEFNhYUOeFLVEik8OkBhSewYCnvwbCtINtulDloS0oAi/2010-08-24%2011-35-03.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1phVuxJ-Ti5u_KF41EVavNFRoZOaFc_7p5-5lY_3C_bvSCDBH5QyhC42Y4_gFTYA6jLZKi70bPe6-JwGqzi67PTOKpgd48NXjK/2010-08-24%2012-20-05.png?psid=1)
保持Host程序打开,这样,WCF服务就一直可以被外部程序调用。当然也包括Java客户端。
我们看看生成的WSDL
![](http://p69ouq.blu.livefilestore.com/y1ph72_wq3kYktSc67ed-dcSjXqDg4KubM2IFZ4BEQRG2ayrBpZJRlwbjfxEh_MF-hd4gq9K5938_oGR6nDWctuS9rMeFDqezYR/2010-08-24%2012-13-37.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pdjwV2HbLhljQAlsGfK7ZvY3K7WvVsvdLXelI1m_vuax7s4fZrN63OxwwotZLyeJvDjcc2XA_0p6Xrrcw88jHjRNGOmvU2DZL/2010-08-24%2012-14-30.png?psid=1)
第二步:调用WCF生成的WSDL生成java客户端。
首先,请允许我介绍下axis2,它的官方地址:http://ws.apache.org/axis2/
这是一个java平台的web service解决方案。我们最常用的是WSDL2Java和Java2WSDL两个功能。
关于Web service的另一个解决方案是xFire,我没试过。
关于命令行执行WSDL2Java,我也没有执行成功! 我这里介绍的是Code Generator Wizard - eclipse Plug-in,一个Eclipse的插件。而且是在参考了众多解决方案才配置成功!
特别感谢yycxbjl的这篇文章:http://www.cnblogs.com/yycxbjl/archive/2010/06/14/1758063.html
我的Java整个配置环境:
1.安装JDK并配置环境变量
JAVA_HOME=D:\2000\Java\JDKUpdate(注意,不带版本号是为了以后升级时只复制文件,而不必修改环境变量。)
path=%JAVA_HOME%\bin;
classpath=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
2.下载并安装Eclipse3.6,就是大家熟悉的太阳神Helios(解压即可)
解压到:D:\2000\Java\Eclipse
3.下载Tomcat6.0.29(本文中使用的是绿色版,故解压即完成)
解压到:D:\2000\Java\tomcat(注意,不带版本号是为了以后升级时只复制文件,而不必修改环境变量。)
由于安装的是tomcat6.0不用配置tomcat的环境变量,至于以前的版本可以查资料。
需要设置TOMCAT_HOME,CATAlINA等环境变量
4.从 http://ws.apache.org/axis2/download/1_4_1/download.cgi下载 axis2-1.4.1-bin.zip
解压到:D:\2000\Java\Axis2,注意不要下载Axis2 1.5.1,原因(据yycxbjl说: “最新版的 1.5.0 与 1.5.1 中没有 backport-util-concurrent-3.1.jar, 无法解决:使用axis2-eclipse-codegen-wizard插件,从wsdl文件生成java文件时出错无法继续的问题,故不使用。)
5.下载1.4.1版的 axis2-eclipse-codegen-wizard 与 axis2-eclipse-service-archiver-wizard
http://ws.apache.org/axis2/tools/1_0/eclipse/wsdl2java-plugin.html#operation1
(但解压后里面显示是1.3.0, 解压到:D:\2000\java\Eclipse\dropins (连压缩包中的根目录一起解压出来)。也可以用传统的link方法部署。
复制 D:\2000\Java\Axis2\lib\backport-util-concurrent-3.1.jar 与 geronimo-stax-api_1.0_spec-1.0.1.jar
到:D:\2000\JAVA\Eclipse\dropins\Axis2_Codegen_Wizard_1.3.0\lib, 并编辑:D:\2000\Java\Eclipse\dropins\Axis2_Codegen_Wizard_1.3.0\plugin.xml
在 runtime 下 添加
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1">
<export name="*"/>
</library>
将Axis2_Codegen_Wizard_1.3.0重命名为Axis2_Codegen_Wizard_1.4.1,(这是整个部署的关键!这里邀月折腾了整整一天!)
新建一个Java project,命名为GetWCFInfoByJavaClient,并在新项目中添加新向导,File-New
此时,我们可以看到期待已久的wizard界面:
![](http://p69ouq.blu.livefilestore.com/y1pt0avWN6VxadIkvynSVA2FGqZXly-kz5EILCc_vXsEgQpEMU66gYcehO6MaIo310tHsVFT4V7afHzKaJw5I3Qp83Htow-Pwpx/2010-08-24%2013-49-10.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pn1gYUXti-uChCZZf207FWY5yO8uOqvi3tcMKRUyaIOdOms9OHkGptxph0sp2VwQTSdpMoeOb6rcWYEEMhxy5adDK_lieCPAK/2010-08-24%2013-54-01.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pqRzxwsQypy4JalHliCWGWYzwZn1SA6fHhqwgVjJjrcEoudhhmYXVIEloywTcswMRji6hh25TTJChkRCNgHpIoG-2S_zed0lY/2010-08-24%2013-54-39.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pW3Tibq3o7jhQzveLCcEX0JkXsQF-k9ohEuqRUnbWTOc-FmZwHuiSyMFCahSXp7P7odISqkqESOa0wzCP5dVN2nWWPMoXM9cu/2010-08-24%2013-59-22.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1p4WpvcIiBm_Q2wBi2xPkNhShjcflkwQXtbMVseSLTPHxRIFbdNi95D5Jg6OyNfb25RS9utMyP3Boc5EXPRX8XNP6sHIYZ-Gcb/2010-08-24%2014-01-15.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pqRzxwsQypy7ziCNiuo-SCOKY9pkhbmq1Sb5yK1eD_vlsDV5e0sih3AiQnBENO-QOKplcfv75AuMrIa8K9Pm6YX9ieqKk0GzG/2010-08-24%2014-03-07.png?psid=1)
此进,在新建的 GetWCFInfoByJavaClient 项目中建一个package,命名为org.tempuri,与前面自定义的命名空间一致。将生成的两个类文 件,ServiceCallbackHandler.java和ServiceStub.java文件添加进来,并在jreSE1.6库中添加 d:\2000\Java\Axis2\lib下所有jar文件的引用。
注意此时有个特殊的文件,即Axis2_Codegen_Wizard_1.4.1\lib\axis2-1.4.1.jar,需要手动复制到d:\2000\java\axis2\lib下并添加到项目的jre库中,这是邀月第二个卡壳的地方,琢磨了好久,慎之慎之。
项目的结构应该如下图:
![](http://p69ouq.blu.livefilestore.com/y1pf2X1mO_3drX_ao3t4s5ZvN0NDS3qKwRl4Nq6RDq-k-pzLdJvCIKh01Qte5ATeAu4ym79TkN9MOdrlutu3S1KO2moRS2GcSq_/2010-08-24%2023-03-54.png?psid=1)
eclipse的命名空间提示就是比vs强啊!很喜欢Ctrl+1。呵呵。微软要是能做到这点,那该多好啊!
要命的是,此时库都添加完成,检查代码也无误,居然编译错误,提示:
Access restriction: The type AxisFault is not accessible due to restriction on required library D:\2000\Java\Axis2\lib\axis2-kernel-1.4.1.jar
![](http://p69ouq.blu.livefilestore.com/y1pENnkYN3VFKmobEgnb7g4gspP8Ub8vGsvzYbf55uuYuk9RUzQWz0S1754vCBnLf27O499HYZEIu3HdkWi9MD_8F6a4Jn2haQg/2010-08-24%2009-27-07.png?psid=1)
这下我傻眼了,于是赶紧google,这两天google.com老是无故罢工,真是祸不单行,终于找到一篇老外的文章,说是如下,即可解决:
* Go to the Build Path settings in the project properties. Windows -> Preferences -> Java Compiler
* Remove the JRE System Library
* Add another JRE with a "perfect match"
* clean and build your project again. It worked for me.
试了下,我的默认jre环境果然是JDK5,于是换为jre system library
![](http://p69ouq.blu.livefilestore.com/y1pQ9XjkLEBLnQ0G8gwohPoDgHqtxihT9fFSNAShEasm_u_A6II37kfsaoUn720e__SKUXFKSspVYRr9HZe1xOY3vLtcNff5Hk6/2010-08-24%2009-39-44.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pQ9XjkLEBLnR06aVpJWXWt-dqwgdJfMhtUGs41RsVM9OicYV54PM5Tgbc8rSJRlgg03YDS4p09Okn9fmVMhjuRnzR6hekWkl3/2010-08-24%2009-40-57.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1p1rvtmn-DhGSG-ylcnvjLeSM8vxxhY0XZp9641Xk6-OKA7--tuv6OiPXwbiV6RV8Qje1x4fqNjHCuloXAvCo0B5c34OWkh9NO/2010-08-24%2009-41-53.png?psid=1)
终于编译成功!看到曙光了,
![](http://p69ouq.blu.livefilestore.com/y1p1rvtmn-DhGRgbrFepzzg1braVxLmrqbs3cljYQiN3r6j6NgHsOLlGHcNpBznRkLXUfnOh1GExWuXv-r215T-kV_YrWtidCD6/2010-08-24%2009-53-09.png?psid=1)
此时,最后的工作就是在Main中调用stub得到我们想要的服务结果了,简单方法,将刚才生成的测试类的方法略作修改,即可运行。如下:
![](http://p69ouq.blu.livefilestore.com/y1p1rvtmn-DhGQ9zUIUDwx0jvhUt2Y4e7UtBd2qbMA-Gqbp_EpGuqZzUJzQGw5I8XvvIW3OAHmGrkC_qLHnnpXJ1kPrsaS5-vPW/2010-08-24%2011-32-32.png?psid=1)
这正是我们想要的结果。
关于java与.net交互的其他文章,请参考:
微软示例:
Java/.NET Interoperability with the Microsoft.com Web Service
http://msdn.microsoft.com/en-us/library/ms953968.aspx
Interoperability Testing
http://msdn.microsoft.com/en-us/library/aa480510.aspx
IBM示例:使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序,第 1 部分: Web Services 服务端应用程序(该链接需要先注册)
https://www6.software.ibm.com/developerworks/cn/education/webservices/ws-eclipse-javase1/section2.html
小结:这虽然只是一个简单的demo,但我问了许多人,并在论坛发问,可是由于使用环境的不同,最终没找到类似的环境,只好自己摸索实践,好在还有一点点java基础,另外网上几个论坛像javaeye提供的答案过于陈旧,这正是java初学者苦恼之处,这点来看,微软的开发环境无论如何是值得称赞的,至少它不用跑到别的地盘去问答案。eclipse\tomcat\axis等代表的服务器和开发环境、插件配置非常的让初学者无奈!因为你不知道某个jar是否与其他几千个jar很好的兼容。不知道java高手们是否指一条明道,非常感谢!并再次感谢yycxb
下篇文章介绍WCF客户端如何调用java的web service,那要简单多了。敬请关注。
第一步:生成WCF服务
新建WCF解决方案,分别添加三个项目,HelloTimeService(类库),HelloTimehost(控制台程序),HelloTimeClient(控制台程序),项目结构如图:
![](http://p69ouq.blu.livefilestore.com/y1pV7yjpJjm8y6kvU079St9Q-BL1GW7TuDUV4J_tguj1JF43fNZMYOiOTPe3U-iiYigS3SrerHPHNqc2u7qPcxuea1OGSKJEBsZ/2010-08-24%2012-21-23.png?psid=1)
各个项目的主要代码:
service:
![](http://p69ouq.blu.livefilestore.com/y1ph72_wq3kYktPz459lRndxrxHABaKaMB6MtvVWf426fJ1M11gIncLqbV6r27iyC5ODbgHg6UwHRN92dfHYoy8kYB1sU-FOwLB/2010-08-24%2012-15-45.png?psid=1)
Host:
![](http://p69ouq.blu.livefilestore.com/y1pdjwV2HbLhlimz8O7-svRuBOvYMk1oQi-3E_JXAyHGIffB5C22exnDNH4JhqEqaUmWnT7TgX5KFy8gpstvknUJXeFqVtTvd1_/2010-08-24%2012-17-03.png?psid=1)
Client:
![](http://p69ouq.blu.livefilestore.com/y1pzZDLgRgh8PY5RmoeXuxKkMA5WAyOw9sWw8EiLXu4N41MUBccy2K2oL9Q4r2TW3nQbneQgpEBLgVUUIhl3Z5-sk8GsURBD3DC/2010-08-24%2012-17-54.png?psid=1)
编译通过后,测试Host和Client分别成功:
![](http://p69ouq.blu.livefilestore.com/y1prWDCrMHVV3kMYsmDQNidfUeKZuepbLk_58WqEuZmr5EcbCYDKlBKtEFNhYUOeFLVEik8OkBhSewYCnvwbCtINtulDloS0oAi/2010-08-24%2011-35-03.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1phVuxJ-Ti5u_KF41EVavNFRoZOaFc_7p5-5lY_3C_bvSCDBH5QyhC42Y4_gFTYA6jLZKi70bPe6-JwGqzi67PTOKpgd48NXjK/2010-08-24%2012-20-05.png?psid=1)
保持Host程序打开,这样,WCF服务就一直可以被外部程序调用。当然也包括Java客户端。
我们看看生成的WSDL
![](http://p69ouq.blu.livefilestore.com/y1ph72_wq3kYktSc67ed-dcSjXqDg4KubM2IFZ4BEQRG2ayrBpZJRlwbjfxEh_MF-hd4gq9K5938_oGR6nDWctuS9rMeFDqezYR/2010-08-24%2012-13-37.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pdjwV2HbLhljQAlsGfK7ZvY3K7WvVsvdLXelI1m_vuax7s4fZrN63OxwwotZLyeJvDjcc2XA_0p6Xrrcw88jHjRNGOmvU2DZL/2010-08-24%2012-14-30.png?psid=1)
第二步:调用WCF生成的WSDL生成java客户端。
首先,请允许我介绍下axis2,它的官方地址:http://ws.apache.org/axis2/
这是一个java平台的web service解决方案。我们最常用的是WSDL2Java和Java2WSDL两个功能。
关于Web service的另一个解决方案是xFire,我没试过。
关于命令行执行WSDL2Java,我也没有执行成功! 我这里介绍的是Code Generator Wizard - eclipse Plug-in,一个Eclipse的插件。而且是在参考了众多解决方案才配置成功!
特别感谢yycxbjl的这篇文章:http://www.cnblogs.com/yycxbjl/archive/2010/06/14/1758063.html
我的Java整个配置环境:
1.安装JDK并配置环境变量
JAVA_HOME=D:\2000\Java\JDKUpdate(注意,不带版本号是为了以后升级时只复制文件,而不必修改环境变量。)
path=%JAVA_HOME%\bin;
classpath=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
2.下载并安装Eclipse3.6,就是大家熟悉的太阳神Helios(解压即可)
解压到:D:\2000\Java\Eclipse
3.下载Tomcat6.0.29(本文中使用的是绿色版,故解压即完成)
解压到:D:\2000\Java\tomcat(注意,不带版本号是为了以后升级时只复制文件,而不必修改环境变量。)
由于安装的是tomcat6.0不用配置tomcat的环境变量,至于以前的版本可以查资料。
需要设置TOMCAT_HOME,CATAlINA等环境变量
4.从 http://ws.apache.org/axis2/download/1_4_1/download.cgi下载 axis2-1.4.1-bin.zip
解压到:D:\2000\Java\Axis2,注意不要下载Axis2 1.5.1,原因(据yycxbjl说: “最新版的 1.5.0 与 1.5.1 中没有 backport-util-concurrent-3.1.jar, 无法解决:使用axis2-eclipse-codegen-wizard插件,从wsdl文件生成java文件时出错无法继续的问题,故不使用。)
5.下载1.4.1版的 axis2-eclipse-codegen-wizard 与 axis2-eclipse-service-archiver-wizard
http://ws.apache.org/axis2/tools/1_0/eclipse/wsdl2java-plugin.html#operation1
(但解压后里面显示是1.3.0, 解压到:D:\2000\java\Eclipse\dropins (连压缩包中的根目录一起解压出来)。也可以用传统的link方法部署。
复制 D:\2000\Java\Axis2\lib\backport-util-concurrent-3.1.jar 与 geronimo-stax-api_1.0_spec-1.0.1.jar
到:D:\2000\JAVA\Eclipse\dropins\Axis2_Codegen_Wizard_1.3.0\lib, 并编辑:D:\2000\Java\Eclipse\dropins\Axis2_Codegen_Wizard_1.3.0\plugin.xml
在 runtime 下 添加
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1">
<export name="*"/>
</library>
将Axis2_Codegen_Wizard_1.3.0重命名为Axis2_Codegen_Wizard_1.4.1,(这是整个部署的关键!这里邀月折腾了整整一天!)
新建一个Java project,命名为GetWCFInfoByJavaClient,并在新项目中添加新向导,File-New
此时,我们可以看到期待已久的wizard界面:
![](http://p69ouq.blu.livefilestore.com/y1pt0avWN6VxadIkvynSVA2FGqZXly-kz5EILCc_vXsEgQpEMU66gYcehO6MaIo310tHsVFT4V7afHzKaJw5I3Qp83Htow-Pwpx/2010-08-24%2013-49-10.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pn1gYUXti-uChCZZf207FWY5yO8uOqvi3tcMKRUyaIOdOms9OHkGptxph0sp2VwQTSdpMoeOb6rcWYEEMhxy5adDK_lieCPAK/2010-08-24%2013-54-01.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pqRzxwsQypy4JalHliCWGWYzwZn1SA6fHhqwgVjJjrcEoudhhmYXVIEloywTcswMRji6hh25TTJChkRCNgHpIoG-2S_zed0lY/2010-08-24%2013-54-39.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pW3Tibq3o7jhQzveLCcEX0JkXsQF-k9ohEuqRUnbWTOc-FmZwHuiSyMFCahSXp7P7odISqkqESOa0wzCP5dVN2nWWPMoXM9cu/2010-08-24%2013-59-22.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1p4WpvcIiBm_Q2wBi2xPkNhShjcflkwQXtbMVseSLTPHxRIFbdNi95D5Jg6OyNfb25RS9utMyP3Boc5EXPRX8XNP6sHIYZ-Gcb/2010-08-24%2014-01-15.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pqRzxwsQypy7ziCNiuo-SCOKY9pkhbmq1Sb5yK1eD_vlsDV5e0sih3AiQnBENO-QOKplcfv75AuMrIa8K9Pm6YX9ieqKk0GzG/2010-08-24%2014-03-07.png?psid=1)
此进,在新建的 GetWCFInfoByJavaClient 项目中建一个package,命名为org.tempuri,与前面自定义的命名空间一致。将生成的两个类文 件,ServiceCallbackHandler.java和ServiceStub.java文件添加进来,并在jreSE1.6库中添加 d:\2000\Java\Axis2\lib下所有jar文件的引用。
注意此时有个特殊的文件,即Axis2_Codegen_Wizard_1.4.1\lib\axis2-1.4.1.jar,需要手动复制到d:\2000\java\axis2\lib下并添加到项目的jre库中,这是邀月第二个卡壳的地方,琢磨了好久,慎之慎之。
项目的结构应该如下图:
![](http://p69ouq.blu.livefilestore.com/y1pf2X1mO_3drX_ao3t4s5ZvN0NDS3qKwRl4Nq6RDq-k-pzLdJvCIKh01Qte5ATeAu4ym79TkN9MOdrlutu3S1KO2moRS2GcSq_/2010-08-24%2023-03-54.png?psid=1)
eclipse的命名空间提示就是比vs强啊!很喜欢Ctrl+1。呵呵。微软要是能做到这点,那该多好啊!
要命的是,此时库都添加完成,检查代码也无误,居然编译错误,提示:
Access restriction: The type AxisFault is not accessible due to restriction on required library D:\2000\Java\Axis2\lib\axis2-kernel-1.4.1.jar
![](http://p69ouq.blu.livefilestore.com/y1pENnkYN3VFKmobEgnb7g4gspP8Ub8vGsvzYbf55uuYuk9RUzQWz0S1754vCBnLf27O499HYZEIu3HdkWi9MD_8F6a4Jn2haQg/2010-08-24%2009-27-07.png?psid=1)
这下我傻眼了,于是赶紧google,这两天google.com老是无故罢工,真是祸不单行,终于找到一篇老外的文章,说是如下,即可解决:
* Go to the Build Path settings in the project properties. Windows -> Preferences -> Java Compiler
* Remove the JRE System Library
* Add another JRE with a "perfect match"
* clean and build your project again. It worked for me.
试了下,我的默认jre环境果然是JDK5,于是换为jre system library
![](http://p69ouq.blu.livefilestore.com/y1pQ9XjkLEBLnQ0G8gwohPoDgHqtxihT9fFSNAShEasm_u_A6II37kfsaoUn720e__SKUXFKSspVYRr9HZe1xOY3vLtcNff5Hk6/2010-08-24%2009-39-44.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1pQ9XjkLEBLnR06aVpJWXWt-dqwgdJfMhtUGs41RsVM9OicYV54PM5Tgbc8rSJRlgg03YDS4p09Okn9fmVMhjuRnzR6hekWkl3/2010-08-24%2009-40-57.png?psid=1)
![](http://p69ouq.blu.livefilestore.com/y1p1rvtmn-DhGSG-ylcnvjLeSM8vxxhY0XZp9641Xk6-OKA7--tuv6OiPXwbiV6RV8Qje1x4fqNjHCuloXAvCo0B5c34OWkh9NO/2010-08-24%2009-41-53.png?psid=1)
终于编译成功!看到曙光了,
![](http://p69ouq.blu.livefilestore.com/y1p1rvtmn-DhGRgbrFepzzg1braVxLmrqbs3cljYQiN3r6j6NgHsOLlGHcNpBznRkLXUfnOh1GExWuXv-r215T-kV_YrWtidCD6/2010-08-24%2009-53-09.png?psid=1)
此时,最后的工作就是在Main中调用stub得到我们想要的服务结果了,简单方法,将刚才生成的测试类的方法略作修改,即可运行。如下:
![](http://p69ouq.blu.livefilestore.com/y1p1rvtmn-DhGQ9zUIUDwx0jvhUt2Y4e7UtBd2qbMA-Gqbp_EpGuqZzUJzQGw5I8XvvIW3OAHmGrkC_qLHnnpXJ1kPrsaS5-vPW/2010-08-24%2011-32-32.png?psid=1)
这正是我们想要的结果。
关于java与.net交互的其他文章,请参考:
微软示例:
Java/.NET Interoperability with the Microsoft.com Web Service
http://msdn.microsoft.com/en-us/library/ms953968.aspx
Interoperability Testing
http://msdn.microsoft.com/en-us/library/aa480510.aspx
IBM示例:使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序,第 1 部分: Web Services 服务端应用程序(该链接需要先注册)
https://www6.software.ibm.com/developerworks/cn/education/webservices/ws-eclipse-javase1/section2.html
小结:这虽然只是一个简单的demo,但我问了许多人,并在论坛发问,可是由于使用环境的不同,最终没找到类似的环境,只好自己摸索实践,好在还有一点点java基础,另外网上几个论坛像javaeye提供的答案过于陈旧,这正是java初学者苦恼之处,这点来看,微软的开发环境无论如何是值得称赞的,至少它不用跑到别的地盘去问答案。eclipse\tomcat\axis等代表的服务器和开发环境、插件配置非常的让初学者无奈!因为你不知道某个jar是否与其他几千个jar很好的兼容。不知道java高手们是否指一条明道,非常感谢!并再次感谢yycxb
下篇文章介绍WCF客户端如何调用java的web service,那要简单多了。敬请关注。
Java与WCF交互(二):WCF客户端调用Java web service
Java与WCF交互(一)补充:用WSImport生成WSDL的Java客户端代码相关文章推荐
- Java与WCF交互(一):Java客户端调用WCF服务
- 转载——Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务 (转)
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务 【转】
- Java与WCF交互(一):Java客户端调用WCF服务
- Java与WCF交互(一):Java客户端调用WCF服务 (转)
- Java与WCF交互(一):Java客户端调用WCF服务 (转)
- 转载——Java与WCF交互(二):WCF客户端调用Java Web Service
- 用WCF开发的服务给Java的客户端调用
- Java与WCF交互(二):WCF客户端调用Java web service
- Java与WCF交互(二):WCF客户端调用Java web service【转】
- Java与WCF交互(二):WCF客户端调用Java web service(转)
- Invoke WCF service from Java Client with Authentication (X.509 Certificate) Java 客户端调用WCF服务 需要安全验证