2013-04-08 2 views
0

Я выставил веб-службу, используя службу CXF JAXWS через исходящий HTTP.Проблема с запуском службы CXF JAX WS

Ниже приведен синтаксис моего объявления конечной точки из моей конфигурации Mule.

<http:inbound-endpoint address="http://localhost:8080/HelloService" exchange-pattern="request-response"> 
     <cxf:jaxws-service serviceClass="com.example.service.HelloServiceImpl" wsdlLocation="wsdl/helloservice.wsdl" 
     namespace="http://example.org/HelloService"   
     port="HelloServicePort" service="HelloService" > 

Но это не работает. При попытке запустить это на сервере mule появляется ошибка ниже.

2013-04-08 16:34:35,252 ERROR [main] mule.MuleServer (MuleServer.java:474) - 
******************************************************************************** 
* A Fatal error has occurred while the server was running:      * 
* Could not find definition for port           * 
* {http://service.example.com/}HelloServiceImplPort.    * 
* (org.apache.cxf.service.factory.ServiceConstructionException)    * 
*                    * 
* The error is fatal, the system will shutdown         * 
******************************************************************************** 

Он ищет другой порт, чем тот, который я упомянул в объявлении о конечной точке обслуживания.

Пожалуйста, помогите мне понять, в чем проблема.

Ниже приведено wsdl этой услуги.

Я создал этот WSDL, а затем сгенерировал код, используя wsdl2java cfx. Затем выполняются операции сервисного интерфейса. Затем настроил службу в потоке Мула.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://example.org/HelloService" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
name="HelloService" targetNamespace="http://example.org/HelloService" 
xmlns:per="http://example.org/HelloService/person" 
xmlns:comp="http://example.org/HelloService/company" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 

    <wsdl:types>   
    <xsd:schema targetNamespace="http://example.org/HelloService/company" >  
     <xsd:include schemaLocation="company.xsd" ></xsd:include>  
    </xsd:schema> 
    <xsd:schema targetNamespace="http://example.org/HelloService/person"> 
     <xsd:include schemaLocation="person.xsd" ></xsd:include>  
    </xsd:schema> 
    </wsdl:types> 


    <wsdl:message name="addCompanyRequest"> 
    <wsdl:part element="comp:Company" name="company"/> 
    </wsdl:message> 

    <wsdl:message name="addPersonRequest"> 
    <wsdl:part element="per:Person" name="person"/> 
    </wsdl:message> 

    <wsdl:message name="addCompanyResponse"> 
    <wsdl:part element="comp:CompResponse" name="response"/> 
    </wsdl:message> 

    <wsdl:message name="addPersonResponse"> 
    <wsdl:part element="per:PerResponse" name="response"/> 
    </wsdl:message> 

    <wsdl:portType name="HelloService"> 
    <wsdl:operation name="addCompany"> 
     <wsdl:input message="tns:addCompanyRequest" name="addCompanyRequest" /> 
     <wsdl:output message="tns:addCompanyResponse" name="addCompanyResponse" /> 
    </wsdl:operation> 

    <wsdl:operation name="addPerson"> 
     <wsdl:input message="tns:addPersonRequest" name="addPersonRequest" /> 
     <wsdl:output message="tns:addPersonResponse" name="addPersonResponse" /> 
    </wsdl:operation> 

    </wsdl:portType> 

    <wsdl:binding name="HelloServiceSOAP" type="tns:HelloService"> 
     <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <wsdl:operation name="addCompany"> 
     <soap:operation soapAction="" style="document" /> 
     <wsdl:input name="addCompanyRequest"> 
     <soap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output name="addCompanyResponse"> 
     <soap:body use="literal"/> 
     </wsdl:output> 
    </wsdl:operation> 

    <wsdl:operation name="addPerson"> 
     <soap:operation soapAction="" style="document" /> 
     <wsdl:input name="addPersonRequest"> 
     <soap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output name="addPersonResponse"> 
     <soap:body use="literal"/> 
     </wsdl:output> 
    </wsdl:operation> 

    </wsdl:binding> 

    <wsdl:service name="HelloService"> 
    <wsdl:port binding="tns:HelloServiceSOAP" name="HelloServicePort"> 
     <soap:address location="http://localhost:8080/HelloService"/> 
    </wsdl:port> 
    </wsdl:service> 

</wsdl:definitions> 

ответ

4

У меня нет абсолютно никаких проблем, формирующих cxf:jaxws-service с атрибутом port, так что я думаю, что проблема в вашей конфигурации.

Например, ошибка говорит, что CXF ищет {http://service.example.com}HelloServiceImplPort, но удивительно, что вы настраиваете пространство имен службы как http://example.org/HelloService. Хотя это не обязательно должно быть последовательным, обычно это так.

Глядя на ваш WSDL, все выглядит правильно, поэтому я предполагаю, что аннотация @WebService на HelloServiceImpl.class содержит фанковые значения.

Оно должно быть:

@WebService(endpointInterface = "...interface class...", targetNamespace = "http://example.org/HelloService", serviceName = "HelloService", portName = "HelloServicePort", wsdlLocation = "wsdl/helloservice.wsdl") 

Обратите внимание, что с правильно настроенной @WebService, вам нужно это только в Mule XML конфигурации:

<cxf:jaxws-service serviceClass="com.example.service.HelloServiceImpl" /> 
+1

Пространство имен службы: http://example.org/HelloService. Класс реализации службы находится в пакете com.example.service с t он класс имя HelloServiceImpl. Полагаю, именно по этой причине он ищет порт с именем HelloServiceImplPort с пространством имен {http://service.example.com}. Но я уже указал пространство имен, используя атрибут пространства имен, и имя порта из wsdl также упоминается в конфигурации mule. – user1760178

+0

Я добавил свой wsdl к вопросу. – user1760178

+0

Я понял. Его проблема с аннотацией @WebService на моем классе impl. Большое спасибо Дэвиду Дассоту. – user1760178

0

Не <cxf:jaxws-service serviceClass="interface-name and not implementation name> цит в этом example

Смежные вопросы