最近一直在忙于实现gsoap自动化工具生成的Web服务,我在pc机上用java来实现其客户端。我使用的IDE是myeclipse6.0,myeclipse自带的xfire可以很方便的实现web服务的服务端和客户端。当我尝试着通过xfire来调用gsoap发布的时,却出现了莫名其妙的问题,寻寻觅觅,不得其解。于是我又尝试着用其他方法来解决问题时,发现还是同样的问题,我找了好久答案,尝试了诸多人提供的解决办法,都不能如愿以偿。就在我万分苦恼之际,有个朋友给我提出了axis2,他说你不妨用axis试一下,我当时并没报多大希望,但这是唯一可以去尝试的方法了。在使用axis2的时候,又遇到了许多问题,首先myeclipse没有集成axis,不像xfire那么方便,我要手动安装插件。http://archive.apache.org/dist/ws/axis2/tools/1_4/axis2-eclipse-codegen-wizard-1.4.zip
和http://archive.apache.org/dist/ws/axis2/tools/1_4/axis2-eclipse-service-archiver-wizard-1.4.zip
把这两个插件下载好后解压。网上有很多方法说是要解压在myeclipse安装目录下的eclipse/plugins/目录下,将Axis2_Codegen_Wizard改名为org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin
将Axis_Service_Archiver-wizard.改名为
org.apache.axis2.tool.Axis_Service_Archiver_1.3.0 。然后再eclipse/links目录下添加名为axis-eclipse-plugin.link的文件,文件内容为path=(meeclipse的安装目录)/eclipse/plugins/然后保存后重启myeclipse就会在file->new->others中看到axis2 wizards的选项,接着当你使用它生成web服务的代码时,会按照预期的要求出现"An error occurred while completing process -java.lang.reflect.InvocationTargetException"的错误提示,然后我就去安装网上提供的方法去把从AXIS2的LIB库中复制"geronimo-stax-api_1.0_spec-1.0.1.jar"和"backport-util-concurrent-3.1.jar"文件到Codegen的lib目录中,同时修改plugin.xml文件,添加
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
但是做完这一切后,问题照旧,网上还有些说法是要把codegen包拷贝出来,修改之后再放进去,再重启myeclipse,这样就能成功了,但是尝试过之后还是同样的问题。我一直在怀疑是不是我的myeclipse版本问题,我准备安装myeclipse8.5 时,无意间发现myeclipse安装目录下不仅有个eclipse还有一个myeclipse的子目录,我打开myeclipse的目录,发现里面还有一个eclipse的目录,我像一个好奇的孩子一样接着又打开了eclipse目录发现里面和根目录下的eclipse目录一样也有一个plugins目录,我打开这个目录,发现这里面也有很多库包。当时我就想会不会和根目录下的那个eclipse一样呢,我尝试着把放在eclipse/plugins/下的那两个包org.apache.axis2.tool.codegen.eclipse.plugin.CodegenWizardPlugin 和org.apache.axis2.tool.Axis_Service_Archiver_1.3.0剪切到myeclipse/eclipse/plugins/目录下,重启myeclipse发现依然有axis2 wizard的选项,更让人惊喜的是这次生成代码没有报错,一切畅通无阻。我尝试着把原来创建的axis-eclipse-plugin.link文件删除,发现依旧可以成功。噢耶!!
最后感叹一句:很多事情都是 众里寻他千百度,暮然回首,那人却在灯火阑珊处