Aggregated Quarkus CXF release notes 3.20.2 LTS → 3.27.1 LTS

This document may help when upgrading from the 3.20 LTS stream to 3.27 LTS stream.

Important dependency upgrades

New and noteworthy in Quarkus CXF

#1778 Introduce quarkus.cxf.client.worker-dispatch-timeout

Before Quarkus CXF 3.22.0, when a SOAP client application using asynchronous clients was under high load, it might have taken every long time till there was a worker thread available for executing the client call.

In such situations, it was hard to figure out, what was the root cause of those hanging clients.

In Quarkus CXF 3.22.0, we introduced the quarkus.cxf.client.worker-dispatch-timeout configuration parameter, that limits the time SOAP clients can wait for a free executor thread. In case the timeout is surpassed, an exception is thrown informing about the problem:

Unable to dispatch SOAP client call within 30000 ms on a worker thread due to worker thread pool exhaustion.
You may want to adjust one or more of the following configuration options:
quarkus.thread-pool.core-threads, quarkus.thread-pool.max-threads, quarkus.cxf.client.worker-dispatch-timeout

#1553 Support XJC plugins from org.jvnet.jaxb:jaxb-plugins

XJC Plugins are one of the ways how the Java files produced by wsdl2java can be customized.

Before Quarkus CXF 3.23.0, only XJC Plugins from org.apache.cxf.xjcplugins:cxf-xjc-* were supported via io.quarkiverse.cxf:quarkus-cxf-xjc-plugins.

Since Quarkus CXF 3.23.0, also CXF Plugins org.jvnet.jaxb:jaxb-plugins can be used via io.quarkiverse.cxf:quarkus-cxf-jaxb-plugins extension.

Check the wsdl2java guide for more details.

Fixed issues

#1891 Implementations of javax.wsdl.extensions.ExtensibilityElement need to get registered for reflection

Before Quarkus CXF 3.26.1, if the WSDL of a client contained elements from the http://schemas.xmlsoap.org/wsdl/http/ namespace, like in the following example

<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns="http://test.deployment.cxf.quarkiverse.io/"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
    name="ExtensorsService"
    targetNamespace="http://test.deployment.cxf.quarkiverse.io/"
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" >
...
  <wsdl:portType name="ExtensorsServiceGet" />
  <wsdl:binding name="ExtensorsServiceGet" type="tns:ExtensorsServiceGet">
    <http:binding verb="GET" />
  </wsdl:binding>
  <wsdl:service name="ExtensorsService">
    <wsdl:port binding="tns:ExtensorsServiceGet" name="ExtensorsServiceGet" >
      <http:address location="http://localhost:8081/soap/ExtensorsServiceGet" />
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>

then the application would fail during boot in native mode with an error message similar to the following:

ERROR [io.qua.run.Application] (main) Failed to start application: java.lang.RuntimeException: Failed to start quarkus
        at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
        ...
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: SERVICE_CREATION_MSG
        at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:87)
        ...
Caused by: javax.wsdl.WSDLException: WSDLException (at /wsdl:definitions/wsdl:binding[2]/http:binding): faultCode=CONFIGURATION_ERROR: Problem instantiating Java extensionType 'com.ibm.wsdl.extensions.http.HTTPBindingImpl'.: java.lang.InstantiationException: com.ibm.wsdl.extensions.http.HTTPBindingImpl
        at javax.wsdl.extensions.ExtensionRegistry.createExtension(ExtensionRegistry.java:383)
        ...
Caused by: java.lang.InstantiationException: com.ibm.wsdl.extensions.http.HTTPBindingImpl
        at java.base@21.0.8/java.lang.Class.newInstance(DynamicHub.java:719)
        ...
Caused by: java.lang.NoSuchMethodException: com.ibm.wsdl.extensions.http.HTTPBindingImpl.<init>()
        at java.base@21.0.8/java.lang.Class.checkMethod(DynamicHub.java:1078)
        at java.base@21.0.8/java.lang.Class.getConstructor0(DynamicHub.java:1241)
        at java.base@21.0.8/java.lang.Class.newInstance(DynamicHub.java:706)
        ... 28 more

Since Quarkus CXF 3.26.1, no classes related to the http://schemas.xmlsoap.org/wsdl/http/ namespace need to be registered for reflection by end users.

Special thanks to Lazaro Miguel Coronado Torres for reporting this issue.

Deprecations and removals

Remove HttpClientHTTPConduitFactory value of *.http-conduit-factory

The HttpClientHTTPConduitFactory value of quarkus.cxf.http-conduit-factory and quarkus.cxf.client."client-name".http-conduit-factory was deprecated since Quarkus CXF 3.18.0 , because it never gained any real traction within Quarkus CXF.

HttpClientHTTPConduitFactory was removed from Quarkus CXF 3.22.0.

Use the default VertxHttpClientHTTPConduit instead.

Both the removal of HttpClientHTTPConduitFactory and quarkus-cxf-rt-transports-http-hc5 (see the next section) are a part of our efforts to support only a single HTTP Conduit based on Vert.x HttpClient in the future. For now, the URLConnectionHTTPConduitFactory stays fully supported, although it is not used by default since Quarkus CXF 3.16.0.

Remove quarkus-cxf-rt-transports-http-hc5 extension

io.quarkiverse.cxf:quarkus-cxf-rt-transports-http-hc5 has been deprecated since Quarkus CXF 3.19.0 and was removed in 3.22.0.

Use the asynchronous mode of VertxHttpClientHTTPConduit instead. All asynchronous client functionality is now supported by the io.quarkiverse.cxf:quarkus-cxf extension. You do not need any additional extension for that.

Documentation improvements