1

我正在使用 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>

生成的服务接口/类是 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 服务,它运行良好是很奇怪的。

4

1 回答 1

4

更新:SAP Cloud SDK 版本 3.9.0 可用,其中包含此问题的修复。


我查看了这个,发现我们在这些版本之间添加的一个新功能会导致意外行为。

为了快速解决问题,您可以尝试删除<annotation>通常在 edmx 文件末尾找到的块。

我们正在寻找解决方案,一旦我们有可用的解决方案,我将更新这个问题。

于 2019-11-20T11:03:08.863 回答