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

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


The following commit(s) were added to refs/heads/3.6.x-fixes by this push:
     new 05261b6a665 wadl2java: escape WADL documentation in generated javadoc. 
(#3513)
05261b6a665 is described below

commit 05261b6a665a3ee8667d5447037b549ba40844bb
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Mon Sep 28 16:19:57 2026 +0100

    wadl2java: escape WADL documentation in generated javadoc. (#3513)
    
    (cherry picked from commit d85e32f5791e46e3aca022998d6d9d3e00d35b1e)
---
 .../cxf/tools/common/model/JavaInterface.java      |  8 +++----
 .../cxf/tools/wadlto/jaxrs/SourceGenerator.java    |  3 ++-
 .../cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java | 27 ++++++++++++++++++++++
 .../src/test/resources/wadl/javaDocEscape.xml      | 21 +++++++++++++++++
 4 files changed, 54 insertions(+), 5 deletions(-)

diff --git 
a/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java
 
b/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java
index 68e02b4b64d..088302a6a7f 100644
--- 
a/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java
+++ 
b/tools/common/src/main/java/org/apache/cxf/tools/common/model/JavaInterface.java
@@ -98,12 +98,12 @@ public class JavaInterface implements JavaAnnotatable {
     }
 
     /**
-     * Make sure documentation text taken from a WSDL cannot terminate the
-     * enclosing comment block. Unicode escapes are neutralized as well since
+     * Make sure documentation text taken from a WSDL or WADL cannot terminate
+     * the enclosing comment block. Unicode escapes are neutralized as well 
since
      * the compiler translates them before lexing.
      */
-    static String escapeJavaDocContent(String s) {
-        if (s.indexOf("\\u") == -1 && s.indexOf("*/") == -1) {
+    public static String escapeJavaDocContent(String s) {
+        if (s == null || s.indexOf("\\u") == -1 && s.indexOf("*/") == -1) {
             return s;
         }
         return s.replace("\\u", "&#92;u").replace("*/", "*&#47;");
diff --git 
a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
 
b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
index 3a63044515e..e8c4fad60e6 100644
--- 
a/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
+++ 
b/tools/wadlto/jaxrs/src/main/java/org/apache/cxf/tools/wadlto/jaxrs/SourceGenerator.java
@@ -103,6 +103,7 @@ import org.apache.cxf.jaxrs.utils.ResourceUtils;
 import org.apache.cxf.jaxrs.utils.schemas.SchemaHandler;
 import org.apache.cxf.service.model.SchemaInfo;
 import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.cxf.tools.common.model.JavaInterface;
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.constants.Constants;
 
@@ -873,7 +874,7 @@ public class SourceGenerator {
     private String getDocText(Element el) {
         Element doc = DOMUtils.getFirstChildWithName(el, getWadlNamespace(), 
"doc");
         if (doc != null) {
-            return DOMUtils.getContent(doc);
+            return 
JavaInterface.escapeJavaDocContent(DOMUtils.getContent(doc));
         }
         return null;
     }
diff --git 
a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
 
b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
index e19cf0efcee..9e6a07f3258 100644
--- 
a/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
+++ 
b/tools/wadlto/jaxrs/src/test/java/org/apache/cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java
@@ -25,6 +25,7 @@ import java.lang.reflect.Method;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.List;
@@ -199,6 +200,32 @@ public class JAXRSContainerTest extends ProcessorTestBase {
         }
     }
 
+    @Test
+    public void testJavaDocsAreEscaped() throws Exception {
+        JAXRSContainer container = new JAXRSContainer(null);
+
+        ToolContext context = new ToolContext();
+        context.put(WadlToolConstants.CFG_OUTPUTDIR, 
output.getCanonicalPath());
+        context.put(WadlToolConstants.CFG_WADLURL, 
getLocation("/wadl/javaDocEscape.xml"));
+        context.put(WadlToolConstants.CFG_COMPILE, Boolean.TRUE);
+        context.put(WadlToolConstants.CFG_CREATE_JAVA_DOCS, Boolean.TRUE);
+        container.setContext(context);
+        container.execute();
+
+        List<File> javaFiles = FileUtils.getFilesRecurseUsingSuffix(output, 
".java");
+        assertEquals(1, javaFiles.size());
+        String source = new 
String(Files.readAllBytes(javaFiles.get(0).toPath()), StandardCharsets.UTF_8);
+        assertTrue(source.contains("Resource *&#47; int CLASS_DOC"));
+        assertFalse(source.contains("\\u002f"));
+
+        ClassCollector cc = context.get(ClassCollector.class);
+        assertEquals(1, cc.getServiceClassNames().size());
+        try (URLClassLoader loader = new URLClassLoader(new 
URL[]{output.toURI().toURL()})) {
+            final Class<?> generatedClass = 
loader.loadClass(cc.getServiceClassNames().values().iterator().next());
+            assertEquals(0, generatedClass.getDeclaredFields().length);
+        }
+    }
+
     @Test
     public void testCodeGenInterfacesMultipleInXmlReps() throws Exception {
         JAXRSContainer container = new JAXRSContainer(null);
diff --git a/tools/wadlto/jaxrs/src/test/resources/wadl/javaDocEscape.xml 
b/tools/wadlto/jaxrs/src/test/resources/wadl/javaDocEscape.xml
new file mode 100644
index 00000000000..aa389f2d0fb
--- /dev/null
+++ b/tools/wadlto/jaxrs/src/test/resources/wadl/javaDocEscape.xml
@@ -0,0 +1,21 @@
+<application xmlns="http://wadl.dev.java.net/2009/02";
+    xmlns:xs="http://www.w3.org/2001/XMLSchema";>
+    <grammars />
+    <resources>
+        <resource id="Test" path="/test">
+            <doc>Resource */ int CLASS_DOC = 1; /*</doc>
+            <param name="id" style="template" type="xs:string">
+                <doc>Param *\u002f int PARAM_DOC = 1; /*</doc>
+            </param>
+            <method name="GET" id="get">
+                <doc>Method */ int METHOD_DOC = 1; /*</doc>
+                <response>
+                    <doc>Response */ int RESPONSE_DOC = 1; /*</doc>
+                    <representation mediaType="text/plain">
+                        <param name="result" style="plain" type="xs:string" />
+                    </representation>
+                </response>
+            </method>
+        </resource>
+    </resources>
+</application>

Reply via email to