我首先要指出的是,这是我在职业生涯中曾经处理过的浪费时间的最大问题.(现在已经过了两天,基本上没有进展.)我尝试的每一个"解决方案"或"解决方案"都没有用,所以我被封锁了,非常渴望得到一些帮助.
简而言之,问题是Jersey/HK2似乎总是实例化我的Spring管理的bean,因为它们已经被Spring实例化了,这告诉我jersey-spring3没有完成它的工作,或者至少不是我当前的设置(或者到目前为止我尝试过的约50种设置的排列.)
请注意,当我使用空构造函数时,这些资源字段在运行时为空.
我不明白为什么我当前的设置不起作用,因为我本质上是复制这个在线示例
任何帮助都超过赞赏!!
组态- - - - - pom.xml - - - - -
org.springframework spring-core ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-instrument ${spring.version} org.springframework spring-instrument-tomcat ${spring.version} org.springframework spring-orm ${spring.version} org.springframework spring-tx ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-core org.springframework spring-beans org.springframework.security spring-security-core ${spring.version} org.springframework.security spring-security-config ${spring.version} org.springframework.security spring-security-ldap ${spring.version} org.springframework.security spring-security-parent ${spring.version} tests org.springframework.security spring-security-config ${spring.version} tests org.springframework.security spring-security-acl ${spring.version} org.springframework spring-context org.springframework spring-support org.springframework spring-jdbc org.springframework spring-dao org.springframework spring-webmvc ${spring.version} org.springframework spring-test ${spring.version} test org.glassfish.jersey.core jersey-client ${jersey.version} org.glassfish.jersey.containers jersey-container-servlet ${jersey.version} org.glassfish.jersey.media jersey-media-json-processing ${jersey.version} org.glassfish.jersey.test-framework.providers jersey-test-framework-provider-grizzly2 2.4 test org.glassfish.jersey.ext jersey-spring3 ${jersey.version} com.google.code.gson gson ${gson.version} 3.0.5.RELEASE 2.4.1 2.2.4
- - - - - web.xml - - - - -
contextConfigLocation classpath:/beans.xml Jersey REST Service org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application fubar.rest.FubarJerseyApplication 1 Jersey REST Service /api/*
- - - - - beans.xml(上下文配置) - - - - -
- - - - - beans-api.xml - - - - -
码
- - - - - 资源(JAX-RS) - - - - -
@Path(RESTLocationResourceV1.PathFields.PATH_ROOT) @Produces({V1_JSON, APPLICATION_JSON}) public class LocationResource extends ResourceBase{ private static final Logger logger = Logger.getLogger(LocationResource.class); @Inject public LocationResource(final LocationServiceV1 v1Loc, final LocationServiceV2 v2Loc) { super(v1Loc, v2Loc); logger.info(format(Messages.INF_INSTANTIATED, "LocationResource")); } @GET @Path(PathFields.SUBPATH_LIST) public LocationListV1 listV1(@HeaderParam(HEADER_API_KEY) String apiKey) throws ApplicationException { // Implementation } @GET @Path(PathFields.SUBPATH_SEARCH) public LocationListV1 searchV1(@HeaderParam(HEADER_API_KEY) String apiKey, @QueryParam(QueryFields.QUERY) String likeText) throws ApplicationException { // Implementation } }
- - - - - 服务(春豆) - - - - -
public class LocationServiceV1 extends ServiceBaseV1implements ILocationServiceV1 { @Autowired private LocationDao daoLoc; public LocationServiceV1() { super(new LocationBeanToJsonTranslatorV1()); } @Override public LocationListV1 listV1() throws ApplicationException { // Implementation } @Override public LocationListV1 searchV1(String likeText) throws ApplicationException { // Implementation } }
(版本2基本相同)
- - - - - 申请表(泽西岛) - - - - -
public class FubarJerseyApplication extends ResourceConfig { private static final class Messages { static final String INF_STARTING_APPLICATION = "Starting %s!"; } private static final Logger logger = Logger.getLogger(FubarJerseyApplication.class); public FubarJerseyApplication() { packages("fubar.rest"); logger.info(format(Messages.INF_STARTING_APPLICATION, this.getClass().getName())); } }调用(客户)
curl http://my-ip-address/fubar/api/location/list
(500内部服务器错误)
错误(服务器)org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=LocationServiceV1,parent= LocationResource,qualifiers={}),position=0,optional=false,self=false, unqualified=null,344016971) at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:74) at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:208) at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:225) at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:329) at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:456) at org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:158) at org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2350) at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:612) at org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:597) at org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:173) at org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:185) at org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:103) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:128) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:131) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:131) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:131) at org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:131) at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:110) at org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:65) at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:250) 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:318) at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236) at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:983) at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:361) 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.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at fubar.server.springframework.SessionFilter.doFilter(SessionFilter.java:44) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at fubar.server.springframework.loader.ContextLoaderHttpInterceptor$LoaderState.filter(ContextLoaderHttpInterceptor.java:75) at fubar.server.springframework.loader.ContextLoaderHttpInterceptor$StartedState.filter(ContextLoaderHttpInterceptor.java:120) at fubar.server.springframework.loader.ContextLoaderHttpInterceptor.doFilter(ContextLoaderHttpInterceptor.java:62) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:311) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) at java.lang.Thread.run(Thread.java:662)API日志
Dec 10, 2013 13:36:28 INFO [main] fubar.rest.FubarJerseyApplication - Starting fubar.rest.FubarJerseyApplication! Dec 10, 2013 13:38:06 INFO [pool-1-thread-1] resources.location.impl.LocationResource - LocationResource has been instantiated Dec 10, 2013 13:38:06 INFO [pool-1-thread-1] resources.view.impl.ViewResource - ViewResource has been instantiated
更新 - 发现这个:
卡塔利娜日志Dec 10, 2013 1:36:42 PM org.glassfish.jersey.server.ApplicationHandler initialize INFO: Initiating Jersey application, version Jersey: 2.4.1 2013-11-08 12:08:47... Dec 10, 2013 1:36:43 PM org.glassfish.jersey.server.spring.SpringComponentProvider initialize SEVERE: Spring context lookup failed, skipping spring component provider initialization. Dec 10, 2013 1:38:00 PM com.sun.xml.bind.v2.runtime.reflect.opt.Injector inject
...所以在SpringComponentProvider #initialize中找不到ApplicationContext .