因为工程的需要,合作方给了我几个wsdl文件,我需要通过工具将这些wsdl分别生成客户机或服务器的java文件。
以往生成都是用jbuilder9配合axis1生成的源文件,但此次用该方法生成的时候发送给对方数据过不去,对方的人回答我说是axis版本问题。
我的第一个问题是:
我觉得webservice主要特点是跨平台和远程方法调用,虽然我的jdk版本和axis版本也许和对方不同,但是我发出的soap信息,即时包含了axis的版本号,应该也不会影响解析吧。所以,会不会出现我发了带版本号的的信息后对方却不能解析的情况?还是或者是我这边发送的信息本身有问题导致他们那边收不到信息??
然后我尝试了用eclipse部署,用了两种方式,第一种是网上常见的插件生成。将两个插件倒入到eclipse,创建了工程,并选择用插件生成,但是生成过程中出现java.lang.reflect.InvocationTargetException,按照网上说法,是缺少backport-util-concurrent-3.1.jar,我拷贝了这个包到eclipse下,并且也修改了配置文件,甚至更改了jdk成为1.6,但是还是依然出现异常。
第二种方法是我们同事教我的,据说,下载一个axis2.war的包,用tomcat解压缩,在eclipse中配置以下axis的路径,可以通过,new—other—webservice的web Service/web Service Client生成,我准备生成一个服务器端,下一步后有一个选择axis版本的地方,如果选择1会正常生成,如果选择2则会出现Unable to add the follwing facets to project demo:Axis2 Web Services Core,Axis2 Web Services Extensions。这个异常网上完全没有,所以无法找到问题。
这两种方法生成的时候我用的都是jdk1.6 tomcat6 还有 eclipse3.4,确认axis路径引入了,tomcat开启了,axis的包也都引进工程了,虽然不知道这些有没有用,不过还是写下来了。
各位高手看到了一定要伸出援手啊,网上的资料要不就没有要不就特杂,完全搞不定。发帖的速度可能会比较慢,所以如果可以请加我qq:41981172,最好能有个step by step的演示,我也会在这次问题解决后重新写一份文档贡献出来。
所以,拜托了,各位~~~
------解决方案--------------------
首先要确定的一个问题是,消息发过去了没有,还是对方无法解析soap消息。
正常情况下,用wsdl生成的客户端,如果locator里的地址是服务器的地址,应该不会有什么问题。自己可以捕获soap消息看一下,是否有什么问题。
------解决方案--------------------
在Eclipse里面自带的插件是不支持Axis2 1.3以前的版本的,并且需要设置Axis2的环境才能使用,在window-preferences-web service-axis2 emmiter里面把axis2的环境设置进去就可以了。你可以试试。
------解决方案--------------------
应该不是那么麻烦吧,最好用JBuilder 2006,以前我到做用webservice 开发过,
JBuilder 2006 开发webservice 还是很不错的工具.它集成的webservice client 包都自动加入,
又不较容易出错.
------解决方案--------------------
请参考:
http://blog.csdn.net/pathuang68/archive/2009/05/08/4160041.aspx中的第7步
------解决方案--------------------
服务器端收不到你发送的数据,有几种原因:
1,你的确没有发送出去数据。
2,你发送出正确格式数据啦,但对方无法解析。
3,你发送出去了不符合要求格式数据,对方无法解析。
你用排除法来排除吧。首先截取发送的soap报文,看里面有没有数据。如果有没有的话,属于第一种原因造成的。
否则,看看数据格式对么。如果数据格式对的话,那么是服务器端无法解析的问题。
这样你和对方一块联合解决问题。
第三种也有可能,自己看看解决吧。
------解决方案--------------------
java.lang.reflect.InvocationTargetException
关于这个错误我之前也遇到过,是因为apache担供的axis2的eclipse插件Axis2_Codegen_Wizard少包造成的,你打开plugin.xml,看<runtime>结点,首先看library指向的jar包是不是都存在,不存在的可以从axis2组件中找,里面有的,然后加上backport-util-concurrent-3.1.jar和geronimo-stax-api_1.0_spec-1.0.1.jar这两上包(如果没有的话),最后 eclipe -clean就ok 了
------解决方案--------------------
java -cp C:\axis2-1.5\lib\activation-1.1.jar;C:\axis2-1.5\lib\axiom-api-1.2.8.jar;C:\axis2-1.5\lib\axiom-dom-1.2.8.jar;C:\axis2-1.5\lib\axiom-impl-1.2.8.jar;C:\axis2-1.5\lib\axis2-adb-1.5.jar;C:\axis2-1.5\lib\axis2-adb-codegen-1.5.jar;C:\axis2-1.5\lib\axis2-ant-plugin-1.5.jar;C:\axis2-1.5\lib\axis2-clustering-1.5.jar;C:\axis2-1.5\lib\axis2-codegen-1.5.jar;C:\axis2-1.5\lib\axis2-corba-1.5.jar;C:\axis2-1.5\lib\axis2-fastinfoset-1.5.jar;C:\axis2-1.5\lib\axis2-java2wsdl-1.5.jar;C:\axis2-1.5\lib\axis2-jaxbri-1.5.jar;C:\axis2-1.5\lib\axis2-jaxws-1.5.jar;C:\axis2-1.5\lib\axis2-jibx-1.5.jar;C:\axis2-1.5\lib\axis2-json-1.5.jar;C:\axis2-1.5\lib\axis2-kernel-1.5.jar;C:\axis2-1.5\lib\axis2-metadata-1.5.jar;C:\axis2-1.5\lib\axis2-mtompolicy-1.5.jar;C:\axis2-1.5\lib\axis2-saaj-1.5.jar;C:\axis2-1.5\lib\axis2-spring-1.5.jar;C:\axis2-1.5\lib\axis2-transport-http-1.5.jar;C:\axis2-1.5\lib\axis2-transport-local-1.5.jar;C:\axis2-1.5\lib\axis2-xmlbeans-1.5.jar;C:\axis2-1.5\lib\bcel-5.1.jar;C:\axis2-1.5\lib\commons-codec-1.3.jar;C:\axis2-1.5\lib\commons-fileupload-1.2.jar;C:\axis2-1.5\lib\commons-httpclient-3.1.jar;C:\axis2-1.5\lib\commons-io-1.4.jar;C:\axis2-1.5\lib\commons-lang-2.3.jar;C:\axis2-1.5\lib\commons-logging-1.1.1.jar;C:\axis2-1.5\lib\geronimo-annotation_1.0_spec-1.1.jar;C:\axis2-1.5\lib\geronimo-jaxws_2.1_spec-1.0.jar;C:\axis2-1.5\lib\geronimo-saaj_1.3_spec-1.0.1.jar;C:\axis2-1.5\lib\geronimo-stax-api_1.0_spec-1.0.1.jar;C:\axis2-1.5\lib\geronimo-ws-metadata_2.0_spec-1.1.2.jar;C:\axis2-1.5\lib\httpcore-4.0.jar;C:\axis2-1.5\lib\jalopy-1.5rc3.jar;C:\axis2-1.5\lib\jaxb-api-2.1.jar;C:\axis2-1.5\lib\jaxb-impl-2.1.7.jar;C:\axis2-1.5\lib\jaxb-xjc-2.1.7.jar;C:\axis2-1.5\lib\jaxen-1.1.1.jar;C:\axis2-1.5\lib\jettison-1.0-RC2.jar;C:\axis2-1.5\lib\jibx-bind-1.2.1.jar;C:\axis2-1.5\lib\jibx-run-1.2.1.jar;C:\axis2-1.5\lib\log4j-1.2.15.jar;C:\axis2-1.5\lib\mail-1.4.jar;C:\axis2-1.5\lib\mex-1.5.jar;C:\axis2-1.5\lib\neethi-2.0.4.jar;C:\axis2-1.5\lib\smack-3.0.4.jar;C:\axis2-1.5\lib\smackx-3.0.4.jar;C:\axis2-1.5\lib\soapmonitor-1.5.jar;C:\axis2-1.5\lib\woden-api-1.0M8.jar;C:\axis2-1.5\lib\woden-impl-dom-1.0M8.jar;C:\axis2-1.5\lib\wsdl4j-1.6.2.jar;C:\axis2-1.5\lib\wstx-asl-3.2.4.jar;C:\axis2-1.5\lib\xalan-2.7.0.jar;C:\axis2-1.5\lib\xercesImpl-2.6.2.jar;C:\axis2-1.5\lib\xml-apis-1.3.02.jar;C:\axis2-1.5\lib\xmlbeans-2.3.0.jar;C:\axis2-1.5\lib\xml-resolver-1.2.jar;C:\axis2-1.5\lib\XmlSchema-1.4.3.jar; org.apache.axis2.wsdl.WSDL2Java -uri http://192.168.100.176:8080/axis2/services/SimpleService?wsdl