簡體   English   中英

如何在 CXF 客戶端中使用 PATCH 方法

[英]How to use PATCH method in CXF Client

我試圖使用 CXF(版本 3.1.3)客戶端通過 PATCH 方法調用 API。

嘗試按照以下線程中指定的步驟操作,但無法解決。 只獲取 URLConnectionHttpConduit 而不是 AsyncHttpConduit

http://cxf.apache.org/docs/asynchronous-client-http-transport.html

如何在 CXF 中使用 PATCH 方法

驗證 CXF HttpAsyncClient 對 use.async.http.conduit 上下文屬性的使用

這是代碼片段:

    Bus bus = BusFactory.getDefaultBus();
    // insist on the async connector to use PATCH.
    bus.setProperty(AsyncHTTPConduit.USE_ASYNC,  
AsyncHTTPConduitFactory.UseAsyncPolicy.ALWAYS);
    WebClient webClient = WebClient.create(request.getRestURL());
   WebClient.getConfig(webClient).getBus().setProperty
     (AsyncHTTPConduit.USE_ASYNC, AsyncHTTPConduitFactory.UseAsyncPolicy.ALWAYS);
   WebClient.getConfig(webClient).getRequestContext()
       .put(AsyncHTTPConduit.USE_ASYNC, AsyncHTTPConduitFactory.
       UseAsyncPolicy.ALWAYS);
    HTTPConduit conduit = (HTTPConduit)WebClient.getConfig(webClient)
                           .getConduit();
    System.out.println(conduit.getClass().getName());

    Response response = webClient.invoke(request.getMethod(), null);
    System.out.println("service response = "+ response); 

我什至嘗試在 POST 請求中使用 X-HTTP-Method-Override=PATCH 標頭,

其他邊服務是使用 RestEasy 實現的,看起來像是不尊重 X-HTTP-Method-Override 標頭。

你能幫我找到問題嗎。

當我們遇到類似問題時,我們使用了CloseableHttpAsyncClient並且它工作正常。 以下是供您參考的示例代碼:

IOReactorConfig ioReactorConfig = IOReactorConfig.custom().setIoThreadCount(10).build();
ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
PoolingNHttpClientConnectionManager cm = new PoolingNHttpClientConnectionManager(ioReactor);
cm.setMaxTotal(100);
cm.setDefaultMaxPerRoute(10);

RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(30000)
                .setSocketTimeout(30000).build();

CloseableHttpAsyncClient httpclient = HttpAsyncClients.custom()
                .setConnectionManager(cm)
                .setConnectionManagerShared(false)
                .setDefaultRequestConfig(requestConfig)
                .build();
httpclient.start();

HttpPatch httpReq = new HttpPatch(url);
StringEntity entity = new StringEntity(json);
httpReq.setEntity(entity);

Future<HttpResponse> future = httpclient.execute(httpReq, context, null);
HttpResponse httpResponse = future.get();
HttpEntity responseEntity = httpResponse.getEntity();
String responseText = responseEntity != null ? EntityUtils.toString(responseEntity) : null;

您可以參考鏈接了解更多詳情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM