“无法解开操作”与Apache CXF

时间:2013-02-04 13:31:22

标签: xml apache cxf

我正在尝试使用cxf部署Web服务。

我使用以下代码声明我的endPoint

<jaxws:endpoint
xmlns:wsdl="com_documentation_service_standardfeatures_application_webservices_uc51_webserviceServer_WebServiceSearch"  
 id="webServiceSearchEndpoint"
    implementor="#com.documentation.service.standardfeatures.application.webservices.uc51_webserviceServer.WebServiceSearch"
    wsdlLocation="classpath:resources/schemas/wsdl/com_documentation_service_standardfeatures_application_webservices_uc51_webserviceServer_WebServiceSearch.wsdl"
    endpointName="wsdl:WebServiceSearchPort"
    serviceName="wsdl:com_documentation_service_standardfeatures_application_webservices_uc51_webserviceServer_WebServiceSearch"
    address="http://localhost:8888/service2"
    />

我的wsdl看起来像那样

[...]
<wsdl:types>
<schema targetNamespace="com_documentation_service_standardfeatures_application_webservices_uc51_webserviceServer_WebServiceSearch_types" xmlns="http://www.w3.org/2001/XMLSchema"
 xmlns:team51="com_documentation_business_standardfeatures_application_webservices_uc51_webserviceClient_entities_Team51"    >
    <import namespace="com_documentation_business_standardfeatures_application_webservices_uc51_webserviceClient_entities_Team51" schemaLocation="classpath:resources/schemas/xsd/com_documentation_business_standardfeatures_application_webservices_uc51_webserviceClient_entities_Team51.xsd"/>
    <element name="team51" type="team51:team51"/>
    <element name="anyType" type="xsd:anyType"/>
    <element name="string" type="xsd:string"/>
    <element name="integer" type="xsd:integer"/>
    <element name="float" type="xsd:float"/>
    <element name="long" type="xsd:long"/>
    <element name="dateTime" type="xsd:dateTime"/>
    <element name="boolean" type="xsd:boolean"/>        
    <element name="collection" type="types:collectionType"/>        
    <complexType name="collectionType">
        <sequence>
            <element type="xsd:anyType" minOccurs="0" maxOccurs="unbounded" name="element"/>
        </sequence>
    </complexType>  
</schema>
</wsdl:types>

  <wsdl:message name="team51FindByID">
    <wsdl:part name="id" element="types:long"/>
  </wsdl:message>
  <wsdl:message name="team51FindByIDResponse">
       <wsdl:part name="return" element="types:team51"/>
  </wsdl:message>

  <wsdl:portType name="WebServiceSearch">  
   <wsdl:operation name="team51FindByID">
     <wsdl:input name="team51FindByID" message="team51FindByID">
   </wsdl:input>
    <wsdl:output name="team51FindByIDResponse" message="team51FindByIDResponse">
   </wsdl:output>
   </wsdl:operation>    
 </wsdl:portType>  
[...]

运行tomcat服务器时,始终显示以下消息。

 ATTENTION: Could not unwrap Operation {documentation_service_standardfeatures_application_webservices_uc51_webserviceServer_WebServiceSearch}team51FindByID to match method "public abstract Type1 team51FindByID(java.lang.Long)"

 org.apache.cxf.endpoint.ServerImpl initDestination

我的配置有什么问题?

2 个答案:

答案 0 :(得分:0)

在wsdl上运行wsdl2java,并确保方法签名与生成的签名相匹配。看起来你没有@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)注释,并且该方法的返回类型是错误的。 (看起来它应该是Team51,而不是Type1)

答案 1 :(得分:0)

您定义Operation的命名空间不正确。错误正是在命名空间不正确的类上发现错误,因此无法找到它并且无法解包。

修复命名空间应该能够为您创建正确的WSDL。