This is an automated email from the ASF dual-hosted git repository. eolivelli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push: new 74d6305b748 [fix] Remove pulsar-broker-common dependency from pulsar-client (#17855) 74d6305b748 is described below commit 74d6305b748568ac2fa389e4639be0586ef3c1ca Author: Nicolò Boschi <boschi1...@gmail.com> AuthorDate: Fri Sep 30 13:46:28 2022 +0200 [fix] Remove pulsar-broker-common dependency from pulsar-client (#17855) * [fix] Remove pulsar-broker-common dependency from pulsar-client * fix newline * add enforcer rule * Move packages-core to jdk8 bytecode * checkstyle * use variables * style * Fix annotation discovery * Fix kafka module compile --- pom.xml | 3 +- .../pulsar/utils/CmdGenerateDocumentation.java | 2 +- pulsar-client-all/pom.xml | 27 +++++ pulsar-client/pom.xml | 7 -- .../client/impl/conf/CmdGenerateDocumentation.java | 2 +- .../common/util}/BaseGenerateDocumentation.java | 129 ++++++++++++++------- pulsar-io/kafka/pom.xml | 10 ++ pulsar-package-management/core/pom.xml | 8 ++ .../proxy/util/CmdGenerateDocumentation.java | 2 +- 9 files changed, 139 insertions(+), 51 deletions(-) diff --git a/pom.xml b/pom.xml index 8bb53b47943..a32dd8f377a 100644 --- a/pom.xml +++ b/pom.xml @@ -254,7 +254,7 @@ flexible messaging model and an intuitive client API.</description> <exec-maven-plugin.version>3.0.0</exec-maven-plugin.version> <license-maven-plugin.version>4.0.rc2</license-maven-plugin.version> <directory-maven-plugin.version>1.0</directory-maven-plugin.version> - <maven-enforcer-plugin.version>3.0.0</maven-enforcer-plugin.version> + <maven-enforcer-plugin.version>3.1.0</maven-enforcer-plugin.version> <!-- surefire.version is defined in apache parent pom --> <!-- it is used for surefire, failsafe and surefire-report plugins --> <!-- do not upgrade surefire.version to 3.0.0-M5 since it runs slowly and breaks tests. --> @@ -281,6 +281,7 @@ flexible messaging model and an intuitive client API.</description> <lightproto-maven-plugin.version>0.4</lightproto-maven-plugin.version> <dependency-check-maven.version>7.1.0</dependency-check-maven.version> <roaringbitmap.version>0.9.15</roaringbitmap.version> + <extra-enforcer-rules.version>1.6.1</extra-enforcer-rules.version> <!-- Used to configure rename.netty.native. Libs --> <rename.netty.native.libs>rename-netty-native-libs.sh</rename.netty.native.libs> diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/utils/CmdGenerateDocumentation.java b/pulsar-broker/src/main/java/org/apache/pulsar/utils/CmdGenerateDocumentation.java index 3f5df60faea..c784ff84408 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/utils/CmdGenerateDocumentation.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/utils/CmdGenerateDocumentation.java @@ -21,9 +21,9 @@ package org.apache.pulsar.utils; import com.beust.jcommander.Parameters; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.apache.pulsar.broker.BaseGenerateDocumentation; import org.apache.pulsar.broker.ServiceConfiguration; import org.apache.pulsar.client.impl.conf.ClientConfigurationData; +import org.apache.pulsar.common.util.BaseGenerateDocumentation; import org.apache.pulsar.websocket.service.WebSocketProxyConfiguration; @Data diff --git a/pulsar-client-all/pom.xml b/pulsar-client-all/pom.xml index 6645488d704..1adaafbb90d 100644 --- a/pulsar-client-all/pom.xml +++ b/pulsar-client-all/pom.xml @@ -397,6 +397,33 @@ </execution> </executions> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-enforcer-plugin</artifactId> + <version>${maven-enforcer-plugin.version}</version> + <executions> + <execution> + <id>enforce-bytecode-version</id> + <goals> + <goal>enforce</goal> + </goals> + <configuration> + <rules> + <enforceBytecodeVersion> + <maxJdkVersion>${pulsar.client.compiler.release}</maxJdkVersion> + </enforceBytecodeVersion> + </rules> + </configuration> + </execution> + </executions> + <dependencies> + <dependency> + <groupId>org.codehaus.mojo</groupId> + <artifactId>extra-enforcer-rules</artifactId> + <version>${extra-enforcer-rules.version}</version> + </dependency> + </dependencies> + </plugin> </plugins> </build> </project> diff --git a/pulsar-client/pom.xml b/pulsar-client/pom.xml index c0b21c64e6d..8cf75e89f52 100644 --- a/pulsar-client/pom.xml +++ b/pulsar-client/pom.xml @@ -45,13 +45,6 @@ <version>${project.parent.version}</version> </dependency> - <dependency> - <groupId>org.apache.pulsar</groupId> - <artifactId>pulsar-broker-common</artifactId> - <version>${project.parent.version}</version> - <scope>compile</scope> - </dependency> - <dependency> <groupId>${project.groupId}</groupId> <artifactId>bouncy-castle-bc</artifactId> diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/CmdGenerateDocumentation.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/CmdGenerateDocumentation.java index 14059c0db64..28ad0263cf6 100644 --- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/CmdGenerateDocumentation.java +++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/conf/CmdGenerateDocumentation.java @@ -21,7 +21,7 @@ package org.apache.pulsar.client.impl.conf; import com.beust.jcommander.Parameters; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.apache.pulsar.broker.BaseGenerateDocumentation; +import org.apache.pulsar.common.util.BaseGenerateDocumentation; @Data @Parameters(commandDescription = "Generate documentation automatically.") diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/BaseGenerateDocumentation.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/BaseGenerateDocumentation.java similarity index 63% rename from pulsar-broker-common/src/main/java/org/apache/pulsar/broker/BaseGenerateDocumentation.java rename to pulsar-common/src/main/java/org/apache/pulsar/common/util/BaseGenerateDocumentation.java index 99b2e797185..c253474755a 100644 --- a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/BaseGenerateDocumentation.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/BaseGenerateDocumentation.java @@ -16,23 +16,27 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.pulsar.broker; +package org.apache.pulsar.common.util; import com.beust.jcommander.JCommander; import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameters; import io.swagger.annotations.ApiModelProperty; +import java.io.Serializable; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collectors; import lombok.Data; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.pulsar.common.configuration.FieldContext; +import org.apache.commons.lang3.reflect.MethodUtils; +import org.apache.commons.lang3.tuple.Pair; @Data @Parameters(commandDescription = "Generate documentation automatically.") @@ -72,7 +76,7 @@ public abstract class BaseGenerateDocumentation { jcommander.usage(); return false; } - if (!CollectionUtils.isEmpty(classNames)) { + if (classNames != null) { for (String className : classNames) { System.out.println(generateDocumentByClassName(className)); } @@ -82,21 +86,6 @@ public abstract class BaseGenerateDocumentation { protected abstract String generateDocumentByClassName(String className) throws Exception; - protected Predicate<Field> isRequired = field -> { - FieldContext fieldContext = field.getAnnotation(FieldContext.class); - return fieldContext.required(); - }; - - protected Predicate<Field> isOptional = field -> { - FieldContext fieldContext = field.getAnnotation(FieldContext.class); - return !fieldContext.deprecated() && !fieldContext.required(); - }; - - protected Predicate<Field> isDeprecated = field -> { - FieldContext fieldContext = field.getAnnotation(FieldContext.class); - return fieldContext.deprecated(); - }; - protected Predicate<Field> isRequiredApiModel = field -> { ApiModelProperty modelProperty = field.getAnnotation(ApiModelProperty.class); return modelProperty.required(); @@ -107,11 +96,62 @@ public abstract class BaseGenerateDocumentation { return !modelProperty.required(); }; - protected void writeDocListByFieldContext(List<Field> fieldList, StringBuilder sb, Object obj) throws Exception { - for (Field field : fieldList) { - FieldContext fieldContext = field.getAnnotation(FieldContext.class); + private Annotation getFieldContextAnnotation(Field field) { + for (Annotation annotation : field.getAnnotations()) { + if (annotation.annotationType().getCanonicalName() + .equals("org.apache.pulsar.common.configuration.FieldContext")) { + return annotation; + } + } + return null; + } + + private static class FieldContextWrapper { + private final Object fieldContext; + + public FieldContextWrapper(Object fieldContext) { + this.fieldContext = fieldContext; + } + + @SneakyThrows + String doc() { + return (String) MethodUtils.invokeMethod(fieldContext, "doc"); + } + + @SneakyThrows + Class type() { + return (Class) MethodUtils.invokeMethod(fieldContext, "type"); + } + + @SneakyThrows + boolean required() { + return (boolean) MethodUtils.invokeMethod(fieldContext, "required"); + } + + @SneakyThrows + boolean deprecated() { + return (boolean) MethodUtils.invokeMethod(fieldContext, "deprecated"); + } + + @SneakyThrows + boolean dynamic() { + return (boolean) MethodUtils.invokeMethod(fieldContext, "dynamic"); + } + + @SneakyThrows + String category() { + return (String) MethodUtils.invokeMethod(fieldContext, "category"); + } + } + + protected void writeDocListByFieldContext(List<Pair<Field, FieldContextWrapper>> fieldList, + StringBuilder sb, Object obj) throws Exception { + for (Pair<Field, FieldContextWrapper> fieldPair : fieldList) { + FieldContextWrapper fieldContext = fieldPair.getValue(); + final Field field = fieldPair.getKey(); field.setAccessible(true); + sb.append("### ").append(field.getName()).append("\n"); sb.append(fieldContext.doc().replace(">", "\\>")).append("\n\n"); sb.append("**Type**: `").append(field.getType().getCanonicalName()).append("`\n\n"); @@ -134,37 +174,46 @@ public abstract class BaseGenerateDocumentation { } } - protected static class CategoryComparator implements Comparator<Field> { + protected static class CategoryComparator implements Comparator<Pair<Field, FieldContextWrapper>>, Serializable { @Override - public int compare(Field o1, Field o2) { - FieldContext o1Context = o1.getAnnotation(FieldContext.class); - FieldContext o2Context = o2.getAnnotation(FieldContext.class); + public int compare(Pair<Field, FieldContextWrapper> o1, Pair<Field, FieldContextWrapper> o2) { + FieldContextWrapper o1Context = o1.getValue(); + FieldContextWrapper o2Context = o2.getValue(); if (o1Context.category().equals(o2Context.category())) { - return o1.getName().compareTo(o2.getName()); + return o1.getKey().getName().compareTo(o2.getKey().getName()); } return o1Context.category().compareTo(o2Context.category()); } } - protected String prefix = """ - !> This page is automatically generated from code files. - If you find something inaccurate, feel free to update `"""; - protected String suffix = """ - `. - """; + protected String prefix = "\n" + + "!> This page is automatically generated from code files.\n" + + "If you find something inaccurate, feel free to update `"; + protected String suffix = "\n`.\n"; + protected String generateDocByFieldContext(String className, String type, StringBuilder sb) throws Exception { Class<?> clazz = Class.forName(className); Object obj = clazz.getDeclaredConstructor().newInstance(); Field[] fields = clazz.getDeclaredFields(); - ArrayList<Field> fieldList = new ArrayList<>(Arrays.asList(fields)); + List<Pair<Field, FieldContextWrapper>> fieldList = new ArrayList<>(fields.length); + for (Field field : fields) { + final Annotation fieldContextAnnotation = getFieldContextAnnotation(field); - fieldList.removeIf(f -> f.getAnnotation(FieldContext.class) == null); + if (fieldContextAnnotation != null) { + fieldList.add(Pair.of(field, new FieldContextWrapper(fieldContextAnnotation))); + } + } fieldList.sort(new CategoryComparator()); - List<Field> requiredFields = fieldList.stream().filter(isRequired).toList(); - List<Field> optionalFields = fieldList.stream().filter(isOptional).toList(); - List<Field> deprecatedFields = fieldList.stream().filter(isDeprecated).toList(); + List<Pair<Field, FieldContextWrapper>> requiredFields = + fieldList.stream().filter(p -> p.getValue().required()).collect(Collectors.toList()); + List<Pair<Field, FieldContextWrapper>> optionalFields = + fieldList.stream().filter(p -> !p.getValue().required() && !p.getValue().deprecated()) + .collect(Collectors.toList()); + List<Pair<Field, FieldContextWrapper>> deprecatedFields = + fieldList.stream().filter(p -> p.getValue().deprecated()).collect(Collectors.toList()); + sb.append("# ").append(type).append("\n"); @@ -187,8 +236,8 @@ public abstract class BaseGenerateDocumentation { fieldList.removeIf(f -> f.getAnnotation(ApiModelProperty.class) == null); fieldList.sort(Comparator.comparing(Field::getName)); - List<Field> requiredFields = fieldList.stream().filter(isRequiredApiModel).toList(); - List<Field> optionalFields = fieldList.stream().filter(isOptionalApiModel).toList(); + List<Field> requiredFields = fieldList.stream().filter(isRequiredApiModel).collect(Collectors.toList()); + List<Field> optionalFields = fieldList.stream().filter(isOptionalApiModel).collect(Collectors.toList()); sb.append("# ").append(type).append("\n"); sb.append(prefix).append(className).append(suffix); diff --git a/pulsar-io/kafka/pom.xml b/pulsar-io/kafka/pom.xml index f285f684c9e..ca7485510c8 100644 --- a/pulsar-io/kafka/pom.xml +++ b/pulsar-io/kafka/pom.xml @@ -103,6 +103,16 @@ <version>${kafka.confluent.avroserializer.version}</version> </dependency> + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-impl</artifactId> + </dependency> + + <dependency> + <groupId>io.jsonwebtoken</groupId> + <artifactId>jjwt-jackson</artifactId> + </dependency> + </dependencies> <build> diff --git a/pulsar-package-management/core/pom.xml b/pulsar-package-management/core/pom.xml index fb5b5671bc6..b4834c72b43 100644 --- a/pulsar-package-management/core/pom.xml +++ b/pulsar-package-management/core/pom.xml @@ -52,6 +52,14 @@ <build> <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <!-- This module is distributed with the Pulsar Admin Client --> + <release>${pulsar.client.compiler.release}</release> + </configuration> + </plugin> <plugin> <groupId>org.gaul</groupId> <artifactId>modernizer-maven-plugin</artifactId> diff --git a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/util/CmdGenerateDocumentation.java b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/util/CmdGenerateDocumentation.java index 8b77b3857af..fd9da218d9c 100644 --- a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/util/CmdGenerateDocumentation.java +++ b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/util/CmdGenerateDocumentation.java @@ -21,7 +21,7 @@ package org.apache.pulsar.proxy.util; import com.beust.jcommander.Parameters; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import org.apache.pulsar.broker.BaseGenerateDocumentation; +import org.apache.pulsar.common.util.BaseGenerateDocumentation; import org.apache.pulsar.proxy.server.ProxyConfiguration; @Data