From c893bee8ad53f8076f1161e169120850c3713412 Mon Sep 17 00:00:00 2001 From: Lauro Schuck Date: Wed, 21 Oct 2015 21:35:54 -0200 Subject: [PATCH 1/2] Added failing test for NPE issue --- .../cxf/xjc/javadoc/JavadocPluginTest.java | 10 ++++++ .../anonymousEnum-javadoc-bindings.xjb | 30 ++++++++++++++++ javadoc/src/test/resources/anonymousEnum.xsd | 34 +++++++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 javadoc/src/test/resources/anonymousEnum-javadoc-bindings.xjb create mode 100644 javadoc/src/test/resources/anonymousEnum.xsd diff --git a/javadoc/src/test/java/org/apache/cxf/xjc/javadoc/JavadocPluginTest.java b/javadoc/src/test/java/org/apache/cxf/xjc/javadoc/JavadocPluginTest.java index dcad141c..101f668d 100644 --- a/javadoc/src/test/java/org/apache/cxf/xjc/javadoc/JavadocPluginTest.java +++ b/javadoc/src/test/java/org/apache/cxf/xjc/javadoc/JavadocPluginTest.java @@ -156,6 +156,16 @@ public void testComplexTypeWithDocumentedAttribute() throws Exception { assertThat(getterJavadoc, javadocContains("Documentation of attribute")); } + @Test + public void testAnonymousEnum() throws Exception { + String fileName = "anonymousEnum.xsd"; + assertProcessedSuccessful(fileName, "-b", getAbsolutePath("anonymousEnum-javadoc-bindings.xjb")); + + CompilationUnit compilationUnit = parseSourceFile("AnonymousTypesafeEnumClass.java"); + Javadoc topLevelTypeJavadoc = getTopLevelEnum(compilationUnit).getJavadoc(); + assertThat(topLevelTypeJavadoc, javadocContains("Documentation of anonymous enum simpleType")); + } + private void assertProcessedSuccessful(String fileName, String... params) throws Exception { String xsdPath = getAbsolutePath(fileName); List args = new ArrayList(Arrays.asList(xsdPath, "-Xjavadoc", "-d", OUTPUT_DIR)); diff --git a/javadoc/src/test/resources/anonymousEnum-javadoc-bindings.xjb b/javadoc/src/test/resources/anonymousEnum-javadoc-bindings.xjb new file mode 100644 index 00000000..0db20cc5 --- /dev/null +++ b/javadoc/src/test/resources/anonymousEnum-javadoc-bindings.xjb @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/javadoc/src/test/resources/anonymousEnum.xsd b/javadoc/src/test/resources/anonymousEnum.xsd new file mode 100644 index 00000000..39e02d42 --- /dev/null +++ b/javadoc/src/test/resources/anonymousEnum.xsd @@ -0,0 +1,34 @@ + + + + + + + + Documentation of anonymous enum simpleType + + + + + + + + From 562c3355b489a95f0539ace5e1f6b937dfb9cafa Mon Sep 17 00:00:00 2001 From: Lauro Schuck Date: Wed, 21 Oct 2015 21:41:20 -0200 Subject: [PATCH 2/2] Fixing NPE caused by null enum TypeName --- .../apache/cxf/xjc/javadoc/JavadocInserter.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/javadoc/src/main/java/org/apache/cxf/xjc/javadoc/JavadocInserter.java b/javadoc/src/main/java/org/apache/cxf/xjc/javadoc/JavadocInserter.java index 33382c4e..269e6138 100644 --- a/javadoc/src/main/java/org/apache/cxf/xjc/javadoc/JavadocInserter.java +++ b/javadoc/src/main/java/org/apache/cxf/xjc/javadoc/JavadocInserter.java @@ -20,9 +20,12 @@ import java.util.Collection; +import javax.xml.namespace.QName; + import org.xml.sax.ErrorHandler; import com.sun.tools.xjc.Options; +import com.sun.tools.xjc.model.CEnumLeafInfo; import com.sun.tools.xjc.outline.ClassOutline; import com.sun.tools.xjc.outline.EnumOutline; import com.sun.tools.xjc.outline.FieldOutline; @@ -87,11 +90,17 @@ private void addJavadoc(EnumOutline enumOutline) { } private boolean isCustomBindingApplied(EnumOutline enumOutline) { - String defaultComment = Messages.format("ClassSelector.JavadocHeading", enumOutline.target - .getTypeName().getLocalPart()); + CEnumLeafInfo target = enumOutline.target; + QName typeName = target.getTypeName(); + // typeName may be null on anonymous simple types + if (typeName == null) { + return false; + } + String defaultComment = Messages.format("ClassSelector.JavadocHeading", + typeName.getLocalPart()); // not very clean but the only way of determining whether Javadoc // customization has been applied - return !enumOutline.target.javadoc.startsWith(defaultComment); + return !target.javadoc.startsWith(defaultComment); } }