当前位置: 首页 > 知识库问答 >
问题:

如何在 CXF 客户端中使用修补程序方法

彭华皓
2023-03-14

我试图使用CXF(3 . 1 . 3版)客户端调用带有补丁方法的API。

尝试按照以下线程中指定的步骤进行操作,但无法解决。只获取URLConnectionHttpConduit而不是AsyncHttpConduit

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

如何在CXF中使用补丁方法

验证CXF HttpAsyncClient对use.async.http的使用。管道上下文属性

以下是代码片段:

    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 header,

其他端服务是使用 RestEasy 实现的,看起来就像不遵守 X-HTTP 方法-覆盖标头。

你能帮我找到问题吗?

共有1个答案

谷梁襦宗
2023-03-14

当我们遇到类似的问题时,我们使用了< code > 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;

您可以参考链接以获取更多详细信息。

 类似资料:
  • 问题内容: 我对React还是很陌生,我正在开发一个应用程序,它将获取网页的实际屏幕截图,并且该应用程序可以在所截取的屏幕截图之上绘制并添加涂鸦。最初,我使用html2canvas和domToImage拍摄客户端屏幕快照,但它无法完全呈现网页中显示的图像。 Reddit用户/ pamblam0建议我调查Google的Puppeteer。它的工作方式是启动无头铬浏览器,该浏览器转到我在本地主机上的r

  • 我试图在我的客户端使用JAX RS的CXF实现补丁方法。首先,我将补丁注释定义为 参考这里的内容:如何为JAX-RS提供@PATCH注释? 然后我发现@PATCH被添加到CXF 3.1.2中,所以我在我的专家的pom中更改了版本.xml并且内部有,代码实际上看起来与我上面发布的内容完全相同。 但是,当我尝试在我的服务定义上使用此注释时 正如我在上面发布的queston链接中所说的,我以< code

  • 我尝试为我的网站提供文件上传/下载服务,并且尝试使用openstack中的对象存储。问题是,我通过php和openstack PHPSDK做这件事没有问题,但是当我试图通过一些javascript做这件事时,我找不到一个好的sdk或方法。我没有使用node,我有一个php服务器和一个javascript客户端。我想直接从javascript客户端上传或下载文件。我不希望文件通过php服务器传输。我

  • 创建okhttp3客户端,使用sni地址访问web服务器,但握手失败,错误消息为“javax.net.ssl.SSLHandShakeException:握手期间远程主机关闭连接”。 有人知道如何在okhttp3客户端代码中使用sni地址吗?

  • 莴苣支持这种开箱即用的群集/分片吗?如果是,如何将其配置为使用客户端散列?

  • 在SpringJSFWeb应用程序中将Netty客户端处理程序配置为消息接收点,有没有具体的方法? 如果一些独立的Java应用程序充当Netty服务器,我如何接收到SpringJSFWeb应用程序的消息?