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> 块。

我们正在研究此问题的修复程序,一旦有可用的修复程序,我将更新此问题。