??????? 在调用外围系统的webservice服务时候,一般来说对方会提供一个wsdl,然后我们要根据wsdl生成相应的类,通过这种方式,做到了跨语言的完美方案,但是也带来了一些复杂性。在java中我们一般使用jdk自带的wsimport工具或者其他三方系统的wsdl4j工具生成java版本的stub实现。
? ? ? ??
? ? ?class="Apple-converted-space">???在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,然后用这些类文件,就可以像调用本地的类一样调用WebService提供的方。该工具可以用于非Java的服务器,如:用C#编写的WebService,通过wsimport则生成Java的客户端实现。
在命令提示符中使用如下命令:
? ? ???wsimport http://localhost:8080/Demo/services/MyService?wsdl
?
命令参数说明: -d:生成客户端执行类的class文件的存放目录 -s:生成客户端执行类的源文件的存放目录 -p:定义生成类的包名 其他命令参数请参照:http://docs.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html 使用wsimport命令后,可以得到代码,然后可以将代码拷贝到工程里面,也可以将其编译,打包成jar。 ? ? ? 比如?javac com/xxx/*.java com/xxx/yyy/*.java ? ? ? ? ? ? ? jar cvf dest.jar com/ ? ? ? ? ? ??? 这样我们就能得到一个dest.jar文件 ? ? ? ? 使用一下webservice的框架自带的一下wsdl4j生成,由于众所周知的原因,java的webservice的jar很多,经常由于版本和实现的不同,会出现一下莫名奇妙的问题,所以这个地方还是推荐使用你所使用的框架的wsdl4j工具生成相应的stub。 ?? ? ???使用一下webservice的框架自带的一下wsdl4j生成,由于众所周知的原因,java的webservice的框架很多,经常由于版本和实现的不同,会出现一下莫名奇妙的问题,所以这个地方还是推荐使用你所使用的框架的wsdl4j工具生成相应的stub。
?
? ?使用过程中遇到的问题:
? ? ? ??wsdl2java?-frontend jaxws21??http://xxx.yyy.com:8102/ws/UserRemoteService?wsdl? ??
?
? ? ? ?wsdl2java?-ecoding utf-8 ?http://xxx.yyy.com:8102/ws/UserRemoteService?wsdl??
?
?
经过一番查询,觉得是服务端在生成WSDL时,将相应类的命名空间都默认为同一个了,因此网上才有了修改命名空间的建议;即在相应类(即客户端调用的java实体类)中加入@XmlType
(namespace=”http://namespace.thats.not.the.same.as.the.generated”),即改变响应类的命名空间。
??
??? 另外,还有一种修改相应类的名称,若如此修改,可能会影响服务端调用,建议修改命名空间。
?
原文:http://asialee.iteye.com/blog/1912953
?????????? http://damon-zhang.iteye.com/blog/1816857