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", "\u").replace("*/", "*/");
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 */ 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>