13

Spring Web Services を使用してこのエラーを理解することはできません。私はすべてを正しく行ったと信じています。

SOAP エラー応答

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

注釈

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

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

4 に答える 4

41

同様のエラーメッセージがありました。私の問題は、XSD から生成した要求と応答のクラスにありました。@XMLRootElement アノテーションがありませんでした。これにより、操作の記述 (WSDL 内) と実装されたメソッドの記述 (Endpoint 内) が一致しなくなりました。JAXBElement をエンドポイント メソッドに追加すると、問題が解決しました。

import javax.xml.bind.JAXBElement;

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

詳細については、このブログを参照してください: spring-ws: エンドポイント用のアダプターがありません

于 2014-03-06T14:46:01.650 に答える
10

戻り値が欠落していると思います。Spring-WSは、メソッドシグネチャを使用して要求/応答の組み合わせをマップします。たとえば、生成された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>

この操作でメソッドをマップするResponsePayloadRequestPayloadは、WSDLで定義された入力と出力を一致させる必要があります。

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

    return getHiredCandidatesResponse;
}

お役に立てれば!

于 2013-03-12T09:30:38.863 に答える
1

Spring-ws と SOAPUI で同様の問題が発生しましたが、エンドポイント SWS のアダプターなしの助けを借りて解決しました

于 2015-01-27T14:58:10.480 に答える
0

私の場合、jdom への依存関係から jdom2 への依存関係を切り替えた後、問題はなくなりました。

于 2018-04-24T11:07:16.383 に答える