日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

camel 多个 to_具有多个查询参数的Camel CXF服务

發(fā)布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 camel 多个 to_具有多个查询参数的Camel CXF服务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

camel 多個 to

出色的Apache Camel團隊忙于解決查詢中多個參數(shù)的處理問題,這是一種解決方法。 希望本文將在下一版本的Camel中不再使用。 (目前,我使用2.7.5)

問題

大于1的查詢參數(shù)作為null值傳遞給Camel-CXF服務(wù)。 假設(shè)網(wǎng)址中有四個查詢參數(shù),例如

name=arun&email=arun@arunma.com&age=10&phone=123456

執(zhí)行以下操作時,只會填充第一個:

MultiQueryParams

@GET @Path("search") @Produces(MediaType.APPLICATION_JSON) public String sourceResultsFromTwoSources(@QueryParam("name") String name, @QueryParam("age") String age,@QueryParam("phone") String phone,@QueryParam("email") String email );

所有其他參數(shù)均為null 。

最終輸出

對于網(wǎng)址: http://localhost:8181/cxf/karafcxfcamel/search?name=arun&email=arun@arunma.com&age=31&phone=232323預(yù)期的結(jié)果是:

解決方法

有趣的是,我們可以在標(biāo)頭中獲得整個查詢字符串。

QueryStringHeader

String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);

然后我們可以做一個

提取參數(shù)

MultivaluedMap<String, String> queryMap = JAXRSUtils.getStructuredParams(queryString, "&", false, false);

獲取查詢參數(shù)作為多值Map。

然后可以將查詢參數(shù)設(shè)置為Exchange的屬性,并在整個Exchange使用。

  • 整個代碼可以從github下載

請注意,我在Karaf容器中將Camel作為OSGi的一部分運行。 盡管因使用Camel-CXF的環(huán)境而導(dǎo)致變通辦法沒有不同,但是當(dāng)您從github下載代碼時,請注意這一事實。 請注意用于駱駝配置的xml藍圖。

這里最重要的是路由器

路由器

RestToBeanRouter

package me.rerun.karafcxfcamel.camel.beans;import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.model.dataformat.JsonLibrary; import org.apache.cxf.jaxrs.utils.JAXRSUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import javax.ws.rs.core.MultivaluedMap; import java.util.List; import java.util.Map;public class RestToBeanRouter extends RouteBuilder {private static Logger logger= LoggerFactory.getLogger(RouteBuilder.class);@Overridepublic void configure() throws Exception {from ("cxfrs://bean://rsServer").process(new ParamProcessor()).multicast().parallelProcessing().aggregationStrategy(new ResultAggregator()).beanRef("restServiceImpl", "getNameEmailResult").beanRef("restServiceImpl", "getAgePhoneResult").end().marshal().json(JsonLibrary.Jackson).to("log://camelLogger?level=DEBUG");}private class ParamProcessor implements Processor {@Overridepublic void process(Exchange exchange) throws Exception {String queryString = exchange.getIn().getHeader(Exchange.HTTP_QUERY, String.class);MultivaluedMap<String, String> queryMap = JAXRSUtils.getStructuredParams(queryString, "&", false, false);for (Map.Entry<String, List<String>> eachQueryParam : queryMap.entrySet()) {exchange.setProperty(eachQueryParam.getKey(), eachQueryParam.getValue());}}} }

接口

休息服務(wù)

package me.rerun.karafcxfcamel.rest;import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType;public interface RestService {@GET@Path("search")@Produces(MediaType.APPLICATION_JSON)public String sourceResultsFromTwoSources();}

實作

RestServiceImpl

package me.rerun.karafcxfcamel.rest;import me.rerun.karafcxfcamel.model.AgePhoneResult; import me.rerun.karafcxfcamel.model.NameEmailResult; import me.rerun.karafcxfcamel.service.base.AgePhoneService; import me.rerun.karafcxfcamel.service.base.NameEmailService; import me.rerun.karafcxfcamel.service.impl.AgePhoneServiceImpl; import org.apache.camel.Exchange; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.util.List;public class RestServiceImpl implements RestService {private static Logger logger= LoggerFactory.getLogger(AgePhoneServiceImpl.class);private NameEmailService nameEmailService;private AgePhoneService agePhoneService;public RestServiceImpl(){}//Do nothing. Camel intercepts and routes the requestspublic String sourceResultsFromTwoSources() {return null;}public NameEmailResult getNameEmailResult(Exchange exchange){logger.info("Invoking getNameEmailResult from RestServiceImpl");String name=getFirstEntrySafelyFromList(exchange.getProperty("name", List.class));String email=getFirstEntrySafelyFromList(exchange.getProperty("email", List.class));return nameEmailService.getNameAndEmail(name, email);}public AgePhoneResult getAgePhoneResult(Exchange exchange){logger.info("Invoking getAgePhoneResult from RestServiceImpl");String age=getFirstEntrySafelyFromList(exchange.getProperty("age", List.class));String phone=getFirstEntrySafelyFromList(exchange.getProperty("phone", List.class));return agePhoneService.getAgePhoneResult(age, phone);}public NameEmailService getNameEmailService() {return nameEmailService;}public AgePhoneService getAgePhoneService() {return agePhoneService;}public void setNameEmailService(NameEmailService nameEmailService) {this.nameEmailService = nameEmailService;}public void setAgePhoneService(AgePhoneService agePhoneService) {this.agePhoneService = agePhoneService;}private String getFirstEntrySafelyFromList(List<String> list){if (list!=null && !list.isEmpty()){return list.get(0);}return null;} }

資源資源

  • 駱駝郵件列表問題

參考: Rerun.me博客上的JCG合作伙伴 Arun Manivannan提供的具有多個查詢參數(shù)的Camel CXF服務(wù) 。

翻譯自: https://www.javacodegeeks.com/2013/11/camel-cxf-service-with-multiple-query-parameters.html

camel 多個 to

總結(jié)

以上是生活随笔為你收集整理的camel 多个 to_具有多个查询参数的Camel CXF服务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。