Spring 3 (SWS2): difference between and

2019-02-13 17:37发布

问题:

When trying a simple Web Service Hello World example with just one @Endpoint annotated class, the Endpoint is not registered when using the <sws:annotation-driven/> namespace.

However, by adding the usual <context:component-scan>, everything works well, the Endpoint-class is registered correctly. This is only true for the @Endpoint annotation, all other annotations (@RequestPayload, @ResponsePayload, @PayloadRoot) will be registered by the sws-namespace as expected.

Should the @Endpoint annotation not be processed by this namespace as well?

<beans>
   <!-- works for all annotations except @Endpoint -->
    <sws:annotation-driven/>

    <!-- when activated, @Endpoint is registered correctly <context:component-scan/> -->
</beans>

回答1:

This is a known SWS bug: https://jira.springsource.org/browse/SWS-702.



回答2:

For now use both as in:

<context:component-scan base-package="com.coral.project.endpoints"/>

<sws:annotation-driven marshaller="marshaller" unmarshaller="marshaller"/>

this finds both @Endpoint and @PayloadRoot,@ResponsePayload annotations. This is the way they tell you to do it in Spring-WS reference:

http://static.springsource.org/spring-ws/sites/2.0/reference/html/tutorial.html#tutorial.implementing.endpoint