2016-06-09 3 views
1

По какой-то причине CDI, похоже, не может вставить строку в WebSocket ServerEndpoint. Я получаю ошибку Unsatisfied dependencies for type String with qualifiers @HelloMessage. Я включил реализации Producer и ServerEndpoint ниже. Есть идеи? Инъекция, похоже, работает, если я создаю собственный класс (скажем, Messenger) и создаю вместо String.Почему CDI не может найти моего продюсера?

Классификатор Реализация

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

Реализация Производитель

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 Реализация

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

ответ

1

Мне нужно было импортировать javax.enterprise.inject.Produces вместо javax.ws.rs.Produces при определении Продюсера.

Реализация Производитель

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!"; 
    } 
} 
Смежные вопросы