Skip to content

Commit

Permalink
Merge pull request Netflix#272 from krutsko/ISSUE_218
Browse files Browse the repository at this point in the history
ISSUE-218 Makes converter replacement char configurable thru config.
  • Loading branch information
qiangdavidliu committed Dec 2, 2014
2 parents 671263c + dd09a96 commit a70a060
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -468,4 +468,16 @@ public int getCacheRefreshExecutorExponentialBackOffBound() {
return configInstance.getIntProperty(
namespace + "client.cacheRefresh.exponentialBackOffBound", 10).get();
}

@Override
public String getDollarReplacement() {
return configInstance.getStringProperty(
namespace + "dollarReplacement", "_-").get();
}

@Override
public String getEscapeCharReplacement() {
return configInstance.getStringProperty(
namespace + "escapeCharReplacement", "__").get();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -475,4 +475,18 @@ public interface EurekaClientConfig {
* @return maximum multiplier value for retry delay
*/
int getCacheRefreshExecutorExponentialBackOffBound();

/**
* Get a replacement string for Dollar sign <code>$</code> during serializing/deserializing information in eureka server.
*
* @return Replacement string for Dollar sign <code>$</code>.
*/
String getDollarReplacement();

/**
* Get a replacement string for underscore sign <code>_</code> during serializing/deserializing information in eureka server.
*
* @return Replacement string for underscore sign <code>_</code>.
*/
String getEscapeCharReplacement();
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package com.netflix.discovery.converters;

import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.DiscoveryManager;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications;
import com.thoughtworks.xstream.XStream;
Expand All @@ -41,7 +43,7 @@ public class JsonXStream extends XStream {

public JsonXStream() {
super(new JettisonMappedXmlDriver() {
private final NameCoder coder = new XmlFriendlyNameCoder();
private final NameCoder coder = initializeNameCoder();

protected NameCoder getNameCoder() {
return this.coder;
Expand All @@ -60,4 +62,10 @@ protected NameCoder getNameCoder() {
public static JsonXStream getInstance() {
return s_instance;
}

private static XmlFriendlyNameCoder initializeNameCoder(){
EurekaClientConfig clientConfig = DiscoveryManager
.getInstance().getEurekaClientConfig();
return new XmlFriendlyNameCoder(clientConfig.getDollarReplacement(), clientConfig.getEscapeCharReplacement());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,13 @@
package com.netflix.discovery.converters;

import com.netflix.appinfo.InstanceInfo;
import com.netflix.discovery.DiscoveryManager;
import com.netflix.discovery.EurekaClientConfig;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Applications;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;

/**
* An <tt>Xstream</tt> specific implementation for serializing and deserializing
Expand All @@ -39,7 +42,7 @@ public class XmlXStream extends XStream {
private static final XmlXStream s_instance = new XmlXStream();

public XmlXStream() {
super(new DomDriver());
super(new DomDriver(null, initializeNameCoder()));

registerConverter(new Converters.ApplicationConverter());
registerConverter(new Converters.ApplicationsConverter());
Expand All @@ -55,4 +58,10 @@ public XmlXStream() {
public static XmlXStream getInstance() {
return s_instance;
}

private static XmlFriendlyNameCoder initializeNameCoder(){
EurekaClientConfig clientConfig = DiscoveryManager
.getInstance().getEurekaClientConfig();
return new XmlFriendlyNameCoder(clientConfig.getDollarReplacement(), clientConfig.getEscapeCharReplacement());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,10 @@ protected void setupDiscoveryClient() {

protected void setupDiscoveryClient(int renewalIntervalInSecs) {
InstanceInfo.Builder builder = newInstanceInfoBuilder(renewalIntervalInSecs);
client = new DiscoveryClient(builder.build(), new DefaultEurekaClientConfig());

DefaultEurekaClientConfig config = new DefaultEurekaClientConfig();
// setup config in advance, used in initialize converter
DiscoveryManager.getInstance().setEurekaClientConfig(config);
client = new DiscoveryClient(builder.build(), config);
ApplicationInfoManager.getInstance().initComponent(new MyDataCenterInstanceConfig());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import com.netflix.config.ConfigurationManager;
import com.netflix.discovery.DefaultEurekaClientConfig;
import com.netflix.discovery.DiscoveryClient;
import com.netflix.discovery.DiscoveryManager;
import com.netflix.discovery.shared.Application;
import com.netflix.discovery.shared.Pair;
import com.netflix.eureka.mock.MockRemoteEurekaServer;
Expand Down Expand Up @@ -81,7 +82,10 @@ public Name getName() {
"http://localhost:" + mockRemoteEurekaServer.getPort() +
MockRemoteEurekaServer.EUREKA_API_BASE_PATH);

client = new DiscoveryClient(builder.build(), new DefaultEurekaClientConfig());
DefaultEurekaClientConfig config = new DefaultEurekaClientConfig();
// setup config in advance, used in initialize converter
DiscoveryManager.getInstance().setEurekaClientConfig(config);
client = new DiscoveryClient(builder.build(), config);
ApplicationInfoManager.getInstance().initComponent(new MyDataCenterInstanceConfig());
registry = new PeerAwareInstanceRegistry() {

Expand Down

0 comments on commit a70a060

Please sign in to comment.