2013-03-07 20 views
6

Po prostu nie mogę znaleźć tego błędu za pomocą Spring Web Services. Uważam, że zrobiłem wszystko poprawnie.Brak adaptera dla punktu końcowego w Spring Web Service Response

Mydło błąd odpowiedzi

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode>SOAP-ENV:Server</faultcode> 
     <faultstring xml:lang="en">No adapter for endpoint [public void org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.PersonManagerSyncSoapBindingImpl.readPerson(org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.ReadPersonRequest,org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.Imsx_RequestHeaderInfoType,org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.ReadPersonResponseHolder,org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.Imsx_ResponseHeaderInfoTypeHolder)]: Is your endpoint annotated with @Endpoint, or does it implement a supported interface like MessageHandler or PayloadEndpoint?</faultstring> 
     </SOAP-ENV:Fault> 

adnotacje

@Endpoint 
public class PersonManagerSyncSoapBindingImpl implements org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.PersonManagerSyncPortType{ 


    @PayloadRoot(localPart = "readPersonRequest", namespace = "http://www.imsglobal.org/services/lis/pms2p0/wsdl11/sync/imspms_v2p0") 
    @ResponsePayload 
    public void readPerson(@RequestPayload org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.ReadPersonRequest parameters, org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.Imsx_RequestHeaderInfoType headerInfoParameters, @RequestPayload org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.ReadPersonResponseHolder response, @RequestPayload org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.holders.Imsx_ResponseHeaderInfoTypeHolder headerInfoResponse) { 
     response.value = new org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.ReadPersonResponse(); 
     headerInfoResponse.value = new org.imsglobal.www.services.lis.pms2p0.wsdl11.sync.imspms_v2p0.Imsx_ResponseHeaderInfoType(); 
    } 

wiosenne WS-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:context="http://www.springframework.org/schema/context" 
      xmlns:sws="http://www.springframework.org/schema/web-services" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
            http://www.springframework.org/schema/web-services 
            http://www.springframework.org/schema/web-services/web-services-2.0.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="*"></context:component-scan> 
    <sws:annotation-driven/> 

    <sws:dynamic-wsdl id="personServiceManagement"               
     portTypeName="PersonManagerSyncPortType"               
     locationUri="/endpoints/"              
     targetNamespace="http://www.imsglobal.org/services/lis/pms2p0/wsdl11/sync/imspms_v2p0">        
     <sws:xsd location="/WEB-INF/wsdl/xsd/PersonManagementService.xsd"/>             
    </sws:dynamic-wsdl> 

</beans> 

Odpowiedz

3

Myślę, że brakuje wartości zwracanej. Spring-WS używa podpisu metody do odwzorowania kombinacji żądanie/odpowiedź. Na przykład, mam następującą operację w moim generowanego WSDL:

<wsdl:operation name="GetHiredCandidates"> 
    <wsdl:input message="tns:GetHiredCandidatesRequest" name="GetHiredCandidatesRequest"></wsdl:input> 
    <wsdl:output message="tns:GetHiredCandidatesResponse" name="GetHiredCandidatesResponse"></wsdl:output> 
</wsdl:operation> 

Aby odwzorować sposób na tej operacji potrzebę ResponsePayload i RequestPayload pasujące wejście i wyjście zdefiniowane w WSDL:

@ResponsePayload 
public GetHiredCandidatesResponse getKandidaat (@RequestPayload GetHiredCandidatesRequest) { 
    .. 

    return getHiredCandidatesResponse; 
} 

Mam nadzieję że to pomoże!

+0

Ha uprzedzenia nie zrobił tego, ale tak to ma sens. Przeniosłem się na coś innego, ale uważam, że to jest problem. –

18

Miałem podobny komunikat o błędzie. Mój problem dotyczył klasy żądania i odpowiedzi wygenerowanej przez XSD. Brakowało adnotacji z @XMLRootElement. Spowodowało to, że opis działania (w WSDL) i opis zaimplementowanej metody (w punkcie końcowym) nie były zgodne. Dodanie JAXBElement do mojej metody punktu końcowego rozwiązało mój problem.

import javax.xml.bind.JAXBElement; 

@PayloadRoot(namespace = "http://foo.bar/books", localPart = "GetBook") 
@ResponsePayload 
public JAXBElement<MyReponse> getBook(@RequestPayload JAXBElement<MyRequest>) { 
    ... 

Zobacz ten blog po więcej szczegółów: spring-ws: No adapter for endpoint

+0

Dzięki! To rozwiązało dla mnie podobny problem. Powinienem przyjrzeć się klasie 'ObjectFactory', użytych jest wiele obiektów JAXBElement. – zygimantus