Apache CXF使用前端编程API(如JAX-WS和JAX-RS)帮助您构建和开发服务。这些服务可以使用各种协议,例如SOAP,XML / HTTP,RESTful HTTP或CORBA,并可以在各种传输上工作,例如HTTP,JMS或JBI。
如何在http header Content-Type中添加空格,如:text/xml;字符集=utf-8
我使用apache cxf开发了一个soap web服务。 并且所有soap响应标头都返回Content-Type:text/xml;charset=utf-8。 但客户(另一家公司)只接受 Content-Type: 'text...
我正在创建一个传递可能返回 301 重定向的 URL 的服务。如何指示 CXF 在创建服务时遵循重定向? 已经尝试将 HTTPClientPolicy 设置为扩展...
我有以下cxf配置文件 我有以下cxf配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:cxf="http://cxf.apache.org/core" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> <context:component-scan base-package="test.stub.rest" /> <!-- Enable CXF logging --> <cxf:bus> <cxf:features> <cxf:logging/> </cxf:features> </cxf:bus> <!-- CXF Services --> <jaxrs:server id="test" address="/stub/postUrl"> <jaxrs:serviceBeans> <ref bean="testClass" /> </jaxrs:serviceBeans> </jaxrs:server> <bean id="testClass" class="test.stub.rest.TestClass"> </bean> </beans> web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Stubby CXF</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring/stub-cxf-applicationContext.xml </param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <display-name>CXF Servlet</display-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app> 服务等级 @Path("/test") public class TestService { protected final Logger log = LoggerFactory.getLogger(TestService.class); @Path("/hello") @Produces("text/html") public String hello(@RequestBody String payload) { return "OK"; } } 现在,每当我调用此服务时,它都会转到 hello 方法,并且从该方法返回字符串“OK”后,它会给出以下错误 13:11:35.142 [http-bio-8080-exec-3] WARN o.a.cxf.jaxrs.utils.ResourceUtils - No resource methods have been found for resource class java.lang.String 13:11:35.142 [http-bio-8080-exec-3] ERROR org.apache.cxf.jaxrs.JAXRSInvoker - No subresource locator found for path / 13:11:35.142 [http-bio-8080-exec-3] WARN o.a.c.j.i.WebApplicationExceptionMapper - javax.ws.rs.NotFoundException at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:245) at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:102) at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:94) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222) at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153) at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:205) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) 13:11:35.142 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.interceptor.OutgoingChainInterceptor@57fc218b 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by bus: [org.apache.cxf.ws.policy.PolicyOutInterceptor@687bb597, org.apache.cxf.interceptor.LoggingOutInterceptor@11cf0218] 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by service: [] 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by endpoint: [org.apache.cxf.interceptor.MessageSenderInterceptor@6cc21725] 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.i.OutgoingChainInterceptor - Interceptors contributed by binding: [org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor@3a7db5eb] 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Chain org.apache.cxf.phase.PhaseInterceptorChain@59741d5f was created. Current flow: setup [PolicyOutInterceptor] prepare-send [MessageSenderInterceptor] pre-stream [LoggingOutInterceptor] marshal [JAXRSOutInterceptor] 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.ws.policy.PolicyOutInterceptor@687bb597 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.c.ws.policy.PolicyOutInterceptor - No binding operation info. 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.interceptor.MessageSenderInterceptor@6cc21725 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Adding interceptor org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor@275146fe to phase prepare-send-ending 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Chain org.apache.cxf.phase.PhaseInterceptorChain@59741d5f was modified. Current flow: setup [PolicyOutInterceptor] prepare-send [MessageSenderInterceptor] pre-stream [LoggingOutInterceptor] marshal [JAXRSOutInterceptor] prepare-send-ending [MessageSenderEndingInterceptor] 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.interceptor.LoggingOutInterceptor@11cf0218 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor@3a7db5eb 13:11:35.143 [http-bio-8080-exec-3] DEBUG o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on interceptor org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor@275146fe 13:11:35.144 [http-bio-8080-exec-3] INFO o.a.c.i.LoggingOutInterceptor - Outbound Message --------------------------- ID: 2 Response-Code: 404 Content-Type: Headers: {Date=[Fri, 27 Nov 2015 07:41:35 GMT], Content-Length=[0]} -------------------------------------- 13:11:35.144 [http-bio-8080-exec-3] DEBUG o.a.c.t.servlet.ServletController - Finished servicing http request on thread: Thread[http-bio-8080-exec-3,5,main] 我做错了什么吗?我正在使用 apache-cxf、spring、jas-rs。如果其他地方已经回答了这个问题,请告诉我。 您需要一个 HTTP 方法,例如 @GET: @GET @Path("/hello") @Produces("text/html") public String hello(@RequestBody String payload) { return "OK"; } 导入 javax.ws.rs.GET; 替换为 导入 jakarta.ws.rs.GET; 需要重新编程 https://docs.openrewrite.org/recipes/java/migrate/jakarta/jacksonjavaxtojakarta
我尝试将 SOAP API 与 Apache CXF 一起使用,但该 API 需要 SSL 客户端证书。我看到您可以使用一些 XML-Config,但我想以编程方式执行此操作。设置...
我正在尝试将 JAX-RS 应用程序从 Jersey 迁移到 Apache CXF。我没有使用 Spring,因此我尝试通过扩展 javax.ws.rs.core.Application 来配置它。 我也实施了 公共课...
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相关...
消除 CXF 生成的代码中对 javax.xml.bind.JAXBElement 的冗余转换<java.lang.Boolean>警告
我使用 CXF 从 WSDL 文件生成一些代码。当使用 -Xlint 标志编译版本“1.6.0_16”的代码时,我收到以下警告: 警告:[强制转换] 冗余强制转换为 javax.xml.bind。
发送请求时如何强制 JAXB 写入 javax.jws.WebParam 的 xsi:type(CXF 实现)
我在wsdl上使用wsdl2java生成了类,服务接口如下所示 @WebService(targetNamespace = "http://www.sii.example.it/SWG1", name = "SWG1") @XmlSeeAlso({it.au.switchgas....
我们正在从 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()
org.apache.cxf.binding.soap.SoapFault:证书路径验证期间出错:路径不与任何信任锚链接
我正在创建一个 Web 服务客户端来连接到服务。我按照以下步骤使用证书身份验证创建并连接到服务 从
我已经使用 wsdl2java 从 wsdl 文件创建了 Java 类。 在客户端,我将通过这种方式创建端口(我可以在其中调用 Web 服务) // 创建服务类 我的服务服务
如何避免与 Apache Camel 和 CXF 一起使用的 RedHat Fuse 适配器中的交换超时?
我正在使用 Apache Camel 和 CXF 在 Java DSL 中使用 RedHat Fuse 适配器。我正在尝试处理相对较大的传入 SOAP 消息,但遇到了超时问题。然后发件人
OSGI:Karaf JAX-RS 的 CXF 异常:未找到资源的资源方法
我在使用 OSGI 和 Karaf 创建简单的 CXF Web 服务时遇到异常。 非常感谢任何修复意见/建议。 这是我的项目和步骤的描述
将 org.apache.cxf.jaxrs.swagger.Swagger2Feature 升级到用户 jakarta
我正在将旧的java服务升级到java 17,我注意到它在版本3.6.4中使用org.apache.cxf.jaxrs.swagger.Swagger2Feature。问题是 Swagger2Feature 类使用...
从 org.apache.cxf.jaxrs.swagger 迁移 -> org.apache.cxf.jaxrs.openapi
Spring Boot 升级到版本 3 后,我尝试从 Swagger 迁移到 OpenAPI。 项目依赖于 Apache CXF。 如何重写 swagger 配置? 这是在 OpenApi 之前: @配置 公共...
在 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
我的 Web 服务的使用者,通过 ping 端点来验证其证书: https://my.webservice.com/services/myService 但他们无法这样做,因为他们收到 500 http 错误代码生成...
CXF 的 WS-security(用户名令牌) - 可以加密密码吗?
我正在尝试与 CXF 的 WS 安全实现(用户名令牌)结合在一起。我已经按照 http://cxf.apache.org/docs/ws-security.html 中所述完成了所有操作。我的PasswordCallbackHandler似乎是
我正在使用maven,但我不明白以下依赖项之间的区别: 1.) http://mvnrepository.com/artifact/org.apache.cxf/cxf-bundle/3.0.0-milestone2 2.) http://mvnrepository.com/
为什么 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 属性。