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 <[email protected]>
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