This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch coheigea/CXF-6737
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 4075f018e3bc63f167f3b340bba40376df86b618
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Thu Oct 15 16:12:03 2026 +0100

    CXF-6737: Fix binding of void operations when simple frontend client uses a 
WSDL
---
 .../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;
         }

Reply via email to