Arbeits Im Anschluss an this SO thread, meine Frage ist, ob ich etwas grundlegend falsch hier so mache:Jersey Konstruktor Injektion mit @Context nicht
Glassfish Mit 4.1, Ich versuche, ein MessageBodyReader
zu schreiben, die einen Konstruktor hat wie dies:
package com.acme;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.Providers;
import javax.ws.rs.Consumes;
@Provider
@Consumes("application/xml")
public class MyMessageBodyReader implements MessageBodyReader<Object> {
public MyMessageBodyReader(@Context Providers ps) {
// try to do something with ps here
// e.g. pass to a superclass constructor,
// as required by the solution in the other thread
}
[...] // implemented interface methods
}
Aber was auch immer ich tun wRT Konfiguration umgibt, habe ich immer eine Folge von diesen Ausnahmen:
2016-06-07T17:19:28.484+0200|WARN: The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 1
org.jboss.weld.exceptions.CreationException: WELD-001530: Cannot produce an instance of class com.acme.MyMessageBodyReader.
at org.jboss.weld.injection.producer.NonProducibleInjectionTarget.produce(NonProducibleInjectionTarget.java:55)
at org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider$CdiFactory$2.getInstance(CdiComponentProvider.java:242)
at org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider$CdiFactory.provide(CdiComponentProvider.java:189)
[...]
gefolgt von
WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 2
org.jboss.weld.exceptions.CreationException: WELD-001530: Cannot produce an instance of class com.acme.MyMessageBodyReader.
at org.jboss.weld.injection.producer.NonProducibleInjectionTarget.produce(NonProducibleInjectionTarget.java:55)
at org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider$CdiFactory$2.getInstance(CdiComponentProvider.java:242)
at org.glassfish.jersey.gf.cdi.internal.CdiComponentProvider$CdiFactory.provide(CdiComponentProvider.java:189)
[...]
MultiException stack 2 of 2
java.lang.IllegalStateException: Unable to perform operation: create on org.glassfish.jersey.message.internal.MessageBodyFactory
at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:389)
at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:461)
at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:114)
[...]
ich einige Beispiele für die Injektion Providers
in einen Konstruktor gefunden habe, nicht zuletzt in den Unterklassen von XmlRootElementJaxbProvider
, die mit Glassfish 4.1 Schiff - nach allem, ich will sowieso ihre Klassenhierarchie wieder zu verwenden, wie Es ist im verknüpften Thread gemacht.
Vielen Dank im Voraus für eine Beratung.
Ist das noch die modifizierte MessageBodyFactory verwenden Sie in Ihren anderen Thread beschrieben? Wenn Sie die Hauptklassen in Jersey gehackt und neu aufgebaut haben und Fehler erhalten, die darauf hindeuten, dass die Klasse nicht bereitgestellt werden kann - diese beiden Dinge sind wahrscheinlich miteinander verknüpft. Plus Ihr Code hat jetzt keine Portabilität ... – BadZen
Hinweis, ich bin nicht der Autor in dem anderen Thread. Ich habe die MessageBodyFactory (noch) nicht modifiziert, wie es das OP getan hat, wie ich zuerst sehen wollte, wenn ich einen angepassten MessageBodyReader/Writer überhaupt bekommen und laufen lassen könnte. –