Java JAX-RS和Camel-除第一个查询参数外,所有其他参数均为空

Java JAX-RS和Camel-除第一个查询参数外,所有其他参数均为空,java,jax-rs,apache-camel,cxfrs,Java,Jax Rs,Apache Camel,Cxfrs,出于某种原因,第二个查询参数和后续查询参数都是空的。第一个很好用。我使用的是Camel+JAX-RS(CXF)。这只是一个GET请求。我使用的URL是 http://localhost:8181/cxf/coreservices/search?q=health&start=100&size=924 这是我的接口声明 public SearchResult<WikiSearchHit> searchGet(String q, String start, String size){

出于某种原因,第二个查询参数和后续查询参数都是空的。第一个很好用。我使用的是Camel+JAX-RS(CXF)。这只是一个GET请求。我使用的URL是

http://localhost:8181/cxf/coreservices/search?q=health&start=100&size=924

这是我的接口声明

public SearchResult<WikiSearchHit> searchGet(String q, String start, String size){

    logger.info("Inside wiki GET method: " +q + " start:"+start + " size:"+ size);
@Override
public void configure() throws Exception {

    from("cxfrs://bean://rsServer?bindingStyle=SimpleConsumer")
            .multicast()
            .parallelProcessing()
            .aggregationStrategy(new CoreSearchResponseAggregator())
            .beanRef("searchRestServiceImpl", "searchGet")
             ...
@GET 
@Path("search") 
@Produces(MediaType.APPLICATION_JSON) 
public String searchGet(); 
public SearchResult<WikiSearchHit> wikiGet(Exchange exchange){

        String q = exchange.getIn().getHeader("q", String.class); 
        String size = exchange.getIn().getHeader("size", String.class); 
        String start = exchange.getIn().getHeader("start", String.class); 
@路径(“搜索”) 公共接口搜索服务{

@GET
@Produces(MediaType.APPLICATION_JSON)
public String searchGet(@QueryParam ("q") String q, @DefaultValue("0") @QueryParam("start") String start, @DefaultValue("10") @QueryParam("size") String size );
实施

public SearchResult<WikiSearchHit> searchGet(String q, String start, String size){

    logger.info("Inside wiki GET method: " +q + " start:"+start + " size:"+ size);
@Override
public void configure() throws Exception {

    from("cxfrs://bean://rsServer?bindingStyle=SimpleConsumer")
            .multicast()
            .parallelProcessing()
            .aggregationStrategy(new CoreSearchResponseAggregator())
            .beanRef("searchRestServiceImpl", "searchGet")
             ...
@GET 
@Path("search") 
@Produces(MediaType.APPLICATION_JSON) 
public String searchGet(); 
public SearchResult<WikiSearchHit> wikiGet(Exchange exchange){

        String q = exchange.getIn().getHeader("q", String.class); 
        String size = exchange.getIn().getHeader("size", String.class); 
        String start = exchange.getIn().getHeader("start", String.class); 

感谢您的时间:-)

Camel团队正在努力在不久的将来解决此问题。在此之前,请使用以下解决方法

您可以按如下方式获取整个查询字符串

String query=exchange.getIn().getHeader(exchange.HTTP\u query,String.class)

//将返回类似以下内容:q=health&start=100&size=924

接口

public SearchResult<WikiSearchHit> searchGet(String q, String start, String size){

    logger.info("Inside wiki GET method: " +q + " start:"+start + " size:"+ size);
@Override
public void configure() throws Exception {

    from("cxfrs://bean://rsServer?bindingStyle=SimpleConsumer")
            .multicast()
            .parallelProcessing()
            .aggregationStrategy(new CoreSearchResponseAggregator())
            .beanRef("searchRestServiceImpl", "searchGet")
             ...
@GET 
@Path("search") 
@Produces(MediaType.APPLICATION_JSON) 
public String searchGet(); 
public SearchResult<WikiSearchHit> wikiGet(Exchange exchange){

        String q = exchange.getIn().getHeader("q", String.class); 
        String size = exchange.getIn().getHeader("size", String.class); 
        String start = exchange.getIn().getHeader("start", String.class); 
实施-目标方法

public SearchResult<WikiSearchHit> searchGet(String q, String start, String size){

    logger.info("Inside wiki GET method: " +q + " start:"+start + " size:"+ size);
@Override
public void configure() throws Exception {

    from("cxfrs://bean://rsServer?bindingStyle=SimpleConsumer")
            .multicast()
            .parallelProcessing()
            .aggregationStrategy(new CoreSearchResponseAggregator())
            .beanRef("searchRestServiceImpl", "searchGet")
             ...
@GET 
@Path("search") 
@Produces(MediaType.APPLICATION_JSON) 
public String searchGet(); 
public SearchResult<WikiSearchHit> wikiGet(Exchange exchange){

        String q = exchange.getIn().getHeader("q", String.class); 
        String size = exchange.getIn().getHeader("size", String.class); 
        String start = exchange.getIn().getHeader("start", String.class); 
公共搜索结果wikiGet(Exchange){ 字符串q=exchange.getIn().getHeader(“q”,String.class); 字符串大小=exchange.getIn().getHeader(“大小”,String.class); String start=exchange.getIn().getHeader(“start”,String.class); 路由器

public class RestToBeanRouter extends RouteBuilder { 

    @Override 
    public void configure() throws Exception { 

        from("cxfrs://bean://rsServer?bindingStyle=SimpleConsumer") 
                .process(new ParameterProcessor()) 
                .removeHeaders("CamelHttp*") 
                .multicast() 
                .parallelProcessing() 
                .aggregationStrategy(new CoreSearchResponseAggregator()) 
                .beanRef("searchRestServiceImpl", "wikiGet") 
                .... 
                .end() 
                .marshal().json(JsonLibrary.Jackson); 
        //.to("log://camelLogger?level=TRACE"); 

    } 


    class ParameterProcessor implements Processor { 
        @Override 
        public void process(Exchange exchange) throws Exception { 

            Map<String, String> stringStringMap = convertQueryStringAsMap(exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class)); 

            //System.out.println("stringStringMap = " + stringStringMap); 

            for (Map.Entry<String, String> eachParamEntry : stringStringMap.entrySet()) { 
                exchange.getIn().setHeader(eachParamEntry.getKey(), eachParamEntry.getValue()); 
            } 
        } 


        private Map<String,String> convertQueryStringAsMap(String queryString){ 

            //some Guava magic 
            return Splitter.on("&").omitEmptyStrings().trimResults().withKeyValueSeparator("=").split(queryString); 

        } 

    } 
} 
公共类RestToBeanRouter扩展RouteBuilder{
@凌驾
public void configure()引发异常{
从(”cxfrs://bean://rsServer?bindingStyle=SimpleConsumer") 
.process(新参数解释处理器())
.removeHeaders(“CamelHttp*”)
.multicast()
.parallelProcessing()
.aggregationStrategy(新的CoreSearchResponseAggregator())
.beanRef(“searchRestServiceImpl”、“wikiGet”)
.... 
(完)
.marshal().json(JsonLibrary.Jackson);
//.至(”log://camelLogger?level=TRACE"); 
} 
类ParameterProcessor实现处理器{
@凌驾
公共无效进程(Exchange)引发异常{
Map stringStringMap=convertQueryStringAsMap(exchange.getIn().getHeader(exchange.HTTP_QUERY,String.class));
//System.out.println(“StringMap=“+StringMap”);
对于(Map.Entry eachParamEntry:stringStringMap.entrySet()){
exchange.getIn().setHeader(eachParamEntry.getKey(),eachParamEntry.getValue());
} 
} 
私有映射转换器querystringasmap(字符串queryString){
//一些番石榴魔术
返回Splitter.on(“&”).ommitEmptyStrings().trimResults().withKeyValueSeparator(“=”).split(queryString);
} 
} 
} 
详情如下: