无法访问 Web 服务端点:Spring-WS 2

发布于 2024-12-08 20:50:46 字数 4521 浏览 0 评论 0原文

我是 Spring-WS 的新手,我已经根据 JAXB 带注释的类生成的模式定义了一个端点。但是,当我尝试通过soapUI访问端点时,出现以下错误以及404响应代码:

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

Any ideas about what I'我做错了吗?感谢您提供的任何帮助。

端点类:

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

I'm new to Spring-WS and I have defined an endpoint based off a schema generated from JAXB annotated classes. However, when I try to access the endpoint via soapUI, I get the following error along with a 404 response code:

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

Any ideas as to what I'm doing wrong? Thanks for any help given.

The endpoint class:

@Endpoint
public class TestEndpoint {

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

The request/response classes (marshalled/unmarshalled via 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;
    }

}

And:

@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 configuration:

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

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

And finally, CLIP_PoC.xsd, the schema from which the WSDL was generated:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

亣腦蒛氧 2024-12-15 20:50:46

我想通了。我忘记将: 放入我的 spring-ws-servlet.xml 中文件。这以某种方式修复了它。

I figured it out. I had forgotten to put: <context:component-scan base-package="my.base.package"/> in my spring-ws-servlet.xml file. This fixed it somehow.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文