Java VDM 生成器无法在 API_SALES_ORDER_SIMULATION_SRV 和 SAP Cloud SDK 版本 3.7.0 中正常工作
Java VDM generator does not work properly for API_SALES_ORDER_SIMULATION_SRV with SAP Cloud SDK version 3.7.0
我正在使用 Java VDM Generator 通过 SAP Cloud SDK 原型项目生成服务 类,版本为 3.7.0。
我使用的OData服务是API_SALES_ORDER_SIMULATION_SRV。我从 SAP API Business Hub 下载了元数据。实际上,我还在 S/4HANA 内部部署 1909 上测试了元数据。问题仍然存在。
我在pom.xml用的插件如下:
<plugin>
<groupId>com.sap.cloud.sdk.datamodel</groupId>
<artifactId>odata-generator-maven-plugin</artifactId>
<version>3.7.0</version>
<executions>
<execution>
<id>generate-consumption</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputDirectory>${project.basedir}/edmx</inputDirectory>
<outputDirectory>${project.build.directory}/vdm</outputDirectory>
<deleteOutputDirectory>true</deleteOutputDirectory>
<defaultBasePath>/sap/opu/odata/sap/</defaultBasePath>
<packageName>com.bosch.testvdm</packageName>
<serviceNameMappingFile>${project.basedir}/serviceNameMappings.properties</serviceNameMappingFile>
<compileScope>COMPILE</compileScope>
</configuration>
</execution>
</executions>
</plugin>
生成的服务 interface/class 是 APISALESORDERSIMULATIONSRVService 和 DefaultAPISALESORDERSIMULATIONSRVService。服务中丢失了一些方法。例如。 createSalesOrderSimulationAPI().
/*
* Generated by OData VDM code generator of SAP Cloud SDK in version 3.7.0
*/
package com.bosch.testvdm.services;
import javax.annotation.Nonnull;
import com.bosch.testvdm.namespaces.salesordersimulationsrv.batch.APISALESORDERSIMULATIONSRVServiceBatch;
import com.sap.cloud.sdk.datamodel.odata.helper.batch.BatchService;
/**
* <h3>Details:</h3><table summary='Details'><tr><td align='right'>OData Service:</td><td>API_SALES_ORDER_SIMULATION_SRV</td></tr></table>
*
*/
public interface APISALESORDERSIMULATIONSRVService
extends BatchService<APISALESORDERSIMULATIONSRVServiceBatch>
{
/**
* If no other path was provided via the {@link #withServicePath(String)} method, this is the default service path used to access the endpoint.
*
*/
String DEFAULT_SERVICE_PATH = "/sap/opu/odata/sap/API_SALES_ORDER_SIMULATION_SRV";
/**
* Overrides the default service path and returns a new service instance with the specified service path. Also adjusts the respective entity URLs.
*
* @param servicePath
* Service path that will override the default.
* @return
* A new service instance with the specified service path.
*/
@Nonnull
APISALESORDERSIMULATIONSRVService withServicePath(
@Nonnull
final String servicePath);
}
/*
* Generated by OData VDM code generator of SAP Cloud SDK in version 3.7.0
*/
package com.bosch.testvdm.services;
import javax.annotation.Nonnull;
import javax.inject.Named;
import com.bosch.testvdm.namespaces.salesordersimulationsrv.batch.DefaultAPISALESORDERSIMULATIONSRVServiceBatch;
/**
* <h3>Details:</h3><table summary='Details'><tr><td align='right'>OData Service:</td><td>API_SALES_ORDER_SIMULATION_SRV</td></tr></table>
*
*/
@Named("com.bosch.testvdm.services.DefaultAPISALESORDERSIMULATIONSRVService")
public class DefaultAPISALESORDERSIMULATIONSRVService
implements APISALESORDERSIMULATIONSRVService
{
@Nonnull
private final String servicePath;
/**
* Creates a service using {@link APISALESORDERSIMULATIONSRVService#DEFAULT_SERVICE_PATH} to send the requests.
*
*/
public DefaultAPISALESORDERSIMULATIONSRVService() {
servicePath = APISALESORDERSIMULATIONSRVService.DEFAULT_SERVICE_PATH;
}
/**
* Creates a service using the provided service path to send the requests.
* <p>
* Used by the fluent {@link #withServicePath(String)} method.
*
*/
private DefaultAPISALESORDERSIMULATIONSRVService(
@Nonnull
final String servicePath) {
this.servicePath = servicePath;
}
@Override
@Nonnull
public DefaultAPISALESORDERSIMULATIONSRVService withServicePath(
@Nonnull
final String servicePath) {
return new DefaultAPISALESORDERSIMULATIONSRVService(servicePath);
}
/**
* {@inheritDoc}
*
*/
@Override
@Nonnull
public DefaultAPISALESORDERSIMULATIONSRVServiceBatch batch() {
return new DefaultAPISALESORDERSIMULATIONSRVServiceBatch(this);
}
}
它适用于 SAP Cloud SDK 版本 3.3.1。所有的方法都是在服务中生成的。
顺便说一句,奇怪的是它在 3.7 版的某些 OData 服务上运行良好。
更新:SAP Cloud SDK 版本 3.9.0 可用,包含针对此问题的修复。
我查看了这个,发现我们在这些版本之间添加的一项新功能导致了意外行为。
为了快速解决问题,您可以尝试删除通常位于 edmx 文件末尾的 <annotation>
块。
我们正在研究此问题的修复程序,一旦有可用的修复程序,我将更新此问题。
我正在使用 Java VDM Generator 通过 SAP Cloud SDK 原型项目生成服务 类,版本为 3.7.0。
我使用的OData服务是API_SALES_ORDER_SIMULATION_SRV。我从 SAP API Business Hub 下载了元数据。实际上,我还在 S/4HANA 内部部署 1909 上测试了元数据。问题仍然存在。
我在pom.xml用的插件如下:
<plugin>
<groupId>com.sap.cloud.sdk.datamodel</groupId>
<artifactId>odata-generator-maven-plugin</artifactId>
<version>3.7.0</version>
<executions>
<execution>
<id>generate-consumption</id>
<phase>generate-sources</phase>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<inputDirectory>${project.basedir}/edmx</inputDirectory>
<outputDirectory>${project.build.directory}/vdm</outputDirectory>
<deleteOutputDirectory>true</deleteOutputDirectory>
<defaultBasePath>/sap/opu/odata/sap/</defaultBasePath>
<packageName>com.bosch.testvdm</packageName>
<serviceNameMappingFile>${project.basedir}/serviceNameMappings.properties</serviceNameMappingFile>
<compileScope>COMPILE</compileScope>
</configuration>
</execution>
</executions>
</plugin>
生成的服务 interface/class 是 APISALESORDERSIMULATIONSRVService 和 DefaultAPISALESORDERSIMULATIONSRVService。服务中丢失了一些方法。例如。 createSalesOrderSimulationAPI().
/*
* Generated by OData VDM code generator of SAP Cloud SDK in version 3.7.0
*/
package com.bosch.testvdm.services;
import javax.annotation.Nonnull;
import com.bosch.testvdm.namespaces.salesordersimulationsrv.batch.APISALESORDERSIMULATIONSRVServiceBatch;
import com.sap.cloud.sdk.datamodel.odata.helper.batch.BatchService;
/**
* <h3>Details:</h3><table summary='Details'><tr><td align='right'>OData Service:</td><td>API_SALES_ORDER_SIMULATION_SRV</td></tr></table>
*
*/
public interface APISALESORDERSIMULATIONSRVService
extends BatchService<APISALESORDERSIMULATIONSRVServiceBatch>
{
/**
* If no other path was provided via the {@link #withServicePath(String)} method, this is the default service path used to access the endpoint.
*
*/
String DEFAULT_SERVICE_PATH = "/sap/opu/odata/sap/API_SALES_ORDER_SIMULATION_SRV";
/**
* Overrides the default service path and returns a new service instance with the specified service path. Also adjusts the respective entity URLs.
*
* @param servicePath
* Service path that will override the default.
* @return
* A new service instance with the specified service path.
*/
@Nonnull
APISALESORDERSIMULATIONSRVService withServicePath(
@Nonnull
final String servicePath);
}
/*
* Generated by OData VDM code generator of SAP Cloud SDK in version 3.7.0
*/
package com.bosch.testvdm.services;
import javax.annotation.Nonnull;
import javax.inject.Named;
import com.bosch.testvdm.namespaces.salesordersimulationsrv.batch.DefaultAPISALESORDERSIMULATIONSRVServiceBatch;
/**
* <h3>Details:</h3><table summary='Details'><tr><td align='right'>OData Service:</td><td>API_SALES_ORDER_SIMULATION_SRV</td></tr></table>
*
*/
@Named("com.bosch.testvdm.services.DefaultAPISALESORDERSIMULATIONSRVService")
public class DefaultAPISALESORDERSIMULATIONSRVService
implements APISALESORDERSIMULATIONSRVService
{
@Nonnull
private final String servicePath;
/**
* Creates a service using {@link APISALESORDERSIMULATIONSRVService#DEFAULT_SERVICE_PATH} to send the requests.
*
*/
public DefaultAPISALESORDERSIMULATIONSRVService() {
servicePath = APISALESORDERSIMULATIONSRVService.DEFAULT_SERVICE_PATH;
}
/**
* Creates a service using the provided service path to send the requests.
* <p>
* Used by the fluent {@link #withServicePath(String)} method.
*
*/
private DefaultAPISALESORDERSIMULATIONSRVService(
@Nonnull
final String servicePath) {
this.servicePath = servicePath;
}
@Override
@Nonnull
public DefaultAPISALESORDERSIMULATIONSRVService withServicePath(
@Nonnull
final String servicePath) {
return new DefaultAPISALESORDERSIMULATIONSRVService(servicePath);
}
/**
* {@inheritDoc}
*
*/
@Override
@Nonnull
public DefaultAPISALESORDERSIMULATIONSRVServiceBatch batch() {
return new DefaultAPISALESORDERSIMULATIONSRVServiceBatch(this);
}
}
它适用于 SAP Cloud SDK 版本 3.3.1。所有的方法都是在服务中生成的。
顺便说一句,奇怪的是它在 3.7 版的某些 OData 服务上运行良好。
更新:SAP Cloud SDK 版本 3.9.0 可用,包含针对此问题的修复。
我查看了这个,发现我们在这些版本之间添加的一项新功能导致了意外行为。
为了快速解决问题,您可以尝试删除通常位于 edmx 文件末尾的 <annotation>
块。
我们正在研究此问题的修复程序,一旦有可用的修复程序,我将更新此问题。