You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bu...@apache.org on 2019/12/11 10:42:52 UTC
[cxf] branch master updated: cxf-tools-wadlto-jaxrs: use existing
PATCH annotation
This is an automated email from the ASF dual-hosted git repository.
buhhunyx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/master by this push:
new 4b1c1cb cxf-tools-wadlto-jaxrs: use existing PATCH annotation
4b1c1cb is described below
commit 4b1c1cb13fe6fa05eb27c6ad7a3393d1c3ec1ec1
Author: Alexey Markevich <bu...@gmail.com>
AuthorDate: Wed Dec 11 13:42:15 2019 +0300
cxf-tools-wadlto-jaxrs: use existing PATCH annotation
---
.../cxf/tools/wadlto/jaxrs/SourceGenerator.java | 143 +++++++++------------
.../cxf/tools/wadlto/jaxrs/JAXRSContainerTest.java | 3 +-
2 files changed, 64 insertions(+), 82 deletions(-)
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 5c0fa8f..10726f0 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
@@ -51,6 +51,7 @@ import javax.ws.rs.HEAD;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.OPTIONS;
+import javax.ws.rs.PATCH;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
@@ -138,6 +139,7 @@ public class SourceGenerator {
HTTP_METHOD_ANNOTATIONS.put("delete", DELETE.class);
HTTP_METHOD_ANNOTATIONS.put("head", HEAD.class);
HTTP_METHOD_ANNOTATIONS.put("options", OPTIONS.class);
+ HTTP_METHOD_ANNOTATIONS.put("patch", PATCH.class);
PARAM_ANNOTATIONS.put("template", PathParam.class);
PARAM_ANNOTATIONS.put("header", HeaderParam.class);
@@ -458,7 +460,6 @@ public class SourceGenerator {
return;
}
-
final String className = getClassName(qname.getLocalPart(),
info.isInterfaceGenerated(), info.getTypeClassNames());
if (info.getResourceClassNames().contains(className)) {
@@ -467,22 +468,18 @@ public class SourceGenerator {
info.getResourceClassNames().add(className);
final String classPackage = getClassPackageName(namespaceURI);
- StringBuilder sbImports = new StringBuilder();
StringBuilder sbCode = new StringBuilder();
Set<String> imports = createImports();
- sbImports.append(getClassComment()).append(lineSeparator);
- sbImports.append("package ").append(classPackage)
- .append(';').append(lineSeparator).append(lineSeparator);
boolean doCreateJavaDocs = isJavaDocNeeded(info);
if (doCreateJavaDocs) {
writeClassDocs(rElement, sbCode);
}
if (isRoot && writeAnnotations(info.isInterfaceGenerated())) {
String path = rElement.getAttribute("path");
- writeAnnotation(sbCode, imports, Path.class, path);
- sbCode.append(lineSeparator);
+ writeAnnotation(sbCode, imports, Path.class, path)
+ .append(lineSeparator);
}
sbCode.append("public ").append(getClassType(info.interfaceIsGenerated)).append(' ').append(className);
@@ -495,9 +492,8 @@ public class SourceGenerator {
methodNameMap);
sbCode.append('}');
- writeImports(sbImports, imports, classPackage);
- createJavaSourceFile(info.getSrcDir(), new QName(classPackage, className), sbCode, sbImports, true);
+ createJavaSourceFile(info.getSrcDir(), classPackage, className, sbCode, imports, true);
writeSubresourceClasses(rElement, info, isRoot, resourceId);
}
@@ -626,34 +622,22 @@ public class SourceGenerator {
info.getInheritedParams().addAll(currentInheritedParams);
}
- private void writeAnnotation(StringBuilder sbCode, Set<String> imports, Class<?> cls, String value) {
- if (value != null && value.isEmpty()) {
- return;
- }
- addImport(imports, cls.getName());
- sbCode.append('@').append(cls.getSimpleName());
- if (value != null) {
- sbCode.append("(\"").append(value).append("\")");
+ private StringBuilder writeAnnotation(StringBuilder sbCode, Set<String> imports, Class<?> cls, String value) {
+ if (value == null || !value.isEmpty()) {
+ addImport(imports, cls.getName());
+ sbCode.append('@').append(cls.getSimpleName());
+ if (value != null) {
+ sbCode.append("(\"").append(value).append("\")");
+ }
}
+ return sbCode;
}
private void addImport(Set<String> imports, String clsName) {
if (imports == null || clsName.startsWith("java.lang") || !clsName.contains(".")) {
return;
}
- if (!imports.contains(clsName)) {
- imports.add(clsName);
- }
- }
-
- private void writeImports(StringBuilder sbImports, Set<String> imports, String classPackage) {
- for (String clsName : imports) {
- int index = clsName.lastIndexOf('.');
- if (index != -1 && clsName.substring(0, index).equals(classPackage)) {
- continue;
- }
- sbImports.append("import ").append(clsName).append(';').append(lineSeparator);
- }
+ imports.add(clsName);
}
//CHECKSTYLE:OFF: ParameterNumber
@@ -731,9 +715,8 @@ public class SourceGenerator {
if (!methodNameLowerCase.isEmpty()) {
if (HTTP_METHOD_ANNOTATIONS.containsKey(methodNameLowerCase)) {
- writeAnnotation(sbMethodCode, imports,
- HTTP_METHOD_ANNOTATIONS.get(methodNameLowerCase), null);
- sbMethodCode.append(lineSeparator).append(TAB);
+ writeAnnotation(sbMethodCode, imports, HTTP_METHOD_ANNOTATIONS.get(methodNameLowerCase), null)
+ .append(lineSeparator).append(TAB);
} else {
writeCustomHttpMethod(info, classPackage, methodName, sbMethodCode, imports);
}
@@ -747,13 +730,13 @@ public class SourceGenerator {
sbMethodCode.append('@').append(BEAN_VALID_SIMPLE_NAME).append(lineSeparator).append(TAB);
}
if (oneway) {
- addImport(imports, Oneway.class.getName());
- sbMethodCode.append('@').append(Oneway.class.getSimpleName()).append(lineSeparator).append(TAB);
+ writeAnnotation(sbMethodCode, imports, Oneway.class, null)
+ .append(lineSeparator).append(TAB);
}
}
if (!isRoot && !"/".equals(currentPath)) {
- writeAnnotation(sbMethodCode, imports, Path.class, currentPath);
- sbMethodCode.append(lineSeparator).append(TAB);
+ writeAnnotation(sbMethodCode, imports, Path.class, currentPath)
+ .append(lineSeparator).append(TAB);
}
} else {
sbMethodCode.append(lineSeparator).append(TAB);
@@ -922,27 +905,16 @@ public class SourceGenerator {
}
info.getResourceClassNames().add(className);
-
- StringBuilder sbMethodClassImports = new StringBuilder(256);
- sbMethodClassImports.append(getClassComment()).append(lineSeparator);
- sbMethodClassImports.append("package ").append(classPackage)
- .append(';').append(lineSeparator).append(lineSeparator);
-
- sbMethodClassImports.append("import java.lang.annotation.ElementType;").append(lineSeparator);
- sbMethodClassImports.append("import java.lang.annotation.Retention;").append(lineSeparator);
- sbMethodClassImports.append("import java.lang.annotation.RetentionPolicy;").append(lineSeparator);
- sbMethodClassImports.append("import java.lang.annotation.Target;").append(lineSeparator);
- sbMethodClassImports.append("import javax.ws.rs.HttpMethod;").append(lineSeparator);
-
- StringBuilder sbMethodClassCode = new StringBuilder(256);
- sbMethodClassCode.append("@Target({ElementType.METHOD })").append(lineSeparator);
- sbMethodClassCode.append("@Retention(RetentionPolicy.RUNTIME)").append(lineSeparator);
- sbMethodClassCode.append("@HttpMethod(\"").append(methodName).append("\")").append(lineSeparator);
- sbMethodClassCode.append("public @interface ").append(methodName);
- sbMethodClassCode.append(" {").append(lineSeparator).append(lineSeparator);
- sbMethodClassCode.append('}');
- createJavaSourceFile(info.getSrcDir(), new QName(classPackage, className),
- sbMethodClassCode, sbMethodClassImports, true);
+ StringBuilder sbMethodClassCode = new StringBuilder(256)
+ .append("@java.lang.annotation.Target({java.lang.annotation.ElementType.METHOD})").append(lineSeparator)
+ .append("@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)")
+ .append(lineSeparator)
+ .append("@javax.ws.rs.HttpMethod(\"").append(methodName).append("\")").append(lineSeparator)
+ .append("public @interface ").append(methodName)
+ .append(" {").append(lineSeparator).append(lineSeparator)
+ .append('}');
+ createJavaSourceFile(info.getSrcDir(), classPackage, className,
+ sbMethodClassCode, Collections.emptySet(), true);
}
private void writeSubresourceMethod(Element resourceEl,
@@ -1268,16 +1240,16 @@ public class SourceGenerator {
if (writeAnnotations) {
String required = paramEl.getAttribute("required");
if (Multipart.class.equals(paramAnn) && "false".equals(required)) {
- writeAnnotation(sbCode, imports, paramAnn, null);
- sbCode.append("(value = \"").append(name).append("\", required = false").append(')');
+ writeAnnotation(sbCode, imports, paramAnn, null)
+ .append("(value = \"").append(name).append("\", required = false").append(')');
} else {
writeAnnotation(sbCode, imports, paramAnn, name);
}
sbCode.append(' ');
String defaultVal = paramEl.getAttribute("default");
if (!defaultVal.isEmpty()) {
- writeAnnotation(sbCode, imports, DefaultValue.class, defaultVal);
- sbCode.append(' ');
+ writeAnnotation(sbCode, imports, DefaultValue.class, defaultVal)
+ .append(' ');
}
}
boolean isRepeating = isRepeatingParam(paramEl);
@@ -1363,8 +1335,8 @@ public class SourceGenerator {
sbCode.append(", ");
}
if (writeAnnotations) {
- addImport(imports, Suspended.class.getName());
- sbCode.append('@').append(Suspended.class.getSimpleName()).append(' ');
+ writeAnnotation(sbCode, imports, Suspended.class, null)
+ .append(' ');
}
addImport(imports, AsyncResponse.class.getName());
sbCode.append(AsyncResponse.class.getSimpleName()).append(' ').append("async");
@@ -1396,12 +1368,7 @@ public class SourceGenerator {
}
private void generateEnumClass(String clsName, List<Element> options, File src, String classPackage) {
- StringBuilder sbImports = new StringBuilder(64);
StringBuilder sbCode = new StringBuilder(512);
- sbImports.append(getClassComment()).append(lineSeparator);
- sbImports.append("package ").append(classPackage)
- .append(';').append(lineSeparator).append(lineSeparator);
-
sbCode.append("public enum ").append(clsName);
openBlock(sbCode);
@@ -1445,7 +1412,7 @@ public class SourceGenerator {
sbCode.append("throw new IllegalArgumentException();").append(lineSeparator);
tabCloseBlock(sbCode, 1);
sbCode.append('}');
- createJavaSourceFile(src, new QName(classPackage, clsName), sbCode, sbImports, false);
+ createJavaSourceFile(src, classPackage, clsName, sbCode, Collections.emptySet(), false);
}
private static StringBuilder tab(StringBuilder sb, int count) {
@@ -1663,8 +1630,6 @@ public class SourceGenerator {
return null;
}
-
-
private void writeFormatAnnotations(List<Element> repElements, StringBuilder sbCode,
Set<String> imports,
boolean inRep,
@@ -1732,21 +1697,39 @@ public class SourceGenerator {
}
}
- private void createJavaSourceFile(File src, QName qname, StringBuilder sbCode, StringBuilder sbImports,
- boolean serviceClass) {
- String namespace = qname.getNamespaceURI();
+ private void createJavaSourceFile(File src, String classPackage, String className, StringBuilder sbCode,
+ Set<String> imports, boolean serviceClass) {
if (serviceClass) {
- generatedServiceClasses.add(namespace + '.' + qname.getLocalPart());
+ generatedServiceClasses.add(classPackage + '.' + className);
}
- java.nio.file.Path currentDir = src.toPath().resolve(namespace.replace('.', File.separatorChar));
+ java.nio.file.Path currentDir = src.toPath().resolve(classPackage.replace('.', File.separatorChar));
try (Writer writer = Files.newBufferedWriter(
- Files.createDirectories(currentDir).resolve(qname.getLocalPart() + ".java"),
+ Files.createDirectories(currentDir).resolve(className + ".java"),
encoding == null ? StandardCharsets.UTF_8 : Charset.forName(encoding))) {
- writer.write(sbImports.toString());
+
+ writer.write(getClassComment());
+ writer.write(lineSeparator);
+
+ writer.write("package ");
+ writer.write(classPackage);
+ writer.write(';');
writer.write(lineSeparator);
+ writer.write(lineSeparator);
+
+ for (String clsName : imports) {
+ int index = clsName.lastIndexOf('.');
+ if (index != -1 && clsName.substring(0, index).equals(classPackage)) {
+ continue;
+ }
+ writer.write("import ");
+ writer.write(clsName);
+ writer.write(';');
+ writer.write(lineSeparator);
+ }
+ writer.write(lineSeparator);
+
writer.write(sbCode.toString());
- writer.flush();
} catch (java.nio.file.NoSuchFileException ex) {
LOG.warning(ex.getMessage() + " is not found");
} catch (IOException ex) {
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 f948a48..8126ebe 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
@@ -321,9 +321,8 @@ public class JAXRSContainerTest extends ProcessorTestBase {
assertNotNull(output.list());
List<File> files = FileUtils.getFilesRecurseUsingSuffix(output, ".class");
- assertEquals(8, files.size());
+ assertEquals(7, files.size());
assertTrue(checkContains(files, "org.apache.cxf.jaxrs.model.wadl" + ".BookStore.class"));
- assertTrue(checkContains(files, "org.apache.cxf.jaxrs.model.wadl" + ".PATCH.class"));
assertTrue(checkContains(files, "superbooks" + ".Book.class"));
assertTrue(checkContains(files, "superbooks" + ".ObjectFactory.class"));
assertTrue(checkContains(files, "superbooks" + ".package-info.class"));