别人用jax-ws发布的webservice,我尝试了用axis调用webservice即wsdl可以。下面尝试另一种方式调用,用jax-ws方式去调用

来源:互联网 发布:linux线程相关系统调用 编辑:程序博客网 时间:2024/05/23 20:12

别人用jax-ws发布的webservice,我尝试了用axis调用webservice即wsdl可以。下面尝试另一种方式调用,用jax-ws方式去调用


jax-ws什么意思?

jax是什么?


ws是什么,即webservice。



方法如下:

http://www.cnblogs.com/HigginCui/p/5833415.html

JDK提供了一个wsimport.exe的命令,主要是用于将WebService生成客户端代码,然后好调用WebService。 wsimport 是根据JDK1.6.0_21及以上的生成本地代码的,它只能解析服务器端的SOAP协议为1.1,不能解析SOAP1.2的协议。如果解析SOAP1.2 将会解析



如果遇到     'wsimport' 不是内部或外部命令,也不是可运行的程序,则么办?


但是还是会报错:
wsimport "不支持使用 SOAP 编码。
原因是:
http://blog.csdn.net/u010668910/article/details/50955937#comments

解决方式是:用Eclipse自动生成客户端代码,不用wsimport。

生成完毕之后,客户端代码怎么写?
使用Eclipse方式和wsimport两种方式,生成的客户端代码的.java文件是不一样的,因此客户端调用也不一样。





1)wsimport生成客户端代码方式,客户端调用代码:


网上的客户端调用代码:

我亲自测试成功的代码:


2)Eclipse生成的客户端代码方式,客户端调用代码
用Eclipse生成的客户端代码,你回发现,没有一个形如"WeatherInterfaceImpl"即以Impl结尾的.java文件,为什么?
通过Eclipse自动产生的Code中, 有一个Java 文件以Proxy结尾, 这个就是调用的Class了。 
为什么是Proxy结尾的?
原因是,Eclipse方式生成的客户端代码,是使用的java代理(即Java Proxy,Proxy就是代理的意思):

所以其客户端调用代码如下:









总结:

使用jax-ws方式的客户端,去调用别人的接口。不需要任何其他的技术,有jdk就行。

1)用Eclipse生成客户端代码(前提是发布wsdl工程要保持运行才能自动生成代码即java类,即http://...?wsdl要可以访问)。

2)在自己的方法中,调用客户端的类,即可。



----------特此说明:

用Eclipse生成jax-ws方法,生成客户端java代码,这种方式,不靠谱。Eclipse生成代码时报错,生成不了代码。但是命令行方式,却可以。

我就遇到过一次:

Eclipse报错:


但是使用jdk的wsimport.exe这个工具就可以生成客户端代码:


使用方法:

打开cmd,进入到wsimport.exe所在的位置,执行如下命令:

wsimport -keep XX?wsdl -d src  
wsimport -d ./bin -s ./src XX?wsdl 

注意:

①上面两个命令中的src、bin目录需要在bin目录下新建,命名可以任意,否则会报错“directory not found: .\bin”、“directory not found: src”等目录不存在的问题。

wsimport -d ./bin -s ./src XX?wsdl ,bin目录下存在的是.class文件,src下存的是.java文件




0 0