我在Karaf中使用CXF的Dinamics功能,并面临Bean验证不适用于子资源的问题。 例如。在以下代码中:
@Path("services")
public interface Service {
@Path("{id}/orders")
public Order getOrderForService(@PathParam("id") int serviceId);
}
@Path("orders")
public interface Order {
@POST
Product getProduct(@NotNull @Valid Product product);
}
当Order是root资源时,bean验证工作正常,但是当它作为Service的子资源被调用时,bean验证不起作用。
我发现了一个问题CXF-6297
在哪里说
这不是错误 - JAXRSBeanValidationInvoker可以处理它。
注意JAXRSBeanValidationInInterceptor也是一个ContainerRequestFilter - 所以你可以将它注册为JAX-RS提供者,但具有讽刺意味的是,鉴于匹配后请求过滤器不能应用于定位器,它不能用于验证定位器。因此,注册自定义调用程序是获得验证子资源定位器的唯一方法
我发现文章about Invokers
但它没有描述如何使用Blueprint配置Invoker。
所以问题是:如何使用Blueprint在Karaf的CXF子资源上配置bean验证? 或者可能有另一种方法可以做到这一点?
答案 0 :(得分:0)
我真的认为如果你使用Camel CXF和驼峰蓝图进行Camel bean验证,你的生活会变得更加容易。 Camel的学习曲线几乎没有,并且与Karaf和(驼峰)蓝图非常相似。使用这两种方法可以解决您的问题。您可以通过从驼峰蓝图原型创建新项目来检出样本。它似乎还有一个带有蓝图的驼峰cxf的原型。如果你看看这些选项并且它们看起来很吸引人,我相信你需要的是一个动态路由器,它只是一个根据你提供的规则路由到端点的路由器。
https://camel.apache.org/cxf.html https://camel.apache.org/bean-validation.html
Camel-CXF教程 https://camel.apache.org/better-jms-transport-for-cxf-webservice-using-apache-camel.html
希望我能正确理解你的问题,这可能有所帮助。