Skip to content

Instantly share code, notes, and snippets.

@fiunchinho
Last active July 30, 2018 18:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fiunchinho/c250427a2bb0186786c9 to your computer and use it in GitHub Desktop.
Save fiunchinho/c250427a2bb0186786c9 to your computer and use it in GitHub Desktop.
Feign Observable serialization doesn't work
apply plugin: 'java'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
dependencies {
compile 'com.netflix.feign:feign-core:8.14.4'
compile 'com.netflix.feign:feign-jackson:8.14.4'
compile 'com.netflix.feign:feign-hystrix:8.14.4'
}
package net.armesto.feign;
import feign.Feign;
import feign.Param;
import feign.RequestLine;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import rx.Observable;
import java.util.List;
public class ListExample {
public static void main(String[] args) {
GitHub github = Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.target(GitHub.class, "https://api.github.com");
github.contributors("netflix", "feign")
.forEach(
contributor -> System.out.println(contributor.login + " (" + contributor.contributions + ")")
);
}
}
class Contributor {
String login;
int contributions;
public void setLogin(String login) {
this.login = login;
}
public void setContributions(int contributions) {
this.contributions = contributions;
}
}
interface GitHub {
@RequestLine("GET /repos/{owner}/{repo}/contributors")
List<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);
}
package net.armesto.feign;
import feign.Feign;
import feign.Param;
import feign.RequestLine;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import rx.Observable;
public class ObservableExample {
public static void main(String[] args) {
GitHub github = HystrixFeign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.target(GitHub.class, "https://api.github.com");
github.contributors("netflix", "feign")
.subscribe(
contributor -> System.out.println(contributor.login + " (" + contributor.contributions + ")")
);
}
}
class Contributor {
String login;
int contributions;
public void setLogin(String login) {
this.login = login;
}
public void setContributions(int contributions) {
this.contributions = contributions;
}
}
interface GitHub {
@RequestLine("GET /repos/{owner}/{repo}/contributors")
Observable<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);
}
@fiunchinho
Copy link
Author

ListExample works flawlessly.
ObservableExample fails with

Exception in thread "main" feign.FeignException: Can not deserialize instance of rx.Observable out of START_ARRAY token
 at [Source: java.io.BufferedReader@4387b79e; line: 1, column: 1] reading GET https://api.github.com/repos/netflix/feign/contributors
    at feign.FeignException.errorReading(FeignException.java:48)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:132)
    at feign.SynchronousMethodHandler.invoke(SynchronousMethodHandler.java:74)
    at feign.ReflectiveFeign$FeignInvocationHandler.invoke(ReflectiveFeign.java:94)
    at net.armesto.feign.$Proxy4.contributors(Unknown Source)
    at net.armesto.feign.Application.main(Application.java:18)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of rx.Observable out of START_ARRAY token
 at [Source: java.io.BufferedReader@4387b79e; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:857)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:853)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromArray(BeanDeserializerBase.java:1257)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:157)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2787)
    at feign.jackson.JacksonDecoder.decode(JacksonDecoder.java:65)
    at feign.SynchronousMethodHandler.decode(SynchronousMethodHandler.java:151)
    at feign.SynchronousMethodHandler.executeAndDecode(SynchronousMethodHandler.java:121)
    ... 9 more

@niteshchaudhary
Copy link

Any solution to this?

@fiunchinho
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment