Java JAX-RS和Camel-除第一个查询参数外,所有其他参数均为空
出于某种原因,第二个查询参数和后续查询参数都是空的。第一个很好用。我使用的是Camel+JAX-RS(CXF)。这只是一个GET请求。我使用的URL是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){
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);
}
}
}
详情如下: