最近在使用CXF做WebService Sever端,接口与实现类不在一个包下。
实现类如下:
1 @WebService(serviceName = "Demo" 2 , targetNamespace = "http://demo.api.beiifeng.com" 3 , endpointInterface = "com.beiifeng.api.Demo" 4 ) 5 @SOAPBinding(style = SOAPBinding.Style.DOCUMENT 6 , use = SOAPBinding.Use.LITERAL 7 , parameterStyle = SOAPBinding.ParameterStyle.WRAPPED 8 ) 9 public class DemoImpl implements Demo {
接口如下:
1 @WebService 2 public interface Demo {
结果在浏览器中的得到的WSDL描述多了<wsdl:import>节,该节另引别处描述:
当我们处于一个局域网需要将wsdl文档给另一个局域网创建客户端用时,该方法将会导致一些问题。因为在这个文档中并没有<type>描述。
解决办法:
将接口和实现类的@WebService注解中的targetNamespace保持一直即可,即接口修改如下
1 @WebService(targetNamespace = "http://demo.api.beiifeng.com")
2 public interface Demo {
此时的WSDL描述如下:
这样,我们便可以将wsdl文档描述保存发送另一端进行开发即可。
参考 https://stackoverflow.com/questions/16011661/cxf-autogenerates-wsdl-imports-itself#answer-32736182