最近学习cxf+spring发布webservice服务,但是遇到服务发布成功,查看其wsdl文件的时候却缺少<wsdl:import>和<wsdl:message>标签,查看代码确实没什么问题,因为用来测试,代码比较简单,但就是不出现以上两个标签。百度谷歌到处找原因找不到。失望……
还是自己好好动手解决问题吧。
认真看发布后的wsdl文件,发现多了<wsdl:import>标签(<wsdl:importlocation="http://localhost:8080/cxf-Spring-server/Hello?wsdl=HelloWorld.wsdl" namespace="http://dao.testCxfSpring.spg.com/"></wsdl:import>),将<wsdl:import>标签中的location拿出去在浏览器中打开,里面是“丢失”的两个标签,这时候就发现其实并不是丢失了,而是包含在了<wsdl:import>标签内
为什么会包含在了<wsdl:import>标签内?再研究,发现<wsdl:definitions>标签内的targetNamespace属性和<wsdl:import>中namespace属性的值不同,发现原因所在
最终解决方案
1,将接口类和实现类放在同一个包下,问题即可解决
2,将接口类和实现类中的注解中加入命名空间属性配置,@WebService(targetNamespace="XXXXX"),两个配置成一样即可,或者接口的配置成实现类的默认值、实现类的配置成接口的默认值也可解决问题。