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)