This is an automated email from the ASF dual-hosted git repository.

jerrypeng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 7af6374   fixing protobuf schema shading issue (#2168)
7af6374 is described below

commit 7af63740c1586cb79925fb8b5884bb8e51097d09
Author: Boyang Jerry Peng <[email protected]>
AuthorDate: Mon Jul 16 09:18:36 2018 -0700

     fixing protobuf schema shading issue (#2168)
    
    * fixing protobuf schema shading issue
---
 pom.xml                                            |   1 +
 pulsar-broker/pom.xml                              |   5 +
 pulsar-client-admin-shaded/pom.xml                 |  30 --
 .../pulsar-client-kafka-shaded/pom.xml             |  31 +-
 pulsar-client-schema/pom.xml                       | 349 +++++++++++++++++++++
 .../java/org/apache/pulsar/client/api/Schema.java  |  16 +
 .../client/api/SchemaSerializationException.java   |   0
 .../pulsar/client/impl/schema/AvroSchema.java      |   0
 .../pulsar/client/impl/schema/BytesSchema.java     |   0
 .../pulsar/client/impl/schema/JSONSchema.java      |   0
 .../pulsar/client/impl/schema/ProtobufSchema.java  |   0
 .../pulsar/client/impl/schema/StringSchema.java    |   0
 .../pulsar/client/schema}/AvroSchemaTest.java      |   4 +-
 .../pulsar/client/schema}/JSONSchemaTest.java      |   4 +-
 .../pulsar/client/schema}/ProtobufSchemaTest.java  |   8 +-
 .../src/test/proto/Test.proto                      |   2 +-
 pulsar-client-shaded/pom.xml                       |  32 +-
 pulsar-client/pom.xml                              |  63 +---
 .../{schemas => schema}/DefaultSchemasTest.java    |  16 +-
 19 files changed, 403 insertions(+), 158 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2275471..a6d6453 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,7 @@ flexible messaging model and an intuitive client 
API.</description>
     <module>pulsar-broker-shaded</module>
     <module>pulsar-client</module>
     <module>pulsar-client-shaded</module>
+    <module>pulsar-client-schema</module>
     <module>pulsar-client-admin</module>
     <module>pulsar-client-admin-shaded</module>
     <module>pulsar-client-tools</module>
diff --git a/pulsar-broker/pom.xml b/pulsar-broker/pom.xml
index ccee189..d505c7a 100644
--- a/pulsar-broker/pom.xml
+++ b/pulsar-broker/pom.xml
@@ -181,6 +181,11 @@
     </dependency>
 
     <dependency>
+      <groupId>com.fasterxml.jackson.module</groupId>
+      <artifactId>jackson-module-jsonSchema</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>jul-to-slf4j</artifactId>
     </dependency>
diff --git a/pulsar-client-admin-shaded/pom.xml 
b/pulsar-client-admin-shaded/pom.xml
index 2edc7cf..0c9fb93 100644
--- a/pulsar-client-admin-shaded/pom.xml
+++ b/pulsar-client-admin-shaded/pom.xml
@@ -98,15 +98,6 @@
                   <include>io.opencensus:*</include>
                   <include>org.objenesis:*</include>
                   <include>org.yaml:snakeyaml</include>
-
-                  <include>org.apache.avro:*</include>
-                  <!-- Avro transitive dependencies-->
-                  <include>org.codehaus.jackson:jackson-core-asl</include>
-                  <include>org.codehaus.jackson:jackson-mapper-asl</include>
-                  <include>com.thoughtworks.paranamer:paranamer</include>
-                  <include>org.xerial.snappy:snappy-java</include>
-                  <include>org.apache.commons:commons-compress</include>
-                  <include>org.tukaani:xz</include>
                 </includes>
               </artifactSet>
               <filters>
@@ -211,27 +202,6 @@
                   
<shadedPattern>org.apache.pulsar.shade.org.reactivestreams</shadedPattern>
                 </relocation>
                   <relocation>
-                      <pattern>org.apache.avro</pattern>
-                      
<shadedPattern>org.apache.pulsar.shade.org.apache.avro</shadedPattern>
-                  </relocation>
-                  <!-- Avro transitive dependencies-->
-                  <relocation>
-                      <pattern>org.codehaus.jackson</pattern>
-                      
<shadedPattern>org.apache.pulsar.shade.org.codehaus.jackson</shadedPattern>
-                  </relocation>
-                  <relocation>
-                      <pattern>com.thoughtworks.paranamer</pattern>
-                      
<shadedPattern>org.apache.pulsar.shade.com.thoughtworks.paranamer</shadedPattern>
-                  </relocation>
-                  <relocation>
-                      <pattern>org.xerial.snappy</pattern>
-                      
<shadedPattern>org.apache.pulsar.shade.org.xerial.snappy</shadedPattern>
-                  </relocation>
-                  <relocation>
-                      <pattern>org.tukaani</pattern>
-                      
<shadedPattern>org.apache.pulsar.shade.org.tukaani</shadedPattern>
-                  </relocation>
-                  <relocation>
                       <pattern>io.grpc</pattern>
                       
<shadedPattern>org.apache.pulsar.shade.io.grpc</shadedPattern>
                   </relocation>
diff --git a/pulsar-client-kafka-compat/pulsar-client-kafka-shaded/pom.xml 
b/pulsar-client-kafka-compat/pulsar-client-kafka-shaded/pom.xml
index 5d474ba..3ba94e9 100644
--- a/pulsar-client-kafka-compat/pulsar-client-kafka-shaded/pom.xml
+++ b/pulsar-client-kafka-compat/pulsar-client-kafka-shaded/pom.xml
@@ -68,6 +68,7 @@
                   <include>org.apache.kafka:kafka-clients</include>
                   
<include>org.apache.pulsar:pulsar-client-kafka-original</include>
                   <include>org.apache.pulsar:pulsar-client-original</include>
+                  <include>org.apache.pulsar:pulsar-client-schema</include>
                   <include>org.apache.commons:commons-lang3</include>
                   <include>commons-codec:commons-codec</include>
                   <include>commons-collections:commons-collections</include>
@@ -97,15 +98,6 @@
                   <include>commons-*:*</include>
                   <include>org.yaml:snakeyaml</include>
                   <include>org.objenesis:*</include>
-
-                  <include>org.apache.avro:*</include>
-                  <!-- Avro transitive dependencies-->
-                  <include>org.codehaus.jackson:jackson-core-asl</include>
-                  <include>org.codehaus.jackson:jackson-mapper-asl</include>
-                  <include>com.thoughtworks.paranamer:paranamer</include>
-                  <include>org.xerial.snappy:snappy-java</include>
-                  <include>org.apache.commons:commons-compress</include>
-                  <include>org.tukaani:xz</include>
                 </includes>
               </artifactSet>
                <filters>
@@ -189,27 +181,6 @@
                   
<shadedPattern>org.apache.pulsar.shade.org.apache.http</shadedPattern>
                 </relocation>
                 <relocation>
-                  <pattern>org.apache.avro</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.apache.avro</shadedPattern>
-                </relocation>
-                <!-- Avro transitive dependencies-->
-                <relocation>
-                  <pattern>org.codehaus.jackson</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.codehaus.jackson</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>com.thoughtworks.paranamer</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.com.thoughtworks.paranamer</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>org.xerial.snappy</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.xerial.snappy</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>org.tukaani</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.tukaani</shadedPattern>
-                </relocation>
-                <relocation>
                    <pattern>org.eclipse.jetty</pattern>
                    
<shadedPattern>org.apache.pulsar.shade.org.eclipse</shadedPattern>
                 </relocation>
diff --git a/pulsar-client-schema/pom.xml b/pulsar-client-schema/pom.xml
new file mode 100644
index 0000000..a7d9f47
--- /dev/null
+++ b/pulsar-client-schema/pom.xml
@@ -0,0 +1,349 @@
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.pulsar</groupId>
+        <artifactId>pulsar</artifactId>
+        <version>2.2.0-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <artifactId>pulsar-client-schema</artifactId>
+    <name>Pulsar Client Schema</name>
+
+    <dependencies>
+
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>pulsar-common</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>provided</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.avro</groupId>
+            <artifactId>avro</artifactId>
+            <version>${avro.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.avro</groupId>
+            <artifactId>avro-protobuf</artifactId>
+            <version>${avro.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.protobuf</groupId>
+            <artifactId>protobuf-java</artifactId>
+            <version>${protobuf3.version}</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.fasterxml.jackson.module</groupId>
+            <artifactId>jackson-module-jsonSchema</artifactId>
+        </dependency>
+
+        <!-- Testing dependencies -->
+        <dependency>
+            <groupId>org.apache.pulsar</groupId>
+            <artifactId>pulsar-functions-proto</artifactId>
+            <version>${project.parent.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+        <extensions>
+            <extension>
+                <groupId>kr.motd.maven</groupId>
+                <artifactId>os-maven-plugin</artifactId>
+                <version>1.4.1.Final</version>
+            </extension>
+        </extensions>
+        <!-- Generate protobuf for testing purposes -->
+        <plugins>
+            <plugin>
+                <groupId>org.xolstice.maven.plugins</groupId>
+                <artifactId>protobuf-maven-plugin</artifactId>
+                <version>${protobuf-maven-plugin.version}</version>
+                <configuration>
+                    
<protocArtifact>com.google.protobuf:protoc:${protoc3.version}:exe:${os.detected.classifier}</protocArtifact>
+                    <checkStaleness>true</checkStaleness>
+                    <pluginId>grpc-java</pluginId>
+                    
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${protoc-gen-grpc-java.version}:exe:${os.detected.classifier}</pluginArtifact>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>test-compile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            
<createDependencyReducedPom>true</createDependencyReducedPom>
+                            
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
+
+                            <artifactSet>
+                                <includes>
+                                    
<include>org.apache.commons:commons-lang3</include>
+                                    
<include>commons-codec:commons-codec</include>
+                                    
<include>commons-collections:commons-collections</include>
+                                    <include>org.asynchttpclient:*</include>
+                                    
<include>io.netty:netty-codec-http</include>
+                                    
<include>io.netty:netty-transport-native-epoll</include>
+                                    
<include>org.reactivestreams:reactive-streams</include>
+                                    
<include>com.typesafe.netty:netty-reactive-streams</include>
+                                    <include>org.javassist:javassist</include>
+                                    <include>com.google.guava:guava</include>
+                                    
<include>com.google.code.gson:gson</include>
+                                    
<include>com.fasterxml.jackson.core</include>
+                                    <include>io.netty:netty</include>
+                                    <include>io.netty:netty-all</include>
+                                    
<include>org.apache.bookkeeper:circe-checksum</include>
+                                    <include>net.jpountz.lz4:lz4</include>
+                                    
<include>com.yahoo.datasketches:sketches-core</include>
+                                    <include>org.glassfish.jersey*:*</include>
+                                    <include>javax.ws.rs:*</include>
+                                    <include>javax.annotation:*</include>
+                                    <include>org.glassfish.hk2*:*</include>
+                                    
<include>com.fasterxml.jackson.*:*</include>
+                                    <include>io.grpc:*</include>
+                                    <include>com.yahoo.datasketches:*</include>
+                                    <include>io.netty:*</include>
+                                    <include>com.squareup.*:*</include>
+                                    <include>commons-*:*</include>
+                                    
<include>org.apache.httpcomponents:*</include>
+                                    <include>org.eclipse.jetty:*</include>
+                                    <include>com.google.auth:*</include>
+                                    <include>org.jvnet.mimepull:*</include>
+                                    <include>io.opencensus:*</include>
+                                    <include>org.objenesis:*</include>
+                                    <include>org.yaml:snakeyaml</include>
+
+                                    <include>org.apache.avro:*</include>
+                                    <!-- Avro transitive dependencies-->
+                                    
<include>org.codehaus.jackson:jackson-core-asl</include>
+                                    
<include>org.codehaus.jackson:jackson-mapper-asl</include>
+                                    
<include>com.thoughtworks.paranamer:paranamer</include>
+                                    
<include>org.xerial.snappy:snappy-java</include>
+                                    
<include>org.apache.commons:commons-compress</include>
+                                    <include>org.tukaani:xz</include>
+                                </includes>
+                            </artifactSet>
+                            <filters>
+                                <filter>
+                                    <artifact>net.jpountz.lz4:lz4</artifact>
+                                    <includes>
+                                        <include>**</include>
+                                    </includes>
+                                </filter>
+                                <filter>
+                                    
<artifact>org.apache.pulsar:pulsar-io-core</artifact>
+                                    <includes>
+                                        <include>**</include>
+                                    </includes>
+                                </filter>
+                                <filter>
+                                    
<artifact>org.apache.pulsar:pulsar-client-original</artifact>
+                                    <includes>
+                                        <include>**</include>
+                                    </includes>
+                                </filter>
+                            </filters>
+                            <relocations>
+                                <relocation>
+                                    <pattern>org.asynchttpclient</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.asynchttpclient</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.apache.commons</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.apache.commons</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.google.guava</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.google.guava</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.google.code</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.google.code</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.google.auth</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.google.auth</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.fasterxml.jackson</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.fasterxml.jackson</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>io.netty</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.io.netty</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    
<pattern>org.apache.pulsar.policies</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.apache.pulsar.policies</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    
<pattern>org.apache.pulsar.checksum</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.apache.pulsar.checksum</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.scurrilous.circe</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.scurrilous.circe</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>net.jpountz</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.net.jpountz</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.yahoo</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.yahoo</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.typesafe</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.typesafe</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.glassfish</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.glassfish</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>javax.ws</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.javax.ws</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>javax.annotation</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.javax.annotation</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>jersey</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.jersey</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.jvnet</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.jvnet</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.aopalliance</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.aopalliance</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>javassist</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.javassist</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>javax.inject</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.javax.inject</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.reactivestreams</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.reactivestreams</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.apache.avro</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.apache.avro</shadedPattern>
+                                </relocation>
+                                <!-- Avro transitive dependencies-->
+                                <relocation>
+                                    <pattern>org.codehaus.jackson</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.codehaus.jackson</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    
<pattern>com.thoughtworks.paranamer</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.thoughtworks.paranamer</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.xerial.snappy</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.xerial.snappy</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.tukaani</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.tukaani</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>io.grpc</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.io.grpc</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>okio</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.okio</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>com.squareup</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.com.squareup</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>io.opencensus</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.io.opencensus</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.eclipse.jetty</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.eclipse.jetty</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.apache.http</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.apache.http</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.objenesis</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.objenesis</shadedPattern>
+                                </relocation>
+                                <relocation>
+                                    <pattern>org.yaml</pattern>
+                                    
<shadedPattern>org.apache.pulsar.shade.org.yaml</shadedPattern>
+                                </relocation>
+                            </relocations>
+                            <transformers>
+                                <transformer 
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"
 />
+                                <transformer 
implementation="org.apache.maven.plugins.shade.resource.PluginXmlResourceTransformer"
 />
+                            </transformers>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/api/Schema.java 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/api/Schema.java
similarity index 81%
rename from pulsar-client/src/main/java/org/apache/pulsar/client/api/Schema.java
rename to 
pulsar-client-schema/src/main/java/org/apache/pulsar/client/api/Schema.java
index 12c35c6..3088a4d 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/api/Schema.java
+++ 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/api/Schema.java
@@ -18,7 +18,10 @@
  */
 package org.apache.pulsar.client.api;
 
+import org.apache.pulsar.client.impl.schema.AvroSchema;
 import org.apache.pulsar.client.impl.schema.BytesSchema;
+import org.apache.pulsar.client.impl.schema.JSONSchema;
+import org.apache.pulsar.client.impl.schema.ProtobufSchema;
 import org.apache.pulsar.client.impl.schema.StringSchema;
 import org.apache.pulsar.common.schema.SchemaInfo;
 
@@ -61,4 +64,17 @@ public interface Schema<T> {
      * Schema that can be used to encode/decode messages whose values are 
String. The payload is encoded with UTF-8.
      */
     Schema<String> STRING = new StringSchema();
+
+
+    static <T extends com.google.protobuf.GeneratedMessageV3> Schema<T> 
PROTOBUF(Class<T> clazz) {
+        return ProtobufSchema.of(clazz);
+    }
+
+    static <T> Schema<T> AVRO(Class<T> clazz) {
+        return AvroSchema.of(clazz);
+    }
+
+    static <T> Schema<T> JSON(Class<T> clazz) {
+        return JSONSchema.of(clazz);
+    }
 }
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/api/SchemaSerializationException.java
 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/api/SchemaSerializationException.java
similarity index 100%
rename from 
pulsar-client/src/main/java/org/apache/pulsar/client/api/SchemaSerializationException.java
rename to 
pulsar-client-schema/src/main/java/org/apache/pulsar/client/api/SchemaSerializationException.java
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
similarity index 100%
rename from 
pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
rename to 
pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/BytesSchema.java
 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/BytesSchema.java
similarity index 100%
rename from 
pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/BytesSchema.java
rename to 
pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/BytesSchema.java
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/JSONSchema.java
 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/JSONSchema.java
similarity index 100%
rename from 
pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/JSONSchema.java
rename to 
pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/JSONSchema.java
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java
 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java
similarity index 100%
rename from 
pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java
rename to 
pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/ProtobufSchema.java
diff --git 
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java
 
b/pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java
similarity index 100%
rename from 
pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java
rename to 
pulsar-client-schema/src/main/java/org/apache/pulsar/client/impl/schema/StringSchema.java
diff --git 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/AvroSchemaTest.java
 
b/pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/AvroSchemaTest.java
similarity index 95%
rename from 
pulsar-client/src/test/java/org/apache/pulsar/client/schemas/AvroSchemaTest.java
rename to 
pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/AvroSchemaTest.java
index a8b94de..84c060e 100644
--- 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/AvroSchemaTest.java
+++ 
b/pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/AvroSchemaTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.pulsar.client.schemas;
+package org.apache.pulsar.client.schema;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -50,7 +50,7 @@ public class AvroSchemaTest {
 
     private static final String SCHEMA_JSON = 
"{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache" +
             ".pulsar.client" +
-            
".schemas.AvroSchemaTest$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],"
 +
+            
".schema.AvroSchemaTest$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],"
 +
             
"\"default\":null},{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},"
 +
             
"{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\",{\"type\":\"record\","
 +
             
"\"name\":\"Bar\",\"fields\":[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null}]}";
diff --git 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/JSONSchemaTest.java
 
b/pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/JSONSchemaTest.java
similarity index 95%
rename from 
pulsar-client/src/test/java/org/apache/pulsar/client/schemas/JSONSchemaTest.java
rename to 
pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/JSONSchemaTest.java
index 0605f2d..2add60f 100644
--- 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/JSONSchemaTest.java
+++ 
b/pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/JSONSchemaTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.pulsar.client.schemas;
+package org.apache.pulsar.client.schema;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -47,7 +47,7 @@ public class JSONSchemaTest {
 
     private static final String SCHEMA_JSON = 
"{\"type\":\"record\",\"name\":\"Foo\",\"namespace\":\"org.apache" +
             ".pulsar.client" +
-            
".schemas.JSONSchemaTest$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],"
 +
+            
".schema.JSONSchemaTest$\",\"fields\":[{\"name\":\"field1\",\"type\":[\"null\",\"string\"],"
 +
             
"\"default\":null},{\"name\":\"field2\",\"type\":[\"null\",\"string\"],\"default\":null},"
 +
             
"{\"name\":\"field3\",\"type\":\"int\"},{\"name\":\"field4\",\"type\":[\"null\",{\"type\":\"record\","
 +
             
"\"name\":\"Bar\",\"fields\":[{\"name\":\"field1\",\"type\":\"boolean\"}]}],\"default\":null}]}";
diff --git 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/ProtobufSchemaTest.java
 
b/pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/ProtobufSchemaTest.java
similarity index 91%
rename from 
pulsar-client/src/test/java/org/apache/pulsar/client/schemas/ProtobufSchemaTest.java
rename to 
pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/ProtobufSchemaTest.java
index f099eb2..7ed575a 100644
--- 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/ProtobufSchemaTest.java
+++ 
b/pulsar-client-schema/src/test/java/org/apache/pulsar/client/schema/ProtobufSchemaTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.pulsar.client.schemas;
+package org.apache.pulsar.client.schema;
 
 import lombok.extern.slf4j.Slf4j;
 import org.apache.avro.Schema;
@@ -32,7 +32,7 @@ public class ProtobufSchemaTest {
     private static final String NAME = "foo";
 
     private static final String EXPECTED_SCHEMA_JSON = 
"{\"type\":\"record\",\"name\":\"TestMessage\"," +
-            
"\"namespace\":\"org.apache.pulsar.client.schemas.proto.Test$\",\"fields\":[{\"name\":\"stringField\","
 +
+            
"\"namespace\":\"org.apache.pulsar.client.schema.proto.Test$\",\"fields\":[{\"name\":\"stringField\","
 +
             
"\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"},\"default\":\"\"},"
 +
             
"{\"name\":\"doubleField\",\"type\":\"double\",\"default\":0},{\"name\":\"intField\",\"type\":\"int\","
 +
             
"\"default\":0},{\"name\":\"testEnum\",\"type\":{\"type\":\"enum\",\"name\":\"TestEnum\","
 +
@@ -56,8 +56,8 @@ public class ProtobufSchemaTest {
 
     @Test
     public void testSchema() {
-        
ProtobufSchema<org.apache.pulsar.client.schemas.proto.Test.TestMessage> 
protobufSchema
-                = 
ProtobufSchema.of(org.apache.pulsar.client.schemas.proto.Test.TestMessage.class);
+        ProtobufSchema<org.apache.pulsar.client.schema.proto.Test.TestMessage> 
protobufSchema
+                = 
ProtobufSchema.of(org.apache.pulsar.client.schema.proto.Test.TestMessage.class);
 
         Assert.assertEquals(protobufSchema.getSchemaInfo().getType(), 
SchemaType.PROTOBUF);
 
diff --git a/pulsar-client/src/test/proto/Test.proto 
b/pulsar-client-schema/src/test/proto/Test.proto
similarity index 94%
rename from pulsar-client/src/test/proto/Test.proto
rename to pulsar-client-schema/src/test/proto/Test.proto
index d140051..d640d2c 100644
--- a/pulsar-client/src/test/proto/Test.proto
+++ b/pulsar-client-schema/src/test/proto/Test.proto
@@ -19,7 +19,7 @@
 syntax = "proto3";
 package proto;
 
-option java_package = "org.apache.pulsar.client.schemas.proto";
+option java_package = "org.apache.pulsar.client.schema.proto";
 option java_outer_classname = "Test";
 
 enum TestEnum {
diff --git a/pulsar-client-shaded/pom.xml b/pulsar-client-shaded/pom.xml
index 3f66080..8e7eb98 100644
--- a/pulsar-client-shaded/pom.xml
+++ b/pulsar-client-shaded/pom.xml
@@ -58,6 +58,9 @@
               <minimizeJar>false</minimizeJar>
 
               <artifactSet>
+                <excludes>
+                  <exclude>org.apache.pulsar:pulsar-client-schema</exclude>
+                </excludes>
                 <includes>
                   <include>org.apache.pulsar:pulsar-io-core</include>
                   <include>org.apache.pulsar:pulsar-client-original</include>
@@ -94,14 +97,6 @@
                   <include>org.objenesis:*</include>
                   <include>org.yaml:snakeyaml</include>
 
-                  <include>org.apache.avro:*</include>
-                  <!-- Avro transitive dependencies-->
-                  <include>org.codehaus.jackson:jackson-core-asl</include>
-                  <include>org.codehaus.jackson:jackson-mapper-asl</include>
-                  <include>com.thoughtworks.paranamer:paranamer</include>
-                  <include>org.xerial.snappy:snappy-java</include>
-                  <include>org.apache.commons:commons-compress</include>
-                  <include>org.tukaani:xz</include>
                 </includes>
               </artifactSet>
               <filters>
@@ -180,27 +175,6 @@
                   
<shadedPattern>org.apache.pulsar.shade.org.apache.http</shadedPattern>
                 </relocation>
                 <relocation>
-                  <pattern>org.apache.avro</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.apache.avro</shadedPattern>
-                </relocation>
-                <!-- Avro transitive dependencies-->
-                <relocation>
-                  <pattern>org.codehaus.jackson</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.codehaus.jackson</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>com.thoughtworks.paranamer</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.com.thoughtworks.paranamer</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>org.xerial.snappy</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.xerial.snappy</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>org.tukaani</pattern>
-                  
<shadedPattern>org.apache.pulsar.shade.org.tukaani</shadedPattern>
-                </relocation>
-                <relocation>
                   <pattern>org.eclipse.jetty</pattern>
                   
<shadedPattern>org.apache.pulsar.shade.org.eclipse</shadedPattern>
                 </relocation>
diff --git a/pulsar-client/pom.xml b/pulsar-client/pom.xml
index 848cfef..2f624cd 100644
--- a/pulsar-client/pom.xml
+++ b/pulsar-client/pom.xml
@@ -41,6 +41,18 @@
 
     <dependency>
       <groupId>${project.groupId}</groupId>
+      <artifactId>pulsar-client-schema</artifactId>
+      <version>${project.parent.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.avro</groupId>
+          <artifactId>*</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+    <dependency>
+      <groupId>${project.groupId}</groupId>
       <artifactId>pulsar-io-core</artifactId>
       <version>${project.parent.version}</version>
     </dependency>
@@ -90,31 +102,6 @@
          </exclusion>
       </exclusions>
     </dependency>
-
-    <dependency>
-      <groupId>org.apache.avro</groupId>
-      <artifactId>avro</artifactId>
-      <version>${avro.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.avro</groupId>
-      <artifactId>avro-protobuf</artifactId>
-      <version>${avro.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>*</groupId>
-          <artifactId>*</artifactId>
-        </exclusion>
-      </exclusions>
-    </dependency>
-
-    <dependency>
-      <groupId>com.google.protobuf</groupId>
-      <artifactId>protobuf-java</artifactId>
-      <version>${protobuf3.version}</version>
-      <scope>provided</scope>
-    </dependency>
     
     <!-- httpclient-hostname-verification depends on below dependencies  --> 
     <dependency>
@@ -128,11 +115,6 @@
       <version>4.4.9</version>
     </dependency>
 
-    <dependency>
-      <groupId>com.fasterxml.jackson.module</groupId>
-      <artifactId>jackson-module-jsonSchema</artifactId>
-    </dependency>
-
     <!-- Testing dependencies -->
     <dependency>
       <groupId>org.apache.pulsar</groupId>
@@ -149,26 +131,5 @@
         <filtering>true</filtering>
       </resource>
     </resources>
-    <!-- Generate protobuf for testing purposes -->
-    <plugins>
-      <plugin>
-        <groupId>org.xolstice.maven.plugins</groupId>
-        <artifactId>protobuf-maven-plugin</artifactId>
-        <version>${protobuf-maven-plugin.version}</version>
-        <configuration>
-          
<protocArtifact>com.google.protobuf:protoc:${protoc3.version}:exe:${os.detected.classifier}</protocArtifact>
-          <checkStaleness>true</checkStaleness>
-          <pluginId>grpc-java</pluginId>
-          
<pluginArtifact>io.grpc:protoc-gen-grpc-java:${protoc-gen-grpc-java.version}:exe:${os.detected.classifier}</pluginArtifact>
-        </configuration>
-        <executions>
-          <execution>
-            <goals>
-              <goal>test-compile</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
   </build>
 </project>
diff --git 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/DefaultSchemasTest.java
 
b/pulsar-client/src/test/java/org/apache/pulsar/client/schema/DefaultSchemasTest.java
similarity index 88%
rename from 
pulsar-client/src/test/java/org/apache/pulsar/client/schemas/DefaultSchemasTest.java
rename to 
pulsar-client/src/test/java/org/apache/pulsar/client/schema/DefaultSchemasTest.java
index b9386fc..8ab0349 100644
--- 
a/pulsar-client/src/test/java/org/apache/pulsar/client/schemas/DefaultSchemasTest.java
+++ 
b/pulsar-client/src/test/java/org/apache/pulsar/client/schema/DefaultSchemasTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.pulsar.client.schemas;
+package org.apache.pulsar.client.schema;
 
 import org.apache.pulsar.client.api.ConsumerBuilder;
 import org.apache.pulsar.client.api.Message;
@@ -26,16 +26,14 @@ import org.apache.pulsar.client.api.PulsarClient;
 import org.apache.pulsar.client.api.PulsarClientException;
 import org.apache.pulsar.client.api.ReaderBuilder;
 import org.apache.pulsar.client.impl.schema.StringSchema;
+import org.testng.Assert;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
 
 public class DefaultSchemasTest {
     private PulsarClient client;
@@ -53,21 +51,21 @@ public class DefaultSchemasTest {
     public void testConsumerInstantiation() {
         ConsumerBuilder<String> stringConsumerBuilder = client.newConsumer(new 
StringSchema())
                 .topic(TEST_TOPIC);
-        assertNotNull(stringConsumerBuilder);
+        Assert.assertNotNull(stringConsumerBuilder);
     }
 
     @Test
     public void testProducerInstantiation() {
         ProducerBuilder<String> stringProducerBuilder = client.newProducer(new 
StringSchema())
                 .topic(TEST_TOPIC);
-        assertNotNull(stringProducerBuilder);
+        Assert.assertNotNull(stringProducerBuilder);
     }
 
     @Test
     public void testReaderInstantiation() {
         ReaderBuilder<String> stringReaderBuilder = client.newReader(new 
StringSchema())
                 .topic(TEST_TOPIC);
-        assertNotNull(stringReaderBuilder);
+        Assert.assertNotNull(stringReaderBuilder);
     }
 
     @Test
@@ -75,7 +73,7 @@ public class DefaultSchemasTest {
         String testString = "hello world";
         byte[] testBytes = testString.getBytes(StandardCharsets.UTF_8);
         StringSchema stringSchema = new StringSchema();
-        assertTrue(stringSchema.decode(testBytes).equals(testString));
+        Assert.assertTrue(stringSchema.decode(testBytes).equals(testString));
         assertEquals(stringSchema.encode(testString), testBytes);
 
         Message<String> msg1 = MessageBuilder.create(stringSchema)
@@ -90,7 +88,7 @@ public class DefaultSchemasTest {
 
         byte[] bytes2 = testString.getBytes(StandardCharsets.UTF_16);
         StringSchema stringSchemaUtf16 = new 
StringSchema(StandardCharsets.UTF_16);
-        assertTrue(stringSchemaUtf16.decode(bytes2).equals(testString));
+        Assert.assertTrue(stringSchemaUtf16.decode(bytes2).equals(testString));
         assertEquals(stringSchemaUtf16.encode(testString), bytes2);
     }
 

Reply via email to