惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
雷峰网
雷峰网
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
V
Visual Studio Blog
Jina AI
Jina AI
博客园 - 司徒正美
The Cloudflare Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
小众软件
小众软件
V
V2EX
Apple Machine Learning Research
Apple Machine Learning Research
美团技术团队
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
WordPress大学
WordPress大学
爱范儿
爱范儿
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏

博客园 - 朕也就是个普通人

毕业快11年了,我仍是程序猿 平凡的生活~ 反思亲子相处~ Python + sqlalchemy + Pandas + Mysql 实现自动创建表,插入数据 cucumber 加油 重新学习python爬虫 python 网址 《高兴》 贾平凹 摘抄 funny python ML 算法 tensorflow 机器学习(Machine Learning) Eureka 注册中心 和 Config中心 配置 最近的日子-2019/8/12 工作上的态度 保持运动 对心情很重要 读《Linux命令行与shell脚本编程大全.第3版》 我的老妈挺可爱 看看书
cxf RESTful service client
朕也就是个普通人 · 2021-05-20 · via 博客园 - 朕也就是个普通人

最近在工作中需要用到cxf为印度某家公司提供的api去创建一个client,这样我们公司内部可以直接依赖client去调用那些api。做的过程中遭遇了好多坑,主要问题是自己能力不够... 网上有很多关于这方面的文章,但是因为我区分不到他们用的是SOAP,还是用的REST,所以导致了一些问题。

我们要调用的api是REST的,所以实现的时候需要用到JAXRSClientFactory去创建client,我在网上看到的很多代码都是用JaxWsProxyFactoryBean来创建client的,经测试,JaxWsProxyFactoryBean是用来为SOAP协议的,而非REST。

JAXRSClientFactory 和 JaxWsProxyFactoryBean 这两个类的差别就在这里。

已为REST api 创建client为例:还需设置网络代理去访问 fyi~

OrderApi.java 是一个接口,里面设置了patch delete post 方法:
@POST
@Path("/orders")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public PostResponse postOrders(PostOrdersRequest postOrdersRequest);

@PATCH
@Path("/orders")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public PatchResponse placeOrders(@NotEmpty @RequestBody PatchOrderRequest patchOrderRequest);

@DELETE
@Path("/orders/{OrderIds}")
@Consumes({ MediaType.APPLICATION_JSON })
@Produces({ MediaType.APPLICATION_JSON })
public GetOrderResponse deleteOrders(@QueryParam(value = "AccountKey") String accountKey, @PathParam(value = "OrderIds") String orderIds)

configure 类:

List<Object> providers = new ArrayList<Object>();
providers.add(new JacksonJaxbJsonProvider(objectMapper, DEFAULT_ANNOTATIONS));

// 用JAXRSClientFactory去为OrderApi设置代理类
OrderApi orderApiProxy = JAXRSClientFactory.create(saxoOrderApi, OrderApi.class, providers);

Client client = WebClient.client(orderApiProxy);

ClientConfiguration config = WebClient.getConfig(client);

HTTPConduit httpConduit = config.getHttpConduit();

HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
httpClientPolicy.setProxyServer(proxyServer);
httpClientPolicy.setProxyServerPort(proxyPort);
httpConduit.setClient(httpClientPolicy);

ProxyAuthorizationPolicy proxyAuthorizationPolicy = new ProxyAuthorizationPolicy();
proxyAuthorizationPolicy.setUserName(username);
proxyAuthorizationPolicy.setPassword(password);
httpConduit.setProxyAuthorization(proxyAuthorizationPolicy);

TLSClientParameters tlsClientParameters = new TLSClientParameters();
tlsClientParameters.setDisableCNCheck(true);

//创建DumbX509TrustManager去忽略证书:DumbX509TrustManager类继承自 X509TrustManager

tlsClientParameters.setTrustManagers(new TrustManager[] { new
      DumbX509TrustManager() });
httpConduit.setTlsClientParameters(tlsClientParameters);

AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
authorizationPolicy.setAuthorizationType("Bearer");
authorizationPolicy.setAuthorization(bearerToken);

httpConduit.setAuthorization(authorizationPolicy);

config.getInInterceptors().add(new LoggingInInterceptor());
config.getOutInterceptors().add(new LoggingOutInterceptor());