Невозможно получить доступ к конечной точке веб-службы: Spring-WS 2

#web-services #spring #spring-mvc #jaxb #spring-ws

#веб-службы #spring #spring-mvc #jaxb #spring-ws

Вопрос:

Я новичок в Spring-WS, и я определил конечную точку на основе схемы, сгенерированной из аннотированных классов JAXB. Однако, когда я пытаюсь получить доступ к конечной точке через SoapUI, я получаю следующую ошибку вместе с кодом ответа 404:

No endpoint mapping found for [SaajSoapMessage {clip}clipClaimRequest]

Есть идеи относительно того, что я делаю неправильно? Спасибо за любую помощь.

Класс конечной точки:

 @Endpoint
public class TestEndpoint {

    @PayloadRoot(localPart = "clipClaimRequest", namespace = "clip")
    @ResponsePayload
    public CLIPClaimResponse registerClaim(@RequestPayload CLIPClaimRequest request) {
        return new CLIPClaimResponse("Success", "test success");
    }
}
  

Классы запросов / ответов (маршалируемые / немаршалируемые через JAXB):

 @XmlRootElement(name = "clipClaimRequest")
@XmlType(name = "CLIPClaimRequest")
public class CLIPClaimRequest {
    private Claim claim;

    @XmlElement(required = true)
    public Claim getClaim() {
        return claim;
    }

    public void setClaim(Claim claim) {
        this.claim = claim;
    }

}
  

И:

 @XmlRootElement(name = "clipClaimResponse")
@XmlType(name = "CLIPClaimResponse")
public class CLIPClaimResponse {
    private String code;
    private String description;

    public CLIPClaimResponse() {
    }

    public CLIPClaimResponse(String code, String desc) {
        setCode(code);
        setDescription(desc);
    }

    @XmlElement(required = true)
    public String getCode() {
        return code;
    }

    @XmlElement(required = true)
    public String getDescription() {
        return description;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}
  

web.xml конфигурация сервлета:

 <servlet>
    <servlet-name>spring-ws</servlet-name>
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
    <init-param>
        <description>This is used by SpringWS to dynamically convert WSDL urls</description>
        <param-name>transformWsdlLocations</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring-ws</servlet-name>
    <url-pattern>/clipClaimService/*</url-pattern>
</servlet-mapping>
  

spring-ws-servlet.xml конфигурация:

 <?xml version="1.0" encoding="UTF-8"?>
<beans>
    <context:annotation-config />
    <sws:annotation-driven />
    <sws:dynamic-wsdl id="claimRegistration" portTypeName="CLIPClaimPort"
        locationUri="/clipClaimService/" targetNamespace="clip">
        <sws:xsd location="/WEB-INF/CLIP_Poc.xsd" />
    </sws:dynamic-wsdl>
    <bean id="jaxb2Marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <!-- list of classes... -->
            </list>
        </property>
        <property name="schema" value="/WEB-INF/CLIP_PoC.xsd" />
    </bean>

    <bean id="marshallingPayloadMethodProcessor"
        class="org.springframework.ws.server.endpoint.adapter.method.MarshallingPayloadMethodProcessor">
        <constructor-arg ref="jaxb2Marshaller" />
        <constructor-arg ref="jaxb2Marshaller" />
    </bean>

    <bean id="defaultMethodEndpointAdapter"
        class="org.springframework.ws.server.endpoint.adapter.DefaultMethodEndpointAdapter">
        <property name="methodArgumentResolvers">
            <list>
                <ref bean="marshallingPayloadMethodProcessor" />
            </list>
        </property>
        <property name="methodReturnValueHandlers">
            <list>
                <ref bean="marshallingPayloadMethodProcessor" />
            </list>
        </property>
    </bean>
</beans>
  

И CLIP_PoC.xsd , наконец, схема, из которой был сгенерирован WSDL:

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="clip" targetNamespace="clip" version="1.0">
    <xs:element name="clipClaimRequest" type="CLIPClaimRequest"/>
    <xs:element name="clipClaimResponse" type="CLIPClaimResponse"/>
    <!-- type definitions for all the complex elements used... -->
</xs:schema>
  

Ответ №1:

Я понял это. Я забыл поместить: <context:component-scan base-package="my.base.package"/> в свой spring-ws-servlet.xml файл. Это как-то исправило это.