注入@Context时,FIQL SearchContext会抛出NullPointerException

Nik*_*Dim 3 cxf jax-rs

我想实现用一个简单的REST服务FIQL但我的代码抛出NullPointerException在哪里注入点SearchContext@Context.这是我的代码

我的服务类:

import java.util.*;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import org.apache.cxf.jaxrs.ext.search.SearchCondition;
import org.apache.cxf.jaxrs.ext.search.SearchContext;

@Path("/search")
public class Books {

    private List<Book> theBooks = new LinkedList<Book>();

    @Path("/book")
    @GET
    @Produces(MediaType.APPLICATION_XML)
    public List<Book> getBook(@Context SearchContext searchContext) {

        theBooks.add(new Book("1", "nick1"));
        theBooks.add(new Book("2", "nick2"));
        theBooks.add(new Book("3", "nick3"));
        theBooks.add(new Book("4", "nick4"));
        theBooks.add(new Book("5", "nick5"));

        SearchCondition<Book> condition = searchContext
                .getCondition(Book.class);

        return condition.findAll(theBooks);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的书课

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Book {

    private String id;
    private String author;

    public Book(){  }
    public Book(String id, String ownerinfo) {
        this.id = id;
        this.author = ownerinfo;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getOwnerinfo() {
        return author;
    }
    public void setOwnerinfo(String ownerinfo) {
        this.author = ownerinfo;
    } 
}
Run Code Online (Sandbox Code Playgroud)

我正在使用maven,我使用了依赖

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-extension-search</artifactId>
    <version>2.7.5</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

根据这个CXF-4949,我的代码(我相信)应该可以工作,但是我仍然searchContext是空的@Context

有任何想法吗?

谢谢

Nik*_*Dim 5

我设法解决了这个问题.我错过SearchContextProviderbeans.xml文件中的声明.我刚加了这条线

<bean class="org.apache.cxf.jaxrs.ext.search.SearchContextProvider"/>
Run Code Online (Sandbox Code Playgroud)

<jaxrs:providers>标签中,现在它工作正常.

更多关于FIQL的信息

谢谢