使用Hibernate实现在OSGI上下文中使用CXF进行Bean验证
我试图在OSGI上下文中使用bean验证(使用Hibernate实现) 我的蓝图文件中的设置如下所示:使用Hibernate实现在OSGI上下文中使用CXF进行Bean验证,hibernate,osgi,cxf,bean-validation,blueprint-osgi,Hibernate,Osgi,Cxf,Bean Validation,Blueprint Osgi,我试图在OSGI上下文中使用bean验证(使用Hibernate实现) 我的蓝图文件中的设置如下所示: <jaxrs:server address="/myPath" id="myserverid"> <jaxrs:serviceBeans> <ref component-id="myRestImpl"/> </jaxrs:serviceBeans> <jaxrs:pr
<jaxrs:server address="/myPath" id="myserverid">
<jaxrs:serviceBeans>
<ref component-id="myRestImpl"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
</jaxrs:providers>
<jaxrs:inInterceptors>
<ref component-id="validationInInterceptor" />
</jaxrs:inInterceptors>
</jaxrs:server>
<bean id="validationInInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
<property name="provider" ref="validationProvider" />
</bean>
<bean id="validationProvider" class="org.apache.cxf.validation.BeanValidationProvider"/>
<jaxrs:server address="/myPath" id="myserverid">
<jaxrs:serviceBeans>
<ref component-id="myRestImpl"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
</jaxrs:providers>
<jaxrs:inInterceptors>
<ref component-id="validationInInterceptor" />
</jaxrs:inInterceptors>
</jaxrs:server>
<bean id="validationInInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
<property name="provider" ref="validationProvider" />
</bean>
<bean id="validationProvider" class="foo.bar.mycompany.CustomBeanValidationProvider"/>
通过这种方式,我可以同时获得一个验证器和一个工厂,但我无法以某种方式将它注入到InInterceptor中,就像它在非OSGi环境中所应该的那样
所以我基本上是在这里寻找解决办法
有关CXF中BeanValidation的文档,请参阅链接。刚刚找到了一个可行的解决方案: 我的蓝图文件:
<jaxrs:server address="/myPath" id="myserverid">
<jaxrs:serviceBeans>
<ref component-id="myRestImpl"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
</jaxrs:providers>
<jaxrs:inInterceptors>
<ref component-id="validationInInterceptor" />
</jaxrs:inInterceptors>
</jaxrs:server>
<bean id="validationInInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
<property name="provider" ref="validationProvider" />
</bean>
<bean id="validationProvider" class="org.apache.cxf.validation.BeanValidationProvider"/>
<jaxrs:server address="/myPath" id="myserverid">
<jaxrs:serviceBeans>
<ref component-id="myRestImpl"/>
</jaxrs:serviceBeans>
<jaxrs:providers>
</jaxrs:providers>
<jaxrs:inInterceptors>
<ref component-id="validationInInterceptor" />
</jaxrs:inInterceptors>
</jaxrs:server>
<bean id="validationInInterceptor" class="org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor">
<property name="provider" ref="validationProvider" />
</bean>
<bean id="validationProvider" class="foo.bar.mycompany.CustomBeanValidationProvider"/>
以及我正在使用的自定义ValidationProviderResolver:
public class HibernateValidationProviderResolver implements ValidationProviderResolver {
@Override
public List getValidationProviders() {
List providers = new ArrayList(1);
providers.add(new HibernateValidator());
return providers;
}
}
希望它能帮助别人
public class CustomBeanValidationProvider extends BeanValidationProvider {
public CustomBeanValidationProvider() {
super(new HibernateValidationProviderResolver());
}
}
public class HibernateValidationProviderResolver implements ValidationProviderResolver {
@Override
public List getValidationProviders() {
List providers = new ArrayList(1);
providers.add(new HibernateValidator());
return providers;
}
}