问题标签 [cxf-client]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-camel - Camel cxfws producer,POJO格式,抛出“Get the wrong parameter size to invoke the out service”错误
我有与使用 Java DSL 的 Camel CXF POJO 模式类似的情况,其中
- 我有一个 wsdl https://api.stage.eventcore.com/ReportService.asmx?WSDL
- 创建了一个 wsdl2java 库
- 使用 camel cxf producer 组件,以 POJO 格式发出 SOAP 请求。
- 将
operationname
,设置operationnamespace
为标题。cxfEndpoint
配置也很准确。
以下是我在“GetReport”操作中遇到的错误。
这是我正在处理的操作的绑定信息。
作为交换主体的一部分,我将发送带有 CredentialHeader、GetReport 对象的对象列表以及必要的数据。我还为响应消息添加了持有者参数。
这是 cxfEndpoint 配置。
我不明白的是,为什么 cxf 需要 7 个参数?那 7 个参数是什么?我尝试通过添加一些空值将其设为 7,但由于“参数类型不匹配”错误而失败。请帮助我理解此特定操作中的输入消息部分。
ssh - 如何在 JAX-RS / Apache CXF 中设置主机标头
我正在尝试通过 HTTPS 访问服务,但由于网络设置限制,我试图通过 ssh 隧道发出请求。
我使用如下命令创建隧道:
ssh -L 9443:my-service.com:443 sdt-jump-server
该服务只能通过 HTTPS 使用,它使用自签名证书托管,并且它位于负载均衡器后面,该负载均衡器使用主机名或显式 Host 标头将传入请求路由到适当的后端服务。
我可以使用 curl 从我的本地系统调用端点
curl -k -H '主机:my-service.com' https://localhost:9443/path
但是,当我尝试使用 JAX-RS 的 CXF 3.1.4 实现来发出相同的请求时,我似乎无法使其工作。我配置了一个 hostnameVerifier 以允许连接,下载了服务器的证书,并将其添加到我的信任库中。现在我可以连接了,但负载均衡器似乎没有遵守我试图设置的 Host 标头。
我迷失了一会儿,直到我设置-Djavax.net.debug
并看到传递的 Host 标头实际上是localhost
我设置的值而不是我设置的值。如何让 CXF 尊重我设置的 Host 标头,而不是使用 WebTarget 的 URL 中的值?!
java - 如何在 CXF 管道上设置 TLS 参数?
我的应用程序有两个传出 SOAP 连接。对于那些,我想实现 TLS。两者都是使用 CXF 创建的。
返回一个单独的javax.xml.ws.Service.getPort()
bindingProvider(两个连接都使用自己的 WSDL),但都使用相同的org.apache.cxf.bus.spring.SpringBus
实例。
在使用 bindingProvider 之前,我在 Conduit 上设置了 TLS 客户端参数:
问题是,检索到的客户端对于两个连接都不同,但管道是同一个对象。因此,当我在同一对象上设置第二个连接的参数时,我会覆盖先前设置的设置。
常见问题解答是否 CXF 是线程安全的,“是”和一些例外情况。我认为第二个例外适用于此。它说:
CXF 回答: CXF 代理对于许多用例来说都是线程安全的。例外情况是:
[...]
管道上的设置 - 如果您使用代码或配置直接操作管道(例如设置 TLS 设置或类似设置),则这些不是线程安全的。管道是每个实例的,因此这些设置将被共享。此外,如果您使用 FailoverFeature 和 LoadBalanceFeatures,则会即时更换管道。因此,在导管上设置的设置在用于设置线程之前可能会丢失。
[...]
对于导管问题,您可以安装一个使用本地线程或类似线程的新 ConduitSelector。不过这有点复杂。
我不完全确定线程安全是否是我的问题。我在各自的组件中创建了两个连接。Springs 只使用一个线程来初始化所有组件,因此两个连接都由同一个线程初始化。但之后,连接使用了来自池的线程。覆盖设置发生在初始化期间,因此在使用不同线程发送实际 SOAP 消息之前。
当在 中创建 Conduit 时org.apache.cxf.endpoint.AbstractConduitSelector#getSelectedConduit
,它是使用SpringBus
两个对象的相同实例来完成的。
所以,FAQ 告诉我使用我自己的自定义 ConduitSelector。我尝试在上面的初始化之前设置它:
我在初始化后尝试了同样的方法。在这两种情况下,在设置了管道选择器之后,当某些东西使用 BindingProvider(它是一个代理对象)时,它会得到一个 NullPointerException,尽管该对象不为空。
我的问题是让自定义管道选择器运行,或者看看我的问题可以完全不同地解决,或者只是为了获得一些灵感:)
SO上的某个人似乎在这里解决了这个问题,但他的问题的答案对我没有帮助。
java - apache cxf MultiPart 请求没有 Content-Length 标头
我有以下代码来发送多部分/表单数据请求。
在我的 RestClient 类中,我使用以下代码行使用 JAX-RS 客户端对象发送 POST 请求
我使用 Wiremock 检查了 HTTP 请求正文,如下所示:
我想知道请求有效负载中如何缺少内容长度标头。有没有办法将内容长度标头设置为请求?
请帮我。
spring - cxf + spring boot中的日志管理
我有Spring boot server
,它的工作方式就像proxy
. 它是SOAP service
和SOAP client
。用户在我的服务器上调用肥皂服务,而我的服务器调用另一个肥皂服务。两种服务都使用一个WSDL
. 我的服务器实现了这一点WSDL
并充当客户端的服务器。我的服务器使用它WSDL
来请求另一台服务器并充当另一台服务器的客户端。
我需要管理 SOAP 日志,但我遇到了问题。例如,我可以添加到 logback 下一行:
但是通过这种方式,我可以管理传入和传出消息的日志。
因为我的服务和客户使用MessageExchangePortType
.
如何管理每个客户端/服务器日志?
这是客户端的实现:
这是服务器的实现:
并在配置中:
例如,我想REQ_IN
在客户端禁用日志并在服务器上启用,但如果我写:<logger name="org.apache.cxf.services.MessageExchangePortType.REQ_IN" level="ERROR" />
我将错误级别设置为客户端和服务器,因为MessageExchangePortType
使用客户端和服务器。
jersey - 泽西依赖树问题
以前我们为项目的不同组件使用 Jersey 1.17 和 org.apache.cxf 2.6.0 版本。现在我们的项目迁移到 Jersey 1.19.4 和 cxf 3.2.6 。我看到 jersey 1.19.4 持有 javax.ws.rs:jsr311-api:jar:1.1.1 而 cxf 3.2.6 持有 javax.ws.rs:javax.ws.rs-api:jar:2.1 。所有组件都编译成功,没有任何故障。但是在应用程序中,我们面临以下问题:-
2018 年 10 月 17 日上午 10:29:08 org.apache.catalina.core.StandardWrapperValve 调用严重:Servlet.service() for servlet [CA Service REST API] in context with path [/caservice] throw exception [Servlet execution throw an异常] 根本原因 java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder; 在 javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:120) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:669) 在 javax.servlet.http.HttpServlet .service(HttpServlet.java:742) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain。
升级后这是我的依赖树结构
cxf - cxf https 分块不起作用,我已经尝试通过配置并在 java 中显式
我正在尝试为我的 java web 应用程序关闭分块。我们使用 apache cxf 并且正在使用肥皂服务。
- 我更改了配置文件中的管道设置
- 手动设置
它们都不起作用,任何超过 4k 的请求我都看到了 transfer-encoding: chunked
另一个问题:cxf 中的 HTTPS 和 HTTP 是否有不同的设置?
cxf - 具有 NTLM 身份验证的 Maven cxf-codegen-plugin - 因 java.io.IOException 失败:服务器返回 HTTP 响应代码:URL 为 401
我正在尝试为cxf-codegen-plugin
通过 NTLM 保护的 SOAP Web 服务生成 Java 代码。我不确定如何在生成 java 代码时将用户名/密码/域信息传递给 maven 以连接到远程服务器。我可以使用浏览器使用我拥有的用户名/密码/域组合打开 wsdl。但是,我想知道如何通过命令行通过将一些额外的 vm args 传递给 - 来做到这一点mvn package
。或者我可以做任何其他插件配置来帮助我做到这一点?
java - 在 cxf-rt-frontend-jaxrs-3.3.0 中找不到 JAXRSClientFactory
我org.apache.cxf.jaxrs.client.JAXRSClientFactory
用来从一个正确注释的接口中创建一个 REST 客户端。
但是,我需要将cxf-rt-frontend-jaxrs
版本从2.7.18
to更新,3.3.0
因为我的代码中的其他地方WebApplicationException
被使用,并且开始引发版本的编译错误2.7.18
。
但是,在更新到3.3.0
最新版本之后,client
包本身已经从jaxrs
包中消失了。
谁能告诉我在哪里可以找到JAXRSClientFactory
新罐子里的东西。Meseems 它已被完全删除。
cxf - 没有斜杠的 CXF WSDL 命名空间
我用 Apache CXF 3.3.0 从 Java 类生成了一个 WSDL,我得到了这个:
我不明白为什么 tns 以“/”结尾,所以我检查了源 Apache CXF,我发现 JaxWsImplementorInfo 调用 PackageUtils ( https://github.com/apache/cxf/blob/master/core/src/main/ java/org/apache/cxf/common/util/PackageUtils.java ) 方法返回:
所以,我有一个结束斜线。
我想得到这个:
那怎么办?
非常感谢,