【问题标题】:GWT RequestFactory Error when firing request : org.springframework.beans.factory.NoSuchBeanDefinitionException触发请求时出现 GWT RequestFactory 错误:org.springframework.beans.factory.NoSuchBeanDefinitionException
【发布时间】:2023-03-30 11:13:01
【问题描述】:

我有一个 maven+spring+gwt 项目,我想在其中使用请求工厂。我就是想不通为什么会出现这个异常。

请求工厂:

   public interface StarRequestFactory extends RequestFactory {

@Service(value = RaduService.class, locator = GWTServiceLocator.class)
public interface RaduRequestContext extends RequestContext {
       Request<Void> save( );
    }

RaduRequestContext raduRequestcontext();
}

服务:

public class RaduService {

  public void save(){
    System.out.println("You have saved.");
  }

} 

定位器:

public class GWTServiceLocator implements ServiceLocator,
    ApplicationContextAware {
  private ApplicationContext context;

  @Override
  public Object getInstance(Class<?> clazz) {
    return context.getBean(clazz);
  }

  @Override
  public void setApplicationContext(ApplicationContext context)
        throws BeansException {
    this.context = context;
  }

}

在我的入口点类中我提出请求:

requestFactory.raduRequestcontext().save().fire(new Receiver<Void>() {

        @Override
        public void onSuccess(Void response) {
            System.out.println("Success");

        }
    });

在这个请求中,我收到以下错误:

[错误] 2012 年 3 月 25 日下午 3:35:36 com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost [错误] 严重:意外错误 [错误] org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义类型 [com.base.star.shared.services.StarRequestFactory$RaduRequestContext] 的唯一 bean:预期单个 bean,但发现 0: [错误] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:269) [错误] 在 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1083) [错误] 在 com.base.star.server.integration.GWTServiceLocator.getInstance(GWTServiceLocator.java:25) [错误] 在 com.base.star.server.integration.GWTServiceLayerDecorator.createServiceInstance(GWTServiceLayerDecorator.java:43) [错误] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) [错误] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [错误] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [错误] 在 java.lang.reflect.Method.invoke(Method.java:601) [错误] 在 com.google.web.bindery.requestfactory.server.ServiceLayerCache.getOrCache(ServiceLayerCache.java:233) [错误] 在 com.google.web.bindery.requestfactory.server.ServiceLayerCache.createServiceInstance(ServiceLayerCache.java:117) [错误] 在 com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.processInvocationMessages(SimpleRequestProcessor.java:451) [错误] 在 com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:225) [错误] 在 com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:127) ..................................................... ........

有人知道这是怎么回事吗?

如果需要,我可以发布 pom。

【问题讨论】:

    标签: spring gwt maven requestfactory


    【解决方案1】:

    似乎是 Spring 错误:

    您是用@Service 注释您的RaduService 类还是在您的ApplicationContext.xml 文件中将它定义为一个bean?

    【讨论】:

    • 我在 ApplicationContext.xml 中将其定义为:
    • 调试您的服务代码并在您的GWTServiceLocatorpublic Object getInstance(Class&lt;?&gt; clazz) 中放置一个断点并检查它尝试实例化的内容。
    • 它尝试实例化:接口 com.base.star.shared.services.StarRequestFactory$RaduRequestContext。这样可以吗?
    • 不,不是。它应该实例化您的RaduService.class。检查代码中的某处是否有 @Service(value = RaduRequestContext.class, locator = GWTServiceLocator.class) 而不是 @Service(value = RaduService.class, locator = GWTServiceLocator.class)
    • 我已经检查过了。我拥有的唯一服务注释是针对 RaduRequestContext 的,它是:@Service(value = RaduService.class, locator = GWTServiceLocator.class)