是否有可能在spring-ws 2中获得用于jsr303验证的未编组有效负载。 我的想法是为我创建的每个端点完成此操作,而无需在每个端点中显式创建验证代码。 (例如使用拦截器或某种侦听器)
我尝试扩展EndpointInterceptor但是,这里没有解组的对象。 我也尝试为jaxb unmarshaller实现Unmarshaller.Listener。通过spring上下文注册了这个,但这里有两个问题: 1.它只在初始化jaxb-marshaller bean时设置unmarshaller监听器。 2. Jaxb Unmarshaller是在每个请求上创建的,并且在为特定请求创建unmarshaller期间未设置侦听器。我没有看到在每个请求上注入此内容的方法。
还有其他方法可以实现这个目标吗?
提前致谢。
答案 0 :(得分:1)
由于Spring WS端点是普通的Spring Beans,您可以使用Spring的AOP功能并创建一个方面来验证传递的对象。
如果您使用Spring 3.1和Hibernate Validator 4.2作为Bean Validation提供程序,您还可以使用Hibernate Validator的method validation功能。 Spring提供了interceptor,它对使用@Validated注释的所有bean执行方法验证。
答案 1 :(得分:0)
如果你不想使用AOP,这就是你要走的路:
您需要在子类中扩展DefaultMethodEndpointAdapter和implment Ordered(例如:
DefaultMethodEndpointAdapterWithJSRValidation extends DefaultMethodEndpointAdapter实现Ordered {...)
确保在子类中覆盖以下内容:
1.1在此方法中,您将添加jsr验证内容:
@Override
public Object[] getMethodArguments ...
1.2此方法确保使用您的bean代替默认bean。
@Override
public int getOrder() {
return Integer.MIN_VALUE;
}
<bean id="defaultMethodEndpointAdapter" class="your.package.DefaultMethodEndpointAdapterWithJSRValidation" primary="true"/>"
玩得开心。