This is an automated email from the ASF dual-hosted git repository. coheigea pushed a commit to branch coheigea/wadl2java in repository https://gitbox.apache.org/repos/asf/cxf.git
commit 93a17df33804236d1ffe4d99692cac80ef8c5191 Author: Colm O hEigeartaigh <[email protected]> AuthorDate: Mon Sep 28 15:04:37 2026 +0100 wadl2java: escape WADL documentation in generated javadoc. --- .../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 e7efbf183e6..b8f5a09c7a1 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 @@ -97,12 +97,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 df6822b5916..e7a55a22827 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 dbea1684c3c..e8e6ddf7db4 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; @@ -198,6 +199,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>
