Skip to main content

release-notes-45-to-59

3.59.0 - December 02, 2021​

Maven Central | Javadoc

Compatibility Notes​

  • Removed unnecessary dependency netty-bom from the Bill of Material (BOM).
  • Replaced the experimental API HttpSecuritySettings getHttpSecuritySettings() with SSLContext getSslContext() on CloudPlatform. Removed the experimental interface HttpSecuritySettings

New Functionality​

Improvements​

  • Dependency Updates:
    • SAP dependency updates:
    • Other dependency updates:
      • Minor version updates:
        • Update Logback Classic (ch.qos.logback:logback-classic) from 1.2.6 to 1.2.7.
        • Update Mockito (org.mockito:mockito-core) from 4.0.0 to 4.1.0

Fixed issues​

  • We fixed a race-condition issue when serializing OData V2 VDM entity objects concurrently in multiple threads. This addresses errors reported as "Could not serialize property 'FooBar'. Returning null instead."

3.58.0 - November 18, 2021​

Maven Central | Javadoc

Compatibility Notes​

  • The OpenAPI generator now fails with a helpful message during generation if the input specification contains any of these keywords oneOf or anyOf in either:
    • The paths part of the specification
    • As an additional property or nested inside a property under a Schema listed in the specification.

Please, remove these properties from your specification and generation will succeed. It will allow you to use the remaining endpoints via the type-safe client by the SAP Cloud SDK. Support for oneOf, anyOf might be added in the future but the timeline for that is unknown.

New Functionality​

  • Update the OData VDM to the newest release 2111 of SAP S/4HANA Cloud. This includes completely new services (available as usual in packages com.sap.cloud.sdk.s4hana.datamodel.odata.services and com.sap.cloud.sdk.s4hana.datamodel.odatav4.services), new operations in previously existing services, and new entity types. The SAP Cloud SDK supports all OData services listed in the SAP Business Accelerator Hub for SAP S/4HANA Cloud with the exception of the following services:
    • (OData V2) Maintenance Item - API_MAINTENANCEITEM
    • (OData V2) Enterprise Project V2 - API_ENTERPRISE_PROJECT_SRV_0002
    • (OData V2) Service Order Template - OP_API_SERVICE_ORDER_TEMPLATE_SRV_0001
    • (OData V4) Contract Accounting Business Transaction - CABUSINESSPARTNER_0001
    • (OData V4) Handling Unit - HANDLINGUNIT_0001
    • (OData V4) Maintenance Task List - MAINTENANCETASKLIST_0001
    • (OData V4) Measuring Point - MEASURINGPOINT_0001
    • (OData V4) Planned Order - PLANNEDORDER_0001
    • (OData V4) Process Warehouse Task - WAREHOUSEORDER_0001
    • (OData V4) Product Exclusion - PRODUCTEXCLUSION_0001
    • (OData V4) Product Substitution - PRODUCTSUBSTITUTION_0001
    • (OData V4) Supplier Item - SUPPLIERITEM_0001
    • (OData V4) Warehouse Resource - WAREHOUSERESOURCE_0001

Improvements​

  • Limit beans scanning to service classes only in dependencies s4hana-api-odata, s4hana-api-odata-onpremise-2020 ands4hana-api-odata-v4-onpremise-2020. This significantly reduces startup times and memory consumption for TomEE applications that are missing their own beans.xml configuration. For consistency the beans scanning of s4hana-api-odata-v4 is enabled now but also limited to service classes.

  • The ALWAYS_SUBSCRIBER strategy of the default ScpCfDestinationRetrievalStrategy in the ScpCfDestinationLoader did not behave as its name implied. It was taking the current tenant, which might also be a Provider Tenant due to misconfiguration. We fixed it by:

    • Renaming ALWAYS_SUBSCRIBER to CURRENT_TENANT and making it a new default strategy.
    • Deprecation the confusingly named ALWAYS_SUBSCRIBER strategy
    • Adding a new ONLY_SUBSCRIBER strategy that actively enforces that a current tenant is not a provider tenant
  • Dependency Updates:

    • SAP dependency updates:
    • Other dependency updates:
      • Minor version updates:
        • Update Gson (com.google.code.gson:gson) from 2.8.8 to 2.8.9

3.57.0 - November 4, 2021​

Maven Central | Javadoc

Improvements​

  • Dependency Updates:
    • SAP dependency updates:
      • Update Neo JavaEE7 WP API (com.sap.cloud:neo-javaee7-wp-api) from 1.107.5 to 1.108.5
      • Update Neo Java Web API (com.sap.cloud:neo-java-web-api) from 4.11.4 to 4.12.2
      • Update CDS4J Maven Plugin (com.sap.cds:cds4j-maven-plugin) from 1.16.0 to 1.23.0
      • Update JPaaS Security Utils (com.sap.core.jpaas.security:com.sap.core.jpaas.security.utils) from 1.4.90 to 1.4.91
    • Other dependency updates:
      • Major version updates:
        • Update Guava (com.google.guava:guava, guava-testlib) from 30.1.1-jre to 31.0.1-jre
      • Minor version updates:
        • Update Hibernate Core (org.hibernate:hibernate-core) from 5.5.7.Final to 5.6.0.Final
        • Update JUnit Jupiter (org.junit.jupiter:junit-jupiter-engine) and JUnit Vintage (org.junit.vintage:junit-vintage-engine) from 5.7.2 to 5.8.1
        • Update Netty (io.netty:netty-bom) from 4.1.67.Final to 4.1.69.Final
        • Update Protobuf (com.google.protobuf:protobuf-java) from 3.18.1 to 3.19.0
        • Update Reactor Core (io.projectreactor:reactor-core) from 3.4.10 to 3.4.11

Fixed issues​

  • We fixed the vulnerability CVE-2021-37137 that affects Netty with versions < 4.1.68.Final by updating to version 4.1.69.Final.
  • We fixed an issue where some OData exception messages were not encoded correctly.

3.56.0 - October 21, 2021​

Maven Central | Javadoc

New Functionality​

  • We added support for the newly introduced SecretRootKey service binding layout as defined by the SAP BTP Service Operator for K8s. We recommend all consumers to use this binding layout as it solves the problem of incorrectly parsed array properties. Please refer to our K8s Guide for more detailed instructions on how to create service bindings using the SAP BTP Service Operator.

Improvements​

  • We improved API generalization to accept custom implementations of interface OAuth2Service instead of dedicated class XsuaaService.

  • To increase compatibility, the OData V2 count() operation on our OData V2 typed client (VDM) now ignores query options other than $filter and user-defined query options which are not relevant for the count operation.

  • Dependency Updates:

    • SAP dependency updates:
      • Update com.sap.cloud:neo-java-web-api from 4.9.4 to 4.11.4
      • Update com.sap.cloud:neo-javaee7-wp-api from 1.105.7 to 1.107.5
    • Other dependency updates:
      • Major version updates:
        • Update org.mockito:mockito-core from 3.12.4 to 4.0.0
      • Minor version updates:
        • Update org.projectlombok:lombok from 1.8.20 to 1.8.22
        • Update com.fasterxml.jackson:jackson-bom from 2.12.5 to 2.13.0
        • Update io.swagger:swagger-annotations from 1.6.2 to 1.6.3
        • Update joda-time:joda-time from 2.10.10 to 2.10.12
        • Update net.sourceforge.pmd:pmd-core, pmd-java, pmd-test from 6.38.0 to 6.39.0
        • Update com.squareup.okhttp3:okhttp, mockwebserver and from 4.9.1 to 4.9.2
        • Update org.apache.tomcat:tomcat-annotations-api, tomcat-jdbc from 8.5.71 to 8.5.72
        • Update com.google.protobuf:protobuf-java from 3.18.0 to 3.18.1

Fixed issues​

  • We fixed an issue where the appendDestinationLoader and prependDestinationLoader on the DestinationLoader were not behaving as expected on a given DestinationLoaderChain.The DestinationLoaderChains are now correctly added to an existing DestinationLoaderChain.

  • We fixed an issue with the OData V4 generator not considering actions and functions when one of their arguments references a complex- or entity-type that is not transitively exposed through entity sets.

  • We fixed the issue where HttpClients were not cached correctly on SAP BTP Neo. With this fix the caching should now behave as expected, minimizing the number of concurrent HttpClient instances in use.

3.55.1 - October 7, 2021​

Maven Central | Javadoc

New Functionality​

  • We introduced a new abstraction to load service bindings from various locations in an environment agnostic manner: The ServiceBindingLoader interface.

    This utility interface consists of just a single method (load), which returns all service bindings for the current application. We also provide the following implementations:

    • The EnvironmentVariableServiceBindingLoader is capable of parsing environment variables (such as the VCAP_SERVICES) on SAP BTP Cloud Foundry
    • The FileSystemServiceBindingLoader is capable of parsing service bindings, which are mounted to the file system (for example, when running in a K8s environment).
    • The ServiceBindingMerger is capable of combining the results of an arbitrary amount of other ServiceBindingLoader instances based on a configurable service binding property (e.g. the name of the bindings).

    During the design of this new feature, we paid special attention to the reconfigurability and extensibility of the API to enable consumers to support any runtime with as few changes as possible.

  • We changed the way ScpCfCloudPlatform class is loading service bindings to use the newly introduced ServiceBindingLoader API. It allows to seamlessly load service bindings from a file system in K8s-based environments like SAP Gardener.

    We search and load the Service bindings with the following priority, highest to lowest:

    • From the file system, as provided by the SAP Service Operator K8s service with the SecretKey layout
    • From the file system, as provided by the SAP Service Operator K8s service with the Data (default) layout
    • From the VCAP_SERVICES environment variable

Improvements​

  • Dependency Updates:
    • SAP dependency updates:
    • Other dependency updates:
      • Major version updates:
        • Update org.togglz:togglz-core from 2.9.9 to 3.0.0
      • Minor version updates:
        • Update ch.qos.logback:logback-classic from 1.2.5 to 1.2.6
        • Update com.auth0:java-jwt from 3.18.1 to 3.18.2
        • Update org.springframework:spring-framework-bom from 5.3.9 to 5.3.10
        • Update org.jooq:jooq from 3.14.12 to 3.14.15
        • Update io.projectreactor:reactor-core from 3.4.9 to 3.4.10
        • Update org.apache.tomcat:tomcat-annotations-api,tomcat-jdbc from 8.5.69 to 8.5.71
        • Update com.google.protobuf:protobuf-java from 3.17.3 to 3.18.0

Fixed issues​

  • Fix SapPassportAccessor.getPassportForNextRequest() to no longer throw an exception if either the current ThreadContext is unavailable or the incoming HTTP request is missing the SAP passport header.
    • Instead, we generate a new passport on behalf of the base passport template.
    • If the base passport template is not defined, a new template will be instantiated at runtime via SapPassportFactory.

3.54.0 - September 23, 2021​

Maven Central | Javadoc

Known Issues​

  • We are aware of the vulnerability CVE-2021-37137 that affects Netty in version 4.1.67.Final. Unfortunately, we are not yet able to resolve that vulnerability due to an issue with the 4.1.68.Final release of Netty, which prevents projects from compiling. We will update the related dependencies once the build issue has been resolved. The vulnerability affects only deprecated modules that are not recommended to use which significantly mitigates the risks for the SAP Cloud SDK's customers.

New Functionality​

  • Applications that use an IAS binding instead of XSUAA are now supported out of the box.
    • Incoming JWTs issued by IAS are validated and decoded
    • In case no JWT is provided the SAP Cloud SDK defaults to the zone ID of the provider tenant
    • Destination & Connectivity service can be accessed on behalf of the IAS tenant via zone ID
    • Not supported: JWTs issued by IAS can not yet be used for Principal Propagation and User Token Exchange
    • Under the hood, the SAP Cloud SDK now uses zone IDs to pass tenant information to both IAS and XSUAA. See the note under "Improvements"

Improvements​

  • Internally the SAP Cloud SDK now passes the tenant information via zone ID (instead of subdomain) to the OAuth2 services XSUAA and IAS

  • Resolving the provider tenant no longer requires an internal HTTP request. Instead, the VCAP_SERVICES environment variable will be parsed at runtime for the necessary information.

  • Dependency Updates:

    • SAP dependency updates:
      • Update com.sap.hcp.cf.logging:cf-java-logging-support-logback from 3.5.1 to 3.5.2
      • Update com.sap.cloud:neo-javaee7-wp-api from 1.103.10 to 1.105.7
      • Update com.sap.cloud:neo-java-web-api from 4.7.9 to 4.9.4
    • Other dependency updates:
      • Minor version updates:
        • Update org.hyperledger.fabric-sdk-java:fabric-sdk-java from 2.2.7 to 2.2.8
        • Update com.fasterxml.jackson:jackson-bom from 2.12.4 to 2.12.5
        • Update org.mockito:mockito-core from 3.12.3 to 3.12.4
        • Update net.sourceforge.pmd:pmd-core from 6.37.0 to 6.38.0
        • Update org.twdata.maven:mojo-executor from 2.3.1 to 2.3.2
        • Update org.xerial:sqlite-jdbc from 3.36.0.1 to 3.36.0.3
        • Update com.rabbitmq:aqmp-client from 5.13.0 to 5.13.1
        • Update org.hibernate:hibernate-core from 5.5.6 to 5.5.7.Final
        • Update org.codehaus.plexus:plexus-utils from 3.4.0 to 3.4.1
        • Update io.netty:netty-bom from 4.1.66.Final to 4.1.67.Final
        • Update jakarta.activation:jakarta.activation-api from 2.0.0 to 2.0.1
        • Update com.github.tomakehurst:wiremock-jre8-standalone from 2.30.1 to 2.31.0

3.53.0 - September, 13, 2021​

Maven Central | Javadoc

Compatibility Notes​

  • The Java HTML parser jsoup is no longer part of our implicit dependency management. If your application relies on the version provided by the SAP Cloud SDK, please consider declaring the dependency version yourself. The latest version can be found in Maven Central.

New Functionality​

  • We added convenience methods for null comparison in our OData API to avoid unnecessary null-casting:

    • Entity.FIELD_NAME.equalToNull() - OData V4 VDM / Generic OData Client
    • Entity.FIELD_NAME.notEqualToNull() - OData V4 VDM / Generic OData Client
    • Entity.FIELD_NAME.eqNull() - OData V2 VDM
    • Entity.FIELD_NAME.neNull() - OData V2 VDM
  • We now support function import calls in OData V2 using the HTTP GET method inside batch requests. Within the batch request, the function import call can be added to the addReadOperations() method. You can execute a batch request containing a function import call as follows:

singleValueReturnFunction = service.callSomeFunction();
service.batch()
.addReadOperations(singleValueReturnFunction)
.executeRequest(destination);

You can read the response of the function by:

functionResult = batchResponse.getReadResult(singleValueReturnFunction);

You can also add functions that return a collection inside batch requests and parse the results yourself in a similar manner. Please refer to our documentation for more details.

  • [Beta] Reading destinations from environment variables now allows you to configure authorization token forwarding to the target system. You can activate this feature in the following ways

    1. Setting the authentication property directly:

      [
      {
      "type": "HTTP",
      "name": "destinationName",
      "url": "https://URL",
      "authentication": "TokenForwarding"
      }
      ]
    2. Adding the property forwardAuthToken=true, as already known from the approuter: [ { "type": "HTTP", "name": "destinationName", "url": "https://URL", "forwardAuthToken": true } ] Both of those settings will cause the destination to take the value of the Authorization HTTP header contained in the current HTTP request for every request to the specified target system.

    Note: The settings above will override a token set with AuthTokenAccessor.executeWith(...). Moreover, authentication tokens set via AuthTokenAccessor.executeWith(...) will not be forwarded to the target system.

  • You can now add headers to a destination using the property method so that they will always be included when calling the target system. Here's an example of the property method call: .property("URL.headers.foo1", "bar1"). Find more details on setting properties here.

  • You can now add query parameters to a destination using properties. They will always be included in the query string when calling the target system. The query values should be provided without encoding. They will be encoded in the query string by the SAP Cloud SDK. Example of adding a query parameter using property method: .property("URL.queries.airport", "KΓΆln Bonn"). The rendered query string will look like: airport=K%C3%B6ln%20Bonn. Find more details on adding query parameters here.

Improvements​

  • HttpClientFactory is now a @FunctionalInterface. This let's you conveniently construct an instance of the HttpClientFactory using a simple lambda expression: HttpClientFactory factory = destination -> HttpClients.createDefault();.

  • We removed unnecessary warning messages when generated when an XSUAA or IAS service is not bound to an application.

  • Dependency Updates:

    • SAP dependency updates:
    • Other dependency updates:
      • Minor version updates:
        • Update Spring from 5.3.8 to 5.3.9
        • Update GSON from 2.8.7 to 2.8.8
        • Update Togglz from 2.9.8 to 2.9.9
        • Update Mockito from 3.11.2 to 3.12.3
        • Update Spring Security from 5.5.1 to 5.5.2

Fixed Issues​

  • We fixed the issue where HTTP header keys of an OData response were not handled case-insensitive, causing problems with processing those responses. This is fixed now and should handle headers the same way, regardless of capitalization.

3.52.0 - August 26, 2021​

Maven Central | Javadoc

Known Issues​

  • The Java HTML parser jsoup is used in a version which contains the vulnerability CVE-2021-37714. We plan to remove this dependency in future versions of the SAP Cloud SDK.

New Functionality​

  • We enabled support for certificate-based authentication for services on Cloud Foundry which allows services to use Mutual Transport Layer Security or mTLS instead of providing client credentials. In the future, this will become the default authentication method on the SAP BTP Cloud Foundry.

    • If the service binding has a property credentials: { credential-type: x509 } then this is an indicator for the new authentication method.
    • Please note: you might see WARN messages in the logs. These are produced by the Java Security Library that we use as a dependency. We verified the logic with the library publisher and it's safe to use. The false log message is soon to be removed.
  • We enabled the use of a certificate-based authentication without password protection for the Destination Service on the SAP BTP Cloud Foundry.

  • We updated the remaining OData VDM services to the newest release 2108 of SAP S/4HANA Cloud. Operations and data types of the following services may have faced backward-incompatible changes, that can be explored in the SAP Business Accelerator Hub for SAP S/4HANA Cloud:

    • (OData V2) Maintenance Item - API_MAINTENANCEITEM
    • (OData V2) Maintenance Plan - API_MAINTENANCEPLAN
    • (OData V2) Bills of Material - API_BILL_OF_MATERIAL_SRV_0002
    • (OData V2) Service Order - API_SERVICE_ORDER_SRV
    • (OData V4) Supplier Item - SUPPLIERITEM_0001

Improvements​

  • Dependency updates:
    • Update BTP Neo Tomcat 8 SDK from 4.5.3 to 4.6.5
    • Update XSUAA Token Client and Token Flow API from 2.10.2 to 2.10.3
    • Update Neo JavaEE 7 SDK from 1.101.4 to 1.102.5
    • Update Error Prone from 2.8.0 to 2.8.1
    • Update PMD from 6.36.0 to 6.37.0
    • Update Wiremock from 2.29.1 to 2.30.0
    • Update ASM from 9.0 to 9.2
    • Update Spring from 5.3.8 to 5.3.9
    • Update Spring Boot from 2.5.0 to 2.5.3
    • Update Commons CSV from 1.8 to 1.9.0
    • Update Hibernate Core from 5.5.4.Final to 5.5.6
    • Update Logback from 1.2.3 to 1.2.5

3.51.0 - August 12, 2021​

Maven Central | Javadoc

Compatibility Notes​

  • While updating the OData client libraries (VDM) to match the latest SAP S/4HANA Cloud 2108 release we identified the following breaking changes:
    • Affected service ID: HANDLINGUNIT_0001. In the OData V4 service Handling Unit Item the Create operation was removed. No existing functionality is affected because this operation has never been supported by SAP S/4HANA.
    • SAP__Message class was updated in a breaking manner. Its numericSeverity property was changed from Short to Integer. This affects multiple OData V4 services. Note: This change is likely to be reverted in the future. We'll separately communicate about this in the release notes.

New Functionality​

  • The SAP Cloud SDK now provides out-of-the-box support for the Identity Authentication Service (IAS). Here's the list of accessors that are currently able to handle JWTs authored by the IAS service:

    • AuthTokenAccessor
    • TenantAccessor
    • PrincipalAccessor
  • We updated the pregenerated OData V2 and V4 type-safe clients libraries for the latest 2108 release of SAP S/4HANA Cloud. After updating your dependencies you'll find the latest version of SAP S/4HANA Cloud services, operations, and entities in

  • com.sap.cloud.sdk.s4hana.datamodel.odata.services

  • com.sap.cloud.sdk.s4hana.datamodel.odatav4.services Find details of OData services supported by the SAP Cloud SDK in the SAP Business Accelerator Hub for SAP S/4HANA Cloud. We excluded the following services from the latest release because of identified breaking changes:

    • (OData V2) Maintenance Item - API_MAINTENANCEITEM
    • (OData V2) Maintenance Plan - API_MAINTENANCEPLAN
    • (OData V2) Bills of Material - API_BILL_OF_MATERIAL_SRV_0002
    • (OData V2) Service Order - API_SERVICE_ORDER_SRV
    • (OData V4) Supplier Item - SUPPLIERITEM_0001 We are working with the SAP S/4HANA team to make sure the changes are intended and plan to add these services in the following releases. We'll communicate it explicitly in the release notes. Let us know via support if you have any deadlines related to the consumption of those services.

Improvements​

  • The Workflow API client library in module scp-workflow-cf was updated to support the latest version of the Workflow Service on the SAP BTP Cloud Foundry.

  • Dependency Updates:

    • Update Neo JavaEE 7 SDK from 1.100.7 to 1.101.4
    • Update BTP Neo Tomcat 8 SDK from 4.2.4 to 4.5.3
    • Update BTP CF Logging from 3.5.0 to 3.5.1
    • Update SLF4J from 1.7.31 to 1.7.32
    • Update AssertJ Vavr from 0.4.1 to 0.4.2
    • Update Commons IO from 2.10.0 to 2.11.0
    • Update Vavr from 0.10.3 to 0.10.4

3.50.0 - July 29, 2021​

Maven Central | Javadoc

Known issues​

  • The vulnerability CVE-2021-2629 refers to the non-encrypted access to Maven repositories which eases man-in-the-middle attacks where an attacker manipulates a repository. Maven 3.8.1 changed the default behaviour to no longer follow non-encrypted repository URLs. The SAP Cloud SDK uses Maven libraries in the version 3.6.0, mainly since we release Maven plugins. An update to the latest Maven version is planned to mitigate this issue. Internal analysis revealed that there is no direct harm for SAP BTP applications using the SAP Cloud SDK for Java. To minimize the attack vector, we recommend to developers to use Maven 3.8.1 or later on their development machines.

Compatibility Notes​

  • Mitigate CVE-2021-35515 by update to secure version of org.apache.commons:commons-compress in the SAP Cloud SDK module blockchain-client-fabric.

New Functionality​

  • We introduced a new API to give you precise control over discarding cache entries by passing a CacheFilter instance to your resilience configuration like this ResilienceDecorator.clearCache(ResilienceConfiguration, CacheFilter). You can combine multiple cache filters to a disjunction or conjunction by calling CacheFilter.or(firstFilter, secondFilter) or CacheFilter.and(firstFilter, secondFilter) respectively. Check more examples on how to leverageCacheFilter in the detailed feature documentation.
  • The OData V4 generator now supports the generation of actions with non-primitive value types, i.e. Entity, Complex type, Enum, and collection-based types.

Improvements​

  • Dependency Updates:
    • SAP dependency updates:
    • Other dependency updates:
      • Minor version updates:
        • Update Java JWT from 3.17.0 to 3.18.1
        • Update Jackson from 2.12.3 to 2.12.4
        • Update Spring from 5.3.7 to 5.3.8

3.49.0 - July 15, 2021​

Maven Central | Javadoc

Known issues​

  • The module com.sap.cloud.sdk.frameworks:cxf uses the Apache CXF dependencies of version 3.3.10 which is affected by vulnerabilities CVE-2021-30468. Currently, this module is not consumed in other SAP Cloud SDK modules. Use of the SAP Cloud SDK doesn't compromise your application runtime unless you consume this module in your code directly.

New Functionality​

  • We added a new SimpleNamingStrategy, which, in contrast to our S4HanaNamingStrategy, does not apply any unnecessary modifications to the generated names.
  • We added the option to specify additional properties for the OpenAPI generator. The Maven plugin and CLI now accept a list of additional properties as described here.

Improvements​

  • Dependency Updates:
    • SAP dependency updates:
    • Other dependency updates:
      • Major version updates:
        • Update transitive asm dependency from 7.0 to 9.0
      • Minor version updates:
        • Update Slf4j from 1.7.30 to 1.7.31
        • Update Caffeine from 2.9.1 to 2.9.2
        • Update Java JWT from 3.16.0 to 3.17.0
        • Update Resilience4j from 1.7.0 to 1.7.1
        • Update Mockito from 3.11.1 to 3.11.2
        • Update Fabric SDK from 2.2.6 to 2.2.7
        • Update Spring from 5.3.5 to 5.3.7
        • Update Spring Boot from 2.4.4 to 2.5.0
        • Update Spring security from 5.4.5 to 5.5.1
        • Update Eclipse Link from 2.7.8 to 2.7.9

Fixed issues​

  • We fixed an issue where OData batch requests could not be build in case the service bath did not start with a leading forward slash.

3.48.0 - July 1, 2021​

Maven Central

Known issues​

  • The module usage-analytics uses the dependency org.jdom:jdom:2.0.6 which is affected by the vulnerability CVE-2021-33813. There was no fixed dependency version available at the release date. We'll update this dependency once a secure version is available. The dependency is used in a Maven plugin and hence there is no harm during the runtime of any SAP BTP application.

Compatibility Notes​

  • We refactored the way Java names (e.g., for classes, methods, fields, etc.) are being generated in both the OData V2 and the OData V4 VDM generator. This refactoring aims to grant more power over what names are to be used in the VDM to implementations of the NamingStrategy interface.

    Hereby, we changed the following interfaces and classes in an incompatible way:

    • The NamingStrategy interface has been redesigned entirely, leading to compilation errors for existing implementations.
    • The DefaultNamingStrategy has been renamed to S4HanaNamingStrategy. It stays the default value for the generator, though.
    • The DefaultNamingStrategy.NameSource enumeration has been moved to the package rather than being nested inside a class.

    Additionally, the entire logic, which consists of the items listed below, has been moved to the com.sap.cloud.sdk.datamodel.odata.utility package:

    • NameSource
    • NamingStrategy
    • AbstractNamingStrategy
    • S4HanaNamingStrategy

    Users of the Maven Plugin or the CLI variant of the generators are (most likely) not affected by any incompatible changes.

  • We fixed a typo in the com.sap.cloud.sdk.datamodel.odata.utility (previously utililty) package name. The only class affected by this change is the LegacyClassScanner, which is meant for internal usage only.

New Functionality​

  • We added the ScpCfDestinationTokenExchangeStrategy, which can be used to change the user token exchange behavior when retrieving destinations on SAP BTP Cloud Foundry.

    By default, the ScpCfDestinationLoader always performs an initial "look up" request against the destination service. This is needed to get the authentication type configured in the destination, which might then require a user token exchange to authenticate at the target system.

    The newly added ScpCfDestinationTokenExchangeStrategy allows users to skip either the initial "look up" to increase performance, or the user token exchange:

    // configure the ScpCfDestinationLoader to perform the user token exchange immediately
    DestinationOptions options =
    DestinationOptions
    .builder()
    .augmentBuilder(
    ScpCfDestinationOptionsAugmenter.augmenter().tokenExchangeStrategy(
    ScpCfDestinationTokenExchangeStrategy.EXCHANGE_ONLY))
    .build();

    Try<Destination> destination = DestinationAccessor.getLoader().tryGetDestination("MyDestination", options);
  • The OData V4 Generator now supports parameter reordering also on bound operations (both functions and actions). The generator will now maintain the parameter order of a previously generated VDM, even if the parameter ordering in the EDMX changes.

Improvements​

  • Dependency Updates:
    • SAP dependency updates:
      • Update Neo JavaEE 7 SDK from 1.97.11 to 1.98.8
    • Other dependency updates:
      • Minor version updates:
        • Update Caffeine from 2.9.0 to 2.9.1
        • Update Commons IO from 2.9.0 to 2.10.0
        • Update Eclipse Link from 2.7.7 to 2.7.8
        • Update Mockito from 3.10.0 to 3.11.1
        • Update Protobuf from 3.17.1 to 3.17.3
        • Update Bouncycastle from 1.68 to 1.69
        • Update Wiremock from 2.28.0 to 2.28.1

Fixed issues​

  • We fixed an issue with the OData V4 VDM where bound operations on entity sets would target an incorrect URL.
  • We fixed an issue in both the OData V2 and V4 VDM generators where certain OpenAPI fields on a path item led to a generator warning and caused the generation to fail if the flag fail-on-warning was activated.

3.47.0 - June 17, 2021​

Maven Central | Javadoc

New Functionality​

  • We introduced the new API Principal#getAuthorizationsByAudience which returns the authorizations (scopes) of the principal grouped by their audience.

Improvements​

  • Dependency Updates:
    • SAP dependency updates:
    • Other dependency updates:
      • Update Protobuf Java from 3.17.0 to 3.17.1
      • Update Netty from 4.1.64.Final to 4.1.65.Final
      • Update PMD from 6.34.0 to 6.35.0
      • Update Commons IO from 2.8.0 to 2.9.0
      • Update Gson from 2.8.6 to 2.8.7
      • Update Mockito from 3.9.0 to 3.10.0
      • Update jsonschema2pojo from 1.1.0 to 1.1.1
      • Update Hibernate Core from 5.4.31.Final to 5.4.32.Final
      • Update Jetty from 9.4.39.v20210325 to 9.4.41.v20210516
      • Update Spring from 5.3.4 to 5.3.5
      • Update Spring Boot from 2.4.3 to 2.4.4
      • Update Json Path from 2.5.0 to 2.6.0

Fixed issues​

  • We fixed an issue in the Javadoc generation for the OData V4 type-safe client (VDM), which caused the content of the Core.Description annotation to be ignored.
  • We improved an exception message in both the OData V2 and V4 generator where an empty class name was subject to generation. This happens, for instance, if an entity type is named Type.

3.46.0 - June 3, 2021​

Maven Central | Javadoc

Compatibility Notes​

  • We updated the (OData V2) Trial Balance - Read (C_TRIALBALANCE_CDS) VDM to the newest release 2105 of SAP S/4HANA Cloud

    Caution: The service introduced some intended breaking changes with the latest update which are now, in consequence, also present in the type-safe client (VDM) by the SAP Cloud SDK.

New Functionality​

  • The type-safe client (VDM) for OData V4 now gives access to bound functions and actions. Entities will now expose all operations bound to their type on their class.

    For example assume there is a function IsHappy defined for an entity Person, then you can use:

    service.forEntity(person)
    .applyFunction(Person.isHappy());

    In case the function is bound to a collection use e.g.:

    service.applyFunction(Person.AreAllHappy());

    Furthermore, if a function is marked by the service as composable you can also apply an operation to the result of a function directly:

    service.forEntity(person)
    .withFunction(Person.getBestFriend())
    .navigateTo(Person.FRIENDS)
    .getAll();

    The creation of the new operation types is enabled in the OData V4 generator as well. Check out the full documentation of the feature for more information.

  • We updated the OData type-safe client also known as the VDM to the newest release FPS2 of SAP S/4HANA On-Premise 2020. This also includes completely new services added (available as usual in packages com.sap.cloud.sdk.s4hana.onpremise.v2020.datamodel.odata.services and com.sap.cloud.sdk.s4hana.onpremise.v2020.datamodel.odatav4.services), new operations in previously existing services, and new entity types.

Improvements​

  • We increased the default application memory setting for archetypes scp-cf-tomee and scp-cf-spring from 1024M to 1500M. This mitigates potential deployment errors due to the latest extensions in the VDM modules.

  • Dependency Updates:

    • Update Fabric SDK Java from 2.2.5 to 2.2.6
    • Update JUnit Jupiter from 5.7.1 to 5.7.2
    • Update Netty from 4.1.63.Final to 4.1.64.Final
    • Update Json Sanitizer from 1.2.2 to 1.2.3
    • Update PMD from 6.33.0 to 6.34.0
    • Update jOOR from 0.9.13 to 0.9.14
    • Update Java JWT from 3.15.0 to 3.16.0
    • Update Error Prone from 2.6.0 to 2.7.1
    • Update AMQP Client from 5.11.0 to 5.12.0
    • Update Reactor from 3.4.5 to 3.4.6
    • Update Wiremock from 2.27.2 to 2.28.0
    • Update Protobuf from 3.15.8 to 3.17.0

    3.45.0 - May 20, 2021​

Maven Central | Javadoc

New Functionality​

  • Function import calls in OData V2 using the HTTP POST method can now be embedded in batch requests. Within the batch request, the function import call is wrapped inside a change set since function imports can also alter business data. You can execute a batch request containing a function import call as follows:

    service.batch()
    .beginChangeSet()
    .addFunctionImport(service.callSomeFunction())
    .endChangeSet()
    .executeRequest(destination);
  • For the Generic OData Client filterable values and fields can now use the in operator in expressions.

    StructuredQuery query;

    // Age in (40,41,42)
    query.filter(FieldReference.of("Age").in( 40,41,42 ));

    // BestFriend in Friends
    query.filter(FieldReference.of("BestFriend").in( FieldReference.of("Friends").asCollection()) );

    // 'Green' in Colors
    query.filter(ValueString.literal("Green").in( FieldReference.of("Colors").asCollection()) );
  • For the OData V4 Typed Client filterable fields can now use the in operator in expressions.

    GetAllRequestBuilder<Person> request;

    // Age in (40,41,42)
    request.filter(Person.AGE.in(40,41,42));

    // BestFriend in Friends
    query.filter(Person.TO_BEST_FRIEND.in( Person.TO_FRIENDS ) );
  • Add new module btp-business-rules for out-of-the-box support of

    // requires dependency com.sap.cloud.sdk.services:btp-business-rules
    HttpDestination authoringDestination =
    ScpCfServiceDestinationLoader
    .getDestinationForService(
    ScpCfServiceDestinationLoader.CfServices.BUSINESS_RULES_AUTHORING,
    "my-business-rules");

    ProjectsApi projectsApi = new ProjectsApi(authoringDestination);
    List<ProjectVersionObject> allProjects = projectsApi.readProjects();
    // requires dependency com.sap.cloud.sdk.services:btp-business-rules
    HttpDestination executionDestination =
    ScpCfServiceDestinationLoader
    .getDestinationForService(
    ScpCfServiceDestinationLoader.CfServices.BUSINESS_RULES_EXECUTION,
    "my-business-rules");

    DeployUndeployRuleServiceApi deployService = new DeployUndeployRuleServiceApi(executionDestination);
    List<WorkingsetRuleServiceDefinitionResult> deployedWorkingSets = deployService.readWorkingsetRuleServices();
  • We updated the OData type-safe client also known as a VDM to the newest release 2105 of SAP S/4HANA Cloud. This includes completely new services (available as usual in packages com.sap.cloud.sdk.s4hana.datamodel.odata.services and com.sap.cloud.sdk.s4hana.datamodel.odatav4.services), new operations in previously existing services, and new entity types. The following two services were however not updated:

    • (OData V2) Trial Balance - Read - C_TRIALBALANCE_CDS
    • (OData V4) Bank - BANK_0001

Improvements​

  • Using a Swagger file to generate OData V4 entity classes will now mark entities accessible on service root path as VdmEntitySet. This enables the experimental API to query the OData service over navigation properties directly. This feature was originally enabled for entities generated by EDMX metadata files in version 3.20.0.

  • Dependency Updates:

    • SAP dependency updates:
      • Update BTP Neo Tomcat 8 SDK from 3.124.9.2 to 3.127.13.3
      • Update Neo JavaEE 7 SDK from 1.95.7 to 1.96.13.1
      • Update BTP CF Logging from 3.3.0 to 3.4.0
    • Other dependency updates:
      • Minor version updates:
        • Update JSON Smart from 2.4.2 to 2.4.7
        • Update Togglz from 2.9.6 to 2.9.8
        • Update Fabric Gateway Java from 2.2.1 to 2.2.2
        • Update jOOQ from 3.14.8 to 3.14.9
        • Update Hibernate Core from 5.4.39.Final to 5.4.40.Final

Fixed issues​

  • Using null in OData v2 filter expressions does no longer lead to a NullPointerException when executing the request.
  • Fix an edge case where some BigDecimal values where not serialized correctly in OData V2 requests.