使用Hibernate实现在OSGI上下文中使用CXF进行Bean验证

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

我试图在OSGI上下文中使用bean验证(使用Hibernate实现)

我的蓝图文件中的设置如下所示:

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