Aus irgendeinem Grund scheint CDI keine Zeichenfolge in einen WebSocket ServerEndpoint zu injizieren. Ich erhalte den Fehler Unsatisfied dependencies for type String with qualifiers @HelloMessage
. Ich habe die Producer- und ServerEndpoint-Implementierungen unten aufgeführt. Irgendwelche Ideen? Die Injektion scheint zu funktionieren, wenn ich eine benutzerdefinierte Klasse (zB Messenger) erstelle und diese anstelle von String erzeuge.Warum kann CDI meinen Hersteller nicht finden?
Qualifier Implementierung
import javax.inject.Qualifier;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Qualifier
@Retention(RUNTIME)
@Target({TYPE, METHOD, FIELD, PARAMETER})
public
@interface HelloMessage
{
}
Producer Umsetzung
import java.io.Serializable;
import javax.inject.Named;
import javax.ws.rs.Produces;
public
class StringProducer
implements Serializable
{
@Produces
@HelloMessage
public
String getMessage()
{
return "Hello, from Message!";
}
}
ServerEndpoint Implementierung
import javax.inject.Inject;
import javax.inject.Named;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint(value = "/test")
public
class TestEndpoint
{
@OnMessage
public
void onMessage(Session session, String unused)
{
System.out.println(this.message);
}
@Inject @HelloMessage
private String message;
}