采用axis2方式Java客户端调用WCF服务端Web Service

第一步:

首先确保WebService服务开启,这样,WCF服务就一直可以被外部程序调用。

邀月工作室 

邀月工作室

这样代表该Web Service服务已开启。


第二步: 配置所需的环境。

首先,请允许我介绍下axis2,它的官方地址:http://ws.apache.org/axis2/

这里介绍的是Code Generator Wizard - eclipse Plug-in,一个Eclipse的插件。


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 projec t,命名为 GetWCFInfoByJavaClient。

加入所需要的架包:

axiom-api-1.2.7.jar
axiom-dom-1.2.7.jar
axiom-impl-1.2.7.jar
axis2-1.4.jar
xmlschema-core-2.1.0.jar
wsdl4j-1.6.3.jar
commons-logging-1.1.1.jar
backport-util-concurrent.jar 
woden-api-1.0M8.jar
neethi-3.0.1.jar
commons-httpclient-3.0.jar
commons-codec-1.3.jar


第四步:调用WCF生成的WSDL生成java客户端。

并在新项目中添加新向导,File-New

此时,我们可以看到期待已久的wizard界面:

邀月工作室 

邀月工作室 

邀月工作室 

邀月工作室 

邀月工作室 

点击“Finish”后。

邀月工作室 

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

项目的结构应该如下图:
邀月工作室

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

这正是我们想要的结果。

 

注意:

调试时出现的错误如下:

错误:java.lang.NoClassDefFoundError: org/apache/ws/commons/schema/utils/NamespacePrefixList
原因:缺少xmlschema-core-2.1.0.jar

错误:java.lang.NoClassDefFoundError: javax/wsdl/WSDLException
原因:缺少wsdl4j-1.6.3.jar

错误:org/apache/commons/logging/LogFactory
原因:缺少commons-logging-1.1.1.jar 或log4j-1.2.11.jar


错误:java.lang.NoClassDefFoundError: edu/emory/mathcs/backport/java/util/concurrent/ConcurrentHashMap
原因:缺少backport-util-concurrent.jar

错误:java.lang.NoClassDefFoundError: org/apache/neethi/PolicyComponent
原因:缺少woden-api-1.0M8.jar 和neethi-3.0.1.jar

错误:org.apache.axis2.deployment.DeploymentException: org/apache/commons/httpclient/HttpException
原因:缺少commons-httpclient-3.0.jar

错误:java.lang.NoClassDefFoundError: org/apache/commons/codec/DecoderException
原因:commons-codec-1.x.jar

猜你喜欢

转载自blog.csdn.net/weixin_42231507/article/details/80897944