解决cxf+bboss发布的webservice缺少和标签的问题

cxf+bboss发布webservice服务(cxf+bboss发布webservice服务方法请参考文档:
bbossgroups webservice引擎使用方法),服务发布成功,查看其wsdl文件的时候却缺少标签,例如:
Xml代码   收藏代码
  1.   xml version="1.0" encoding="UTF-8" ?>   
  2. <wsdl:definitions name="MaterialWServiceImplService" targetNamespace="http://impl.webservice.material.mms.sany.com/" xmlns:ns1="http://webservice.material.mms.sany.com/" xmlns:ns2="http://schemas.xmlsoap.org/wsdl/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://impl.webservice.material.mms.sany.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  3.   <wsdl:import location="http://10.8.135.224:8081/SanyMMS/cxfservices/queryTaskList?wsdl=MaterialWService.wsdl" namespace="http://webservice.material.mms.sany.com/" />   
  4. <wsdl:binding name="MaterialWServiceImplServiceSoapBinding" type="ns1:MaterialWService">  
  5.   <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />   
  6. <wsdl:operation name="queryAwaitTaskByUserNum">  
  7.   <soap:operation soapAction="" style="document" />   
  8. <wsdl:input name="queryAwaitTaskByUserNum">  
  9.   <soap:body use="literal" />   
  10.   wsdl:input>  
  11. <wsdl:output name="queryAwaitTaskByUserNumResponse">  
  12.   <soap:body use="literal" />   
  13.   wsdl:output>  
  14.   wsdl:operation>  
  15.   wsdl:binding>  
  16. <wsdl:service name="MaterialWServiceImplService">  
  17. <wsdl:port binding="tns:MaterialWServiceImplServiceSoapBinding" name="MaterialWServiceImplPort">  
  18.   <soap:address location="http://10.8.135.224:8081/SanyMMS/cxfservices/queryTaskList" />   
  19.   wsdl:port>  
  20.   wsdl:service>  
  21.   wsdl:definitions>  


认真看发布后的wsdl文件,发现多了标签:
Xml代码   收藏代码
  1. <wsdl:import location="http://10.8.135.224:8081/SanyMMS/cxfservices/queryTaskList?wsdl=MaterialWService.wsdl" namespace="http://webservice.material.mms.sany.com/" />   


标签中的location拿出去在浏览器中打开,里面是“丢失”的两个标签,这时候就发现其实并不是丢失了,而是包含在了标签内

为什么会包含在了标签内?仔细查看生成的wsdl,发现标签内的targetNamespace属性和中namespace属性的值不同,这就是原因所在,发布服务时,接口类和服务实现类的@Webservice注解中没有指定targetNamespace为一个名称或者没有指定时(cxf发布服务时会默认将类和接口的包路径反转,然后作为targetNamespace的值),就会导致上述现象,最终解决方案:
1,将接口类和实现类放在同一个包下,问题即可解决

2,将接口类和实现类中的注解中加入命名空间属性配置,@WebService(targetNamespace="XXXXX"),两个配置值保持一致即可

实现类:
Java代码   收藏代码
  1. package org.frameworkset.web.ws;  
  2.   
  3. import javax.jws.WebService;  
  4.   
  5. /** 
  6.  * 

    Title: WSServiceImpl.java

     
     
  7.  * 

    Description: 

     
  8.  * 

    bboss workgroup

     
  9.  * 

    Copyright (c) 2008

     
  10.  * @Date 2011-4-24 
  11.  * @author biaoping.yin 
  12.  * @version 1.0 
  13.  */  
  14. @WebService(targetNamespace="org.frameworkset.web.ws")  
  15. public class WSServiceImpl implements WSService{  
  16.   
  17.     public String sayHello(String duoduo) {  
  18.   
  19.         if(duoduo == null)  
  20.             return "";  
  21.         else  
  22.             return duoduo;  
  23.     }  
  24.   
  25. }  


接口定义:
Java代码   收藏代码
  1. package org.frameworkset.web.ws;  
  2.   
  3. import javax.jws.WebService;  
  4.   
  5. /** 
  6.  * 

    Title: WSService.java

     
     
  7.  * 

    Description: 

     
  8.  * 

    bboss workgroup

     
  9.  * 

    Copyright (c) 2008

     
  10.  * @Date 2011-4-24 
  11.  * @author biaoping.yin 
  12.  * @version 1.0 
  13.  */  
  14. @WebService(targetNamespace="org.frameworkset.web.ws")  
  15. public interface WSService {  
  16.       
  17.     public String sayHello(String duoduo)  
  18.     ;  
  19.   

你可能感兴趣的:(java,bboss)