sijie closed pull request #2022: Remove jboss-reflect dependency
URL: https://github.com/apache/incubator-pulsar/pull/2022
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/pom.xml b/pom.xml
index 62be820fa6..41b45c63ac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -138,7 +138,6 @@ flexible messaging model and an intuitive client
API.</description>
<puppycrawl.checkstyle.version>6.19</puppycrawl.checkstyle.version>
<dockerfile-maven.version>1.3.7</dockerfile-maven.version>
<typetools.version>0.5.0</typetools.version>
- <jboss-reflect.version>2.2.1.SP1</jboss-reflect.version>
<protobuf2.version>2.4.1</protobuf2.version>
<protobuf3.version>3.5.1</protobuf3.version>
<protoc3.version>3.5.1-1</protoc3.version>
@@ -720,12 +719,6 @@ flexible messaging model and an intuitive client
API.</description>
<version>${typetools.version}</version>
</dependency>
- <dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jboss-reflect</artifactId>
- <version>${jboss-reflect.version}</version>
- </dependency>
-
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-all</artifactId>
diff --git a/pulsar-functions/instance/pom.xml
b/pulsar-functions/instance/pom.xml
index 8b0f763363..2908984db5 100644
--- a/pulsar-functions/instance/pom.xml
+++ b/pulsar-functions/instance/pom.xml
@@ -101,11 +101,6 @@
<artifactId>typetools</artifactId>
</dependency>
- <dependency>
- <groupId>org.jboss</groupId>
- <artifactId>jboss-reflect</artifactId>
- </dependency>
-
</dependencies>
</project>
diff --git
a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
index 0356ab1d94..590a586ad0 100644
---
a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
+++
b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
@@ -38,9 +38,9 @@
import org.apache.pulsar.functions.instance.producers.Producers;
import org.apache.pulsar.functions.source.PulsarRecord;
import org.apache.pulsar.functions.utils.FunctionConfig;
+import org.apache.pulsar.functions.utils.Reflections;
import org.apache.pulsar.io.core.RecordContext;
import org.apache.pulsar.io.core.Sink;
-import org.jboss.util.Classes;
import java.util.Base64;
import java.util.Map;
@@ -240,7 +240,7 @@ public void close() throws Exception {
@VisibleForTesting
void setupSerDe() throws ClassNotFoundException {
- Class<?> typeArg =
Classes.loadClass(this.pulsarSinkConfig.getTypeClassName(),
+ Class<?> typeArg =
Reflections.loadClass(this.pulsarSinkConfig.getTypeClassName(),
Thread.currentThread().getContextClassLoader());
if (!Void.class.equals(typeArg)) { // return type is not `Void.class`
diff --git
a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarSource.java
b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarSource.java
index 74f23663ef..ae5d0d6421 100644
---
a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarSource.java
+++
b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/source/PulsarSource.java
@@ -33,10 +33,10 @@
import org.apache.pulsar.functions.api.utils.DefaultSerDe;
import org.apache.pulsar.functions.instance.InstanceUtils;
import org.apache.pulsar.functions.utils.FunctionConfig;
+import org.apache.pulsar.functions.utils.Reflections;
import org.apache.pulsar.functions.utils.Utils;
import org.apache.pulsar.io.core.Record;
import org.apache.pulsar.io.core.Source;
-import org.jboss.util.Classes;
import java.util.ArrayList;
import java.util.HashMap;
@@ -157,7 +157,7 @@ public void close() throws Exception {
@VisibleForTesting
void setupSerDe() throws ClassNotFoundException {
- Class<?> typeArg =
Classes.loadClass(this.pulsarSourceConfig.getTypeClassName(),
+ Class<?> typeArg =
Reflections.loadClass(this.pulsarSourceConfig.getTypeClassName(),
Thread.currentThread().getContextClassLoader());
if (Void.class.equals(typeArg)) {
diff --git a/pulsar-functions/runtime-shaded/pom.xml
b/pulsar-functions/runtime-shaded/pom.xml
index f7130ac528..7b165b6c56 100644
--- a/pulsar-functions/runtime-shaded/pom.xml
+++ b/pulsar-functions/runtime-shaded/pom.xml
@@ -127,9 +127,6 @@
<include>com.google.googlejavaformat:google-java-format</include>
<include>com.google.errorprone:javac</include>
<include>net.jodah:typetools</include>
- <include>org.jboss:jboss-reflect</include>
- <include>org.jboss.logging:jboss-logging-spi</include>
- <include>org.jboss:jboss-common-core</include>
<include>com.beust:jcommander</include>
<include>com.fasterxml.jackson.dataformat:jackson-dataformat-yaml</include>
<include>org.yaml:snakeyaml</include>
diff --git
a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/Reflections.java
b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/Reflections.java
index 64418bbb78..611688967a 100644
---
a/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/Reflections.java
+++
b/pulsar-functions/utils/src/main/java/org/apache/pulsar/functions/utils/Reflections.java
@@ -19,11 +19,13 @@
package org.apache.pulsar.functions.utils;
import java.io.IOException;
+import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
+import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -35,6 +37,19 @@
private static final Map<Class<?>, Constructor<?>> constructorCache =
new ConcurrentHashMap<>();
+ private static final Map PRIMITIVE_NAME_TYPE_MAP = new HashMap();
+
+ static {
+ PRIMITIVE_NAME_TYPE_MAP.put("boolean", Boolean.TYPE);
+ PRIMITIVE_NAME_TYPE_MAP.put("byte", Byte.TYPE);
+ PRIMITIVE_NAME_TYPE_MAP.put("char", Character.TYPE);
+ PRIMITIVE_NAME_TYPE_MAP.put("short", Short.TYPE);
+ PRIMITIVE_NAME_TYPE_MAP.put("int", Integer.TYPE);
+ PRIMITIVE_NAME_TYPE_MAP.put("long", Long.TYPE);
+ PRIMITIVE_NAME_TYPE_MAP.put("float", Float.TYPE);
+ PRIMITIVE_NAME_TYPE_MAP.put("double", Double.TYPE);
+ }
+
/**
* Create an instance of <code>userClassName</code> using provided
<code>classLoader</code>.
* This instance should implement the provided interface
<code>xface</code>.
@@ -237,4 +252,63 @@ public static boolean classImplementsIface(String fqcn,
Class xface) {
}
return ret;
}
+
+ private static boolean isPrimitive(String type) {
+ return PRIMITIVE_NAME_TYPE_MAP.containsKey(type);
+ }
+
+ /**
+ * Load class to resolve array types.
+ *
+ * @param className class name
+ * @param classLoader class loader
+ * @return loaded class
+ * @throws ClassNotFoundException
+ */
+ public static Class loadClass(String className, ClassLoader classLoader)
throws ClassNotFoundException {
+ if (className.length() == 1) {
+ char type = className.charAt(0);
+ if (type == 'B') {
+ return Byte.TYPE;
+ } else if (type == 'C') {
+ return Character.TYPE;
+ } else if (type == 'D') {
+ return Double.TYPE;
+ } else if (type == 'F') {
+ return Float.TYPE;
+ } else if (type == 'I') {
+ return Integer.TYPE;
+ } else if (type == 'J') {
+ return Long.TYPE;
+ } else if (type == 'S') {
+ return Short.TYPE;
+ } else if (type == 'Z') {
+ return Boolean.TYPE;
+ } else if (type == 'V') {
+ return Void.TYPE;
+ } else {
+ throw new ClassNotFoundException(className);
+ }
+ } else if (isPrimitive(className)) {
+ return (Class)PRIMITIVE_NAME_TYPE_MAP.get(className);
+ } else if (className.charAt(0) == 'L' &&
className.charAt(className.length() - 1) == ';') {
+ return classLoader.loadClass(className.substring(1,
className.length() - 1));
+ } else {
+ try {
+ return classLoader.loadClass(className);
+ } catch (ClassNotFoundException var4) {
+ if (className.charAt(0) != '[') {
+ throw var4;
+ } else {
+ int arrayDimension;
+ for(arrayDimension = 0; className.charAt(arrayDimension)
== '['; ++arrayDimension) {
+ ;
+ }
+
+ Class componentType =
loadClass(className.substring(arrayDimension), classLoader);
+ return Array.newInstance(componentType, new
int[arrayDimension]).getClass();
+ }
+ }
+ }
+ }
}
diff --git
a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ReflectionsTest.java
b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ReflectionsTest.java
index a8ef953b75..41f943e77e 100644
---
a/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ReflectionsTest.java
+++
b/pulsar-functions/utils/src/test/java/org/apache/pulsar/functions/utils/ReflectionsTest.java
@@ -164,4 +164,35 @@ public void testClassExists() {
assertTrue(Reflections.classExists(String.class.getName()));
assertTrue(!Reflections.classExists("com.fake.class"));
}
+
+ @Test
+ public void testLoadClass() throws Exception {
+ ClassLoader clsLoader = ClassLoader.getSystemClassLoader();
+ Class[] classes = new Class[] {
+ Integer.class,
+ int.class,
+ Byte.class,
+ byte.class,
+ Double.class,
+ double.class,
+ Float.class,
+ float.class,
+ Character.class,
+ char.class,
+ Long.class,
+ long.class,
+ Short.class,
+ short.class,
+ Boolean.class,
+ boolean.class,
+ Void.class,
+ Reflections.class,
+ Integer[].class,
+ int[].class
+ };
+
+ for (Class cls : classes) {
+ assertEquals(cls, Reflections.loadClass(cls.getName(), clsLoader));
+ }
+ }
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services