2016-06-09 10 views
1

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; 
} 

Antwort

1

Ich musste anstelle von javax.ws.rs.Produces importieren, wenn ich den Produzenten definiere.

Producer Umsetzung

import java.io.Serializable; 

import javax.inject.Named; 
import javax.enterprise.inject.Produces; 

public 
class StringProducer 
implements Serializable 
{ 
    @Produces 
    @HelloMessage 
    public 
    String getMessage() 
    { 
     return "Hello, from Message!"; 
    } 
}