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

推荐订阅源

爱范儿
爱范儿
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
G
GRAHAM CLULEY
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V2EX - 技术
V2EX - 技术
The Last Watchdog
The Last Watchdog
S
Secure Thoughts
Webroot Blog
Webroot Blog
PCI Perspectives
PCI Perspectives
L
LINUX DO - 最新话题
Hacker News: Ask HN
Hacker News: Ask HN
N
News and Events Feed by Topic
H
Heimdal Security Blog
H
Help Net Security
T
The Blog of Author Tim Ferriss
P
Proofpoint News Feed
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
Recent Commits to openclaw:main
Recent Commits to openclaw:main
F
Full Disclosure
小众软件
小众软件
S
Securelist
罗磊的独立博客
NISL@THU
NISL@THU
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cisco Blogs
云风的 BLOG
云风的 BLOG
C
CERT Recently Published Vulnerability Notes
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
S
Schneier on Security
D
DataBreaches.Net
M
MIT News - Artificial intelligence
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
F
Fortinet All Blogs
T
Tenable Blog
The Register - Security
The Register - Security
C
Check Point Blog
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google Online Security Blog
Google Online Security Blog
博客园 - 叶小钗
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 司徒正美

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

毕业快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());