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

Reply via email to