我们目前正在使用SAP Cloud Platform Provisioning SDK(它是SAP Cloud SDK的一部分)在Spring Boot应用程序中提供自己的OData服务。我们正在各自的maven模块中创建集成测试,但是当通过Maven执行此测试时,它将失败并显示以下堆栈跟踪:
[http-nio-auto-1-exec-1] ERROR com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate - Error initializing the service <service-name>
java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(File.java:418)
at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.getFilefromFileName(CDXRuntimeDelegate.java:410)
at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.getFileForService(CDXRuntimeDelegate.java:387)
at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.initialize(CDXRuntimeDelegate.java:252)
at com.sap.cloud.sdk.service.prov.v2.rt.cdx.CDXRuntimeDelegate.getModelProvider(CDXRuntimeDelegate.java:204)
at com.sap.gateway.core.api.provider.delegate.ProviderFactory.createModelProvider(ProviderFactory.java:202)
at com.sap.gateway.core.api.provider.delegate.ProviderFactory.getEdmModelProvider(ProviderFactory.java:128)
at com.sap.gateway.core.odata4sap.ServiceFactory.createService(ServiceFactory.java:135)
看代码,它似乎与以下帖子有关:
Why is my URI not hierarchical?
在SDK中,OData EDMX文件被读取为文件,但是由于在执行Maven时,它位于(应用程序模块的)单独的JAR文件中,因此无法以这种方式访问。相反,它需要作为流读取,这反过来似乎需要进行一些重构。
作为一种解决方法,我将EDMX文件复制到了集成测试模块的src / test / resources / edmx。
我现在想知道我是否在这里遗漏了一些东西,或者按照SAP Cloud SDK通常执行的集成测试是否与供应框架不兼容?
答案 0 :(得分:1)
尽管我不太了解您所解释的用例,但我还是建议您检阅Maven documentation on additional resource folders。除了自己的/resources
文件夹之外,您还可以将 integration-tests 模块指向 application 模块的相应/resources
文件夹。我认为相对路径应该可行。
答案 1 :(得分:1)
除了亚历山大已经发布的内容之外,您还可以通过maven自动复制文件,如以下代码片段所示:
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<!-- Copying the edmx files to the integration-tests project -->
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/src/test/resources/edmx</outputDirectory>
<resources>
<resource>
<directory>${project.parent.basedir}/srv/src/main/resources/edmx</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
<execution>
<id>default-testResources</id>
<phase>process-test-resources</phase>
<goals>
<goal>testResources</goal>
</goals>
</execution>
<execution>
<id>default-resources</id>
<phase>process-resources</phase>
<goals>
<goal>resources</goal>
</goals>
</execution>
</executions>
</plugin>