This is an automated email from the ASF dual-hosted git repository.
coheigea pushed a commit to branch 4.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/4.1.x-fixes by this push:
new 32a1ec23bf9 CXF-6737: Fix binding of void operations when simple
frontend client uses a WSDL (#3587)
32a1ec23bf9 is described below
commit 32a1ec23bf9358682aa3990ecb2fdf197ea2a512
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Fri Oct 16 07:51:24 2026 +0100
CXF-6737: Fix binding of void operations when simple frontend client uses a
WSDL (#3587)
(cherry picked from commit 6526e3787adcc15b0bc54b517d6a352019bca9e7)
---
.../apache/cxf/service/factory/RountripTest.java | 41 ++++++++++++++++++++++
.../factory/ReflectionServiceFactoryBean.java | 4 +--
2 files changed, 43 insertions(+), 2 deletions(-)
diff --git
a/rt/frontend/simple/src/test/java/org/apache/cxf/service/factory/RountripTest.java
b/rt/frontend/simple/src/test/java/org/apache/cxf/service/factory/RountripTest.java
index de77dd6f270..a65fc810065 100644
---
a/rt/frontend/simple/src/test/java/org/apache/cxf/service/factory/RountripTest.java
+++
b/rt/frontend/simple/src/test/java/org/apache/cxf/service/factory/RountripTest.java
@@ -18,13 +18,20 @@
*/
package org.apache.cxf.service.factory;
+import java.io.File;
+import java.io.Writer;
import java.net.URL;
+import java.nio.file.Files;
+import javax.wsdl.Definition;
import javax.xml.namespace.QName;
+import org.apache.cxf.endpoint.Server;
import org.apache.cxf.frontend.ClientFactoryBean;
import org.apache.cxf.frontend.ClientProxyFactoryBean;
import org.apache.cxf.frontend.ServerFactoryBean;
+import org.apache.cxf.wsdl.WSDLManager;
+import org.apache.cxf.wsdl11.ServiceWSDLBuilder;
import org.apache.hello_world_doc_lit.Greeter;
import org.apache.hello_world_doc_lit.GreeterImplDoc;
@@ -58,6 +65,40 @@ public class RountripTest extends AbstractSimpleFrontendTest
{
assertEquals("hello", client.echo("hello"));
}
+ @Test
+ public void testVoidMethodWithWsdl() throws Exception {
+ ServerFactoryBean svrBean = new ServerFactoryBean();
+ svrBean.setAddress("http://localhost/HelloWsdl");
+ svrBean.setTransportId("http://schemas.xmlsoap.org/soap/http");
+ svrBean.setServiceBean(new HelloServiceImpl());
+ svrBean.setServiceClass(HelloService.class);
+ svrBean.setBus(getBus());
+
+ Server server = svrBean.create();
+
+ Definition def = new ServiceWSDLBuilder(getBus(),
+ server.getEndpoint().getService().getServiceInfos()).build();
+ File wsdlFile = File.createTempFile("hello", ".wsdl");
+ wsdlFile.deleteOnExit();
+ try (Writer w = Files.newBufferedWriter(wsdlFile.toPath())) {
+
getBus().getExtension(WSDLManager.class).getWSDLFactory().newWSDLWriter().writeWSDL(def,
w);
+ }
+
+ ClientProxyFactoryBean proxyFactory = new ClientProxyFactoryBean();
+ ClientFactoryBean clientBean = proxyFactory.getClientFactoryBean();
+ clientBean.setAddress("http://localhost/HelloWsdl");
+ clientBean.setTransportId("http://schemas.xmlsoap.org/soap/http");
+ clientBean.setServiceClass(HelloService.class);
+ clientBean.setWsdlURL(wsdlFile.toURI().toString());
+ clientBean.setBus(getBus());
+
+ HelloService client = (HelloService) proxyFactory.create();
+
+ assertEquals("hello", client.sayHello());
+ assertEquals("hello", client.echo("hello"));
+ client.ping();
+ }
+
@Test
public void testOneWay() throws Exception {
ServerFactoryBean svrBean = new ServerFactoryBean();
diff --git
a/rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java
b/rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java
index 096f607829c..ef6b53a1136 100644
---
a/rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java
+++
b/rt/wsdl/src/main/java/org/apache/cxf/wsdl/service/factory/ReflectionServiceFactoryBean.java
@@ -864,8 +864,8 @@ public class ReflectionServiceFactoryBean extends
org.apache.cxf.service.factory
}
setIndexes(o.getInput());
sendEvent(Event.OPERATIONINFO_IN_MESSAGE_SET, origOp, method,
origOp.getInput());
- // Initialize return type
- if (o.hasOutput()
+ // Initialize return type (a void method has no return part to map)
+ if (o.hasOutput() && !void.class.equals(method.getReturnType())
&& !initializeParameter(o, method, -1, method.getReturnType(),
method.getGenericReturnType())) {
return false;
}