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

验证 CXF HttpAsync客户端是否使用了上下文属性

顾斌
2023-03-14

我正在尝试通过设置“use.async.http.管道”属性来利用 CXF 异步 HTTP 客户端传输,如本线程中所述,并由这篇 CXF 文章推荐。

我使用以下代码执行此操作:

Client client = ClientProxy.getClient(wsClient);
client.getRequestContext().put("use.async.http.conduit", Boolean.TRUE);
java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:698)
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:641)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1218)
    at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:379)
    at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.getResponseCode(URLConnectionHTTPConduit.java:260)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1513)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1486)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1305)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623)

上面的异常堆栈表明,该类仍在使用中,并且根据 CXF 文档,该设置尚未生效。

我试图弄清楚的是,如何确保“use.async.http.conduct”生效,即是否存在可以测试的特定行为,或者我可以在客户端上启用的特定日志配置,这无疑会告诉我Apache HttpAsyncClient正在使用中?

非常感谢:)

共有1个答案

萧安怡
2023-03-14

我刚刚找到了我的问题的答案,灵感来自对CXF留档和有用博客的更多阅读。所以首先如何识别是使用默认的Java传输客户端还是Apache异步传输客户端:除了我正在使用的代码(见问题)

Client client = ClientProxy.getClient(wsClient);
client.getRequestContext().put("use.async.http.conduit", Boolean.TRUE);

我补充了以下内容:

HTTPConduit conduit = (HTTPConduit)client.getConduit();
System.out.println(conduit.getClass().getName());

这最初产生

org.apache.cxf.transport.http.URLConnectionHTTPConduit

它告诉我设置不起作用。这时,在阅读了更多的CXF文档后,我意识到我缺少了一个依赖项(类路径上的库):< code > CXF-rt-transports-http-HC 。所以我在我的maven依赖项中添加了这个库:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http-hc</artifactId>
    <version>${cxf.version}</version>
</dependency>

然后重试我的代码,输出现在是:

org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit

瞧啊。

 类似资料:
  • 因此,为了实现这个逻辑,我认为我需要在客户端验证JWT令牌。Q1,这是一个明智的做法吗。 Q2,我正在使用的库似乎需要一个公钥才能使用它的函数。我似乎没有公钥,只有一个秘密,这是我刚刚编造的,所以它不是用一对生成的。我的公钥从何而来,或者是否有另一种方法来验证我的令牌而不使用此方法? 这一切似乎应该是显而易见的,我错过了一些东西,所以很抱歉,如果这是一个愚蠢的问题,但我似乎找不到答案?

  • 我正在保护Kafka与Kerberos在CDH 5.5Kafka版本:2.0.1Kerberos启用和工作正常 当我使用cloudera maneger在kafka中启用sasl时,会出现以下错误: 6月29日,3:02:42.875下午信息组织。阿帕奇。动物园管理员。客户CNXN 正在打开与服务器brahim的套接字连接。localhost/127.0。0.1:2181. 将尝试使用登录上下文部

  • 应如何管理它们? 一些更具体的问题: 根据定义,本机应用程序(实际上是公共客户端)不能安全地存储其凭据(client_id+secret)。是未注册的客户吗?如果我不能使用秘密来验证/验证它,我还应该做什么? 客户端注册≠endpoint注册:第一个是关于注册客户端凭据();第二个关于注册客户端重定向endpoint。重定向endpoint注册是否足以授予客户端的真实性? 客户端凭据授予是否使用相

  • 我最近开始维护一个在线系统。它在前端使用JSF,前端使用PrimeFaces,后端使用Java。JSF对我来说是一种新技术。 xhtml UserBean.java

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 问题内容: 进行客户端或服务器端验证哪个更好? 在我们的情况下,我们正在使用 jQuery和MVC。 在我们的视图和控制器之间传递的JSON数据。 我所做的许多验证工作都是在用户输入数据时对其进行验证。例如,我使用该事件来防止文本框中的字母,设置最大字符数,并且该数字在一定范围内。 我想更好的问题是,与客户端相比,进行服务器端验证是否有任何好处? 真棒的答案大家。我们拥有的网站受到密码保护,并且用