2013-03-07 5 views
6

Ich kann diesen Fehler mit Spring Web Services einfach nicht herausfinden. Ich glaube, ich habe alles richtig gemacht.Kein Adapter für Endpunkt in Spring Web Service Antwort

Soap Error Response

<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> 

Anmerkungen

@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(); 
    } 

Feder-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> 

Antwort

3

Ich denke, dass Sie den Rückgabewert vermissen. Spring-WS verwendet die Methodensignatur, um eine Anfrage/Antwort-Kombination zuzuordnen. Zum Beispiel habe ich die folgende Operation in meinem generierten 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> 

Um ein Verfahren zu diesem Vorgang ordnen Sie die ResponsePayload und RequestPayload Notwendigkeit, die Ein- und Ausgabe in der WSDL definiert übereinstimmen:

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

    return getHiredCandidatesResponse; 
} 

Hoffe das hilft!

+0

Ha nur knapp sein Ziel Mitteilung gelöst, dass, aber ja Das macht Sinn. Ich habe etwas anderes gemacht, aber ich glaube, das ist das Problem. –

18

Ich hatte eine ähnliche Fehlermeldung. Mein Problem bestand in der Anfrage- und Antwortklasse, die ich aus XSD generiert habe. Die @ XMLRootElement-Annotation wurde verpasst. Dies führte dazu, dass die Beschreibung der Operation (in WSDL) und die Beschreibung der implementierten Methode (in Endpoint) nicht übereinstimmten. Das Hinzufügen von JAXBElement zu meiner Endpunktmethode hat mein Problem gelöst.

import javax.xml.bind.JAXBElement; 

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

Sehen Sie dieses Blog für weitere Informationen: spring-ws: No adapter for endpoint

+0

Danke! Dies löste ähnliche Probleme für mich. Ich hätte die 'ObjectFactory' Klasse betrachten sollen, es werden viele JAXBElement Objekte verwendet. – zygimantus

Verwandte Themen