使用 SAP Cloud SDK 与基于 VDM Generator 的自定义后端服务 (oData) 集成

Use SAP Cloud SDK to integrate with a custom backend service (oData) based on VDM Generator

我遵循了 Alexander Duemont 的 blog,试图实现使用 Cloud Foundry Destination 的 Java Spring 引导应用程序。目标后面有一个自定义的 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 构造型注释来创建 Beans!

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

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

请确认...

  • ... 将 ClassificationService 的实现 class 添加到您的组件扫描/测试运行时。随意共享集成测试代码以设置测试环境。可能缺少额外的 class 参考。

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

    @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的实现class。如果您有同一接口的多个实现,请确保为 not-used class 注释 @Named 提供自定义(唯一)值。

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