最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信。没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参考:

第一步:生成WCF服务

新建WCF解决方案,分别添加三个项目,HelloTimeService(类库),HelloTimehost(控制台程序),HelloTimeClient(控制台程序),项目结构如图:

各个项目的主要代码:
service:

Host:

Client:

编译通过后,测试Host和Client分别成功:

保持Host程序打开,这样,WCF服务就一直可以被外部程序调用。当然也包括Java客户端。

我们看看生成的WSDL

第二步:调用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界面:

此进,在新建的 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库中,这是邀月第二个卡壳的地方,琢磨了好久,慎之慎之。

项目的结构应该如下图:

 

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

 


这下我傻眼了,于是赶紧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

终于编译成功!看到曙光了,

此时,最后的工作就是在Main中调用stub得到我们想要的服务结果了,简单方法,将刚才生成的测试类的方法略作修改,即可运行。如下:

这正是我们想要的结果。

关于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的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation debug="true"/>
</system.web>
<system.serviceModel>
<services>
<service name="Sample.WCF.HelloTimeForJava.Service" behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint address="HelloTimeService" binding="wsHttpBinding" contract="Sample.WCF.HelloTimeForJava.IService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/"/>
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="True" httpGetUrl=""/>
<serviceDebug includeExceptionDetailInFaults="False"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>

</configuration>

相关链接:

Java与WCF交互(一)补充:用WSImport生成WSDL的Java客户端代码

Java与WCF交互(二):WCF客户端调用Java web service

 

邀月注:本文版权由邀月和博客园共同所有,转载请注明出处。
助人等于自助!  3w@live.cn
转载自:http://www.cnblogs.com/downmoon/archive/2010/08/24/1807161.html

转载于:https://www.cnblogs.com/ShaYeBlog/p/3794032.html

转载——Java与WCF交互(一):Java客户端调用WCF服务相关推荐

  1. WCF 入门之旅(4): 怎样用客户端调用WCF服务

    WCF 入门之旅(4): 怎样用客户端调用WCF服务 前面的demo已经能够跑起来,现在开始考虑用客户端来测试所写的应用了,首先用个普通的应用程序来调用所写的wcf服务吧.其实最后运行wcf服务后的页 ...

  2. 客户端调用 WCF 的几种方式

    转载网络代码.版权归原作者所有..... 客户端调用WCF的几种常用的方式:1普通调用var factory = new DataContent.ServiceReference1.CustomerS ...

  3. SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)...

    声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操 ...

  4. SpringCloud 搭建项目环境、创建 Dept 微服务、客户端调用微服务

    对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确 的讲解,那么本次为 了清晰可见,创建一套新的微服务架构:部门微服务(De ...

  5. 客户端调用网关服务“网络请求错误“

    问题: 客户端调用网关服务"网络请求错误" 分析: 刚开始看到这个错误时,什么也没想,直接在网关项目代码全局搜"网络请求错误"结果什么也没搜索到,于是在网关服务 ...

  6. Java与WCF交互(一):Java客户端调用WCF服务

    最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...

  7. Elasticsearch java客户端调用cat服务

    开发环境,测试环境,预发环境和生产环境一般相互隔离的,使用开发环境或者测试环境可以使用cat来查看索引的情况 例如: 但预防环境和测试环境是不允许访问的,那怎么办呢? 可以使用后台来查看上述信息,提供 ...

  8. wcf简单教程(10) ajax调用,wcf简单教程(10) ajax调用

    wcf简单教程(10) ajax调用 [2021-02-11 16:23:59]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&q ...

  9. spring-cloud开发微服务笔记(二):高可用Eureka注册中心的搭建与RestTemplate和Fengin客户端调用微服务示例

    引言:这一篇博客是将上一篇spring-cloud-eureka-server的单机模式改为集群模式,体现eureka的高可用特性.生产环境无论是Eureka注册中心还是Client客户端大多是部署在 ...

最新文章

  1. server side render
  2. 一篇搞定异常: Exception
  3. 基于JAVA+SpringMVC+Mybatis+MYSQL的物流管理系统
  4. 代码动态改变 NGUI UILabel 的字体
  5. ❤️Mybatis开发中什么是多对一处理、一对多处理?
  6. Spark 调优 ——cache(persist)与 checkpoint
  7. 传统的 IT 销售渠道将会走向末路?
  8. 【软考软件评测师】2011年下案例分析历年真题
  9. 爬虫基础知识+Scrapy框架
  10. matlab怎么分析数据,MATLAB应用——数据分析与统计
  11. 【笔记】初读《SICP》:递归和迭代
  12. 工具类记录之Guawa的Splitter
  13. 消防工程师 8.2 防排烟系统-防烟
  14. 豪斯曼检验matlab,豪斯曼检验、空间面板模型选择等问题
  15. 利用python进行平行束FBP重建结果
  16. centos7启动dhcp失败_CentOS7中DHCP配置
  17. 京东Java后台开发岗社招面试经验分享,4面的面经
  18. 如何成为一名合格的程序员?
  19. 苍溪城郊中学2021高考成绩查询,苍溪县城郊中学2019高考成绩喜报、一本二本上线人数情况...
  20. 入门级用Python + tkinter的打飞机/飞机大战小游戏

热门文章

  1. Python 循环拼接字符串_详解Python拼接字符串的七种方式
  2. Linux装多个apache,windows linux如何安装多个apache?
  3. 腐蚀国内稳定服务器_WOW正式服:热修提升坐骑掉率,下周改动大幻象装备必带腐蚀...
  4. r 语言计算欧氏距离_一文搞懂常用R语言统计值计算:打倒描述性统计拦路虎
  5. 转转服务器无响应,【转】服务器无响应(或者本地MySQL服务器的套接字没有正确配置)的问题...
  6. python html 语法高亮,在Python中使用doxygen样式文档字符串的Vim语法高亮显示
  7. C++编程进阶6(public继承与组合、private继承、多重继承、处理模板基类内的名称、如何避免模板代码膨胀)
  8. 无法打开文件“opencv_world410d.obj”
  9. 记录一下HALCON检测螺钉是否存在
  10. go kegg_差异基因的GO与KEGG注释