【问题标题】:Getting org.apache.cxf.jaxrs.ext.search.PropertyNotFoundException when parsing fiql expression containing java.util.Calendar attribute解析包含 java.util.Calendar 属性的 fiql 表达式时获取 org.apache.cxf.jaxrs.ext.search.PropertyNotFoundException
【发布时间】:2014-05-17 21:54:54
【问题描述】:

我使用 FIQL 查询使用 Apache CXF 3.0.0-milestone1 构建的 Web 服务。当我尝试引用 java.util.Calendar 类型的任何属性时,我得到一个 org.apache.cxf.jaxrs.ext.search.PropertyNotFoundException。我已经追踪到 FiqlParser.parse(String expression) 调用的行为,我可以使用下面的简单代码重现它。

搜索豆: 导入 java.util.Calendar; 导入 java.util.Date;

public class Book {
    private Long id;
    private String title;
    private Date published;
    private Calendar created;

    public Book() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Date getPublished() {
        return published;
    }

    public void setPublished(Date published) {
        this.published = published;
    }

    public Calendar getCreated() {
        return created;
    }

    public void setCreated(Calendar created) {
        this.created = created;
    }
}

可执行类:

import org.apache.cxf.jaxrs.ext.search.SearchCondition;
import org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser;

public class PlayGround {

    public static void  main(String[] args) {
        FiqlParser<Book> parser = new FiqlParser(Book.class);
        SearchCondition<Book> condition1 = parser.parse("id=ge=0");
        SearchCondition<Book> condition2 = parser.parse("title==*wind*");
        SearchCondition<Book> condition3 = parser.parse("published=ge=2014-01-01");
        SearchCondition<Book> condition4 = parser.parse("created=ge=2013-01-01");
    }
}

PlayGround 在以下行失败:

SearchCondition<Book> condition4 = parser.parse("created=ge=2013-01-01");

堆栈跟踪:

Exception in thread "main" org.apache.cxf.jaxrs.ext.search.PropertyNotFoundException
    at org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser.parseComparison(FiqlParser.java:294)
    at org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser.parseAndsOrsBrackets(FiqlParser.java:252)
        at org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser.parse(FiqlParser.java:187)
    at PlayGround.main(PlayGround.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

【问题讨论】:

    标签: apache cxf java.util.calendar


    【解决方案1】:

    如果您在方法 org.apache.cxf.jaxrs.ext.search.fiql.FiqlParser.parseType(String, String, String) 的 catch 块中放置断点,您将看到此异常消息:

    org.apache.cxf.jaxrs.ext.search.SearchParseException: Cannot convert String value "2013-01-01" to a value of class java.util.Calendar
    

    【讨论】:

      猜你喜欢
      • 2019-10-04
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多