簡體   English   中英

Spring WS + JIBX“端點無適配器”錯誤

[英]Spring WS + JIBX “No adapter for endpoint” Error

我使用JIBX從XSD文件創建我的實體類。 它在pom.xml中配置,並在我執行“ maven:編譯”時創建類

我也使用spring-ws。 當我用SOAPUI測試我的Web服務時,我得到了臭名昭著的錯誤。

"No adapter for endpoint GetTransactionsResponse getTransactions(GetTransactionsRequest),  Is your endpoint annotated with @Endpoint, or does.." 

我檢查了所有關於該錯誤的線程,但沒有幫助。

我有一個Parent.xsd,它導入了2個子xsd。 它們都在同一個文件夾中。 這就是我的spring-ws-servlet的樣子;

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:sws="http://www.springframework.org/schema/web-services"
   xmlns:context="http://www.springframework.org/schema/context"
   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.1.xsd">

<bean name="xsdCollection" class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
    <property name="xsds">
        <list>
            <value>/WEB-INF/Parent.xsd</value>
        </list>
    </property>
</bean>


<context:component-scan base-package="mypackage"/>

<sws:annotation-driven/>

<sws:dynamic-wsdl id="my" portTypeName="myResource" locationUri="/ws/my"
                  targetNamespace="myschame">
    <sws:xsd location="/WEB-INF/Parent.xsd"/>
</sws:dynamic-wsdl>

<sws:interceptors>
    <bean class="org.springframework.ws.soap.server.endpoint.interceptor.SoapEnvelopeLoggingInterceptor">
        <property name="logRequest" value="true"/>
        <property name="logResponse" value="true"/>
    </bean>

    <bean class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
        <property name="xsdSchemaCollection" ref="xsdCollection"/>
        <property name="validateRequest" value="true"/>
        <property name="validateResponse" value="true"/>
    </bean>
</sws:interceptors>

這是我的終結點課程;

@Endpoint
public class TransactionsEndpoint {

public static final String NAMESPACE = "nmapespace";


@PayloadRoot(namespace = NAMESPACE, localPart = "getTransactionsRequest")
@ResponsePayload
public GetTransactionsResponse getTransactions(@RequestPayload  GetTransactionsRequest request) {
     GetTransactionsResponse transactionsResponse = new GetTransactionsResponse();
     return transactionsResponse;
}


}

JIBX創建的GetTransactionsResponse / Request類。

我的wsdl看起來像這樣;

 <wsdl:operation name="getTransactions"><wsdl:input message="tns:getTransactionsRequest" name="getTransactionsRequest">
</wsdl:input><wsdl:output message="tns:getTransactionsResponse" name="getTransactionsResponse">
</wsdl:output></wsdl:operation>

pom文件是;

   <dependency>
        <groupId>org.springframework.ws</groupId>
        <artifactId>spring-ws-core</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.ws.xmlschema</groupId>
        <artifactId>xmlschema-core</artifactId>
        <version>2.0.2</version>
    </dependency>

我不確定問題是否是因為存在3個xsd文件,而這些文件之間出了問題,或者是JIBX的配置問題,因為當我嘗試使用JAXB而不是JIBX時,它起作用了!

端點映射存儲在具有基於名稱空間和@PayloadRoot批注的本地部分的鍵的哈希圖中(請參見下面的代碼)。 您當前在Java類的命名空間中(我假設是)錯別字了……nmapespace而不是命名空間。

如果這與xsd和隨后發布的wsdl(未顯示)中的內容不匹配,則將找不到映射。 這是您將收到該錯誤的(眾多)可能原因之一。

public class PayloadRootAnnotationMethodEndpointMapping extends 
    AbstractAnnotationMethodEndpointMapping<QName> {

...

@Override
protected QName getLookupKeyForMethod(Method method) {
    PayloadRoot annotation = AnnotationUtils.findAnnotation(method, PayloadRoot.class);
    if (annotation != null) {
        QName qname;
        if (StringUtils.hasLength(annotation.localPart()) && StringUtils.hasLength(annotation.namespace())) {
            qname = new QName(annotation.namespace(), annotation.localPart());
        }
        else {
            qname = new QName(annotation.localPart());
        }
        return qname;
    }
    else {
        return null;
    }
}

如果這不是問題,則可能需要向該問題添加更多信息(肥皂請求,xsds,wsdl)。

我也遇到過類似的問題(花了幾天),但是在我的情況下,由於Spring WS和Spring版本不兼容,請檢查您的Spring WS和Spring版本是否匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM