cxf 相关问题

Apache CXF使用前端编程API(如JAX-WS和JAX-RS)帮助您构建和开发服务。这些服务可以使用各种协议,例如SOAP,XML / HTTP,RESTful HTTP或CORBA,并可以在各种传输上工作,例如HTTP,JMS或JBI。

@Apache CXF 中允许的角色

我正在尝试将 JAX-RS 应用程序从 Jersey 迁移到 Apache CXF。我没有使用 Spring,因此我尝试通过扩展 javax.ws.rs.core.Application 来配置它。 我也实施了 公共课...

回答 1 投票 0

JAXP09020005:“setRewritePrefix”的指定参数“classpath:/schemas/wsdl”(区分大小写)无效

我们在项目中使用 jakarta.xml.ws.Provider 类(lib 版本:4.0.2)。 该类选择com.sun.xml.ws.spi.ProviderImpl类作为provider,与com.sun.xml:jaxws-rt libra相关...

回答 1 投票 0

消除 CXF 生成的代码中对 javax.xml.bind.JAXBElement 的冗余转换<java.lang.Boolean>警告

我使用 CXF 从 WSDL 文件生成一些代码。当使用 -Xlint 标志编译版本“1.6.0_16”的代码时,我收到以下警告: 警告:[强制转换] 冗余强制转换为 javax.xml.bind。

回答 2 投票 0

发送请求时如何强制 JAXB 写入 javax.jws.WebParam 的 xsi:type(CXF 实现)

我在wsdl上使用wsdl2java生成了类,服务接口如下所示 @WebService(targetNamespace = "http://www.sii.example.it/SWG1", name = "SWG1") @XmlSeeAlso({it.au.switchgas....

回答 2 投票 0

修改 CXF Soap 响应以具有不同的前缀并删除命名空间

我们正在从 Axis-2 迁移到 CXF,并尝试获得类似的响应。 Axis-2 对肥皂请求的响应 我们正在从 Axis-2 迁移到 CXF,并尝试获得类似的响应。 Axis-2 对肥皂请求的响应 <?xml version="1.0" ?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <loginResponse xmlns="urn:TestWebAPI"> <loginReturn xmlns="">9876</loginReturn> </loginResponse> </soapenv:Body> </soapenv:Envelope> 迁移后CXF响应: <?xml version="1.0" ?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns1:loginResponse xmlns:ns1="urn:TestWebAPI"> <loginReturn xmlns:ns2="urn:TestWebAPI">9876</loginReturn> </ns1:loginResponse> </soap:Body> </soap:Envelope> 如何使 CXF 响应类似于 Axis-2 响应? 修改 SOAP 前缀 CXF 提供了一个属性 “soap.env.ns.map” 来修改soap响应的前缀。 import org.apache.cxf.binding.soap.Soap11; import org.apache.cxf.binding.soap.SoapMessage; import org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; import java.util.HashMap; import java.util.Map; public class SoapResponsePrefixInterceptor extends AbstractPhaseInterceptor<SoapMessage> { private String soapEnvelopePrefix; public SoapResponsePrefixInterceptor(String soapPrefix) { super(Phase.PREPARE_SEND); soapEnvelopePrefix = soapPrefix; } @Override public void handleMessage(SoapMessage message) { Map<String, String> envelopeNSMap = new HashMap<>(); envelopeNSMap.put(soapEnvelopePrefix, Soap11.SOAP_NAMESPACE); // "http://schemas.xmlsoap.org/soap/envelope/" message.put("soap.env.ns.map", envelopeNSMap); message.put(AbstractOutDatabindingInterceptor.DISABLE_OUTPUTSTREAM_OPTIMIZATION, Boolean.TRUE); } } 包含此类作为out拦截器,以修改soap前缀。 SoapResponsePrefixInterceptor responsePrefixInterceptor = new SoapResponsePrefixInterceptor("soapenv"); factoryBean.getOutInterceptors().add(responsePrefixInterceptor); factoryBean.getOutFaultInterceptors().add(responsePrefixInterceptor); 其逻辑实现于 SoapOutInterceptor.writeSoapEnvelopeStart()。 hasAdditionalEnvNs() 检查应用程序是否配置了任何自定义信封名称 空格并替换为配置的值。 修改或删除命名空间 CXF提供了变压器功能,可以帮助我们修改命名空间。 private Feature getTransformer() { StaxTransformFeature staxFeature = new StaxTransformFeature(); Map<String, String> replaceElements = new HashMap<>(); // value between braces is used as namespace, followed by localName. replaceElements.put('{' + DEFAULT_NAMESPACE + "}*", ""); staxFeature.setOutTransformElements(replaceElements); staxFeature.setOutDefaultNamespace(DEFAULT_NAMESPACE); return staxFeature; } 将此变压器作为一项功能添加到工厂 bean 中。 fb.setFeatures(List.of(getTransformer())); TransformOutInterceptor.createTransformWriterIfNeeded() - 如果设置了任何值,则创建变压器。 RPCOutInterceptor.addOperationNode() > StaxUtils.writeStartElement() > OutTransformWriter.writeStartElement() > OutTransformWriter.write() - 根据转换器修改响应。 同样的逻辑存在于 OutTransformWriter() > TransformUtils.convertToQNamesMap() > DOMUtils.convertStringToQName()

回答 1 投票 0

org.apache.cxf.binding.soap.SoapFault:证书路径验证期间出错:路径不与任何信任锚链接

我正在创建一个 Web 服务客户端来连接到服务。我按照以下步骤使用证书身份验证创建并连接到服务 从

回答 1 投票 0

创建 Web 服务端口后向 CXF 客户端添加功能

我已经使用 wsdl2java 从 wsdl 文件创建了 Java 类。 在客户端,我将通过这种方式创建端口(我可以在其中调用 Web 服务) // 创建服务类 我的服务服务

cxf
回答 1 投票 0

如何避免与 Apache Camel 和 CXF 一起使用的 RedHat Fuse 适配器中的交换超时?

我正在使用 Apache Camel 和 CXF 在 Java DSL 中使用 RedHat Fuse 适配器。我正在尝试处理相对较大的传入 SOAP 消息,但遇到了超时问题。然后发件人

回答 1 投票 0

OSGI:Karaf JAX-RS 的 CXF 异常:未找到资源的资源方法

我在使用 OSGI 和 Karaf 创建简单的 CXF Web 服务时遇到异常。 非常感谢任何修复意见/建议。 这是我的项目和步骤的描述

回答 3 投票 0

将 org.apache.cxf.jaxrs.swagger.Swagger2Feature 升级到用户 jakarta

我正在将旧的java服务升级到java 17,我注意到它在版本3.6.4中使用org.apache.cxf.jaxrs.swagger.Swagger2Feature。问题是 Swagger2Feature 类使用...

回答 1 投票 0

从 org.apache.cxf.jaxrs.swagger 迁移 -> org.apache.cxf.jaxrs.openapi

Spring Boot 升级到版本 3 后,我尝试从 Swagger 迁移到 OpenAPI。 项目依赖于 Apache CXF。 如何重写 swagger 配置? 这是在 OpenApi 之前: @配置 公共...

回答 1 投票 0

在 Quarkus 中返回 XML 响应时“两个类具有相同的 XML 类型名称”

Quarkus 版本 - 3.2.0.Final XCF 版本 - 2.2.2(也尝试过 5.2.0) 返回 XML 响应的 Quarkus REST 资源示例: @得到 @Produces(MediaType.APPLICATION_XML) 公开我的回复 Quarkus 版本 - 3.2.0.Final XCF 版本 - 2.2.2(也尝试过 5.2.0) 返回 XML 响应的 Quarkus REST 资源示例: @GET @Produces(MediaType.APPLICATION_XML) public MyResponse<MyEntity> serviceThatReturnsXml() { // return MyResponse instance } MyResponse 类: @Data @NoArgsConstructor @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "TagName") public class MyResponse<T> { @XmlElement(name = "ChildTagName") private List<T> items; } 调用REST资源时出错: Two classes have the same XML type name "{http://www.w3.org/2005/08/addressing}EndpointReferenceType". Use @XmlType.name and @XmlType.namespace to assign different names to them. this problem is related to the following location: at jakarta.xml.ws.wsaddressing.W3CEndpointReference this problem is related to the following location: at org.apache.cxf.ws.addressing.EndpointReferenceType at public org.apache.cxf.ws.addressing.EndpointReferenceType org.apache.cxf.ws.addressing.ObjectFactory.createEndpointReferenceType() at org.apache.cxf.ws.addressing.ObjectFactory at protected java.util.List org.apache.cxf.ws.addressing.MetadataType.any at org.apache.cxf.ws.addressing.MetadataType at io.quarkus.jaxb.runtime.JaxbContextProducer.createJAXBContext(JaxbContextProducer.java:82) at io.quarkus.jaxb.runtime.JaxbContextProducer_ClientProxy.createJAXBContext(Unknown Source) at io.quarkus.resteasy.reactive.jaxb.runtime.JAXBContextContextResolver.getContext(JAXBContextContextResolver.java:27) at io.quarkus.resteasy.reactive.jaxb.runtime.JAXBContextContextResolver.getContext(JAXBContextContextResolver.java:13) at io.quarkus.resteasy.reactive.jaxb.runtime.serialisers.ServerJaxbMessageBodyWriter.getMarshall(ServerJaxbMessageBodyWriter.java:82) at io.quarkus.resteasy.reactive.jaxb.runtime.serialisers.ServerJaxbMessageBodyWriter.marshal(ServerJaxbMessageBodyWriter.java:69) at io.quarkus.resteasy.reactive.jaxb.runtime.serialisers.ServerJaxbMessageBodyWriter.writeResponse(ServerJaxbMessageBodyWriter.java:51) at org.jboss.resteasy.reactive.server.core.ServerSerialisers.invokeWriter(ServerSerialisers.java:227) at org.jboss.resteasy.reactive.server.core.ServerSerialisers.invokeWriter(ServerSerialisers.java:195) at org.jboss.resteasy.reactive.server.core.serialization.FixedEntityWriter.write(FixedEntityWriter.java:28) at org.jboss.resteasy.reactive.server.handlers.ResponseWriterHandler.handle(ResponseWriterHandler.java:34) at io.quarkus.resteasy.reactive.server.runtime.QuarkusResteasyReactiveRequestContext.invokeHandler(QuarkusResteasyReactiveRequestContext.java:147) at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:145) at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:576) at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538) at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29) at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:833) pom.xml 依赖项 <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-reactive-jaxb</artifactId> </dependency> <dependency> <groupId>jakarta.xml.ws</groupId> <artifactId>jakarta.xml.ws-api</artifactId> </dependency> <dependency> <groupId>jakarta.jws</groupId> <artifactId>jakarta.jws-api</artifactId> </dependency> <dependency> <groupId>io.quarkiverse.cxf</groupId> <artifactId>quarkus-cxf</artifactId> </dependency> 在application.yaml中尝试了以下内容,但没有效果。 quarkus: jaxb: exclude-classes: org.apache.cxf.ws.addressing.EndpointReferenceType validate-jaxb-context: false 试图排除第二个 quarkus: jaxb: exclude-classes: jakarta.xml.ws.wsaddressing.W3CEndpointReference validate-jaxb-context: false 现在返回了响应,但主标签包含许多未使用的 xmlns 属性: <TagName xmlns:ns2="http://java.sun.com/xml/ns/javaee" xmlns:ns3="http://api.nef.co.adapter.model.esb.p4.org" xmlns:ns4="http://www.w3.org/2006/07/ws-policy" xmlns:ns5="http://www.w3.org/2006/05/addressing/wsdl" xmlns:ns6="http://cxf.apache.org/configuration/security" xmlns:ns7="https://jakarta.ee/xml/ns/jakartaee" xmlns:ns8="http://schemas.xmlsoap.org/ws/2004/03/addressing" xmlns:ns9="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:ns10="http://www.w3.org/2005/08/addressing" xmlns:ns11="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:ns12="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:ns13="http://schemas.xmlsoap.org/wsdl/http/" xmlns:ns14="http://base.api.nef.co.adapter.model.esb.p4.org" xmlns:ns15="http://esb.p4.org" xmlns:ns16="http://cxf.apache.org/transports/http/configuration" xmlns:ns17="http://cxf.apache.org/bindings/xformat"/> CXF 扩展无法删除,因为它已在另一段代码中使用。 如何解决依赖冲突来摆脱这个错误? 在我将两个类写在一个排除类中之后,它对我有用 我的 application.yaml 中的行: quarkus: jaxb: exclude-classes: org.apache.cxf.ws.addressing.EndpointReferenceType,jakarta.xml.ws.wsaddressing.W3CEndpointReference

回答 1 投票 0

如何解决:无需绑定操作的调用

我的 Web 服务的使用者,通过 ping 端点来验证其证书: https://my.webservice.com/services/myService 但他们无法这样做,因为他们收到 500 http 错误代码生成...

回答 1 投票 0

CXF 的 WS-security(用户名令牌) - 可以加密密码吗?

我正在尝试与 CXF 的 WS 安全实现(用户名令牌)结合在一起。我已经按照 http://cxf.apache.org/docs/ws-security.html 中所述完成了所有操作。我的PasswordCallbackHandler似乎是

回答 3 投票 0

CXF 捆绑包:有什么区别?

我正在使用maven,但我不明白以下依赖项之间的区别: 1.) http://mvnrepository.com/artifact/org.apache.cxf/cxf-bundle/3.0.0-milestone2 2.) http://mvnrepository.com/

回答 2 投票 0

为什么 Apache CXF 不尊重 'nil="true"'

我使用 Apache CXF 3.0.2 作为客户端和服务器。服务器上有一个相当简单的 Web 服务,它接受各种参数,其中之一是字符串数组: 我使用 Apache CXF 3.0.2 作为客户端和服务器。服务器上有一个相当简单的 Web 服务,它接受各种参数,其中之一是字符串数组: <xs:complexType name="getThing"> <xs:sequence> <xs:element minOccurs="0" name="connection" type="tns:connectionID"/> <xs:element maxOccurs="unbounded" minOccurs="0" name="types" type="xs:string"/> </xs:sequence> </xs:complexType> 当客户端调用它时,它可能希望为“类型”传递一个空值,这就是我遇到问题的地方。来自客户端的 SOAP 消息如下所示: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <ns2:getThing xmlns:ns2="http://serverl.url/"> <connection>Connection details....</connection> <types xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/> </ns2:getThing> </soap:Body> </soap:Envelope> 我认为这是正确的,但是服务器上的 CXF 将其转换为具有单个空字符串值的数组; 不是包含空值的数组。这会导致服务器代码出现各种问题。 服务端实现的接口是这样的? ThingResult getThing(@WebParam(name = "connection") ConnectionID connection, @WebParam(name = "types") String[] types) { code } 如果 'nil="true"' 无效,那么为什么 CXF 会生成它? 空数组可以正常工作(客户端省略消息中的元素,服务器将其解释为空),但包含空值的数组则不行。为什么 CXF 会出现这种情况?如何配置它以便服务器将 SOAP 消息正确反序列化回客户端发送的内容? 我到处寻找答案,并且相当确定我错过了一些非常明显的东西! 编辑:添加代码示例 该模式没有 types 元素的 nillable="true" 属性。 因此,xsi:nil="true" 不是该元素的有效值。 我找不到使 CXF 表现良好的方法(无论是在 WSDL 生成中还是在生成的 WSDL 的客户端方面)。 相反,我必须修改服务器代码以将空值和空字符串视为等效。 一些不需要的黑客攻击,但似乎有效。 steve666 在 Apache Mail Archives 中显示了一种解决方法,其中 SAAJOutInterceptor 用于允许自定义拦截器(即另一个 AbstractSoapInterceptor)根据 的存在来遍历所有元素并删除 nil 元素。 xsi:nil 属性。

回答 3 投票 0

Apache CXF 在应该使用 HTTPS 时恢复为 HTTP

我正在尝试编写一个 SOAP 客户端来连接到需要具有 WS 安全性的 HTTPS 的 PeopleSoft Web 服务。 我正在为客户端使用 Apache CXF。 这是我所做的: 1)添加服务器

回答 2 投票 0

CXF 用户名令牌问题

我正在尝试将 UsernameToken wss 标头添加到我的 ws 客户端。 客户端实现 javax.xml.ws.Service 并已通过 WSDL2Java CFX 3.1.4 生成 由于 wsdl 包含 我正在尝试将 UsernameToken wss 标头添加到我的 ws 客户端。 客户端实现了 javax.xml.ws.Service 并已通过 WSDL2Java CFX 3.1.4 生成 由于 wsdl 包含 <wsp:Policy xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:sp="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy" wsu:Id="UsernameTokenPolicy"> <sp:UsernameToken> <wsp:Policy> <sp:WssUsernameToken10/> <sp:HashPassword/> </wsp:Policy> </sp:UsernameToken> </wsp:Policy> 必须添加 Usernametoken 标头。搜索了一下,我发现这很简单 ((BindingProvider)soapClient).getRequestContext().put("ws-security.username", usr); ((BindingProvider)soapClient).getRequestContext().put("ws-security.password", psw); 顺便说一下,当我尝试执行呼叫时,出现以下错误: These policy alternatives can not be satisfied: {http://schemas.xmlsoap.org/ws/2005/07/securitypolicy}UsernameToken: Password hashing policy not enforced 有什么建议吗? 谢谢你。 附注我已经在堆栈溢出中检查过类似的帖子,但是如果我尝试像here建议的那样采用不同的方法,我会得到一个不同的错误: Interceptor for XXXX has thrown exception, unwinding now org.apache.cxf.ws.policy.PolicyException: No username available 如cxf-文档所述 从 Apache CXF 3.1.0 开始,WS-SecurityPolicy 和 XML 安全性 CXF 中的 (JAX-RS) 组件共享一组通用的配置标签。 所以你不应该使用ws-security.username和ws-security.password,而应该使用security.username和security.password 还要确保 cxf-rt-ws-policy 和 cxf-rt-ws-security 模块在类路径上可用,以便 ws-policy 将自动启用,从而负责对密码进行哈希处理,即计算正确的密码摘要。

回答 1 投票 0

cxf 服务的自定义拦截器以允许 spring security 身份验证

我在我的应用程序中使用 Spring Security 进行身份验证,现在我正在使用 cxf 公开 Web 服务,并且我想使用 Spring Security 来验证当前的 Web 服务调用。但我需要加入...

回答 1 投票 0

使用soapUI测试WS安全性 - 在消息负载中使用安全标头

我是 Web 服务和 WS Security 的新手。 我有一个使用 CFX 拦截器的示例 Web 服务。以下是我的配置文件。 Cfx-servelet.xml: ...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.