SAP Cloud SDK for Java – Release Notes for versions until 3.22.0

The release notes for the latest releases are available on our documentation portal.


These are the release notes of the SAP Cloud SDK for Java. You may also be interested in the release notes of the SDK for JavaScript.

Note: The SAP Cloud SDK was previously known as SAP S/4HANA Cloud SDK.

Version 3.22.0

June 18, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Fixed Issues

Version 3.21.0

June 4, 2020 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Fixed Issues

Version 3.20.0

May 21, 2020 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Version 3.19.1

May 7, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Improvements

Version 3.18.0

April 23, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • The custom pmd plugin com.sap.cloud.sdk.quality:pmd-plugin was removed. From now on, the ruleset com.sap.cloud.sdk.quality:pmd-rules contains only the rules shipped with the SAP Cloud SDK. All other imported rules were removed. To keep using the ruleset with the standard pmd plugin, for example with SAP Cloud SDK for Continuous Delivery, we recommend adding the following configuration to the root pom.xml of your project:
                  <build>
                    <pluginManagement>
                        <plugins>
                            <plugin>
                                <groupId>org.apache.maven.plugins</groupId>
                                <artifactId>maven-pmd-plugin</artifactId>
                                <configuration>
                                    <rulesets>
                                        <ruleset>rulesets/cloud-sdk-qualities.xml</ruleset>
                                        <ruleset>rulesets/java/maven-pmd-plugin-default.xml</ruleset>
                                    </rulesets>
                                </configuration>
                                <dependencies>
                                    <dependency>
                                        <groupId>com.sap.cloud.sdk.quality</groupId>
                                        <artifactId>pmd-rules</artifactId>
                                        <version>3.18.0</version>
                                    </dependency>
                                </dependencies>
                            </plugin>
                        </plugins>
                    </pluginManagement>
                </build>

Improvements

Version 3.17.2

April 15, 2020 - Maven Central - Javadoc -

Compatibility Notes:

Fixed Issues

Version 3.17.1

April 9, 2020 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Fixed Issues

Version 3.16.1

March 26, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • As the Olingo dependency was removed from the Virtual Data Model (VDM), Olingo types are now set as custom fields and can be accessed by method getCustomField("fieldName").

New Functionality

Improvements

Fixed Issues

Version 3.15.1

March 12, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • Use the library XSUAA Token Client and Token Flow API for handling communication with XSUAA service instances.
  • If you mock XSUAA service requests in your tests, some assertions might need to be updated. When using the new library, XSUAA request parameters should be passed as HTTP body content instead of query arguments.
  • The internally used types SubdomainReplacer and DefaultSubdomainReplacer became obsolete and were removed. The usage of this classes was replaced by the new library.
  • The behavior of following methods in the utility class XsuaaService has been changed. The old behavior is implemented in following methods. The change was made in order to better reflect on the internal logic of these methods. In addition to "Token Grant", the "Token Exchange" flavored operation will perform an authorization request with "Refresh Token" flow, which is required for Principal Propagation when manually consuming the CloudFoundry Connectivity Service. Please update your code accordingly.
  • The module com.sap.cloud.sdk.services:blockchain has been renamed to com.sap.cloud.sdk.services:blockchain-client-multichain to better reflect its focus on the Multichain Service.

New Functionality

Stabilize OData v4 Virtual Data Model (VDM). Following parts are considered stable as of this release:

Improvements

Fixed Issues

Version 3.14.0

February 27, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • Remove the public enum com.sap.cloud.sdk.cloudplatform.connectivity.DestinationRetrievalStrategy as it had no usage in the realm of the SAP Cloud SDK version 3.

New Functionality

Improvements

Version 3.13.0

February 13, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Improvements

Version 3.12.0

January 30, 2020 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Fixed Issues

Version 3.11.0

January 16, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • The existence of a principal as retrieved by the PrincipalAccessor is no longer an indicator for a JWT to be present. Due to the introduction of BasicAuthenticationAccessor a principal can also originate from the Basic Authentication header on the current request. As before verifying authentication and authorizations needs to be done explicitly by the application using the SAP Cloud SDK.
  • The behavior for principal propagation when accessing on-premise systems has changed as explained below in the Improvements section.

New Functionality

Improvements

Fixed Issues

Version 3.10.0

December 19, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:

Improvements

Fixed Issues

Version 3.9.0

December 5, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:

Improvements

Fixed Issues

Version 3.8.0

November 21, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • Create, update, and delete operations have been removed from some VDM services, as they are no longer available on the SAP API Business Hub.
  • The custom constructor parameters of Resilience4jDecorationStrategy have been changed to accept generic modular decorators for the following properties. The default behavior has not been changed. This should not affect existing code, but you may need to recompile your code.
    • time limiter
    • bulkhead
    • circuit breaker
    • retry
    • caching

New Functionality

Fixed Issues

Version 3.7.0

November 7, 2019 - Maven Central - Javadoc - Release blog

Known Issues:
  • SDK version 3.7.0 references Jackson 2.10.0 which has two known security vulnerabilities, which were not yet fixed in time for version 3.7.0 of the SDK. Note that the SDK does not use the vulnerable functionality and is thus not vulnerable itself. If you use Jackson yourself, you should consider the relevant recommendations CVE-2019-17267 and CVE-2019-17531. For more details, also consider this article with more background. This issue is fixed with SAP Cloud SDK version 3.9.0.

Compatibility Notes:
  • The resilience configuration API has been adjusted as follows:
  • The default buffer sizes for circuit breakers in CircuitBreakerConfiguration have been changed as follows:
    • From 100 to 10 for transitioning from CLOSED to OPEN state.
    • From 10 to 5 for transitioning from HALF-OPEN back to CLOSED state.

New Functionality

Improvements

Version 3.6.0

October 24, 2019 - Maven Central - Javadoc - Release blog

Known Issues:
  • SDK version 3.6.0 references Jackson 2.10.0 which has two known security vulnerabilities, which were not yet fixed in time for version 3.6.0 of the SDK. For your reference, this concerned the following recommendations:

Compatibility Notes:
  • The overridable method getJsonResponseObjectName() of base class FluentHelperFunction has been deprecated in favor of its successor refineJsonResponse. Both reside in protected scope and are therefore only used to customize the default behavior. The new method allows limitless modification of the response JSON element during the refinement step of the deserialization process for function import responses.

New Functionality

Improvements

Fixed Issues

Version 3.5.0

October 10, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • Previous versions of the SDK only recognized an access token in the authorization header if "Bearer" was spelled in title case. Now, corresponding methods do a case insensitive check for "bearer". That means, "bearer" and "Bearer" are now equally supported as correct authorization header.
  • OData VDM generator: The generator now identifies which CRUD operations an entity set supports by first consulting the annotations based on the OData specification. Only when these annotations are not declared, the custom SAP specifications are considered.

Improvements

Version 3.4.0

September 26, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • In preparation for an upcoming change to the way how the XSUAA service supplies verification keys to applications, the SAP Cloud SDK from version 3.4.0 onwards retrieves the key from the XSUAA service instead of relying on a verification key present in the XSUAA service binding credentials.
  • Remove dependency rest-assured from the sdk-bom. Projects that depends on it must now declare a version explicitly. This also removes the need to explicitly declare a version of hamcrest-core and hamcrest-library since they were previously both introduced as transitive dependencies via jUnit and rest-assured but had conflicting versions.

Improvements

Version 3.3.1

September 12, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • The OData VDM Generator now constructs the service URL based on the service name from the namespace provided in the metadata file. The previously used filename is only considered as the service name in case the namespace does not not provide the information.

Improvements

Version 3.2.0

August 29, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • The following methods in the resilience module have been deprecated in favor of the new methods introduced for asynchronous resilient execution: decorateFutureSupplier and executeFutureSupplier in ResilienceDecorator, decorateFutureSupplier and executeFutureSupplier in ResilienceDecorationStrategy.
  • OData VDM: we have added deprecation information to service classes that represent SAP S/4HANA Cloud APIs which are deprecated on the SAP API Business Hub, such as ChangeMasterService, ProcessOrderConfirmationService, and ProductionOrderConfirmationService. Take a look at the corresponding Javadoc and use the appropriate successor service listed therein.

New Functionality

Improvements

Fixed Issues

Version 3.1.0

August 15, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • As part of the update of the OData VDM to SAP S/4HANA Cloud 1908, the OutboundDeliveryService has been removed from the SAP API Business Hub and, as a consequence, from the SDK. Use OutboundDeliveryV2Service instead.
  • The destination expected as second parameter of the attachToService method of VdmEntity is now mandatory (@Nonnull), rather than nullable, because attaching to a service does not work without a destination to designate the target system.

New Functionality

Improvements

Fixed Issues

Version 3.0.0

August 1, 2019 - Maven Central - Javadoc - Release blog

Known Issues:
  • When defining destinations via the environment variable destinations, version 3.0.0 does not use basic authentication even if credentials are given. Either update to version 3.1.0 or manually add the following properties to the JSON defining a destination: "authentication": "BasicAuthentication", "authType": "BasicAuthentication".

Compatibility Notes:

The new major version 3.0.0 brings many improvements, modernizes the SDK, and lays the groundwork for the future evolution of the SDK and SAP Cloud Platform. As a new major version, pay particular note to the compabilitiy notes below and our migration guide. You can jump directly to the sections about destinations, resilience, running outside of requests, principal instead of user, renamed modules, and updated dependencies.

  • Introduce new, more lightweight and more generally applicable destination concept. The new concept is based on several basic interfaces (such as Destination, HttpDestination and RfcDestination), default and platform-specific implementations (such as DefaultHttpDestination, ScpCfHttpDestination, or ScpNeoHttpDestination), and decorators for dynamically translating between the different types.
    • Adapt destination classes to the new concept and introduce more fine granular class hierarchy below DestinationProperties.
    • Remove ErpConfigContext. Instead, provide a destination of an appropriate type (HTTP or RFC) directly where previously an ErpConfigContext was used, like in the OData VDM. Destinations can be fetched as before from the DestinationAccessor and translated into the required type using the convenience methods asHttp and asRfc.
    • Remove the legacy behavior that assumed a destination called "ErpQueryEndpoint" as default when no destination name was provided explicitly. Instead, a destination (for example, with the name "ErpQueryEndpoint") has to be provided explicitly.
    • Remove the global configuration of destination retrieval strategy per destination name from the DestinationAccessor. Instead, provide the retrieval strategy as an additional configuration parameter of type DestinationOptions when loading a destination.
  • Replace Hystrix, which is in maintenance, with resilience4j as default resilience library, and make the resilience capabilities of the SDK available in a new functional-style implementation.
    • Introduce the ResilienceDecorator class to wrap logic instead of extending the Command class.
    • Configure resilience using the new ResilienceConfiguration class instead of passing options to the constructor of a super class. ResilienceDecorator requires at least an unique identifier to be part of the configuration.
    • Offer the ability to provide fallback functions which are executed when the wrapped code throws exceptions.
    • Ability to configure ResilienceDecorator with a custom function decoration strategy by implementing the ResilienceDecorationStrategy interface.
    • Remove classes Command and ErpCommand. Wrap the logic previously contained in commands using the execute and decorate methods of ResilienceDecorator.
    • Remove classes CachingCommand and CachingErpCommand. Instead, configure caching within the ResilienceConfiguration class by providing an instance of CacheConfiguration to cacheConfiguration.
      • As a parameter, creating a CacheConfiguration requires at least a value for the duration after which the cache entry shall expire.
      • Additional items to consider for the cache key can be attached as part of the dynamic cache key using parameters. If these items are Serializable, then the cache key itself automatically becomes serializable as well. This fulfills a requirement for some caching configurations.
      • The caching strategy only works when a service provider for JSR-107 (JCache) is registered at runtime. Include an JCache implementation such as caffeine as a dependency.
    • Remove classes ODataServicesQueryCommand, SqlQueryCommand, BapiQueryCommand, RfcQueryCommand. The execute method of queries can be easily wrapped using the execute and decorate methods of ResilienceDecorator instead.
    • Remove the asResilientCommand methods from all VDM fluent helpers. The execute method of VDM fluent helpers can be easily wrapped using ResilienceDecorator instead.
    • Remove the ODataRequestCommand since it's no longer needed by VDM fluent helpers.
  • Generalize the RequestContext concept into ThreadContext and reduce dependencies on the Servlet standard to enable an easier use of the SDK in more environments and outside of HTTP requests, also if no explicit tenant or user are available. Also, rework the various accessors to consistently offer options for override and fallback in non-standard use cases.
    • Rename RequestContextto ThreadContext and adapt it to be applicable in non-request contexts.
      • Rename related classes accordingly, for example, RequestContextExecutor to ThreadContextExecutor.
      • Introduce new concept of ThreadContextDecorator to allow decorating the callable which is wrapped in a ThreadContext. The difference to ThreadContextListener is that the listener is responsible for setting ThreadContext properties while the decorator allows to decorate the callable that is wrapped in the ThreadContext.
      • Rename RequestContextServletFilter to RequestAccessorFilter to better reflect its purpose.
      • DestinationsRequestContextListener has been renamed to HttpClientsThreadContextListener to better reflect its purpose.
    • Leniently accept the non-availability of tenant or user instead of failing in many places of the SDK. As a consequence, the environment variables USE_MOCKED_TENANT, USE_MOCKED_USER, and ALLOW_MOCKED_AUTH_HEADER are no longer needed and ignored.
    • TenantNotAvailableException etc. were removed and replaced with return values of type Option that inherently indicate (non-)availability.
    • LocalScopePrefixProvider now uses Vavr Try instead of throwing exceptions which were previously not declared on the API.
    • Make the API of accessors such as TenantAccessor, PrincipalAccessor, AuthTokenAccessor, and RequestAccessor consistent and use Vavr Try where applicable.
    • Remove JwtBasedRequestContextExecutor. Use AuthTokenAccessor.executeWithAuthToken in combination with AuthTokenBuilder instead. For running code on behalf of another tenant, use TenantAccessor.executeWithTenant.
    • Move servlet-based security filters to new module security-servlet. Note that this may require that you add the following dependency to your project if you rely on these web filters:
      <dependency> <groupId>com.sap.cloud.sdk.cloudplatform</groupId> <artifactId>security-servlet</artifactId> </dependency>
  • Replace User with the more general Principal.
    • Remove Locale from Principal interface as this is only available on Neo (type-cast to ScpNeoPrincipal if you need to access this value).
    • Remove hasAuthorization method, use getAuthorizations and call the contains method on the returned set instead.
    • Adjust CacheKey and CacheManager accordingly by replacing all occurences of "user" with "principal".
    • Use Principal also in AccessDeniedException instead of User. Note, however, that the AccessDeniedResponse still exposes "user" to remain compatible on REST API level).
  • Use Vavr in more places across the SDK, for example, by relying on io.vavr.control.Try in more places and replacing java.util.Optional with io.vavr.control.Option. If you want to continue using Java's Optional, use toJavaOptional() on the returned Option.
  • Deprecate CloudLoggerFactory. Use the plain slf4j LoggerFactory instead.
  • Remove unwanted behavior from MockUtil class.
    • MockUtil no longer mocks platform-specific classes, but only interfaces. Mock the facade manually, if you have to rely on the specific class.
    • MockUtil no longer offers methods for mocking destinations or servers with the default destination name "ErpQueryEndpoint". The destination name now is a mandatory parameter.
  • Remove ErpEdition (also removed in mocking of ErpSystem).
  • Remove BAPI virtual data model. Use BapiRequest instead.
  • Remove Tomcat archetype for SAP Cloud Platform Cloud Foundry (scp-cf-tomcat). Use the TomEE or Spring archetypes instead when starting a new project.
  • Adjust naming of groupIds and artifactIds of Maven modules to accurately indicate their purpose and reflect the transition of the "SAP S/4HANA Cloud SDK" into the "SAP Cloud SDK". In particular, the following aspects were addressed:
    • Use the prefix com.sap.cloud.sdk instead of com.sap.cloud.s4hana.
    • Make all artifact ids unique, so that tools like gradle can easily consume the modules.
    • The term s4hana in the group id is only used if the contained module is in some way specific for SAP S/4HANA.
    • Remove all obsolete modules.
    • In detail, that translates into the changes outlined in the following table. Wherever you have used a dependency from the left column, change the group and artifact id to the value in the right column.
      Module name in 2.19.2 Module name in 3.0.0
      com.sap.cloud.s4hana.archetypes:archetypes-parent com.sap.cloud.sdk.archetypes:archetypes-parent
      com.sap.cloud.s4hana.archetypes:scp-cf-spring com.sap.cloud.sdk.archetypes:scp-cf-spring
      com.sap.cloud.s4hana.archetypes:scp-cf-tomcat
      com.sap.cloud.s4hana.archetypes:scp-cf-tomee com.sap.cloud.sdk.archetypes:scp-cf-tomee
      com.sap.cloud.s4hana.archetypes:scp-neo-javaee7 com.sap.cloud.sdk.archetypes:scp-neo-javaee7
      com.sap.cloud.s4hana.cloudplatform:auditlog com.sap.cloud.sdk.cloudplatform:auditlog
      com.sap.cloud.s4hana.cloudplatform:auditlog-scp-cf com.sap.cloud.sdk.cloudplatform:auditlog-scp-cf
      com.sap.cloud.s4hana.cloudplatform:auditlog-scp-neo com.sap.cloud.sdk.cloudplatform:auditlog-scp-neo
      com.sap.cloud.s4hana.cloudplatform:caching com.sap.cloud.sdk.cloudplatform:caching
      com.sap.cloud.s4hana.cloudplatform:cloudplatform-parent com.sap.cloud.sdk.cloudplatform:cloudplatform-parent
      com.sap.cloud.s4hana.cloudplatform:concurrency-scp-neo com.sap.cloud.sdk.cloudplatform:concurrency-scp-neo
      com.sap.cloud.s4hana.cloudplatform:connectivity com.sap.cloud.sdk.cloudplatform:cloudplatform-connectivity
      com.sap.cloud.sdk.cloudplatform:cloudplatform-connectivity-scp
      com.sap.cloud.s4hana.cloudplatform:connectivity-scp-cf com.sap.cloud.sdk.cloudplatform:cloudplatform-connectivity-scp-cf
      com.sap.cloud.s4hana.cloudplatform:connectivity-scp-neo com.sap.cloud.sdk.cloudplatform:cloudplatform-connectivity-scp-neo
      com.sap.cloud.s4hana.cloudplatform:core com.sap.cloud.sdk.cloudplatform:cloudplatform-core
      com.sap.cloud.s4hana.cloudplatform:core-scp-cf com.sap.cloud.sdk.cloudplatform:cloudplatform-core-scp-cf
      com.sap.cloud.s4hana.cloudplatform:core-scp-neo com.sap.cloud.sdk.cloudplatform:cloudplatform-core-scp-neo
      com.sap.cloud.s4hana.cloudplatform:metering com.sap.cloud.sdk.cloudplatform:metering
      com.sap.cloud.s4hana.cloudplatform:metering-scp-neo com.sap.cloud.sdk.cloudplatform:metering-scp-neo
      com.sap.cloud.sdk.cloudplatform:resilience
      com.sap.cloud.s4hana.cloudplatform:scp-cf com.sap.cloud.sdk.cloudplatform:scp-cf
      com.sap.cloud.s4hana.cloudplatform:scp-neo com.sap.cloud.sdk.cloudplatform:scp-neo
      com.sap.cloud.s4hana.cloudplatform:security com.sap.cloud.sdk.cloudplatform:security
      com.sap.cloud.s4hana.cloudplatform:security-scp-cf com.sap.cloud.sdk.cloudplatform:security-scp-cf
      com.sap.cloud.s4hana.cloudplatform:security-scp-neo com.sap.cloud.sdk.cloudplatform:security-scp-neo
      com.sap.cloud.sdk.cloudplatform:security-servlet
      com.sap.cloud.s4hana.cloudplatform:servlet com.sap.cloud.sdk.cloudplatform:servlet
      com.sap.cloud.s4hana.cloudplatform:tenant com.sap.cloud.sdk.cloudplatform:tenant
      com.sap.cloud.s4hana.cloudplatform:tenant-scp-cf com.sap.cloud.sdk.cloudplatform:tenant-scp-cf
      com.sap.cloud.s4hana.cloudplatform:tenant-scp-neo com.sap.cloud.sdk.cloudplatform:tenant-scp-neo
      com.sap.cloud.s4hana.datamodel:bapi-api
      com.sap.cloud.s4hana.datamodel:bapi-parent
      com.sap.cloud.s4hana.datamodel:messaging-api com.sap.cloud.sdk.s4hana:s4hana-api-messaging
      com.sap.cloud.sdk.datamodel:datamodel-parent
      com.sap.cloud.s4hana.datamodel:messaging-core com.sap.cloud.sdk.datamodel:messaging-core
      com.sap.cloud.s4hana.datamodel:messaging-jms com.sap.cloud.sdk.datamodel:messaging-jms
      com.sap.cloud.s4hana.datamodel:messaging-parent com.sap.cloud.sdk.datamodel:messaging-parent
      com.sap.cloud.s4hana.datamodel:odata-api com.sap.cloud.sdk.s4hana:s4hana-api-odata
      com.sap.cloud.s4hana.datamodel:odata-core com.sap.cloud.sdk.datamodel:odata-core
      com.sap.cloud.s4hana.datamodel:odata-generator com.sap.cloud.sdk.datamodel:odata-generator
      com.sap.cloud.s4hana.datamodel:odata-generator-cli com.sap.cloud.sdk.datamodel:odata-generator-cli
      com.sap.cloud.s4hana.datamodel:odata-generator-maven-plugin com.sap.cloud.sdk.datamodel:odata-generator-maven-plugin
      com.sap.cloud.s4hana.datamodel:odata-parent com.sap.cloud.sdk.datamodel:odata-parent
      com.sap.cloud.s4hana.frameworks:cxf com.sap.cloud.sdk.frameworks:cxf
      com.sap.cloud.s4hana.frameworks:eclipselink com.sap.cloud.sdk.frameworks:eclipselink
      com.sap.cloud.s4hana.frameworks:eclipselink-javaee com.sap.cloud.sdk.frameworks:eclipselink-javaee
      com.sap.cloud.s4hana.frameworks:frameworks-parent com.sap.cloud.sdk.frameworks:frameworks-parent
      com.sap.cloud.s4hana.frameworks:hystrix
      com.sap.cloud.s4hana.frameworks:hystrix-scp-neo
      com.sap.cloud.s4hana.frameworks:javaee com.sap.cloud.sdk.frameworks:javaee
      com.sap.cloud.s4hana.frameworks:jaxrs com.sap.cloud.sdk.frameworks:jaxrs
      com.sap.cloud.s4hana.frameworks:jaxrs-gson com.sap.cloud.sdk.frameworks:jaxrs-gson
      com.sap.cloud.s4hana.frameworks:liquibase com.sap.cloud.sdk.frameworks:liquibase
      com.sap.cloud.s4hana.frameworks:liquibase-javaee com.sap.cloud.sdk.frameworks:liquibase-javaee
      com.sap.cloud.sdk.frameworks:resilience4j
      com.sap.cloud.s4hana.frameworks:spring-boot-multitenancy-scp-cf com.sap.cloud.sdk.frameworks:spring-boot-multitenancy-scp-cf
      com.sap.cloud.s4hana.frameworks:spring-web com.sap.cloud.sdk.frameworks:spring-web
      com.sap.cloud.s4hana.frameworks:togglz com.sap.cloud.sdk.frameworks:togglz
      com.sap.cloud.s4hana.plugins:plugins-parent com.sap.cloud.sdk.plugins:plugins-parent
      com.sap.cloud.s4hana.plugins:s4sdk-maven-plugin com.sap.cloud.sdk.plugins:scp-neo-maven-plugin
      com.sap.cloud.s4hana.plugins:scp-neo-maven-plugin com.sap.cloud.sdk.plugins:usage-analytics
      com.sap.cloud.s4hana.plugins:usage-analytics com.sap.cloud.sdk.plugins:usage-analytics-maven-plugin
      com.sap.cloud.s4hana.quality:common com.sap.cloud.sdk.quality:common
      com.sap.cloud.s4hana.quality:httpclient-listener com.sap.cloud.sdk.quality:httpclient-listener
      com.sap.cloud.s4hana.quality:listeners-all com.sap.cloud.sdk.quality:listeners-all
      com.sap.cloud.s4hana.quality:odata-querylistener com.sap.cloud.sdk.quality:odata-querylistener
      com.sap.cloud.s4hana.quality:pmd-plugin com.sap.cloud.sdk.quality:pmd-plugin
      com.sap.cloud.s4hana.quality:pmd-rules com.sap.cloud.sdk.quality:pmd-rules
      com.sap.cloud.s4hana.quality:quality-parent com.sap.cloud.sdk.quality:quality-parent
      com.sap.cloud.s4hana.quality:rfc-querylistener com.sap.cloud.sdk.quality:rfc-querylistener
      com.sap.cloud.s4hana.services:blockchain com.sap.cloud.sdk.services:blockchain
      com.sap.cloud.s4hana.services:recast-ai com.sap.cloud.sdk.services:recast-ai
      com.sap.cloud.s4hana.services:scp-blockchain com.sap.cloud.sdk.services:scp-blockchain
      com.sap.cloud.s4hana.services:scp-machine-learning com.sap.cloud.sdk.services:scp-machine-learning
      com.sap.cloud.s4hana.services:services-parent com.sap.cloud.sdk.services:services-parent
      com.sap.cloud.s4hana:connectivity com.sap.cloud.sdk.s4hana:s4hana-connectivity
      com.sap.cloud.s4hana:core com.sap.cloud.sdk.s4hana:s4hana-core
      com.sap.cloud.s4hana:datamodel
      com.sap.cloud.s4hana:fluent-result com.sap.cloud.sdk.datamodel:fluent-result
      com.sap.cloud.s4hana:rfc com.sap.cloud.sdk.s4hana:rfc
      com.sap.cloud.s4hana:s4hana-all com.sap.cloud.sdk.s4hana:s4hana-all
      com.sap.cloud.s4hana:s4hana-parent com.sap.cloud.sdk.s4hana:s4hana-parent
      com.sap.cloud.sdk.s4hana:s4hana-api-parent
      com.sap.cloud.s4hana:sdk-bom com.sap.cloud.sdk:sdk-bom
      com.sap.cloud.s4hana:sdk-modules-bom com.sap.cloud.sdk:sdk-modules-bom
      com.sap.cloud.s4hana:sdk-parent com.sap.cloud.sdk:sdk-parent
      com.sap.cloud.s4hana:soap com.sap.cloud.sdk.datamodel:soap
      com.sap.cloud.s4hana:testutil com.sap.cloud.sdk.testutil:testutil-core
      com.sap.cloud.sdk.testutil:testutil-parent
      com.sap.cloud.s4hana:testutil-resources com.sap.cloud.sdk.testutil:testutil-resources
  • Rename classes that incorrectly used the term "query" where "request" is more appropriate because the class does not only deal with queries. Grouped by module, this concerns the following classes (displayed as old qualified name -> new qualified name):
    • s4hana:s4hana-connectivity (was s4hana:connectivity)

      com.sap.cloud.sdk.s4hana.connectivity.AbstractQuerySerializer -> com.sap.cloud.sdk.s4hana.connectivity.AbstractRequestSerializer com.sap.cloud.sdk.s4hana.connectivity.QueryExecutor -> com.sap.cloud.sdk.s4hana.connectivity.RequestExecutor com.sap.cloud.sdk.s4hana.connectivity.QueryResult -> com.sap.cloud.sdk.s4hana.connectivity.RequestResult com.sap.cloud.sdk.s4hana.connectivity.QuerySerializer -> com.sap.cloud.sdk.s4hana.connectivity.RequestSerializer com.sap.cloud.sdk.s4hana.connectivity.Query -> com.sap.cloud.sdk.s4hana.connectivity.Request com.sap.cloud.sdk.s4hana.connectivity.QueryBody -> com.sap.cloud.sdk.s4hana.connectivity.RequestBody com.sap.cloud.sdk.s4hana.connectivity.QueryExecutionMeasurements -> com.sap.cloud.sdk.s4hana.connectivity.RequestExecutionMeasurements com.sap.cloud.sdk.s4hana.connectivity.SerializedQuery -> com.sap.cloud.sdk.s4hana.connectivity.SerializedRequest com.sap.cloud.sdk.s4hana.connectivity.SerializedQueryResult -> com.sap.cloud.sdk.s4hana.connectivity.SerializedRequestResult com.sap.cloud.sdk.s4hana.connectivity.exception.QueryExecutionException -> com.sap.cloud.sdk.s4hana.connectivity.exception.RequestExecutionException com.sap.cloud.sdk.s4hana.connectivity.exception.QuerySerializationException -> com.sap.cloud.sdk.s4hana.connectivity.exception.RequestSerializationException
    • datamodel:soap (was s4hana:soap)

      com.sap.cloud.sdk.s4hana.connectivity.soap.SoapQuery -> com.sap.cloud.sdk.s4hana.connectivity.soap.SoapRequest
    • s4hana:rfc

      com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiQuery-> com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiRequest com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionQueryErrorHandler-> com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionRequestErrorHandler com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionQueryExecutor -> com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionRequestExecutor com.sap.cloud.sdk.s4hana.connectivity.rfc.AbstractRemoteFunctionQuery -> com.sap.cloud.sdk.s4hana.connectivity.rfc.AbstractRemoteFunctionRequest com.sap.cloud.sdk.s4hana.connectivity.rfc.AbstractRemoteFunctionQueryResult -> com.sap.cloud.sdk.s4hana.connectivity.rfc.AbstractRemoteFunctionRequestResult com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiQueryResult -> com.sap.cloud.sdk.s4hana.connectivity.rfc.BapiRequestResult com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionQueryListener -> com.sap.cloud.sdk.s4hana.connectivity.rfc.RemoteFunctionRequestListener com.sap.cloud.sdk.s4hana.connectivity.rfc.RfcQuery -> com.sap.cloud.sdk.s4hana.connectivity.rfc.RfmRequest com.sap.cloud.sdk.s4hana.connectivity.rfc.RfcQueryResult -> com.sap.cloud.sdk.s4hana.connectivity.rfc.RfmRequestResult com.sap.cloud.sdk.s4hana.connectivity.rfc.RfcTransactionFactory -> com.sap.cloud.sdk.s4hana.connectivity.rfc.RfmTransactionFactory com.sap.cloud.sdk.s4hana.connectivity.rfc.SoapRemoteFunctionQuerySerializer -> com.sap.cloud.sdk.s4hana.connectivity.rfc.SoapRemoteFunctionRequestSerializer
    • quality

      com.sap.cloud.s4hana.quality.FileWritingQueryListenerUtil -> com.sap.cloud.s4hana.quality.FileWritingRequestListenerUtil com.sap.cloud.s4hana.quality.FileWritingRemoteFunctionQueryListener -> com.sap.cloud.s4hana.quality.FileWritingRemoteFunctionRequestListener
    • cloudplatform:servlet

      com.sap.cloud.sdk.cloudplatform.servlet.response.QueryExecutionErrorResponse -> com.sap.cloud.sdk.cloudplatform.servlet.response.RequestExecutionErrorResponse
  • Update dependencies as outlined in the following table.
    Library Version used in 2.19.2 Version used in 3.0.0
    bcpkix-jdk15on 1.6 1.62
    bcprov-jdk15on 1.6 1.62
    guava 27.0.1-jre 28.0-jre
    plexus-utils 3.1.0 3.2.0
    lombok 1.18.2 1.18.8
    javax.ejb:javax.ejb-api 3.2 3.2.2
    javax.servlet:javax.servlet-api 3.1.0 4.0.1
    javax.ws.rs:javax.ws.rs-api 2.0 2.1.1
    org.eclipse.jetty:apache-jsp 9.4.17.v20190418 9.4.17.v20190418
    org.jboss.arquillian.config:arquillian-config-api 1.4.0.Final 1.4.1.Final
    byte-buddy (not used) 1.9.13
    commons-codec 1.11 1.12
    commons-lang3 3.8.1 3.9
    commons-text 1.4 1.7
    httpclient 4.5.6 4.5.9
    httpcore 4.4.10 4.4.11
    assertj-core 3.12.0 3.12.2
    hibernate-core 5.0.12.Final 5.4.3.Final
    eclipselink 2.7.3-RC1 2.7.4
    java-jwt 3.4.0 3.8.1
    javax.persistence 2.1.0 2.2.1
    joda-time 2.10 2.10.2
    jooq 3.6.2 3.11.11
    jsoup 1.11.3 1.12.1
    liquibase-core 3.6.2 3.6.3
    spring-security-oauth 2.3.4.RELEASE 2.3.6.RELEASE
    tomcat-annotations-api 8.5.40 8.5.42
    tomcat-jdbc 8.5.40 8.5.42
    io.rest-assured:json-path 3.2.0 4.0.0
    javax:javaee-api 7.0 8.0.1
    javax.validation:validation-api 1.1.0.Final 2.0.1.Final
    org.assertj:assertj-guava 3.2.0 3.2.1
    org.hibernate.validator:hibernate-validator 6.0.13.Final 6.0.17.Final
    lombok-maven-plugin 1.18.2.0 1.18.6.0
    javax.cache:cache-api 1.0.0 1.1.1
    vavr 0.9.2 0.9.3
    wiremock 2.19.0 2.20.0
    io.github.resilience4j:resilience4j-bulkhead (not used) 0.16.0
    io.github.resilience4j:resilience4j-cache (not used) 0.16.0
    io.github.resilience4j:resilience4j-timelimiter (not used) 0.16.0
    In addition, the dependency org.checkerframework:checker-qual has been excluded entirely to avoid license issues. That is, it is neither a direct dependency of the SDK anymore, nor is it a transitive dependency of either Caffeine or Guava (when brought in by the SDK).

New Functionality

Improvements

Version 2.28.0

February 13, 2020 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Improvements

Version 2.27.0

January 30, 2020 - Maven Central - Javadoc - Release blog

Improvements

Version 2.26.0

January 16, 2020 - Maven Central - Javadoc - Release blog

Improvements

Fixed Issues

Version 2.25.0

December 19, 2019 - Maven Central - Javadoc - Release blog

Fixed Issues

Version 2.24.0

December 5, 2019 - Maven Central - Javadoc - Release blog

Improvements

Fixed Issues

Version 2.23.0

November 21, 2019 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Version 2.22.1

October 24, 2019 - Maven Central - Javadoc - Release blog

Known Issues:
  • SDK version 2.22.1 references Jackson 2.10.0 which has two known security vulnerabilities, which were not yet fixed in time for version 2.22.1 of the SDK. For your reference, this concerned the following recommendations:

Improvements

Version 2.22.0

October, 10, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • Previous versions of the SDK only recognized an access token in the authorization header if "Bearer" was spelled in title case. Now, corresponding methods do a case insensitive check for "bearer". That means, "bearer" and "Bearer" are now equally supported as correct authorization header.

Improvements

Fixed Issues

Version 2.21.0

September 26, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • In preparation for an upcoming change to the way how the XSUAA service supplies verification keys to applications, the SAP Cloud SDK from version 2.21.0 onwards retrieves the key from the XSUAA service instead of relying on a verification key present in the XSUAA service binding credentials.

Improvements

Version 2.20.2

September 12, 2019 - Maven Central - Javadoc - Release blog

Improvements

Version 2.20.1

August 29, 2019 - Maven Central - Javadoc - Release blog

Fixed Issues

Version 2.20.0

August 15, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • As part of the update of the OData VDM to SAP S/4HANA Cloud 1908, the OutboundDeliveryService has been removed from the SAP API Business Hub and, as a consequence, from the SDK. Use OutboundDeliveryV2Service instead.

New Functionality

Improvements

Version 2.19.2

August 1, 2019 - Maven Central - Javadoc - Release blog

Improvements

Version 2.19.1

July 18, 2019 - Maven Central - Javadoc - Release blog

Improvements

Version 2.19.0

July 4, 2019 - Maven Central - Javadoc - Release blog

Security Advice:
  • SDK version 2.19.0 references Jackson 2.9.9 which has two known security vulnerabilities, which were not yet fixed in time for version 2.19.0 of the SDK. This has been fixed in version 2.19.1. For your reference, this concerned the following recommendations:

Improvements

Fixed Issues

Version 2.18.1

June 20, 2019 - Maven Central - Javadoc - Release blog

Improvements

Fixed Issues

Version 2.18.0

June 6, 2019 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Fixed Issues

Version 2.17.0

May 23, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • As part of the update of the Java VDM for OData services of SAP S/4HANA Cloud 1905, please take note of the following changes:

New Functionality

Improvements

Fixed Issues

Version 2.16.0

May 9, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • The SAP S/4HANA Cloud SDK has been renamed to SAP Cloud SDK. For now, technical artifact names on source code level remain unchanged. You do not need to change your source code or dependencies.

New Functionality

Improvements

Fixed Issues

Version 2.15.0

April 25, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Improvements

Fixed Issues

Version 2.14.0

April 11, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • As part of the improvements to the (experimental) Message VDM, MessageListeners no longer have topic or message factory methods. Instead, there is a getMessageType method that returns the class of message the listener recognizes. The MessageDelegator now operates on Message VDM messages instead of string topics and payload, so that the conversion is outsourced to the new converters.
  • The method onBehalfOfTenant(@Nonnull String tenant, @Nullable String issuerUrl, @Nonnull String... audiences) of JwtBasedRequestContextExecutor has been deprecated in favor of the more specific methods mentioned below.

New Functionality

Improvements

Fixed Issues

Version 2.13.3

March 28, 2019 - Maven Central - Javadoc - Release blog

Improvements

Fixed Issues

Version 2.13.2

March 14, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Improvements

Fixed Issues

Version 2.12.0

February 28, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • BapiQuery and RfcQuery now do a synchronous commit by default, instead of asynchronously committing, to adhere to the stated API contract. If your code relies on an asynchronous commit or does not need the added safety of waiting for the commit to succeed, see below how to restore the previous behavior.
  • We haved introduced a new common superclass FilterExpressionHelper for the different approaches to create a filter query option and pass it to the OData VDM. This should not affect existing code, but you may need to recompile your code.

New Functionality

Improvements

Fixed Issues

Version 2.11.1

February 14, 2019 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Improvements

Fixed Issues

Version 2.10.0

January 31, 2019 - Maven Central - Javadoc - Release blog

Known Issues:
  • Navigation properties of VDM entities are not serialized when using Gson with SDK versions 2.9.1 or 2.10.0. This has been fixed in version 2.11.1.

Compatibility Notes:
  • The VDM representation of the latest version of the Bill of Materials service has been renamed to BillOfMaterialsV2Service, and the package for entities and helpers moved to billofmaterialsv2, instead of BillOfMaterialsService and billofmaterials. Under the previous names, the VDM now again references the older version 1 of the same API.
  • The handling of String-typed user attributes has changed to allow more convenient consumption: on SAP Cloud Platform Neo, user attributes are now an instance of StringUserAttribute instead of SimpleUserAttribute<String>. On Cloud Foundry, user attributes are now returned as an instance of StringCollectionUserAttribute instead of CollectionUserAttribute<String>. You may need to adapt the expectations that your code makes regarding the return type.
  • Several methods in the DefaultCollectedResultCollection have been deprecated which anyway always throw an UnsupportedOperationException.
  • The BAPI VDM has been updated to the latest state. This brings new classes, changes to class names, as well as new and renamed fields.

New Functionality

Improvements

Fixed Issues

Version 2.9.1

January 17, 2019 - Maven Central - Javadoc - Release blog

Known Issues:
  • Navigation properties of VDM entities are not serialized when using Gson with SDK versions 2.9.1 or 2.10.0. This has been fixed in version 2.11.1.

New Functionality

Improvements

Fixed Issues

Version 2.9.0

December 20, 2018 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • The API of the AuditLogger has been adapted to properly reflect its runtime behavior on Cloud Foundry:
    • On Cloud Foundry, the auditlog rejects any read/write/config change log entry that does not contain any affected attributes.
    • To reflect this, all methods that took @Nullable Iterable<AccessedAttribute> as parameter have been deprecated in favor of methods that take @Nonnull AccessedAttribute, @Nullable AccessedAttribute....
  • The skip flag of the usage-analytics goal in the s4sdk-maven-plugin has been replaced by a flag with the name skipUsageAnalytics. While the skip parameter is still being evaluated, it is now deprecated and may change its behavior in the future. Therefore, please use skipUsageAnalytics instead after updating the plugin.
  • Several APIs of SAP S/4HANA Cloud have been updated in the SAP API Business Hub to properly reflect the operations that are supported by the respective OData service. As a consequence, several operations have been removed from the Java virtual data model (VDM), as they were never supported by the OData service. In detail, the removed operations by service and entity are:
    • Central purchase contract service: create, update of CntrlPurContrItmDistribution; create, update of CntrlPurchaseContractItem; update of CentralPurchaseContract
    • Purchase contract service: create, delete of PurCtrAccount; create, delete, update of PurCtrAddress; create, delete, update of PurCtrPartners; delete, update PurchaseContract; create, delete, update of PurchaseContractItem
    • Purchase requisition service: create, delete, update of PurReqAddDelivery; create, delete, update of PurReqnAcctAssgmt; delete, update of PurchaseRequisitionHeader; create, delete, update of PurchaseRequisitionItem
    • Purchasing quota arrangement service: create of PurgQuotaArrangementItem
    • Scheduling agreement service: create, delete, update of SchAgrmtAcCnt; delete, update of SchAgrmtHeader; create, delete, update of SchAgrmtItem; create, delete, update of SchAgrmtPartner; create, delete, update of SchAgrmtSchLine;
  • The method getType in ValidationMessages has been renamed to getType_2 in order to prevent name clashes in the created entities with already existing methods.

New Functionality

Improvements

Fixed Issues

Version 2.8.1

December 7, 2018 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Fixed Issues

Version 2.8.0

November 22, 2018 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • As part of the update of the Java VDM for OData services of SAP S/4HANA Cloud 1811, please take note of the following changes:
  • To avoid name clashes between entity representations and helper classes, the helper classes have been moved to separate packages. If you reference any of these, you need to adapt your imports as follows:
    • All ...Selectable interfaces have been moved into a corresponding subpackage named selectable. For example, the interface BusinessPartnerSelectable can now be found in package com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.businesspartner.selectable
    • All ...Field classes have similarly been moved into a subpackage named field.
    • All ...Link classes have similarly been moved into a subpackage named link.
    • If you are using the Java VDM generator, make sure to delete the already generated files via the --delete-output-dir (CLI) or the <deleteOutputDirectory>true</deleteOutputDirectory> (Maven Plugin) options.

New Functionality

Improvements

Fixed Issues

Version 2.7.0

November 8, 2018 - Maven Central - Javadoc - Release blog

Improvements

Fixed Issues

Version 2.6.1

October 25, 2018 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • TokenRequestFailedException and TokenRequestDeniedException have been moved from the module connectivity-scp-cf to security-scp-cf. If you catch these exceptions anywhere, you will need to adjust your imports to com.sap.cloud.sdk.cloudplatform.security.exception.<RespectiveException>.
  • As part of the update to the latest version of Spring, you may have to adapt dependencies in your integration-tests/pom.xml file. Add the following to avoid dependency conflicts.
    <dependency>
        <groupId>org.skyscreamer</groupId>
        <artifactId>jsonassert</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>com.vaadin.external.google</groupId>
                <artifactId>android-json</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  • As part of the update to the latest version of liquibase, we haved removed the now obsolete LiquibaseSlf4jLogger, because this version of liquibase uses logback instead of a custom logger. If you use org.liquibase:liquibase-core, you may have to exclude logback if you use another logger implementation.

New Functionality

Improvements

Fixed Issues

Version 2.5.0

October 11, 2018 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • Please make sure to recompile code that may be affected by the change of Authorization from interface to class in order to avoid IncompatibleClassChangeErrors.
  • The package generalledgerAccount of the Java Virtual Data Model (VDM) has been renamed to generalledgeraccount to be all lower case.

New Functionality

Improvements

Fixed Issues

Version 2.4.2

September 27, 2018 - Maven Central - Javadoc - Release blog

Improvements

Fixed Issues

Version 2.4.1

September 13, 2018 - Maven Central - Javadoc - Release blog

New Functionality

Improvements

Fixed Issues

Version 2.3.1

August 16, 2018 - Maven Central - Javadoc - Release blog

Compatibility Notes:

New Functionality

Improvements

Fixed Issues

Version 2.2.0

August 2, 2018 - Maven Central - Javadoc - Release blog

Compatibility Notes:
  • The protected method getEndpointUrl on VdmEntity classes has been deprecated in favor of the more accurate term service path. Use getServicePathForFetch instead in subclasses.
  • All fluent helper constructors now expect the service path as a String parameter. This only concerns generated classes of previous releases, which need to be regenerated because they use the no longer existing no-args constructor.

New Functionality

Improvements

Fixed Issues

Version 2.1.2

July 5, 2018 - Maven Central - Release blog

New Functionality

Improvements

Fixed Issues

Version 2.1.0

June 7, 2018 - Maven Central - Release blog

Known Issues:
  • Using destinations with a proxy that uses HTTP (instead of HTTPS) does not work in version 2.1.0. Upgrade to version 2.1.2 or later.

Compatibility Notes:
  • Due to the update of the audit logging library, the API for audit logging has changed. See the improvement section below for more details.
  • In order to align naming with Java 8, static constructor methods in enums have been renamed from fromIdentifier to ofIdentifier.
  • The methods for retrieving service credentials in ScpCfCloudPlatform now throw NoServiceBindingException or MultipleServiceBindingsException instead of returning an empty Optional.
  • The SAP-internal raml-api-console module has been removed. If you still need this module, refer to a previous release.
  • Uses of Lombok's @NonNull annotations have been replaced with the JSR-305 @Nonnull annotation to provide a cleaner API contract using only JSR-305 annotations.

New Functionality

Improvements

Fixed Issues

Version 2.0.0

May 23, 2018 - Maven Central - Release blog

Compatibility Notes:
Release 2.0.0 modernizes the technology stack of the SAP S/4HANA Cloud SDK and removes support for Java 7. This new major version brings several changes that require attention from a compatibility perspective:
  • Leverage Java 8
    • Move from Joda Time and legacy Java 7 date and time classes to java.time classes of Java 8. In particular, in the Java VDM, replace deprecated Calendar type with LocalDateTime, LocalTime, and ZonedDateTime classes as type of entity fields depending on their EDM type.
    • Replace Guava's functional primitives like FluentIterable, Optional, Function, Predicate and Supplier with corresponding native Java 8 types.
    • Interface Executable no longer inherits from Callable and is now annotated with @FunctionalInterface. RequestContextExecutor has been adjusted accordingly to accept both Callable and Executable as Lambda expressions.
  • Change obsolete or unwanted behavior from past versions
    • Remove potentially risky best-effort cache keys and HystrixUtil command key methods. The CachingCommand now uses CacheKey.ofTenantAndUserIsolation() by default.
    • As a consequence of removing the best-effort cache key, a tenant is already required when using the destination service on Cloud Foundry. If you are in an environment without security configured, set the ALLOW_MOCKED_AUTH_HEADER environment variable to true to mock a tenant and still use the destination service.
    • Remove fallback of AuditLogger to DefaultLoggerAuditLog on Cloud Foundry. This is to always ensure proper audit logging. If there is an issue while accessing the required audit logging dependencies, an AuditLogAccessException is now thrown.
    • Changes to mocking behavior of MockUtil: MockUtil no longer disables the lookups of the FacadeLocator. MockUtil no longer overrides the RequestContextFacade on the class path with HystrixRequestContextFacade. MockUtil now returns the SecretStore and KeyStore instances for certain methods. MockUtil.mockDefaults() no longer mocks the audit log by default. If you need to mock the audit log, use MockUtil.mockAuditLog().
  • Clean up API of SAP S/4HANA Cloud SDK
    • APIs in Cloud Platform abstractions have been improved with accessor methods returning Optionals in TenantAccessor, UserAccessor, and SecretStoreAccessor.
    • The AuthTokenAccessor now only returns an empty Optional if either no request is available, or no "Authorization" header is present. Consequently, the TenantAccessor on Cloud Foundry considers a tenant unavailable according to the availability of an AuthToken. The UserAccessor on Cloud Foundry considers a user unauthenticated according to the availability of an AuthToken.
    • Remove ErpEndpoint, only use ErpConfigContext instead.
    • Remove deprecated class EjbUtil.
    • Remove RequestContextAccessor.getRequestContextProperty(). Access properties directly via RequestContext.getProperty() instead.
    • Remove method requestContextExecutor() in class MockUtil. Use new RequestContextExecutor() instead.
    • RequestContext now uses a custom class Property to represent a property with a certain value or exception if the value could not be determined.
    • Add AuditLogAccessException to indicate issue when accessing audit log.
    • Remove ScpNeoHystrixBootstrapListener. This is now replaced by a standard Java ServiceLoader.
    • Java VDM: toQuery methods of the fluent helpers throw ODataException.
  • Apply consistent naming
    • Simplify CacheKey and apply unified namings with of constructor methods.
    • Apply unified namings in ConvertedObject with of constructor methods and fix misspelled "convertable", using "convertible" instead.
    • Java VDM: Methods for retrieving the value of association properties are no longer named getXOrNull, but the methods are now called getXIfPresent to better reflect the return type Optional.
    • Rename ResponseBuilder to ErrorResponseBuilder to better reflect the purpose of this class.
    • Rename ErpServiceUriBuilder to ServiceUriBuilder
  • Update dependencies
    • No longer include the Apache CXF framework in compile scope of Maven module com.sap.cloud.s4hana.frameworks:cxf, but rather use provided scope. As a consequence, you must include the Apache CXF framework yourself in case your target runtime does not include it already.
    • Update Guava version to 25.
    • Update TomEE Maven plugin version in scp-cf-tomee archetype to 1.7.5.
    • Update Spring Boot version in scp-cf-spring archetype to 2.0.2.RELEASE.
    • Update spring-web version to 5.0.6.RELEASE.
    • Update referenced JCo version to 3.0.18.
    • Update several other dependencies to new versions.

New Functionality

Improvements

Fixed Issues

Version 1.11.1

May 10, 2018 - Maven Central - Release blog

Compatibility Notes:
  • Update requests with the Java Virtual Data Model (VDM) no longer send all non-null fields to the SAP S/4HANA system, but only changed fields. You may need to adapt the logic in your code to explicitly change fields by using the setters of the entity classes, or use the includingFields method to manually specify fields to include.
  • The name of entities in the VDM for the business event queue service have been changed to improve readability. You may need to change the references in your code as follows: C_Behqueuedata is now Behqueuedata, I_BusinessObjectKeys is now BusinessObjectKeys, and I_BusObjects is now BusObjects. Corresponding fluent helpers and other names have changed similarly as well.

New Functionality

Improvements

Fixed Issues

Version 1.10.0

April 12, 2018 - Maven Central - Release blog

Compatibility Notes:
  • The dependency javax.inject is no longer transitively provided by some modules of the SAP S/4HANA Cloud SDK. You may need to add a dependency on javax.inject:javax.inject to your pom.xml if you depend on it.
  • As part of a reworked structure of authorization token handling on SAP Cloud Platform Cloud Foundry, the JwtBearer class has been replaced by AuthToken.

New Functionality

Improvements

Fixed Issues

Version 1.9.4

March 29, 2018 - Maven Central - Release blog

Known Issues:
  • Authentication via OAuth2 SAML bearer flow on SAP Cloud Platform Cloud Foundry does not work with Spring security configuration in version 1.9.4. Use version 1.10.0 or higher instead.

Compatibility Notes:
  • This version contains the Virtual Data Model (VDM) generator for OData services as a preview release. The preview of the VDM generator is meant to gather feedback, but not yet meant for productive use. The API and functionality of the later full release may differ from the preview release.

New Functionality

Improvements

Fixed Issues

Version 1.9.3

March 15, 2018 - Maven Central - Release blog

Compatibility Notes:
  • This release updates the dependency to the SAP Cloud Platform SDK for service development to version 1.13.1. In the SAP S/4HANA Cloud SDK, this library is mostly used internally in the SAP S/4HANA virtual data model (VDM) for OData services. You may be using the library directly when manually constructing OData requests, for example, using the ODataQueryBuilder. Please find the release notes of the SAP Cloud Platform SDK for service development at help.sap.com.

New Functionality

Improvements

Fixed Issues

Version 1.9.2

February 15, 2018 - Maven Central - Release blog

Compatibility Notes:
  • Important note: To improve consistency and ease of use, this version renames many packages and services within the SAP S/4HANA Virtual Data Model (VDM) for OData services.
    It is most likely that code using the VDM classes needs to be adapted by adjusting the package and class names. We renamed the services according to the rules outlined in the following list.
    For each change to the name of a service interface, the names of the corresponding default implementation class (same name as interface, but prefixed with "Default") and of the package under com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.* (same name as interface, but in lower case and without suffix "Service") have also been changed. In detail, the following changes have been made:
    • Remove prefixes from services that describe the supported operations (as those tend to change from version to version). For example, rename CreateAndUpdateCommercialProjectsService to CommercialProjectService.
    • Remove similar redundant prefixes such as "Process" or "Manage". For example, rename ProcessSalesOrderService to SalesOrderService.
    • Rename plural forms to singular to improve consistency. For example, rename ProcessPurchaseOrdersService to PurchaseOrderService.
    • Rename further services as follows: ReadCostCenterDataService to CostCenterService, BillOfMaterialMaintainService to BillOfMaterialsService, ReadGorlAccountService to GeneralLedgerAccountService, ManageWorkforceAvailabiltyService to WorkforceAvailabilityService, EnableExternalJobSchedulerIntegrationService to ExternalJobSchedulerIntegration, ReadAndUpdatePirsService to PlannedIndependentRequirementService.
  • We also refactored the VDM classes for BAPI services to more accurately represent the single value-typed parameters of those BAPIs, thereby increasing readability and type-safety.
    Many types that represent a single value have been changed and added, for example CostCenterCategory. They are used as types of parameters of BAPI service methods. The functional scope of the fluent API has not changed. In order to update your application, please exchange the old class names with the new ones, suggested by your IDE. You still use the same primitive parameter values used to contruct those single value types.
  • The EjbUtil helper class has been deprecated, as its functionality is no longer required in newer JavaEE containers.

New Functionality

Improvements

Fixed Issues

Version 1.8.0

February 1, 2018 - Maven Central - Release blog

Known Issues:
  • Using version 1.8.0 is NOT recommended for a multi-tenant application in the Neo environment of SAP Cloud Platform; consumers are instead recommended to update to version 1.9.2. Version 1.8.0 has a bug that manifests only in the Neo environment of SAP Cloud Platform where running in non-container managed threads would always use the tenant context of the provider, not the consumer account. Version 1.9.2 fixes this bug. Applications running in the Cloud Foundry environment are not affected by this bug.

Compatibility Notes:

Improvements

Fixed Issues

Version 1.7.1

January 18, 2018 - Maven Central - Release blog

Compatibility Notes:
  • The update of the TomEE adapters for Arquillian to version 1.7.5 makes the use of the dependency org.jboss.arquillian.junit:arquillian-junit-container obsolete. This dependency has been removed from the SDK BOM, you may have to either remove the dependency from your integration-tests/pom.xml file or add a version to it (e.g., 1.1.5.Final).
  • Due to the switch from MockServer to WireMock, any tests written using the MockServer implementation have to be migrated (see Getting Started with WireMock).
  • DestinationType is now an enum instead of a class to better reflect the available destination types.

New Functionality

Improvements

Fixed Issues

Version 1.6.0

December 21, 2017 - Maven Central - Release blog

Compatibility Notes:
  • Builder methods for navigation properties have been renamed from to[NavigationProperty] to [navigationProperty] in order to improve readability.
  • Methods of the VDM such as select or filter that before expected a generic EntityField instance now expect entity type-specific instances, for example, BusinessPartnerField (only relevant if you used your own EntityField instances, for example, to represent custom fields).
  • Previously malformed acronyms in field names have been fixed, resulting in changed names of variables available from entity types (example: BusinessPartner.BUSINESS_PARTNER_U_U_ID has been renamed to BusinessPartner.BUSINESS_PARTNER_UUID).

New Functionality

Improvements

Fixed Issues

Version 1.5.0

December 7, 2017 - Maven Central - Release blog

Compatibility Notes:

New Functionality

Improvements

Fixed Issues

Version 1.4.0

November 23, 2017 - Maven Central - Release blog

Compatibility Notes:

New Functionality

Improvements

Fixed Issues

Version 1.3.0

November 9, 2017 - Maven Central

Compatibility Notes:

New Functionality

Improvements

Fixed Issues

Version 1.2.0

October 26, 2017 - Maven Central

Compatibility Notes:

Deprecation Note: This version deprecates the obsolete functionality of retrieving ErpSystemInfo.

Known Issues

New Functionality

Improvements

Fixed Issues

Version 1.1.2

October 12, 2017 - Maven Central

Compatibility Note: This version uses Mockito 2.10.0, Mockito 1.x is no longer supported.

Details on the incompatible changes can be found here.

New Functionality

Improvements

Fixed Issues

Version 1.1.1

September 29, 2017 - Maven Central

Compatibility Note: OData navigation properties in S/4HANA virtual data model now use prefix fetch instead of get.

For example, a property that was previously named getItem() is now called fetchItem().

New Functionality

Improvements

Fixed Issues

Version 1.0.0

September 14, 2017 - Maven Central