java - Guice Injection into Google Cloud Endpoints Transformer -
i have google cloud endpoints application working guice.
i wish inject singleton api transformer.
let's wish transform somethingelse, declares it's transformer be:
import com.google.api.server.spi.config.transformer; import com.google.inject.inject; import com.google.inject.singleton; @singleton public class myapitransformer implements transformer<something, somethingelse> { private mysingleton singleton; @inject public myapitransformer(mysingleton singleton) { this.singleton = singleton; } @override public transformfrom(somethingelse somethingelse) { return singleton.something(somethingelse); } @override public somethingelse transformto(something something) { return singleton.somethingelse(something); } } notice wish delegate transformation guice singleton. when try above transformer following error:
java.io.ioexception: com.google.appengine.repackaged.org.codehaus.jackson.map.jsonmappingexception: failed instantiate custom serializer myapitransformer, constructors not found: [(interface java.lang.reflect.type), (class java.lang.class), ()]
it seems guice not providing apitransformers jackson not know how instantiate class without default constructor.
how can guice inject singleton apitransformer?
give transformer default constructor , static injection:
import com.google.api.server.spi.config.transformer; import com.google.inject.inject; public class myapitransformer implements transformer<something, somethingelse> { @inject private static mysingleton singleton; public myapitransformer() { } @override public transformfrom(somethingelse somethingelse) { return singleton.something(somethingelse); } @override public somethingelse transformto(something something) { return singleton.somethingelse(something); } } in module:
public class mymodule extends abstractmodule { @override protected void configure() { requeststaticinjection(myapitransformer.class); } }
Comments
Post a Comment