Angel eureka clients can use brixton eureka servers.
Updates so CloudJacksonJson extension is properly recognized by Eureka Server as LegacyJacksonJson. see gh-978 fixes gh-1111
This commit is contained in:
@@ -11,7 +11,9 @@ import org.springframework.util.StringUtils;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.Version;
|
||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.ObjectReader;
|
||||
import com.fasterxml.jackson.databind.ObjectWriter;
|
||||
@@ -36,9 +38,13 @@ public class CloudJacksonJson extends LegacyJacksonJson {
|
||||
|
||||
protected final CloudJacksonCodec codec = new CloudJacksonCodec();
|
||||
|
||||
public CloudJacksonCodec getCodec() {
|
||||
return codec;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String codecName() {
|
||||
return getCodecName(this.getClass());
|
||||
return getCodecName(LegacyJacksonJson.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -120,25 +126,26 @@ public class CloudJacksonJson extends LegacyJacksonJson {
|
||||
|
||||
static class CloudInstanceInfoSerializer extends InstanceInfoSerializer {
|
||||
@Override
|
||||
public void serialize(InstanceInfo info, JsonGenerator jgen,
|
||||
public void serialize(final InstanceInfo info, JsonGenerator jgen,
|
||||
SerializerProvider provider) throws IOException {
|
||||
|
||||
if (info.getInstanceId() == null && info.getMetadata() != null) {
|
||||
String instanceId = calculateInstanceId(info);
|
||||
info = new InstanceInfo.Builder(info).setInstanceId(instanceId).build();
|
||||
}
|
||||
|
||||
super.serialize(info, jgen, provider);
|
||||
InstanceInfo updated = updateIfNeeded(info);
|
||||
super.serialize(updated, jgen, provider);
|
||||
}
|
||||
}
|
||||
|
||||
private String calculateInstanceId(InstanceInfo info) {
|
||||
static InstanceInfo updateIfNeeded(final InstanceInfo info) {
|
||||
if (info.getInstanceId() == null && info.getMetadata() != null) {
|
||||
String instanceId = info.getMetadata().get("instanceId");
|
||||
String hostName = info.getHostName();
|
||||
if (instanceId != null && StringUtils.hasText(hostName) && !instanceId.startsWith(hostName)) {
|
||||
instanceId = hostName + ":" + instanceId;
|
||||
if (StringUtils.hasText(instanceId)) {
|
||||
// backwards compatibility for Angel
|
||||
if (StringUtils.hasText(info.getHostName()) && !instanceId.startsWith(info.getHostName())) {
|
||||
instanceId = info.getHostName()+":"+instanceId;
|
||||
}
|
||||
return new InstanceInfo.Builder(info).setInstanceId(instanceId).build();
|
||||
}
|
||||
return instanceId == null ? hostName : instanceId;
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
static class CloudInstanceInfoDeserializer extends InstanceInfoDeserializer {
|
||||
@@ -146,5 +153,12 @@ public class CloudJacksonJson extends LegacyJacksonJson {
|
||||
protected CloudInstanceInfoDeserializer(ObjectMapper mapper) {
|
||||
super(mapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public InstanceInfo deserialize(JsonParser jp, DeserializationContext context) throws IOException {
|
||||
InstanceInfo info = super.deserialize(jp, context);
|
||||
InstanceInfo updated = updateIfNeeded(info);
|
||||
return updated;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
|
||||
import com.netflix.appinfo.ApplicationInfoManager;
|
||||
import com.netflix.discovery.EurekaClient;
|
||||
import com.netflix.discovery.EurekaClientConfig;
|
||||
import com.netflix.discovery.converters.EurekaJacksonCodec;
|
||||
import com.netflix.discovery.converters.wrappers.CodecWrapper;
|
||||
import com.netflix.discovery.converters.wrappers.CodecWrappers;
|
||||
import com.netflix.eureka.DefaultEurekaServerContext;
|
||||
@@ -102,6 +103,7 @@ public class EurekaServerConfiguration extends WebMvcConfigurerAdapter {
|
||||
|
||||
@Value("${eureka.server.defaultOpenForTrafficCount:1}")
|
||||
private int defaultOpenForTrafficCount;
|
||||
public static final CloudJacksonJson JACKSON_JSON = new CloudJacksonJson();
|
||||
|
||||
@Bean
|
||||
public HasFeatures eurekaServerFeature() {
|
||||
@@ -128,15 +130,19 @@ public class EurekaServerConfiguration extends WebMvcConfigurerAdapter {
|
||||
return new EurekaController(this.applicationInfoManager);
|
||||
}
|
||||
|
||||
static {
|
||||
CodecWrappers.registerWrapper(JACKSON_JSON);
|
||||
EurekaJacksonCodec.setInstance(JACKSON_JSON.getCodec());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ServerCodecs serverCodecs() {
|
||||
CodecWrappers.registerWrapper(new CloudJacksonJson());
|
||||
return new CloudServerCodecs(this.eurekaServerConfig);
|
||||
}
|
||||
|
||||
private static CodecWrapper getFullJson(EurekaServerConfig serverConfig) {
|
||||
CodecWrapper codec = CodecWrappers.getCodec(serverConfig.getJsonCodecName());
|
||||
return codec == null ? CodecWrappers.getCodec(CloudJacksonJson.class) : codec;
|
||||
return codec == null ? CodecWrappers.getCodec(JACKSON_JSON.codecName()) : codec;
|
||||
}
|
||||
|
||||
private static CodecWrapper getFullXml(EurekaServerConfig serverConfig) {
|
||||
|
||||
Reference in New Issue
Block a user