我正在尝试使用CXF运行JavaFX Rest客户端。一个非常简单的测试。当我尝试获取URL时,出现org.apache.cxf.BusException:未找到命名空间http://cxf.apache.org/transports/http的管道启动器。我在这里看了一些相关的问题,但是没有运气。任何帮助,将不胜感激。然后,我添加的唯一Maven依赖项是cxf-rt-rs-client 3.1.0。代码为:
WebClient client = WebClient.create("http://www.stackoverflow.com");
client.type("text/html").accept("text/html");
System.out.println(client.get());
堆栈跟踪:
Caused by: org.apache.cxf.BusException: No conduit initiator was found for the namespace http://cxf.apache.org/transports/http.
at org.apache.cxf.bus.managers.ConduitInitiatorManagerImpl.getConduitInitiator(ConduitInitiatorManagerImpl.java:110)
at org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit(AbstractConduitSelector.java:104)
at org.apache.cxf.endpoint.UpfrontConduitSelector.selectConduit(UpfrontConduitSelector.java:77)
at org.apache.cxf.message.ExchangeImpl.getConduit(ExchangeImpl.java:159)
at org.apache.cxf.interceptor.MessageSenderInterceptor.getConduit(MessageSenderInterceptor.java:71)
at org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:46)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
at org.apache.cxf.jaxrs.client.AbstractClient.doRunInterceptorChain(AbstractClient.java:624)
at org.apache.cxf.jaxrs.client.WebClient.doChainedInvocation(WebClient.java:1100)
Run Code Online (Sandbox Code Playgroud)
阴影将覆盖bus-extension.txt文件。您可以以编程方式通过初始化对其进行修复。
void initializeCxf() {
final Bus defaultBus = BusFactory.getDefaultBus();
final ConduitInitiatorManager extension = defaultBus.getExtension(ConduitInitiatorManager.class);
extension.registerConduitInitiator("http://cxf.apache.org/transports/http", new HTTPTransportFactory());
}
Run Code Online (Sandbox Code Playgroud)
根据@hba的评论,如果上述方法无效,您也可以尝试以下方法
extension.registerConduitInitiator("http://cxf.apache.org/transports/http", new HTTPTransportFactory(defaultBus));
Run Code Online (Sandbox Code Playgroud)
您对 Maven 依赖关系很满意。
\n\n客户端建设看起来有点不对劲CXF 3.x 指南,其中支持 JAX-RS 2.0。
\n\n\n\n试试这个代码:
\n\n WebTarget target = ClientBuilder.newClient().target("http://stackoverflow.com/");\n\n Response response = target.request().get();\n System.out.println(response.getEntity().getClass().getName());\nRun Code Online (Sandbox Code Playgroud)\n\n使用此代码,您将了解到响应实体是一个输入流.. 一个字符序列,是 StackOverflow 主页的 HTML 内容。
\n\n如果您喜欢冒险,并且为了证明我不是江湖骗子,请将以下依赖项添加到您的 POM 中:
\n\n<dependency>\n <groupId>org.apache.commons</groupId>\n <artifactId>commons-io</artifactId>\n <version>1.3.2</version>\n</dependency> \nRun Code Online (Sandbox Code Playgroud)\n\n然后尝试这个:
\n\n WebTarget target = ClientBuilder.newClient().target("http://stackoverflow.com/");\n System.out.println(IOUtils.toString((InputStream) target.request().get().getEntity(), "UTF-8"));\nRun Code Online (Sandbox Code Playgroud)\n\n您将获得 StackOverflow 主页 \xe2\x80\x93 的文本呈现(在标准输出上),相当于在浏览器中执行“查看源代码”操作。
\n\n我不知道您的最终目标是什么,但如果您尝试从 StackExchange 网络上的信息构建任何有用的内容,我建议使用此处记录的 API记录的 API 。
\n\n祝你好运!
\n| 归档时间: |
|
| 查看次数: |
2388 次 |
| 最近记录: |