我想按照标准机制使用 CXF 解析 FIQL。但是,我不想使用 JAXB 编码的对象,而是使用自定义数据字典源。以下是"正常"方式的示例:
@Path("book")
@GET
public List<Book> findBooks(@Context SearchContext searchContext) {
SearchCondition<Book> condition = searchContext.getCondition(Book.class);
return condition.findAll(theBooks);
}
在这里,如果我的理解是正确的,Book 必须是一个 java bean,具有与搜索表达式元素相对应的各个属性。所以如果我有:
public class Book {
String title;
String asin;
}
我可以做一个这样的查询:
GET /book?_s=asin==B00NAIMGXI
并返回匹配的行。这很好,但我无法像 Book 那样创建单独的 bean 类。事实上,我有一个大型动态数据字典 (DBSchema),我希望能够对该架构中的任何内容进行查询。不过,我找不到任何方法可以做到这一点。
在花了一些时间处理源代码之后,我发现如果你传递一个名为 SearchBean 的类,如下所示:
SearchCondition<SearchBean> searchCondition = searchContext.getCondition(SearchBean.class);
FIQL 表达式可以具有任意名称。我不知道此功能的官方程度 - 它不在 JAX-RS 指南中,但它确实出现在本 jira 问题 CXF-4314 中,所以我猜测(希望?)它被认为是 CXF 公共接口的一部分。