Java VDM Generator を使用して、SAP Cloud SDK archetype プロジェクトでサービス クラスを生成しています。バージョンは 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 サービスで正常に動作するのは奇妙です。