【问题标题】:Use SAP Cloud SDK to integrate with a custom backend service (oData) based on VDM Generator使用 SAP Cloud SDK 与基于 VDM Generator 的自定义后端服务 (oData) 集成
【发布时间】:2019-07-03 19:47:02
【问题描述】:

我关注了 Alexander Duemont 的 blog,尝试实现一个使用 Cloud Foundry Destination 的 Java Spring Boot 应用程序。 Destination 背后有一个自定义 OData V2,来自本地 ERP 系统。对于本地开发人员,当我执行 Maven 构建时,由于依赖注入,Integration-Tests 模块注册失败

这是我的控制器的一部分

@RestController
@RequestMapping("/resources")
public class ClassificationsController {

    private static final Logger logger =    CloudLoggerFactory.getLogger(ClassificationsController.class);


    private final  ClassificationService service;


    public ClassificationsController(@Nonnull final ClassificationService service) {

        this.service = service;
    }
….. 

}

@Nonnull final ClassificationService 服务导致 org.springframework.beans.factory.UnsatisfiedDependencyException 我不能在生成的服务类 (Fluent) 上使用 Spring 原型注解来创建 Bean!

【问题讨论】:

  • 嗨新鸿基!我不确定您期望发生什么以及会发生什么。据我所知,生成的服务类没有任何注释,所以如果您希望 Spring 自动将它们注入某个地方(例如您的 ClassificationsController),那么您必须自己处理。或者,如果您不想让 Spring 做任何事情,但它目前正在尝试做一些事情,那么我可能还会检查您的配置。

标签: sap-cloud-sdk


【解决方案1】:

这个问题更可能与 Spring Boot 配置有关。

我假设ClassificationService 是一个接口并且实现类存在于同一个包中。

请确定...

  • ... 将ClassificationService 的实现类添加到您的组件扫描/测试运行时。随意分享集成测试代码来设置测试环境。可能缺少额外的类引用。

  • ... 正确注释 Spring Boot 项目的相应 Application 类。例如,假设您的ClassificationService 位于org.example.services.classification,而您的应用程序的其余部分使用org.example.app。遵循 Cloud SDK 指南时,您的基本 Application 类将如下所示:

    @SpringBootApplication
    @ComponentScan({"com.sap.cloud.sdk", "org.example.services.classification", "org.example.app"})
    @ServletComponentScan({"com.sap.cloud.sdk", "org.example.app"})
    public class Application extends SpringBootServletInitializer
    {
        @Override
        protected SpringApplicationBuilder configure( final SpringApplicationBuilder application )
        {
            return application.sources(Application.class);
        }
    
        public static void main( final String[] args )
        {
            SpringApplication.run(Application.class, args);
        }
    }
    
  • ...用javax.inject.Named注释ClassificationService的实现类。如果您有同一个接口的多个实现,请确保为未使用的类提供 @Named 注释的自定义(唯一)值。

  • ... 在启动期间在应用程序日志中查找异常(找不到类)。

【讨论】:

  • 谢谢@Alexander。我没有在组件 Scans 中注册 Service 类!一个问题:这个博客有 GIT 吗?另外,如何在本地调试我的代码?
猜你喜欢
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2020-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多