You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@curator.apache.org by "Dan Diodati (JIRA)" <ji...@apache.org> on 2013/10/17 23:00:51 UTC

[jira] [Created] (CURATOR-67) Issue with default JSONInstanceSerializer for discovery service builder

Dan Diodati created CURATOR-67:
----------------------------------

             Summary: Issue with default JSONInstanceSerializer for discovery service builder
                 Key: CURATOR-67
                 URL: https://issues.apache.org/jira/browse/CURATOR-67
             Project: Apache Curator
          Issue Type: New Feature
          Components: Framework
    Affects Versions: 2.2.0-incubating
            Reporter: Dan Diodati


There is a problem with the ServiceDiscoveryBuilder.java not letting me provide a custom InstanceSerializer.

This build creates a new instance of the JsonInstanceSerailzer in the main builder method before I get a chance to provide my own instance in the serializer method.
In my case it ends up giving me a incompatible class error due to the fact that I have a legacy system which is using an older version of Jackson library( ~1.5) which is not binary compatible with the jackson version used by ServiceDiscovery (~1.9).
So I tried to provide my own serializer but the default instance is always being created.

Look at https://git-wip-us.apache.org/repos/asf?p=incubator-curator.git;a=blob;f=curator-x-discovery/src/main/java/org/apache/curator/x/discovery/ServiceDiscoveryBuilder.java;h=ab62004e72d138e1195e01ce4d3e2f1a7d4825a6;hb=HEAD
     /**
  34      * Return a new builder. The builder will be defaulted with a {@link JsonInstanceSerializer}.
  35      *
  36      * @param payloadClass the class of the payload of your service instance (you can use {@link Void}
  37      * if your instances don't need a payload)
  38      * @return new builder
  39      */
  40     public static<T> ServiceDiscoveryBuilder<T>     builder(Class<T> payloadClass)
  41     {
  42         return new ServiceDiscoveryBuilder<T>(payloadClass).serializer(new JsonInstanceSerializer<T>(payloadClass));
  43     }


So to fix this can we change this to :
     /**
  34      * Return a new builder. The builder will be defaulted with a {@link JsonInstanceSerializer}.
  35      *
  36      * @param payloadClass the class of the payload of your service instance (you can use {@link Void}
  37      * if your instances don't need a payload)
  38      * @return new builder
  39      */
  40     public static<T> ServiceDiscoveryBuilder<T>     builder(Class<T> payloadClass)
  41     {
  42         return new ServiceDiscoveryBuilder<T>(payloadClass);
  43     }

Then in the build method from:
  45     /**
  46      * Build a new service discovery with the currently set values
  47      *
  48      * @return new service discovery
  49      */
  50     public ServiceDiscovery<T>      build()
  51     {
  52         return new ServiceDiscoveryImpl<T>(client, basePath, serializer, thisInstance);
  53     }

To something like:
  44 
  45     /**
  46      * Build a new service discovery with the currently set values
  47      *
  48      * @return new service discovery
  49      */
  50     public ServiceDiscovery<T>      build()
  51     {
		If (serializer == null) {
                   serializer = new JsonInstanceSerializer<T>(payloadClass);  // NOTE Need to add payloadClass as a private data member too
                }
  52         return new ServiceDiscoveryImpl<T>(client, basePath, serializer, thisInstance);
  53     }



--
This message was sent by Atlassian JIRA
(v6.1#6144)