zoukankan      html  css  js  c++  java
  • cxf RESTful service client

    最近在工作中需要用到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());
    enjoy learning!
  • 相关阅读:
    yum安装报错“rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID 1e5e0159”
    EM64T和64位是不是一个概念啊?他们有什么区别啊,怎么区分啊?
    Can't load IA 32-bit .dll on a AMD 64-bit platform
    中间件——Oracle Fusion Middleware
    Does Windows have a limit of 2000 threads per process?
    java8 Lambda Stream操作list,map
    Mybatis优雅存取json字段的解决方案
    网站服务器架构部署方案发展
    springboot flowable Cause: org.xml.sax.SAXParseException; lineNumber: 25; columnNumber: 14; 元素类型为 "include" 的内容必须匹配 "EMPTY"
    java.lang.NoClassDefFoundError: javax/el/ELManager
  • 原文地址:https://www.cnblogs.com/Jenny22/p/14790984.html
Copyright © 2011-2022 走看看