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

2023-11-16

第一步:生成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得到我们想要的服务结果了,简单方法,将刚才生成的测试类的方法略作修改,即可运行。如下:
邀月工作室

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java与WCF交互(一):Java客户端调用WCF服务 的相关文章

  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • FileInputFormat详解

    转载 http blog csdn net hellozpc article details 45771933 https my oschina net leejun2005 blog 133424 1 概述 我们在设置MapReduce输
  • ThinkPhp5.1快速创建模块

    快速生成模块 生成一个test模块的指令如下 gt php think build module test 表示自动生成test模块 自动生成的模块目录包含了config controller model和view目录以及common ph
  • 【内存泄漏】- 4. 使用python的gc+pyrasite模块检测python内存泄漏

    Python内存泄漏测试 1 Python内存泄漏处理机制 为了解决内存泄漏的问题 Python2 0的版本开始引入 引用计数 并基于引用计数实现了自动垃圾收集 后来为了解决循环引用导致内存泄漏的问题 又引入 标记 清除 分代回收 机制 P
  • Java实现图片上传

    使用 IDEA 软件 实现文件上传 结合JSP form表单及Servlet 实现文件上传 一 JSP界面 HTML界面 配置 实现文件上传需要配置form表单 基本设置 其中固定两个值是 提交方式只能为post enctype是固定的
  • 瑞萨电子TPS-1教学-第一讲TPS-1 PROFINET Demo Board概述 视频

    瑞萨电子TPS 1教学 第一讲TPS 1 PROFINET Demo Board概述 Renesas
  • 【深度好文】企业数字化转型的核心要素及能力架构分析

    数字化转型究竟是什么 首先我们还是摘录下百度词条上对数字化转型的一个简单说明如下 数字化转型是建立在数字化转换和数字化升级基础上 进一步触及公司核心业务 以新建一种商业模式为目标的高层次转型 数字化转型是开发数字化技术及支持能力以新建一个富
  • 72. Edit Distance

    Given two words word1 and word2 find the minimum number of steps required to convert word1 to word2 each operation is co
  • Self-attention计算方法

    三个矩阵 首先 Inputs为x1 x4 是一个sequence 每一个Input先通过一个Embedding 乘上一个Matrix得到 a1 a4 然后放入self attention 在self attention当中 每一个Input
  • Qt中的C++指针

    Qt中的C 指针 q ptr 在私有类中定义一个名字为q ptr 类型为公有类的数据指针 通过这个指针来访问公有类的数据 d ptr 在公有类中定义一个名字为d ptr 类型为私有类的数据指针 通过这个指针来访问私有类的数据 具体定义在qg
  • C语言

    要求设计的管理系统能够实现以下功能 1 每一条记录包括一个学生的学号 姓名 3个成绩 平时成绩 作业成绩 考试成绩 2 成绩录入功能 成绩信息用文件保存 可以一次完成若干条记录 3 成绩信息显示浏览功能 完成全部学生记录的显示 4 查询功能
  • elasticsearch 集群no known master node

    为什么80 的码农都做不了架构师 gt gt gt It is usually handled automatically If autodiscovery doesn t work Edit the elastic search conf
  • 装饰器在js中的实现原理

    在项目中总是能看到 connect Debounce 巴拉巴拉 通过百度才知道它叫做装饰器 装饰器有什么好 比如说 当我们写好了一个组件它叫做纯洁 当时在创造它的时候我们只想让它做一件事 但是突然有人告诉你我要加一个功能 可是我又不想让我的
  • 医学图像配准软件 ANTs(Advanced Normalization Tools)的安装和使用说明

    本文是关于医学图像配准软件 ANTs Advanced Normalization Tools 的安装和使用说明 ANTs ANTs 是 Advanced Normalization Tools 的缩写 是基于 C 语言的一个医学图像处理的
  • 利用openslide-python处理病理

    参考 博客总结https www jianshu com p bd5b572b5269 官方文档 https openslide org api python module openslide 获取元信息 如每个像素有多少微米 import
  • 杭电ACM 第2036题

    include
  • Linux 定时备份mysql数据并同步到其他mysql服务器中

    备份还原操作 导出数据库 usr bin mysqldump u root pwd database gt database sql 导入数据库 mysql u root p database lt database sql 备份到压缩文件
  • Android 实现WebView

    activity main xml
  • Git首次提交代码到仓库步骤(资料)

    第一步 登陆码云 第二步 创建一个 新的项目 第三步 创建成功后到这个页面 Git 全局设置 git config global user name 意米 git config global user email 142453222851
  • 数据结构<1>时间复杂度详解和leetcode例题

    文章目录 什么是时间复杂度和空间复杂度 前言 算法效率 时间复杂度的计算 空间复杂度的计算 oj练习 什么是时间复杂度和空间复杂度 前言 算法效率 算法效率分析分为两种 第一种是时间效率 第二种是空间效率 时间效率被称为时间复杂度 而空间效
  • Java与WCF交互(一):Java客户端调用WCF服务

    第一步 生成WCF服务 新建WCF解决方案 分别添加三个项目 HelloTimeService 类库 HelloTimehost 控制台程序 HelloTimeClient 控制台程序 项目结构如图 各个项目的主要代码 service Ho