release-notes-15-to-29
3.29.1 - September 24, 2020
Javadoc | Release blog | Maven Central
Compatibility Notes
- To leverage the new OData v2 client, you need to adjust existing code. Refer to documentation on how to switch for detailed instructions.
- We start deprecating APIs of the outdated OData v2 client. In this release we deprecated:
- Methods:
execute,toQuery,withErrorHandler,cachingMetadata,withoutCachingMetadata,ignoringVersionIdentifierandignoreVersionIdentifier. - Error handler:
ODataVdmErrorResultHandler. - Exception classes
VersionIdentifierMissingExceptionandVersionIdentifierExpiredException. - You'll find instructions how to adjust the code to use the new OData v2 client in the Javadoc of deprecated method or class.
- Methods:
New Functionality
-
The improved OData v2 type-safe client is now Generally Available. From now on we recommend it for OData API consumption. Refer to the documentation on how to switch for more details on the new OData 2 client.
- The methods
executeRequestare no longer marked as Beta and ready for use in production code. - The new methods
matchAnyVersionIdentifier()anddisableVersionIdentifier()allow for better control over ETag handling.
- The methods
-
The
DefaultHttpDestinationandDefaulErptHttpDestinationcan use ajava.security.KeyStoreand a key store password for HTTP communication. This is especially useful when utilizing mutual TLS (mTLS) for the communication with a remote system. Use the respective builder methods to set these values as in the following code snippet:
final DefaultHttpDestination defaultHttpDestination =
DefaultHttpDestination.builder(uri).
keyStore(keyStore).
keyStorePassword(keyStorePassword).
build();
- We updated the Workflow API client library that is shipped as
scp-workflow-cfmodule. It now supports the latest Workflow API service features.
Improvements
-
Handle requesting a CSRF token for OData V4 batch operations and actions
-
Improve the log output and error handling of CSRF token requests
-
In case a
DefaultErpHttpDestinationdecorates an On-PremiseHttpDestinationand the destination configuration lacks ansap-clientproperty, a notification appears in app logs to raise awareness of potential authentication issues. -
UpdateandDeleterequests in OData v4 type-safe client no longer send a*in theIF_MATCHheader if no version identifier (ETag) has been retrieved from the server previously. This ensures consistent behavior ofUpdateandDeleterequests and protects you from unintended data loss and integrity problems. -
Dependency Updates:
- Update SAP Cloud Security Client from
2.7.6to2.7.7 - Upgrade Fabric SDK for Java from
2.1.0to2.2.1 - Upgrade Fabric Gateway for Java from
2.1.0to2.2.0 - Upgrade Commons Codec from
1.14to1.15 - Upgrade Commons IO from
2.7.0to2.8.0 - Upgrade AssertJ from
3.17.0to3.17.2 - Upgrade Mockito from
3.5.7to3.5.10 - Upgrade Wiremock from
2.27.1to2.27.2 - Upgrade Netty from
4.1.51.Finalto4.1.52.Final
- Update SAP Cloud Security Client from
Fixed Issues
- Fix an issue where invalid service metadata files would cause the
odata-generatorto fail. The generator now skips such services with a warning and only fails if thefailOnWarningflag is set. - Fix special characters escaping and double encoding issues.
The following characters are encoded now:
%,#,' ',?,\and"in the service and entity path%,#,' ',?,\,",$and&in system query options%,#,' ',?,\,",$,&and/in string parameters being passed in functions and GetByKey requests
3.28.1 - September 10, 2020
Javadoc | Release blog | Maven Central
Compatibility Notes
- Blockchain Business Services: The constructors of classes
MeandPartnerare no longer public. New instances can be constructed using a builder, by callingMe.builder()andPartner.builder()respectively. - Blockchain Business Services:
IdentityClient.deletePartnernow only requires thePartner's ID instead of a full object.
New Functionality
- The Currency Conversion library has been added.
You can use this library to facilitate currency exchange rate conversions within your Cloud application.
- Note that no exchange rates are provided by the library. It is assumed that you have your own data providers for getting the exchange rates.
- The library supports bulk conversions, direct one-to-one conversions from a source value to a target value, and indirect conversions based on inverse rates or a reference currency.
- You can perform currency conversions based on a fixed currency exchange rate, or a non-fixed rate (if you want the library to select the most appropriate rate based on a list of data from various data providers).
- To use the library, add the
currency-conversion-coreandcurrency-conversion-datamodelMaven dependencies in your pom.xml.
Improvements
- Update dependencies:
- Update SAP Cloud Security Client from
2.7.5to2.7.6 - Update AssertJ Core from
3.16.1to3.17.0 - Update Caffeine from
2.8.4to2.8.5 - Update Apache Commons Lang from version
3.10to3.11 - Update Apache Commons Text from version
1.8to1.9 - Update Apache CXF from
3.3.6to3.3.7 - Update Mockito from
3.3.3to3.5.7 - Update Jackson from
2.11.0to2.11.2 - Update Junit Pioneer from
0.6.0to0.9.0 - Update Netty from
4.1.50.Finalto4.1.51.Final - Update Jetty from
9.4.27.v20200227to9.4.31.v20200723 - Update Protocol Buffers Java from
3.12.1to3.12.2 - Update Resilience4J from
1.4.0to1.5.0 - Update Spring from version
5.2.6.RELEASEto5.2.8.RELEASE - Update Spring Security from
5.3.2.RELEASEto5.3.4.RELEASE - Update Wiremock from
2.26.3to2.27.1 - Update Togglz from
2.6.1.Finalto2.8.0 - Update SQLite JDBC Driver from
3.28.0to3.32.3.2 - Update JavaPoet from
1.12.1to1.13.0 - Update Spring Boot from
2.3.0.RELEASEto2.3.2.RELEASE - Update JSON Unit AssertJ from
2.17.0to2.18.1 - Update
io.projectreactor:reactor-corefrom3.3.5.RELEASEto3.3.9.RELEASE - Update CDS4 from
1.11.0to1.12.1 - Update
com.squareup.okio:okiofrom2.6.0to2.7.0
- Update SAP Cloud Security Client from
Fixed Issues
- Fix an issue where numbers where not serialised correctly in OData V2 requests using
executeRequest. Fractional and long numbers are now correctly serialised as JSON strings. - Fix an
org.springframework.beans.BeanInstantiationExceptionwith a nestedjava.lang.NoSuchMethodExceptionwhen adding the Maven dependencyscp-workflow-cfto a Spring Boot project
3.27.0 - August 27, 2020
New functionality
- The implicit properties of
DefaultHttpClientFactorycan now be customized.- With
HttpClientAccessor.setHttpClientFactory( HttpClientFactory )it is possible to change the logic that manages creation and configuration ofHttpClientinstances. These clients are used to handle the connection between platform services and integration endpoints internally. TheDefaultHttpClientFactoryclass has been updated to allow for conveniently changing properties like time-out duration and maximum number of connections. Since the implementation can easily be extended, a custom logic would not need to start from scratch. - To change the properties, either create a new class that inherits from
DefaultHttpClientFactoryand override the accessor methods with scope protected. Or explore the flexible builder pattern for a similar result:DefaultHttpClientFactory.builder(). - For more information, please find the related documentation.
- With
Improvements
-
Improve log message quality of OData V2 errors that may occur within
executeRequestmethod. -
Update dependencies in maven archetypes:
- Archetype
scp-cf-tomee:- Update
tomee-maven-pluginfrom8.0.3to8.0.4
- Update
- Archetype
scp-cf-spring:- Update
spring-bootfrom2.3.0.RELEASEto2.3.2.RELEASE
- Update
- Archetype
scp-neo-javaee7:- Update
scp.sdkVersionfrom1.74.10to1.79.14
- Update
- Archetype
3.26.0 - August 13, 2020
New functionality
OData and type-safe client libraries
- We released a Beta version of improved type-safe client library implementation for OData v2 protocol which now shares a code base with OData v4 protocol. It brings significant advantages like:
- Boosting performance by avoiding unnecessary metadata calls
- The same code base for both OData protocol versions speeds up the innovation cycle and unlocks the developing of advanced features for both OData versions.
- The results of
createandupdateoperations in OData v4 type-safe client now offergetModifiedEntity()method which returns a newEntity objectincluding any changes to payload or metadata the service may have responded with.
- We released a regular update for pregenerated type-safe client libraries (also known as VDM) for the latest RTC release 2008 of SAP S/4HANA Cloud.
- The update covers all the changes to existing services and introduces new ones. You'll find them in
com.sap.cloud.sdk.s4hana.datamodel.odata.servicesandcom.sap.cloud.sdk.s4hana.datamodel.odatav4.services. Below is the quick reference on difference and compatibility between 2005 and current 2008 of SAP S/4HANA Cloud releases: - These deprecated OData services are no longer allowed:
- Removed deprecated
ChangeMasterService, use the successor "ChangeMasterServiceV2Service" instead. - Removed deprecated
ProcessOrderConfirmationService, use the successor "ProcessOrderConfirmationV2Service" instead. - Removed deprecated
ProductionOrderConfirmationService, use the successor "ProductionOrderConfirmationV2Service" instead.
- Removed deprecated
- These OData service methods have a changed argument order:
- In service
SalesDocumentWithCreditBlocksServicethe methodsrejectCreditBlockandreleaseCreditBlockare updated. - In service
CustomerReturnsDeliveryV2Servicethe methodssetPutawayQuantityWithBaseQuantity,putawayOneItemWithBaseQuantityandputawayOneItemWithSalesQuantityare updated.
- In service
- These OData service methods have been removed:
- In service
ProductionOrderConfirmationV2Servicethe methodcreateProdnOrdConfMatlDocItmhas been removed. - In service
ProcessOrderConfirmationV2Servicethe methodcreateProcOrdConfMatlDocItmhas been removed. - In service
SupplierInvoiceIntegrationServicethe methodscreateSuplrInvcItemAcctAssgmtandcreateSuplrInvcItemPurOrdRefhave been removed.
- In service
- For reference on what OData services are included in current release, check out SAP Business Accelerator Hub for SAP S/4HANA Cloud
- The update covers all the changes to existing services and introduces new ones. You'll find them in
REST
-
The experimental REST SCP Workflow client library got enhanced with a new API class constructor that expects an
ApiClient, which allows for easier integration with e.g., the SpringRestTemplate.final String basePath = "https://my-api.org";final RestTemplate restTemplate = obtainRestTemplate();final ApiClient apiClient = new ApiClient(restTemplate).setBasePath(basePath);new WorkflowDefinitionsApi(apiClient).queryDefinitions();
SAP Cloud Platform - Clound Foundry
- We added support for new authentication types recently introduced on SAP Cloud Platform - Cloud Foundry.
It further improves handling of
Destinationsand keeps the SAP Cloud SDK up to date with SCP features:SAP_ASSERTION_SSOOAuth2JWTBearerOAuth2Password
Known issues
- The module
testutil-corereferences the dependencyorg.eclipse.jetty:jetty-server:jar:9.4.27.v20200227transitively which is subject to vulnerability CVE-2019-17638. As we look into updating to the newest version ofjetty-server, one can mitigate the risk by assuming thattestutil-coreis used for testing only and hence not used in production environments.
Compatibility notes
- Client library for
ELECTRONICDOCFILE_0001service is missing from SAP S/4HANA 2008 release. We're working to fix this as fast as possible and will communicate it in release notes.
Fixed Issues
- Fix an issue where calling a remote-enabled function module that returns a table of type raw (byte sequence) returned the hash code of the byte sequence. It returns the String representation of the byte sequence instead now.
- Fix a
NullPointerExceptionwhen invoking a function module in SAP S/4HANA which is not remote-enabled or does not exist. - Fix an issue where calling a remote-enabled function module with a byte sequence as an exporting parameter was not supported before. It is now possible to pass byte sequences as exporting parameters.
3.25.0 - July 30, 2020
New Functionality
-
OData 4.0: Extract version identifiers from the
ETagheader in case of create and update operations. Now result entities obtained viaModificationRespnse#getResponseEntity()will contain a version identifier. It will be sent asIF-MATCHheader in subsequent update and delete operations. -
New experimental method
ScpCfDestinationLoader#tryGetDestination. It allows for custom request handling to resources on SAP Cloud Platform Destination Service. With the handler acting as functional interface, you can conveniently manage your own HTTP interaction. E.g.String destinationName;String basePath;String relativePath;Try<ScpCfDestination> destination = new ScpCfDestinationLoader().tryGetDestination(destinationName, basePath, relativePath,(uri) -> restTemplate.getForObject(uri, ScpCfDestinationServiceV1Response.class));
Improvements
-
Update dependencies:
- Update SAP Cloud Application Programming Model from version
1.40.2to1.40.6 - Update SAP Cloud Security Client from
2.7.3to2.7.5
- Update SAP Cloud Application Programming Model from version
-
Update Maven plugins in Maven archetypes:
- Archetype
scp-cf-tomee:- Update
tomee-maven-pluginfrom8.0.1to8.0.3
- Update
- Archetype
scp-cf-tomeeandneo-javaee7:- Update
maven-war-pluginfrom3.2.3to3.3.1
- Update
- Archetype
-
Add public enum
SoapNamespacetorfcmodule, with experimental support to customize expected XML tag namespace from SOAP response messages. This can be useful if target SOAP service is not working with ABAP code. -
The principal id can be extracted from authorization tokens of grant type
urn:ietf:params:oauth:grant-type:jwt-bearer.
Fixed Issues
- Fix an issue on SCP Neo with anonymous HTTP requests being blocked, when optional module
concurrency-scp-neowas added as application dependency. - Fix an issue with SOAP wrapped RFC and BAPI calls that sends pure exporting parameters as empty tags in SOAP serialised requests. Exporting parameters are no longer sent in SOAP serialised requests.
- Fix an issue with SOAP wrapped RFC and BAPI calls where de-serialisation failed when the exporting parameter is a list and is empty.
- Fixed an issue with listeners where
FileWritingODataQueryListenerwas inadvertently called for OData CRUD operations.
3.24.0
Release date: July 16, 2020
Improvements
- Minor stability improvements
- Update SAP Cloud Security Client from
2.7.2to2.7.3
3.23.0
- Release date: July 2, 2020
- Javadoc
- Release blog
Compatibility Notes
- Method and parameter names for the SCP Workflow client library were adjusted
Improvements
-
Improved the error messages shown when JWT validation fails.
-
Improved the
AuthTokenBuilderso that public keys used for verification of authorization tokens created by it are now being cached. -
Client Library for SCP Workflow:
- Method names improved to better reflect the Workflow domain
- Methods return strong return types, the previous version had generic return types
- Parameter names improved to better reflect their semantics
-
Update dependencies:
- Update
com.mikesamuel:json-sanitizerfrom1.2.0to1.2.1 - Update
org.json:jsonfrom20190722to20200518 - Update
commons-io:commons-iofrom2.6to2.7 - Update
org.springframework.security.oauth:spring-security-oauth2from2.4.1.RELEASEto2.5.0.RELEASE - Update
com.github.ben-manes.caffeine:caffeinefrom2.8.1to2.8.4 - Update
com.google.errorprone:error_prone_annotationsfrom2.3.4to2.4.0 - Update
io.projectreactor:reactor-corefrom3.3.4.RELEASEto3.3.5.RELEASE - Update Spring Boot from
2.2.7.RELEASEto2.3.0.RELEASE - Update
com.squareup.okio:okiofrom2.4.3to2.6.0 - Update OK HTTP from
4.4.1to4.5.0 - Update SAP Cloud Security Client from
2.6.2to2.7.2
- Update
Fixed Issues
- Fix a memory leak that occurs when repeatedly using the
AuthTokenBuilder. - Fix an issue on SCP Neo with tenant-aware execution of a
Callablewhen usingTenantAccessor.executeWithTenant()in conjunction with aDefaultTenant
3.22.0
- Release date: June 18, 2020
- Javadoc
- Release blog
Compatibility Notes
- Deprecated the constructor
SoapRequest(Class<ServiceT>, Destination)in favor ofSoapRequest(Class<ServiceT>, HttpDestination)because SOAP API invocation always uses the HTTP protocol.
New Functionality
-
A new, experimental API to run generic OData batch requests via
ODataRequestBatchin version agnostic moduleodata-client. It allows for batching entity read and modification requests. Modifications are grouped within changesets and, depending on the service implementation, they are expected to rollback if one change in the set was unsuccessful. Multiple changesets and read requests can be attached. The class supports entity request handling for create, read, update and delete, as well as service specific functions and actions.- Notes
-
The API is not considered final yet. The class is
@Betaannotated. Please refrain from using it in productive application code. -
There are no helper methods on the result object yet to conveniently parse the multipart response. However the
HttpResponseobject can be accessed already. -
The order of method invocations matters. It defines how the individual requests are serialized, when constructing the multipart batch request.
-
Sample code:
HttpClient httpClient;ODataRequestRead read1;ODataRequestCreate create2;ODataRequestUpdate update3;ODataRequestBatch batchRequest =new ODataRequestBatch( "service-path/", ODataProtocol.V4 ).addRead( read1 ).beginChangeset().addCreate( create2 ).addUpdate( update3 ).endChangeset();batchRequest.execute( httpClient );
-
- Notes
-
Add
getAllDestinations(DestinationOptions options)inScpCfDestinationLoaderclass to fetch all the cloud foundry destinations. The method prioritizes the destination at service instance level in case there exists a destination with the same name on service instance and on sub account level.
Fixed Issues
- Fix an issue where subscriber tenant and principal information would not be available in asynchronous threads when running on SAP Cloud Platform Neo.
3.21.0
- Release date: June 4, 2020
- Javadoc
- Release blog
New Functionality
- Enhance the interface
CloudPlatformwith the methodsetEnvironmentVariableReader(Function<String, String>)allowing adjusting the way how environment variables are read. - Add experimental filter expressions in OData client value types of package
com.sap.cloud.sdk.datamodel.odata.client.expressionto allow for custom requests having entity-independent, yet type-safe query filters.
Improvements
- Update dependencies:
- Update Java JWT from
3.10.2to3.10.3 - Update Junit Pioneer from
0.5.6to0.6.0 - Update AssertJ from
3.15.0to3.16.1 - Update Spring from
5.2.5.RELEASEto5.2.6.RELEASE - Update Spring Security from
5.3.1.RELEASEto5.3.2.RELEASE - Update Hibernate Validator from
6.1.2.Finalto6.1.5.Final - Update Netty BOM from
4.1.49.Finalto4.1.50.Final - Update Stax2 api from
4.2to4.2.1 - Update Protocol Buffers Java from
3.11.4to3.12.1
- Update Java JWT from
- Update dependencies in maven archetypes:
- Archetype
scp-cf-spring:- Update
spring-bootfrom2.2.6.RELEASEto2.3.0.RELEASE
- Update
- Archetype
scp-neo-javaee7:- Update
scp.sdkVersionfrom1.72.13to1.74.10
- Update
- Archetype
Fixed Issues
- Fix an issue in the realm of HTTP destinations created through the SAP Cloud Platform Extension Factory where a
DestinationAccessExceptionoccurs
3.20.0
- Release date: May 21, 2020
- Javadoc
- Release blog
New Functionality
-
New builder pattern for type
Resilience4jDecorationStrategyto enable custom function decoration properties. -
A new, experimental interface
ServiceWithNavigableEntitiesfor OData v4 VDM, to allow for recursive traversal of navigation properties in entity sets. This generic type offers type-safe methods to create a request along chained entities with their navigation properties. By delegating to the existing request builder classes, the interface supports all basic CRUD operations, plus count. You can use all existing request modifiers, e.g. filter or select statements in Read. The interface type is@Betaannotated to declare methods and sub-types are still open for changes in the future.- Example
-
Create a new Trip in Vacation (id 2020) of Person (username "John")
-
HTTP request:
POST /ODataService/People('John')/Vacations(2020)/Trips -
Sample code:
Trip tripItem;CreateRequestBuilder<Trip> createRequest = service.forEntity( Person.builder().username("John").build() ).navigateTo( Person.VACATIONS ).forEntity( Vacation.builder().id(2020).build() ).navigateTo( Vacation.TRIPS ).create( tripItem );createRequest.execute( destination );
-
- Example
-
Add public methods
String getApplicationUrl()andString getApplicationProcessId()toScpCfCloudPlatformand expose them inCloudPlatformto partially match the existing public API of subtypeScpNeoCloudPlatform.
Improvements
- Renamed module
odata-v4-clienttoodata-clientand packages contained fromc.s.c.s.datamodel.odatav4.clienttoc.s.c.s.datamodel.odata.client. Only API that is declared unstable is affected so changes are only required if unstable parts of the API are being used explicitly. - The OData generator (so the
odata-generator,odata-generator-cli, andodata-generator-maven-pluginmodules) are now able to also parse swagger files according to the OpenAPI v3 spec (in addition to the already supported OpenAPI v2 spec).
3.19.1
- Release date: May 7, 2020
- Javadoc
- Release blog
Compatibility Notes
- As part of the update of the OData VDM to SAP S/4HANA Cloud 2005, in the
Inbound Delivery (A2X) - API_INBOUND_DELIVERY_SRV_0002API, some previously published methods that were not actually supported by the SAP S/4HANA system (like CRUD support for entityMaintenanceItemObjList) were removed from the SAP Business Accelerator Hub and as a consequence, from the SAP Cloud SDK.
New Functionality
- OData client: Update the OData VDM to the newest release 2005 of SAP S/4HANA Cloud. The SAP Cloud SDK supports all OData services listed in the SAP Business Accelerator Hub for SAP S/4HANA Cloud.
- Update the Message VDM to the newest release 2005 of SAP S/4HANA Cloud.
3.19.0
- Release date: April 30, 2020
New Functionality
-
Introducing the client library for the Workflow API on SAP Cloud Platform, Cloud Foundry
- Example usage:
final HttpDestination httpDestination = DestinationAccessor.getDestination(destinationName).asHttp();final List<WorkflowDefinition> workflowDefinitions =new WorkflowDefinitionsApi(httpDestination).getWorkflowDefinitions();- Maven dependency:
<dependency><groupId>com.sap.cloud.sdk.services</groupId><artifactId>scp-workflow-cf</artifactId></dependency> -
New VDM request builder for OData v4 to fetch the count of entries in an entity collection endpoint. The result is a non-null Long, the number of matching entries according to optional filter and search expressions.
-
Example for the VDM usage:
long numEntries = new DefaultEntityService().countEntities().filter(SomeEntity.FIELDNAME.contains("foo")).search("bar").execute(someDestination); -
Example for the generic usage:
long numEntries = new CountRequestBuilder<>("/odata/service/path/", SomeEntity.class).filter(SomeEntity.FIELDNAME.contains("foo")).search("bar").execute(someDestination);
-
-
Provide support for unbound actions in OData v4. The OData v4 generator generates unbound actions at the service level. Etag handling in actions is still not supported.
- Note: Regenerate the VDM to enable these features on your classes.
-
The VDM request builders for OData v4 to delete and update entities
DeleteRequestBuilderandUpdateRequestBuilderallow to influence the submission of the version identifier (ETag) of the respective entity in the remote system.- The method
disableVersionIdentifierallows to avoid that the request headerIf-Matchis sent at all. - The method
matchAnyVersionIdentifierallows to control that the request headerIf-Matchis sent with the value*. - Note that if both methods are invoked on the same request builder, the latest invocation takes precedence.
- Example for the VDM usage to delete an entity without sending a version identifier:
new DefaultEntityService().deleteEntity(entity).disableVersionIdentifier().execute(destination);-
Example for the VDM usage to update an entity while sending the
*value in the request header:new DefaultEntityService().updateEntity(entity).matchAnyVersionIdentifier().execute(destination);
- The method
Improvements
- Update dependencies:
- Update Guava from
28.2-jreto29.0-jre - Update Apache CXF from
3.3.5to3.3.6 - SAP Cloud Security Client from
2.6.1to2.6.2 - Update Jackson from
2.10.3to2.11.0 - Update Resilience4J from
1.3.1to1.4.0 - Update AssertJ Guava from
3.3.0to3.4.0 - Update Spring Security OAuth from
2.4.0.RELEASEto2.4.1.RELEASE - Update Fabric SDK from
2.0.0to2.1.0 - Update Netty BOM from
4.1.48.Finalto4.1.49.Final
- Update Guava from
- Update Maven plugins in Maven archetypes:
- Archetype
scp-cf-tomee:- Update
tomee-maven-pluginfrom7.0.5to8.0.1
- Update
- Archetype
scp-cf-spring:- Update
spring-boot-maven-pluginfrom2.2.5.RELEASEto2.2.6.RELEASE
- Update
- Archetype
scp-neo-javaee7:- Update
jacoco-maven-pluginfrom0.8.2to0.8.5 - Update
maven-surefire-pluginfrom3.0.0-M3to3.0.0-M4
- Update
- Archetype
3.18.0
- Release date: April 23, 2020
- Javadoc
- Release blog
Compatibility Notes
- The custom pmd plugin (com.sap.cloud.sdk.quality:pmd-plugin) was removed. The ruleset (com.sap.cloud.sdk.quality:pmd-rules) from now on contains only the rules shipped with the SAP Cloud SDK. All other imported rules were removed. To still use the ruleset with standard pmd plugin, especially in the SAP Cloud SDK for Continuous Delivery, we recommend adding the following configuration to the root pom 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
- Update Dependencies:
- Spring Security from
5.3.0.RELEASEto5.3.1.RELEASE - JUnit Pioneer from
0.5.5to0.5.6 - Java JWT from
3.10.1to3.10.2 - SAP Cloud Security Client from
2.5.3to2.6.0
- Spring Security from
3.17.2
- Release date: Apr 15, 2020
Compatibility Notes
- The beta annotated
CustomOperationRequestBuilderclass has been renamed asFunctionRequestBuilder
Fixed Issues
- Fix an issue with access token validation in a provider/subscriber setup, when having multiple XSUAA service bindings, e.g. one with service plan
brokerand one with service planapplication.
3.17.1
- Release date: April 9, 2020
- Javadoc
- Release blog
Improvements
-
The interface
ResilienceDecorationStrategynow provides an additional, optional argument to pass a customExecutorServicein methodsdecorateCallableanddecorateSupplier. This way the thread pool and task execution can be adjusted upon decoration. If the time limiter is enabled, it will be running in a thread through the passed executor. IfCallableorSupplierlambda is queued, then the asynchronous task will be run with the givenExecutorServiceas well. -
For communication with XSUAA, the recommended JWT Bearer Token Grant is now preferred over (discouraged) combination of User Token Grant and Refresh Token. This saves one internal HTTP request and the "uaa.user" scope is not necessary any longer in the
xs-security.jsonconfiguration of the XSUAA service instance.
Fixed Issues
-
Fix unnecessary second request to destination service, when using proxy type "OnPremise" and authentication type "Principal Propagation".
-
Fix a regression introduced in
3.16.1where public keys for token validation are not cached.
3.17.0
- Release date: April 2, 2020
New Functionality
- New support for OData V4 - Deep Update.
- Single and collection-based entity navigation properties can be used when updating a base entity. This way nested entities can be updated and created, while performing a single OData request.
- Note: This feature can only be used with
UpdateRequestBuilder#modifyingEntity()(default), and not withUpdateRequestBuilder#replacingEntity()(custom). - Note: Removing an existing element from a collection-based entity navigation property is not yet supported.
Improvements
-
The OData v4 VDM now allows for ordering by multiple fields through calling
orderByand passing fields to it with the corresponding order.getPersons().orderBy(Person.FIRST_NAME.asc(), Person.LAST_NAME.desc()); -
Update Dependencies
- Update Java JWT from
3.10.0to3.10.1 - Update Mockito from
3.3.0to3.3.1 - Update Wiremock from
2.26.2to2.26.3 - Update Spring Security from
5.2.2.RELEASEto5.3.0.RELEASE - Update Netty BOM from
4.1.47.Finalto4.1.48.Final - Update Apache TomEE libraries from version
7.0.6to7.0.7 - Update SAP Cloud Application Programming Model from version
1.38.0to1.39.0 - Update SAP Cloud Security Client from
2.5.1to2.5.3 - Update Apache Commons Lang from version
3.9to3.10 - Update JUnit from version
5.6.0to5.6.1 - Update JUnit Pioneer from version
0.5.4to0.5.5 - Update Spring from version
5.2.4.RELEASEto5.2.5.RELEASE
- Update Java JWT from
-
Dependencies and Maven plugin versions in the archetypes
scp-cf-spring,scp-cf-tomeeandscp-neo-javaee7updated.jacoco-maven-pluginupdated to0.8.5maven-surefire-pluginupdated to3.0.0-M4maven-enforcer-pluginupdated to3.0.0-M3maven-war-pluginupdated to3.2.3maven-dependency-pluginupdated to3.1.2- Spring Boot updated from
2.2.1.RELEASEto2.2.5.RELEASE
Fixed Issues
- Fix a bug in the
odata-v4-generatorthat causes fields of typeEdm.TimeOfDayto not be recognized and thus generated properly, leading to missingSimplePropertyfields on the generated entity.
3.16.1
- Release date: March 26, 2020
- 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
- Introduce the module SCP Blockchain Client Fabric for easy interaction with a Hyperledger Fabric network using all necessary configuration and credentials from a standardized user-provided service in the Cloud Foundry environment.
- JSON Web Tokens (JWT) are now validated using their
issuerandjkuproperties. Public keys for signature verification are fetched from the URL specified by thejkuproperty. This only works if theissuerdomain matches the domain of the XSUAA service. In case this fails or if the properties are not set, the implementation falls back to the previous validation mechanisms (e.g. verification key of XSUAA service binding, XSUAA token endpoint provider).
Improvements
- Update Dependencies
- Update Slf4J from version
1.7.26to1.7.30 - Update Jackson from version
2.10.2to2.10.3 - Update Wiremock from version
2.26.1to2.26.2 - Update Jetty from version
9.4.26.v20200117to9.4.27.v20200227 - Update Spring from version
5.2.3.RELEASEto5.2.4.RELEASE - Update Apache HttpComponents from version
4.5.11to4.5.12
- Update Slf4J from version
Fixed Issues
- Fix missing authorization header with Principal Propagation for On-Premise connectivitiy on CloudFoundry.
- Fix several special characters escaping and encoding issues.
?in the service path#and&in filter and select expressions'in string literals and in string parameters being passed in functions andGetByKeyrequests"and\in search expressions
3.15.1
- Release date: March 12, 2020
- 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
SubdomainReplacerandDefaultSubdomainReplacerbecame obsolete and were removed. The usage of this classes was replaced by the new library. - The behavior of following methods in the utility class
XsuaaServicehas been changed.retrieveAccessTokenViaUserTokenGrant()retrieveAccessTokenHeaderViaUserTokenGrant()The old behavior is implemented in following methods.retrieveAccessTokenViaUserTokenExchange()retrieveAccessTokenHeaderViaUserTokenExchange()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:blockchainhas been renamed tocom.sap.cloud.sdk.services:blockchain-client-multichainto 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:
execute()on all request builders (e.g., `CreateRequestBuilder)select(),filter(),top(),skip(), andsearch()onGetAllRequestBuilderGetByKeyRequestBuilder.select()of(),and(),or(),not()for defining aSearchExpressionincludingFields(),replacingEntity(),modifyingEntity()onUpdateRequestBuilder- The generic exception class
ODataException - The classes
NavigationProperty,ComplexPropertyandSimpleProperty - The OData v4 generator now generates
ComplexPropertyfields on entities that can be used to build queries. Single instances and collections of complex types are supported.
- Provide support for unbound functions in OData v4. The OData v4 generator generates unbound functions at the service level.
- The OData v4 generator now creates entity classes that are only referenced by navigation properties and functions (not part of an entity set).
Improvements
-
Introduce snakeyaml version
1.26as direct dependency and exclude the one used by the jackson library to overcome the security vulnerability CVE-2017-18640. -
Replace the SAP Cloud SDK implementation for handling authentication and authorization within the SAP Cloud Platform landscape by the library XSUAA Token Client and Token Flow API version
2.5.1. See the compatibility notes for details. -
Update Dependencies
- SAP Cloud Application Programming Model from version
1.37.1to1.38.0 - Lombok from version
1.18.10to1.18.12 - Caffeine from version
2.8.0to2.8.1 - Commons CSV from version
1.7to1.8 - Apache HTTP Components CSV from version
4.5.10to4.5.11 - EclipseLink CSV from version
2.7.5to2.7.6 - Liquibase CSV from version
3.6.3to3.8.6 - Resilience4J CSV from version
1.2.0to1.3.1 - JUnit CSV from version
5.5.2to5.6.0 - JUnit Pioneer from version
0.5.1to0.5.4 - Jetty from version
9.4.25.v20191220to9.4.26.v20200117 - Spring Security from version
5.2.1.RELEASEto5.2.2.RELEASE - Hibernate Validator from version
6.0.17.Finalto6.1.2.Final - Java JWT from version
3.9.0to3.10.0 - AssertJ from version
3.14.0to3.15.0 - Mockito from version
3.2.4to3.3.0 - Wiremock from version
2.20.0to2.26.1 - SAP Cloud Platform SDK For Neo Environment (Java EE 7 Web Profile TomEE 7) to version
1.69.18
- SAP Cloud Application Programming Model from version
Fixed Issues
- Fix an issue where the OData v2 URL query generation was not escaping single-quotes
'in String literals correctly. This character can now be used as part of entity keys and filter expressions. - Fix an issue with
DecimalOData values being formatted in unexpected scientific notation (e.g.4.2e-7) instead of expected decimal form (e.g.0.00000042). The solution is provided for serializing entity properties of Java typeBigDecimal.