2015-01-05 8 views
0

시작 J2EE 7 - Antonio Gonclaves에서 소스 코드를 읽는 중 "org.glassfish.hk2.api.UnsatisfiedDependencyException"예외가 발생했습니다. 풀다. 한정자가 없으면 응용 프로그램이 올바르게 작동합니다. Netbeans 7.3.1과 Glassfish 4.0을 사용하고 있습니다. 다음은 내 소스 코드와 예외 로그입니다Jersey 2.0 및 CDI에서 한정자 사용

이 나는 ​​

@Stateless 
@ISBNAlt 
public class ISBNGenerator implements INumberGenerator{ 

    @Override 
    public String generateNumberr() { 
     return "ISBN generated"; 
    } 

}

두 번째 서비스 클래스

@Stateless 
@ISBNDef 
public class ISSNGenerator implements INumberGenerator{ 

    @Override 
    public String generateNumberr() { 
     return "Working version 2"; 
    } 


} 

자원을 차별화하는 @Qualifiers을 사용하고 내 서비스 클래스는 등급

@ManagedBean 
@RequestScoped 
@Path("/test") 
public class TestClass { 

    @Inject @ISBNAlt 
    private INumberGenerator ng; 


    @Produces(MediaType.TEXT_PLAIN) 
    @GET 
    public String getValue() 
    { 
     return ng.generateNumberr(); 
    } 
} 

그리고 난 내 응용 프로그램을 배포하고 REST 엔드 포인트를 호출 한 후 자원 클래스

import java.util.Set; 
import javax.ws.rs.ApplicationPath; 
import javax.ws.rs.core.Application; 

/** 
* 
* @author naphlin 
*/ 
@ApplicationPath("webresource") 
public class ApplicationConfig extends Application{ 

    @Override 
    public Set<Class<?>> getClasses() { 
     Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); 
     // following code can be used to customize Jersey 2.0 JSON provider: 
     try { 
      Class jsonProvider = Class.forName("org.glassfish.jersey.jackson.JacksonFeature"); 
      // Class jsonProvider = Class.forName("org.glassfish.jersey.moxy.json.MoxyJsonFeature"); 
      // Class jsonProvider = Class.forName("org.glassfish.jersey.jettison.JettisonFeature"); 
      resources.add(jsonProvider); 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     addRestResourceClasses(resources); 
     return resources; 
    } 

    /** 
    * Do not modify addRestResourceClasses() method. 
    * It is automatically re-generated by NetBeans REST support to populate 
    * given list with all resources defined in the project. 
    */ 
    private void addRestResourceClasses(Set<Class<?>> resources) { 
     resources.add(helpers.TestClass.class); 
    } 

} 

을 추가하기위한이 클래스를 사용, 난이 예외

Info: Initiating Jersey application, version Jersey: 2.0 2013-05-03 14:50:15... 
Warning: StandardWrapperValve[config.ApplicationConfig]: Servlet.service() for servlet config.ApplicationConfig threw exception 
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=INumberGenerator,parent=TestClass,qualifiers={@annotations.ISBNAlt()}),position=-1,optional=false,self=false,unqualified=null,1495563497) 
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:74) 
    at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:191) 
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:214) 
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:311) 
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:448) 
    at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:157) 
    at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2204) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:579) 
    at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:566) 
    at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:172) 
    at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:185) 
    at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:105) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:118) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:121) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:121) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:121) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:102) 
    at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:62) 
    at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:215) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:198) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:946) 
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:323) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673) 
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188) 
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191) 
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168) 
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189) 
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136) 
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114) 
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77) 
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838) 
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55) 
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564) 
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544) 
    at java.lang.Thread.run(Thread.java:745) 

내 컴퓨터에있는 모든

답변

0

작품을 얻을; 오) 아니, 실제로 JBoss Forge로 코드를 재현했습니다. 원하는 경우 다음 JBoss Forge 스크립트를 실행할 수 있습니다.

$ project-new --named testrest 
$ rest-setup 
$ cdi-setup 
$ cdi-new-qualifier --named ISBNAlt --targetPackage org.testrest.util 
$ cdi-new-qualifier --named ISBNDef --targetPackage org.testrest.util 
$ java-new-interface --named INumberGenerator2 --targetPackage org.testrest.service 
$ ejb-new-bean --named ISBNGenerator 
$ ejb-new-bean --named ISSNGenerator 
$ faces-setup 

WildFly에 배포 했으므로 정상적으로 작동합니다. BTW, 단순화로 REST 엔드 포인트에서 @ManagedBean 및 @RequestScoped가 필요하지 않습니다. 제거하고 GlassFish에 다시 배포하십시오. WildFly에서 먼저 시도해 볼 수도 있습니다.