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.
June 18, 2020 - Maven Central - Javadoc - Release blog
SoapRequest(Class<ServiceT>, Destination)
is deprecated in favor of SoapRequest(Class<ServiceT>, HttpDestination)
because SOAP API invocations always use the HTTP protocol.ODataRequestBatch
in version agnostic module odata-client
. This implementation combined batching of entity read and modification requests. Modifications are grouped within changesets and, depending on the service implementation, they are expected to rollback if a 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.@Beta
. Please refrain from using it in productive application code.HttpResponse
object can be accessed.HttpClient httpClient = getHttpClient();
ODataRequestRead read1 = getReadReq();
ODataRequestCreate create2 = getCreateReq();
ODataRequestUpdate update3 = getUpdateReq();
ODataRequestBatch batchRequest =
new ODataRequestBatch( "service-path/", ODataProtocol.V4 )
.addRead( read1 )
.beginChangeset()
.addCreate( create2 )
.addUpdate( update3 )
.endChangeset();
batchRequest.execute( httpClient );
ScpCfDestinationLoader.tryGetAllDestinations(DestinationOptions options)
to fetch all Cloud Foundry destinations. Destinations at service instance level are prioritized over destinations on subaccount level in case of a name conflict.June 4, 2020 - Maven Central - Javadoc - Release blog
CloudPlatform
with the method setEnvironmentVariableReader(Function<String, String>)
allowing adjustments in the way how environment variables are read.com.sap.cloud.sdk.datamodel.odata.client.expression
allowing custom requests to have entity-independent, yet type-safe query filters.3.10.2
to 3.10.3
0.5.6
to 0.6.0
3.15.0
to 3.16.1
5.2.5.RELEASE
to 5.2.6.RELEASE
5.3.1.RELEASE
to 5.3.2.RELEASE
6.1.2.Final
to 6.1.5.Final
4.1.49.Final
to 4.1.50.Final
4.2
to 4.2.1
3.11.4
to3.12.1
spring-boot
in archetype scp-cf-spring
from 2.2.6.RELEASE
to 2.3.0.RELEASE
scp.sdkVersion
in archetype scp-neo-javaee7
from 1.72.13
to 1.74.10
DestinationAccessException
occured.May 21, 2020 - Maven Central - Javadoc - Release blog
Resilience4jDecorationStrategy
to enable custom function decoration properties.ServiceWithNavigableEntities
for recursive traversal of navigation properties in entity sets that are part of an OData v4 virtual data model (VDM). 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 (create, read, update, delete), plus count. All existing request modifiers are supported (e.g. filter
or select
statements in Read
). The methods and sub-types in this interface are still open for changes in the future.POST /ODataService/People('John')/Vacations(2020)/Trips
Trip tripItem = createTrip();
CreateRequestBuilder 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 );
getApplicationUrl()
and getApplicationProcessId()
in the interface CloudPlatform
and add implementation for Cloud Foundry in the implementing class ScpCfCloudPlatform
to partially match the existing public API of the inplementing class for NEO ScpNeoCloudPlatform
.odata-v4-client
to odata-client
and packages contained from c.s.c.s.datamodel.odatav4.client
to c.s.c.s.datamodel.odata.client
. Only API that is declared unstable is affected. Changes in your projects are only required if unstable parts of the API are being used explicitly.odata-generator
, odata-generator-cli
, and odata-generator-maven-plugin
) is now able to parse swagger files according to the OpenAPI v3 specification.May 7, 2020 - Maven Central - Javadoc - Release blog
MaintenanceItemObjList
in the Inbound Delivery (A2X) - API_INBOUND_DELIVERY_SRV_0002
API, were removed from SAP API Business Hub as part of the newest release 2005 of SAP S/4HANA Cloud. There operations were also removed from the OData Virtual Data Model (VDM) for SAP S/4 HANA Cloud.final HttpDestination httpDestination = DestinationAccessor.getDestination(destinationName).asHttp();
final List<WorkflowDefinition> workflowDefinitions =
new WorkflowDefinitionsApi(httpDestination).getWorkflowDefinitions();
<dependency>
<groupId>com.sap.cloud.sdk.services</groupId>
<artifactId>scp-workflow-cf</artifactId>
</dependency>
Long
, which is the number of matching entries according to optional filter and search expressions.long numEntries = new DefaultEntityService()
.countEntities()
.filter(SomeEntity.FIELDNAME.contains("foo"))
.search("bar")
.execute(someDestination);
long numEntries = new CountRequestBuilder<>("/odata/service/path/", SomeEntity.class)
.filter(SomeEntity.FIELDNAME.contains("foo"))
.search("bar")
.execute(someDestination);
DeleteRequestBuilder
and UpdateRequestBuilder
.disableVersionIdentifier()
allows to avoid that the request header If-Match
is sent at all.matchAnyVersionIdentifier()
allows to control that the request header If-Match
is sent with the value *
.new DefaultEntityService()
.deleteEntity(entity)
.disableVersionIdentifier()
.execute(destination);
*
value in the request header: new DefaultEntityService()
.updateEntity(entity)
.matchAnyVersionIdentifier()
.execute(destination);
28.2-jre
to 29.0-jre
3.3.5
to 3.3.6
2.6.1
to 2.6.2
2.10.3
to 2.11.0
1.3.1
to 1.4.0
3.3.0
to 3.4.0
2.4.0.RELEASE
to 2.4.1.RELEASE
2.0.0
to 2.1.0
4.1.48.Final
to 4.1.49.Final
scp-cf-tomee
:tomee-maven-plugin
from 7.0.5
to 8.0.1
scp-cf-spring
:spring-boot-maven-plugin
from 2.2.5.RELEASE
to 2.2.6.RELEASE
scp-neo-javaee7
:jacoco-maven-plugin
from 0.8.2
to 0.8.5
maven-surefire-plugin
from 3.0.0-M3
to 3.0.0-M4
April 23, 2020 - Maven Central - Javadoc - Release blog
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>
5.3.0.RELEASE
to 5.3.1.RELEASE
0.5.5
to 0.5.6
3.10.1
to 3.10.2
2.5.3
to 2.6.0
April 15, 2020 - Maven Central - Javadoc -
CustomOperationRequestBuilder
class has been renamed to FunctionRequestBuilder
broker
and one with service plan application
.April 9, 2020 - Maven Central - Javadoc - Release blog
modifyingEntity()
and not with replacingEntity()
.orderBy()
and passing fields to it with the corresponding order.
getPersons().orderBy(Person.FIRST_NAME.asc(), Person.LAST_NAME.desc());
ResilienceDecorationStrategy
now provides an additional optional argument to pass a custom ExecutorService
in methods decorateCallable()
and decorateSupplier()
. 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. If Callable
or Supplier
lambda is queued, then the asynchronous task will be run with the given ExecutorService
as well.3.10.0
to 3.10.1
3.3.0
to 3.3.1
2.26.2
to 2.26.3
5.2.2.RELEASE
to 5.3.0.RELEASE
4.1.47.Final
to 4.1.48.Final
7.0.6
to 7.0.7
1.38.0
to 1.39.0
2.5.1
to 2.5.3
3.9
to 3.10
5.6.0
to 5.6.1
0.5.4
to 0.5.5
5.2.4.RELEASE
to 5.2.5.RELEASE
scp-cf-spring
, scp-cf-tomee
, and scp-neo-javaee7
:jacoco-maven-plugin
to 0.8.5
maven-surefire-plugin
to 3.0.0-M4
maven-enforcer-plugin
to 3.0.0-M3
maven-war-plugin
to 3.2.3
maven-dependency-plugin
to 3.1.2
2.2.1.RELEASE
to 2.2.5.RELEASE
odata-v4-generator
where the field type Edm.TimeOfDay
was not recognized and not generated properly, leading to missing SimpleProperty
fields on the generated entity.3.16.1
where public keys for token validation were not cached.March 26, 2020 - Maven Central - Javadoc - Release blog
getCustomField("fieldName")
.issuer
and jku
properties. Public keys for signature verification are fetched from the URL specified by the jku
property. This only works if the issuer
domain 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).pom.xml
and recompile. If everything compiles and behaves as expected locally, you can configure Cloud Foundry to use Java 11 too. See this page for more details how to do that.1.7.26
to 1.7.30
2.10.2
to 2.10.3
2.26.1
to 2.26.2
9.4.26.v20200117
to 9.4.27.v20200227
5.2.3.RELEASE
to 5.2.4.RELEASE
4.5.11
to 4.5.12
Principal Propagation
for on-premises connectivity on Cloud Foundry.?
in the service path#
and &
in filter and select expressions'
in string literals and in string parameters being passed in functions and GetByKey
requests"
and \
in search expressionsMarch 12, 2020 - Maven Central - Javadoc - Release blog
SubdomainReplacer
and DefaultSubdomainReplacer
became obsolete and were removed. The usage of this classes was replaced by the new library.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.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.execute()
on all request builders (e.g., CreateRequestBuilder
)select()
, filter()
, top()
, skip()
, and search()
on GetAllRequestBuilder
GetByKeyRequestBuilder.select()
of()
, and()
, or()
, not()
for defining a SearchExpression
includingFields()
, replacingEntity()
, modifyingEntity()
on UpdateRequestBuilder
ODataException
NavigationProperty
, ComplexProperty
and SimpleProperty
ComplexProperty
fields on entities that can be used to build queries. Single instances and collections of complex types are supported.1.26
as direct dependency and exclude the one used by the jackson library to overcome the security vulnerability CVE-2017-18640.2.5.1
. See the compatibility notes for details.1.37.1
to 1.38.0
1.18.10
to 1.18.12
2.8.0
to 2.8.1
1.7
to 1.8
4.5.10
to 4.5.11
2.7.5
to 2.7.6
3.6.3
to 3.8.6
1.2.0
to 1.3.1
5.5.2
to 5.6.0
0.5.1
to 0.5.4
9.4.25.v20191220
to 9.4.26.v20200117
5.2.1.RELEASE
to 5.2.2.RELEASE
6.0.17.Final
to 6.1.2.Final
3.9.0
to 3.10.0
3.14.0
to 3.15.0
3.2.4
to 3.3.0
2.20.0
to 2.26.1
1.69.18
'
in String literals correctly. This character can now be used as part of entity keys and filter expressions.Decimal
OData 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 type BigDecimal
.February 27, 2020 - Maven Central - Javadoc - Release blog
com.sap.cloud.sdk.cloudplatform.connectivity.DestinationRetrievalStrategy
as it had no usage in the realm of the SAP Cloud SDK version 3.odata-v4-generator
in your .pom
file.1.36.2
to 1.37.1
February 13, 2020 - Maven Central - Javadoc - Release blog
WorkItems
in the service Commercial Project - Read is no longer allowed as of SAP S/4HANA Cloud release 2002. The method updateWorkItem()
was removed from CommercialProjectService
.4.3.26.RELEASE
to overcome the security vulnerability CVE-2020-5397.January 30, 2020 - Maven Central - Javadoc - Release blog
MultichainRequest
.MultichainService
instance using a SAP Cloud Platform destination, the destination's HTTP client will now be used as a pre-configured HttpClient
instance with authentication, HTTP connection pooling, etc. for each MultichainRequest
.2.10.1
to 2.10.2
1.13
to 1.14
4.4.12
to 4.4.13
.3.3.4
to 3.3.5
0.4.2
to 0.5.1
5.2.2.RELEASE
to 5.2.3.RELEASE
.edmx
file, the ones without such annotations got no operations resolved at all.BapiRequest
where a NoSuchElementException
was thrown in case a Destination
without a name was used.#
, &
, etc. in OData filter expressions.January 16, 2020 - Maven Central - Javadoc - Release blog
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.BasicAuthenticationAccessor
to read the username and password from the Basic Authentication header of the currently incoming request on Cloud Foundry.PrincipalAccessor
to also read the current principal from the newly introduced BasicAuthenticationAccessor
, in addition to the already existing way to read it from the current JWT. This functionality applies to Cloud Foundry. A valid JWT takes precedence over a Basic Authentication header..cer
, .crt
, and .der
) as trust store locations for HTTPS destinations.SAP-Connectivity-Authentication
and Proxy-Authorization
for on-premise requests, the SAP Cloud SDK now takes the recommended approach of just using Proxy-Authorization
with a dynamicly resolved User Exchange Access Token.PrincipalPropagationStrategy
for configuring that the previous behavior should be used.7.0.5
to 7.0.6
1.36.1
to 1.36.2
0.1.0
to 0.2.0
3.2.0
to 3.2.4
5.2.1.RELEASE
to 5.2.2.RELEASE
28.1-jre
to 28.2-jre
3.8.3
to 3.9.0
4.12
to 4.13
9.4.19.v20190610
to 9.4.25.v20191220
1.44.12
to 1.65.15
ResilienceDecorator
invalidating itself upon calling, when using a JCache SPI different from JCache RI.PATCH
semantics where null
values were being filtered out before the update. Explicitly set null
values are being retained now.String
parameter as reported here.December 19, 2019 - Maven Central - Javadoc - Release blog
uri()
in builders of ScpCfHttpDestination
, DefaultHttpDestination
and DefaultErpHttpDestination
has been deprecated, as this parameter is already passed to create the builder instance.network()
in builders of DefaultHttpDestination
and DefaultErpHttpDestination
has been deprecated in favour of using proxyType
instead.keyStorePassword()
in builders of DefaultHttpDestination
and DefaultErpHttpDestination
has been deprecated.ScpCfHttpDestination
for the properties header
, user
, password
.ScpNeoHttpDestination
for the properties user
, password
, trustAllCertificates
, header
, authenticationHeaders
, basicCredentials
, authenticationType
, proxyType
, proxyConfiguration
.DefaultHttpDestination
and DefaultErpHttpDestination
for the properties basicCredentials
, proxyType
.Edm.Time
, Edm.DateTime
or Edm.DateTimeOffset
.December 5, 2019 - Maven Central - Javadoc - Release blog
scp-blockchain
module: The return type of MultichainService.getDestination()
changes to MultichainBasicAuthDestination
to support Basic Authentication. If you use this method please adapt to the new return type.MultichainRequest
, allowing the request to be used with AWS and Azure Multichain nodes.cloudsdk-resilience-<number>
DestinationProperties.getPropertyNames()
to retrieve the set of properties of a destination. This allows you to enumerate the names of all properties retrieved from the destination service and their values./
) were incorrectly escaped in OData requests made when dynamically fetching a navigation property of an entity whose key contains such characters.November 21, 2019 - Maven Central - Javadoc - Release blog
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.November 7, 2019 - Maven Central - Javadoc - Release blog
RetryConfiguration.ofDefaults()
has been deprecated in favor of RetryConfiguration.of(maxAttempts)
to avoid unexpected, implicit behavior.executeFutureSupplier
and decorateFutureSupplier
have been removed from ResilienceDecorationStrategy
and ResilienceDecorator
.CircuitBreakerConfiguration
have been changed as follows:ResilienceConfiguration
with a CacheConfiguration
in place. Use ResilienceDecorator.invalidateCache(configuration)
to clear the cache associated with a specific configuration.--copyright-header your-custom-header
. By default, no header is generated.CircuitBreakerConfiguration
. Use CircuitBreakerConfiguration.closedBufferSize
and CircuitBreakerConfiguration.halfOpenBufferSize
to provide custom values for the respective buffer size.CacheConfiguration
in ResilienceConfiguration
. Use withExpirationStrategy(strategy)
on the builder for a CacheConfiguration with the enum constants available from CacheExpirationStrategy
. WHEN_LAST_MODIFIED
remains the default value for the expiration strategy.ResilienceConfiguration.empty
to initialize a new resilience configuration with all properties being disabled by default.TimeLimiterConfiguration.of(duration)
as a convenience instead of TimeLimiterConfiguration.of().timeoutDuration(duration)
.October 24, 2019 - Maven Central - Javadoc - Release blog
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.ResilienceConfiguration
via a RetryConfiguration
.odata-generator-maven-plugin
. For this feature just add the property <compileScope>...</compileScope>
with the compilation phase to your configuration. Valid values are COMPILE
, TEST_COMPILE
, and NONE
, representing the different compile phases or no automatic compilation at all. The default value (for backwards compatibility reasons) is NONE
.October 10, 2019 - Maven Central - Javadoc - Release blog
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.user_name
claim of the current JWT in ScpCfPrincipalFacade
when the JWT has the user_token
grant type.2.9.9
/2.9.9.2
to 2.9.10
.artifactId
does not contain an underscore character when creating a project using the scp-cf-spring
and scp-cf-tomee
archetypes. This is necessary as the artifact ID will also be used as Cloud Foundry application name and the deployment to Cloud Foundry will fail if the application name contains an underscore.September 26, 2019 - Maven Central - Javadoc - Release blog
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.SystemUser
property in destinations with authentication type "OAuth2SAMLBearerAssertion". The system user will be used instead of the currently logged in principal to retrieve an access token to the destination. That is, no principal propagation takes place. As a consequence, no user JWT is required.September 12, 2019 - Maven Central - Javadoc - Release blog
com.sap.cloud.servicesdk.*
) from version 1.32.5 to 1.33.0.commons-beanutils
to 1.9.4 (from 1.9.3) in order to fix CVE-2019-10086.listeners-all
dependencies from projects generated via archetypes since the SAP Cloud SDK Pipeline will inject this dependency during a pipeline run.August 29, 2019 - Maven Central - Javadoc - Release blog
decorateFutureSupplier
and executeFutureSupplier
in ResilienceDecorator
, decorateFutureSupplier
and executeFutureSupplier
in ResilienceDecorationStrategy
.ChangeMasterService
, ProcessOrderConfirmationService
, and ProductionOrderConfirmationService
. Take a look at the corresponding Javadoc and use the appropriate successor service listed therein.queueCallable
and queueSupplier
of ResilienceDecorator
that return instances of CompletableFuture
. Corresponding methods are also available from ResilienceDecorationStrategy
.com.sap.cloud.servicesdk.*
) from version 1.32.0 to 1.32.5ThreadContextExecutor
and the accessor classes that use it (e.g. execute...
methods in TenantAccessor
).XsuaaService
where it always forcibly used the provider tenant when calling retrieveAccessToken...
methods. Now the methods retrieve access tokens for the tenant that called the method.MultichainService
so that it appropriately throws instances of MultichainException
.August 15, 2019 - Maven Central - Javadoc - Release blog
OutboundDeliveryService
has been removed from the SAP API Business Hub and, as a consequence, from the SDK. Use OutboundDeliveryV2Service
instead.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.com.sap.cloud.sdk.s4hana.datamodel.odata.services
), new operations in previously existing services, and new entity types. The SDK supports all OData services listed in the SAP API Business Hub for SAP S/4HANA Cloud.com.sap.cloud.sdk.s4hana.datamodel.messaging.api.message
). The SDK supports all event types listed in the SAP API Business Hub for SAP S/4HANA Cloud.DefaultHttpDestination
failed to load the authentication type, so that authentication was not correctly applied when loading destinations from environment variable or instantiating DefaultHttpDestination
manually.August 1, 2019 - Maven Central - Javadoc - Release blog
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"
.
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.
Destination
, HttpDestination
and RfcDestination
), default and platform-specific implementations (such as DefaultHttpDestination
, ScpCfHttpDestination
, or ScpNeoHttpDestination
), and decorators for dynamically translating between the different types.
DestinationProperties
.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
.DestinationAccessor
. Instead, provide the retrieval strategy as an additional configuration parameter of type DestinationOptions
when loading a destination.
DestinationOptions
using the ScpCfDestinationOptionsAugmenter
or ScpNeoDestinationOptionsAugmenter
with the appropriate strategy applied.ScpCfDestinationRetrievalStrategy
and ScpNeoDestinationRetrievalStrategy
for destination retrieval strategy.PLATFORM_DEFAULT
value from all destination retrieval strategy enums. Use null
values instead, or do not set the parameter at all.DestinationAccessor.getLoader().tryGetDestination(destinationName,
DestinationOptions.builder()
.augmentBuilder(ScpCfDestinationOptionsAugmenter.augmenter()
.retrievalStrategy(ScpCfDestinationRetrievalStrategy.ALWAYS_PROVIDER))
.build()
);
ResilienceDecorator
class to wrap logic instead of extending the Command
class.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.ResilienceDecorator
with a custom function decoration strategy by implementing the ResilienceDecorationStrategy
interface.Command
and ErpCommand
. Wrap the logic previously contained in commands using the execute and decorate methods of ResilienceDecorator
.CachingCommand
and CachingErpCommand
. Instead, configure caching within the ResilienceConfiguration
class by providing an instance of CacheConfiguration
to cacheConfiguration
.
CacheConfiguration
requires at least a value for the duration after which the cache entry shall expire.parameters
.
If these items are Serializable
, then the cache key itself automatically becomes serializable as well.
This fulfills a requirement for some caching configurations.caffeine
as a dependency.ODataServicesQueryCommand
, SqlQueryCommand
, BapiQueryCommand
, RfcQueryCommand
.
The execute
method of queries can be easily wrapped using the execute and decorate methods of ResilienceDecorator
instead.asResilientCommand
methods from all VDM fluent helpers.
The execute
method of VDM fluent helpers can be easily wrapped using ResilienceDecorator
instead.ODataRequestCommand
since it's no longer needed by VDM fluent helpers.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.
RequestContext
to ThreadContext
and adapt it to be applicable in non-request contexts.
ThreadContextExecutor
.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
.RequestContextServletFilter
to RequestAccessorFilter
to better reflect its purpose.DestinationsRequestContextListener
has been renamed to HttpClientsThreadContextListener
to better reflect its purpose.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.TenantAccessor
, PrincipalAccessor
, AuthTokenAccessor
, and RequestAccessor
consistent and use Vavr Try
where applicable.JwtBasedRequestContextExecutor
. Use AuthTokenAccessor.executeWithAuthToken
in combination with AuthTokenBuilder
instead. For running code on behalf of another tenant, use TenantAccessor.executeWithTenant
.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>
User
with the more general Principal
.
Locale
from Principal
interface as this is only available on Neo (type-cast to ScpNeoPrincipal
if you need to access this value).hasAuthorization
method, use getAuthorizations
and call the contains
method on the returned set instead.CacheKey
and CacheManager
accordingly by replacing all occurences of "user" with "principal".Principal
also in AccessDeniedException
instead of User
. Note, however, that the AccessDeniedResponse
still exposes "user" to remain compatible on REST API level).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
.CloudLoggerFactory
. Use the plain slf4j LoggerFactory
instead.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.ErpEdition
(also removed in mocking of ErpSystem
).BapiRequest
instead.scp-cf-tomcat
).
Use the TomEE or Spring archetypes instead when starting a new project.com.sap.cloud.sdk
instead of com.sap.cloud.s4hana
.s4hana
in the group id is only used if the contained module is in some way specific for SAP S/4HANA.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 |
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
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 |
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).
DefaultHttpDestination.builder
or ScpCfHttpDestination.builder
.DestinationOptions
.ScpCfDestinationLoader
or ScpNeoDestinationLoader
will consider different options that give fine-granular control over the behavior when loading the destination (for example, if provider or subscriber destinations shall take precedence).builder
method.augmentBuilder
method to set configuration parameters that are specific to a loader (platform or environment) using an appropriate class implementing DestinationOptionsAugmenter
.Callable
or Executable
) by overriding (that is, "on-behalf of") the Tenant
, Principal
, or AuthToken
of the context in TenantAccessor
, PrincipalAccessor
, and AuthTokenAccessor
.TenantAccessor.executeWithTenant
, the given callable/executable will be executed in a context where the given tenant is set as the current tenant.TenantAccessor.executeWithFallbackTenant
) or globally (for example, with TenantAccessor.setFallbackTenant
). Whenever, for example, a tenant is requested but not available, the SDK will retrieve a fallback tenant from the given supplier.RequestAccessor
and allow overriding the request and providing a fallback request when executing code.XsuaaService
public
for communicating with a given XSUAA service on SAP Cloud Platform, Cloud Foundry.com.sap.cloud.sdk.cloudplatform.resilience
. Provide a default implementation of resilience using resilience4j as underlying library.ResilienceDecorator
as the entry point for wrapping any code (callabe or supplier) with resilient behavior.ResilienceConfiguration
ThreadContexts
.DefaultMessageDelegator
to improve error inspection in the messaging core module.February 13, 2020 - Maven Central - Javadoc - Release blog
WorkItems
in the service Commercial Project - Read is no longer allowed as of SAP S/4HANA Cloud release 2002. The method updateWorkItem()
was removed from CommercialProjectService
.3.2.11
to 3.2.12
to overcome the security vulnerability CVE-2019-17573.9.4.25.v20191220
to 9.4.26.v20200117
to overcome the security vulnerability CVE-2018-12536.4.3.26.RELEASE
to overcome the security vulnerability CVE-2020-5397.January 30, 2020 - Maven Central - Javadoc - Release blog
ODataRequestBuilder
of OData V2 Connectivity API by the additional fields sap-client
and sap-language
if corresponding destination properties are defined. You might need to remove the calls to withHeader()
to have these headers set automatically.5.1.2
to 5.1.13
fixing the vulnerability CVE-2020-53985.1.2
to 5.1.7
January 16, 2020 - Maven Central - Javadoc - Release blog
7.0.5
to 7.0.6
4.4.10
to 4.4.12
, client from version 4.5.6
to 4.5.10
9.4.17.v20190418
to 9.4.25.v20191220
PATCH
semantics where null
values were being filtered out before the update. Explicitly set null
values are being retained now.December 19, 2019 - Maven Central - Javadoc - Release blog
Edm.Time
, Edm.DateTime
or Edm.DateTimeOffset
.December 5, 2019 - Maven Central - Javadoc - Release blog
/
) were incorrectly escaped in OData requests made when dynamically fetching a navigation property of an entity whose key contains such characters.November 21, 2019 - Maven Central - Javadoc - Release blog
October 24, 2019 - Maven Central - Javadoc - Release blog
October, 10, 2019 - Maven Central - Javadoc - Release blog
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.2.9.9
/2.9.9.2
to 2.9.10
.commons-beanutils:commons-beanutils
with version 1.9.4
(from 1.9.3
).September 26, 2019 - Maven Central - Javadoc - Release blog
user_name
claim of the current JWT in ScpCfPrincipalFacade
when the JWT has the user_token
grant type.September 12, 2019 - Maven Central - Javadoc - Release blog
listeners-all
dependencies from projects generated via archetypes since the SAP Cloud SDK Pipeline will inject this dependency during a pipeline run.August 29, 2019 - Maven Central - Javadoc - Release blog
August 15, 2019 - Maven Central - Javadoc - Release blog
OutboundDeliveryService
has been removed from the SAP API Business Hub and, as a consequence, from the SDK. Use OutboundDeliveryV2Service
instead.August 1, 2019 - Maven Central - Javadoc - Release blog
com.sap.cloud.servicesdk.*
) from version 1.31.1 to 1.32.0. This fixes an issue where deep insert did not work beyond the first level.July 18, 2019 - Maven Central - Javadoc - Release blog
July 4, 2019 - Maven Central - Javadoc - Release blog
com.sap.cloud.servicesdk.*
) from version 1.29.0 to version 1.31.1. This contains the following fixes:null
values.scp-cf-tomcat
archetype to version 8.5.42.TextMessage
from JMS in JmsMessagingVdmConverter
to extract the message payload also from messages of such type (in addition to ByteMessage
).June 20, 2019 - Maven Central - Javadoc - Release blog
execute
for an update request via PATCH
if the request will be sent with an empty body when no fields of the entity have been registered as changed.getVcapApplication
and getVcapServices
in ScpCfCloudPlatform
by only parsing JSON from the environment variables once instead of parsing it on each invocation.June 6, 2019 - Maven Central - Javadoc - Release blog
com.sap.cloud.sdk.s4hana.datamodel.messaging.api.message
).listStreams
when the result included non-subscribed streams.May 23, 2019 - Maven Central - Javadoc - Release blog
ChangeMasterService
has been renamed to ChangeMasterV2Service
to reflect that this service refers to version 2 of that API. The corresponding namespace package has been moved as well, from ...namespaces.changemaster
to ...namespaces.changemasterv2
.KanbanControlCycleService
has similarly been renamed to KanbanControlCycleV2Service
and InboundDeliveryService
to InboundDeliveryV2Service
.com.sap.cloud.sdk.s4hana.datamodel.odata.services
),
new operations in previously existing services, and new entity types. The SDK supports all OData
services listed in the SAP API Business Hub for SAP S/4HANA Cloud.
May 9, 2019 - Maven Central - Javadoc - Release blog
ScpXfDestinationFacade
to read destinations from the VCAP_SERVICES
environment variable in Cloud
Foundry (as used by Extension Factory).FallbackDestinationFacade
to use destination service and extension factory in parallel. The
FallbackDestinationFacade
allows to specify as constructor parameters one
primary DestinationFacade
and a secondary facade as fallback that is used if no
destination of a given name is found using the primary facade.DestinationAccessor.setDestinationFacade
.
PUT
semantics (replace).
PATCH
remains the default.PUT
and send the full entity that is meant to replace the
current state of the entity, call
replacingEntity
on any fluent helper for update requests.PATCH
and only send changed fields (which is also the
default if nothing is specified), call
modifyingEntity
.
scp-cf-tomcat
archetype to version 8.5.40 (from
8.5.23) due to a known vulnerability (CVE-2019-0232).PrincipalAccessor
also in case of a JWT with scope authorization_code
.MultichainTransaction
.
April 25, 2019 - Maven Central - Javadoc - Release blog
S4HanaMessageParser
to
CloudEventsMessageParser
and S4HanaMessageMetadata
to
CloudEventsMessageMetadata
in order to better reflect their generic purpose. MessageTopic
class. The
fromMessage
method of
MessagingVdmConverter
only needs the plain string payload.ReservationDocumentService
no longer allows to create and delete
ReservationDocumentHeader
to reflect what is supported according to the description on SAP API Business Hub.update
, create
, and delete
operations
in OData.batch
method available on each service representation to begin constructing a batch request.BusinessPartnerServiceBatch
)
allows to begin
a new change set, add
operations to this change set, and end
the change set.BatchResponse
gives access to the results
of individual change sets accessible by their index, returned as a Try
that wraps the actual result or any exception.getCreatedEntities
.
count
method available on all fluent helpers for queries.top
and skip
have no effect on the result.withCustomQueryParameter
(also
available for by-key requests).OAuth2UserTokenExchange
.
OAuth2SAMLBearerAssertion
, the user exchange token flow is
conducted with the XSUAA which issues a JWT encompassing the user principal.eventType
property found in message payloads that
follow the cloudevents specification, like SAP S/4HANA Cloud.
failOnWarning
(introduced both in the CLI and in the Maven plugin) for
this purpose.MultichainCommand
in
MultichainService
class which would lead to the code being executed within the same thread, not the intended thread
pools of Hystrix.April 11, 2019 - Maven Central - Javadoc - Release blog
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.onBehalfOfTenant(@Nonnull String tenant, @Nullable String issuerUrl, @Nonnull String... audiences)
of
JwtBasedRequestContextExecutor
has been deprecated in favor of the more specific methods mentioned below.MessageFactoryMapper
interface for mapping of message types to message
factory class names.MessageFactoryMapper
called
VdmMessages
for currently supported message types.MessagingVdmConverter
with the desired MessageFactoryMappers
and call the method
fromMessage
.
JmsMessagingVdmConverter
,
which will use VdmMessages
for mapping, and then call the
fromMessage
method.JmsMessageDelegator
that accepts a JMS message converter instance.PrincipalAccessor
.
The returned
Principal
object includes the identifier
of the principal, which is either the user_name
or client_id
, depending on
the current grant_type
, as well as authorization
information. In the Neo environment of SAP Cloud Platform, the principal is equivalent to
the user.m2eclipse
lifecycle mappings for the
scp-neo-maven-plugin
, odata-generator-maven-plugin
, and
pmd-plugin
to integrate the plugins with Maven in Eclipse and remove warnings like
"plugin execution not covered by lifecycle configuration".onBehalfOfTenant( @Nonnull String tenantId )
that uses default values for issuerUrl
and audiences
.onBehalfOfTenant(@Nonnull String tenantId, @Nonnull String issuerUrl, @Nonnull Collection<String> audiences )
for full customization of these values. This method replaces the previously existing method.
audiences
will be
initialized with the own application name as taken from the XSUAA service binding context.
March 28, 2019 - Maven Central - Javadoc - Release blog
m2eclipse
lifecycle mappings for the
s4sdk-maven-plugin
to integrate the plugin with Maven in Eclipse and remove warnings
like "plugin execution not covered by lifecycle configuration".GsonMessageBodyProvider
where
readFrom
did not properly sanitize the JSON input to be converted.March 14, 2019 - Maven Central - Javadoc - Release blog
scp-blockchain
have been deprecated
in favor of the improved classes in the new experimental module
com.sap.cloud.s4hana.services:blockchain
.
HttpCachingHeaderWrapper
has been deprecated in favor of using
HttpCachingHeaderFilter
.
cachingMetadata
on fluent helpers. Revert to the default by using
withoutCachingMetadata
.
blockchain
for interacting with the SAP Cloud Platform Blockchain service.MultichainService
offers fluent and type-safe access to MultiChain commands.onBehalfOfTenant
of
JwtBasedRequestContextExecutor
to execute code in a context for the tenant with the given tenandId
.issuerUrl
and audience
. Depending on the code executed on behalf, certain token
audiences may be required. If no URL is provided, a default will be created to match the
XSUAA service URL expected for the subscribed tenant.scp-neo-javaee7
to 1.44.12.WireMockConfiguration
to
MockUtil.mockServer
and
MockUtil.mockErpServer
.
This enables the customization of mock servers upon initialization, e.g. address mapping, port
mapping, thread settings, SSL- and proxy configuration.HttpCachingHeaderFilter
did not add HTTP response headers in certain situations. For example, when the consuming application
is using JAX-RS, the filter operation was not triggered in the past. With the new implementation,
the cache headers will be set in these cases as well. It is now recommended to place the filter at
the end of the filter chain, instead of the beginning.February 28, 2019 - Maven Central - Javadoc - Release blog
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.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.BapiQuery
and
RfcQuery
by specifying
an own
error handler.
BapiQueryResult
or
RfcQueryResult
if a
RemoteFunctionException
shall be thrown.BapiQuery
and RfcQuery
offer convenience methods
as part of their fluent API to always
ignore errors or to always
propagate them as exceptions.FilterExpression
from the SAP
Cloud Application Programming Model as an
UncheckedFilterExpression
.
FilterExpressionConverter
provided by the Cloud Application Programming Model to convert an expression from a query
request to a FilterExpression
.maven-surefire-plugin
used in archetypes from 3.0.0-M2 to 3.0.0-M3.BapiQuery
and
RfcQuery
had been committed asynchronously despite the API promising a synchronous commit.CommitStrategy
,
which also allows not committing the call as a third option.BapiQuery
and
RfcQuery
did not throw a
RemoteFunctionCommitFailedException
in case the transaction could not be committed successfully. The change only applies to JCo-based
RFC transactions; SOAP-based operations are not affected.February 14, 2019 - Maven Central - Javadoc - Release blog
TenantAccessor.tryGetCurrentTenant
and
UserAccessor.tryGetCurrentUser
now correctly propagate the TenantNotAvailableException
in case the tenant is
not available instead of returning Success(null)
. If you relied on the
previous, erroneous behavior, you may have to adapt your code.TenantAccessor.getCurrentTenant()
on Cloud Foundry has been adapted so that it falls back to the provider tenant if no tenant
is otherwise specified in the request context.com.sap.cloud.sdk.s4hana.datamodel.odata.services
),
new operations in previously existing services, and new entity types. The SDK supports all OData
services listed in the SAP API Business Hub for
SAP S/4HANA Cloud.
messaging-api
contains Java
classes representing each of the business event types that an SAP S/4HANA Cloud
system (release 1902) may emit, as well as corresponding listener
interfaces that you can implement to handle messages in a type-safe manner.messaging-jms
provides a message
delegator for dispatching messages received via JMS to registered
listeners.getXsuaaServiceToken()
to the AuthTokenAccessor
that allows the caller to receive a JWT from the XSUAA service
bound to the application.TenantAccessor.getCurrentTenant()
to fallback to the provider tenant on Cloud Foundry in case no tenant is available in the current
request context.
AuthTokenAccessor.getXsuaaServiceToken()
in case
AuthTokenAccessor.getCurrentToken()
does not return a token.withXsuaaServiceJwt()
to the JwtBasedRequestContextExecutor
that creates a request context using a JWT
internally retrieved from the aforementioned AuthTokenAccessor.getXsuaaServiceToken
method so that manually passing a JWT is not necessary.TenantAccessor.tryGetCurrentTenant
and
UserAccessor.tryGetCurrentUser
returned Success(null)
in case the tenant is not available instead of propagating the
TenantNotAvailableException
.
January 31, 2019 - Maven Central - Javadoc - Release blog
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.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.UnsupportedOperationException
.BillOfMaterialsV2Service
.
BillOfMaterialsService
.
StringUserAttribute
instead of SimpleUserAttribute<String>
on SAP Cloud Platform Neo, and as
StringCollectionUserAttribute
instead of CollectionUserAttribute<String>
on Cloud Foundry to allow more
convenient consumption.scp-cf-tomee
, scp-cf-tomcat
, scp-neo-javaee7
archetypes to
further reduce memory consumption.ForEachSystemRule
test utility to support the notion of fallback
systems. These are systems for which the tests are executed (in-order) after the test failed
with the first configured system. A test is considered successful if at least one of the specified
systems succeeds.@Nonnull
annotations to public methods where
applicable.scp-cf-tomee
archetype where TomEE would not
start because of a conflict with the default shutdown port 8005 on Windows. Now, shutdown port 8006
is explicitly specified in application/pom.xml
.scp-cf-tomcat
archetype where integration
tests failed when run from an IDE because of a missing port configuration for arquillian. Now, a
default port 9090 is defined in arquillian.xml
which takes effect unless a system
property arquillian.httpPort
is passed to the test runner. Note: in IntelliJ, you still
need to disable passing systemPropertyVariables
to JUnit in
File | Settings | Build, Execution, Deployment | Build Tools | Maven | Running Tests
or
pass -Darquillian.httpPort=9090
manually.January 17, 2019 - Maven Central - Javadoc - Release blog
--include-entity-sets
and --include-function-imports
which take a
comma-separated list of entity set or function import names.includeEntitySets
and
includeFunctionImports
which take a set of <param>
tags,
each containing the name of an entity set or function import, respectively.RequestContextServletFilters
to enable stepwise initialisation of objects. Set the property useParentContext
to
true
to enable this.request
parameter to the
invoke
method. This gives callers more flexibility on what URL will be called.javax.validation:validation-api
to 2.0.1.Final
in
scp-cf-spring
archetype.s4sdk-maven-plugin
in parallel
builds.December 20, 2018 - Maven Central - Javadoc - Release blog
AuditLogger
has been adapted to properly reflect its runtime behavior on Cloud Foundry:@Nullable Iterable<AccessedAttribute>
as parameter have been
deprecated in favor of methods that take
@Nonnull AccessedAttribute, @Nullable AccessedAttribute...
.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.getType
in
ValidationMessages
has been renamed to
getType_2
in order to prevent name clashes in the created entities with already existing methods.attachToService
in all entity classes to allow setting the service path and ErpConfigContext
after
creating an entity manually.ErpConfigContext
. Please use the attachToService
method
instead for setting the ErpConfigContext.beans.xml
file to projects created by the scp-cf-tomee
,
scp-cf-tomcat
, and scp-neo-javaee7
archetypes that excludes VDM namespaces
from CDI scanning.beans.xml
file, it is
recommended to include the following scan exclusions to achieve the same in already
generated projects:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" bean-discovery-mode="annotated"> <scan> <!-- do not scan namespaces since CDI is only required for service classes --> <exclude name="com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.**"/> </scan> </beans>
scp-cf-tomee
archetype to use TomEE 7 (Web Profile).scp-cf-spring
archetype how to setup security and manage
spring-security
and spring-security-oauth2
in the SDK's bill of
material (BOM).argLine
flag when running tests.surefire.forkDir
which is set by the surefire plugin and
referenced in the src/test/resources/arquillian.xml
configuration file.tryGetCurrentUser
in
UserAccessor
and
UserFacade
which returns a
Try
for the current user.null
) or any possibly thrown
exception, also allowing to write idiomatic code without try-catch-blocks.com.fasterxml.jackson.core:jackson-annotations
from 2.9.7 to
2.9.0. According to the Jackson documentation there are no code changes in these minor
releases.AccessRequester
objects always tried to access the HTTP servlet request instead of taking the user from the
UserAccessor
,
which is more stable and supports different usage scenarios.December 7, 2018 - Maven Central - Javadoc - Release blog
surefire
plugin used in archetypes to 3.0.0-M1.ignoreVersionIdentifier
where no If-Match: *
header was sent if no version identifier was set on the entity.
Now, If-Match: *
will always be sent when activating
ignoreVersionIdentifier
on update
and delete
requests to force an overwrite.scp-cf-spring
archetype that led to failures in generated projects when running tests with Java 11.November 22, 2018 - Maven Central - Javadoc - Release blog
PurOrdAccountAssignment
; create, delete, and update for
PurOrdPricingElement
, create and delete for
PurchaseOrderScheduleLine
.ClfnClassDescForKeyDate
has been removed from
the Class
Data for Classification service, as it is no longer part of the API on the SAP API Business
Hub.billofmaterials
package, the entity type BillOfMaterial
has been renamed to
MaterialBOM
and CsapSBomExplOut
to
DBomheaderforexplosionOut
.
This also affects all related helper classes....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
...Field
classes have similarly been moved into a subpackage named
field
....Link
classes have similarly been moved into a subpackage named
link
.--delete-output-dir
(CLI) or the
<deleteOutputDirectory>true</deleteOutputDirectory>
(Maven
Plugin) options.com.sap.cloud.sdk.s4hana.datamodel.odata.services
),
new operations in previously existing services, and new entity types.
The SDK supports all OData services listed in the SAP API Business Hub for
SAP S/4HANA Cloud.
com.sap.cloud.s4hana.services:recast-ai
.
com.sap.cloud.s4hana.plugins:s4sdk-maven-plugin
for collecting usage data and diagnosis reports and add it to all archetypes.CustomerOneToOneLink
)
provides a filter
method.LocalScopePrefixProvider
interface and supplying an instance to the
ScpCfUserFacace
.
DefaultLocalScopePrefixProvider
.
HttpClientAccessor
by introducing methods
setHttpClientFactory
and
getHttpClientFactory
that correspond to the
HttpClientFactory
interface and deprecating methods setHttpClientProvider
and
getHttpClientProvider
.getAll*
methods of the OData VDM API was immutable.November 8, 2018 - Maven Central - Javadoc - Release blog
RequestContextExecutor
within another request context. By default this is disabled. You must enable this functionality by
using the
withParentRequestContext()
method.spring-framework-bom
from 5.1.0.RELEASE
to
5.1.1.RELEASE
spring-boot
(used in archetype scp-cf-spring
) from
2.0.5.RELEASE
to 2.0.6.RELEASE
.AccessedAttribute
to reflect that the
operation
will not be sent to the Audit Log when running on Cloud Foundry.orderBy
would result in the query to only contain the ordering expression of the last method call instead of
chaining the ordering according to the order in which the method is called.logDataWrite()
and
logDataWriteAttempt()
logged wrong values for
oldValue
and
newValue
October 25, 2018 - Maven Central - Javadoc - Release blog
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>
.
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>
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.JwtBasedRequestContextExecutor
to improve support for asynchronous scenarios such as messaging.
JwtBasedRequestContextExecutor.withJwt(jwt, refreshToken).execute(() -> {})
to allow the SDK to automatically refresh the JWT in case it has expired.AuthTokenAcccessor
(see below).uaa.user
.AuthTokenAccessor.getRefreshToken()
for retrieving a refresh token.ScpCfCloudPlatform.getXsuaaServiceCredentialsList()
,
ScpCfCloudPlatform.getConnectivityServiceCredentialsList()
,
ScpCfCloudPlatform.getDestinationServiceCredentialsList()
getXsuaaServiceCredentials()
)
will still throw exceptions on multiple bindings.compile
instead of provided
for spring-web
in
com.sap.cloud.s4hana.frameworks:spring-web
.
org.skyscreamer:jsonassert
in the
scp-cf-spring
archetype along with an exclusion to com.vaadin.external.google:android-json
to
avoid runtime conflicts with org.json:json
. Details on this issue can be found
here.tryGetCurrentTenant
in
TenantAccessor
and
TenantFacade
which returns a
Try
for the current tenant. This object contains the current tenant (possibly null) or any possibly
thrown exception, also allowing to write idiomatic code without try-catch-blocks. For more details
on this monadic container type, refer to the Vavr user
guide.SoapQuery
did not properly respect the proxy configuration.October 11, 2018 - Maven Central - Javadoc - Release blog
Authorization
from interface to class in order to avoid
IncompatibleClassChangeError
s.generalledgerAccount
of the Java Virtual Data Model (VDM) has been
renamed to
generalledgeraccount
to be all lower case./$value
path
on an entity.
AttachmentContent
which expose media streams have a new method called
fetchAsStream()
.
java.io.InputStream
that represents the media content.com.sap.cloud.s4hana.services:scp-machine-learning
and
com.sap.cloud.s4hana.services:scp-blockchain
.Authorization
into a Java class.
Authorization
refers to a role, while on Cloud Foundry, it refers to
a scope.User::hasAuthorization
now performs the platform-specific check based on the passed instance of
Authorization
.TenantContext
in
ScpNeoTenant
when mocking a tenant with
MockUtil
on Neo could cause a NullPointerException
when running tests that executed a Hystrix
command within a
RequestContextExecutor
.
surefire.forkCount
was not being applied correctly when running
tests in projects created from the archetypes.MeteringStats
where calling its methods in a RequestContextExecutor
caused an exception to be thrown
about duplicate request contexts.TokenRequestDeniedException
and
TokenRequestFailedException
public, as they are exposed as part of the API, so that they can be caught.September 27, 2018 - Maven Central - Javadoc - Release blog
ScpCfService
(beta) that grants easy access to those services.
ScpCfServiceDesignator
(beta) to flexibly identify Cloud Foundry services with a convenient builder
pattern.ScpCfService
that take such a designator
instead of service type and plan.key
.serviceNameMappings.properties
file so that valid Java identifiers will get
created from them.ODataVdmErrorResultHandler
where the httpStatusCode
of the exception was not set properly.September 13, 2018 - Maven Central - Javadoc - Release blog
SoapQuery
class for convenient consumption of SOAP APIs exposed from SAP S/4HANA.asChildOf
of corresponding fluent
helpers.DestinationAccessor
class by the static methods
getRetrievalStrategy
and
setRetrievalStrategy.
DestinationRetrievalStrategy
.
DestinationRetrievalStrategy.ALWAYS_PROVIDER
Entity
.
If-Match
header.buildpacks
in
manifest.yml
which replaces the deprecated attribute buildpack
. Visit the
official
documentation for more details.proxy
misses the URI scheme. Formerly, an exception was thrown at runtime. Now, an info
message is logged.timeout
attribute in
manifest.yml
and increase the deployment timeout to 5 minutes in order to avoid issues
with larger deployments.August 16, 2018 - Maven Central - Javadoc - Release blog
ReleaseVersionBOM
has been renamed to
BillOfMaterialReleaseVersionBOM
, the name of the VDM
method as well as the fluent
helper have changed accordingly.ReferenceProcedure
has been replaced by
ReferenceTransaction
withHttpHeader
in
FluentHelperBasic
.
If you are still using this method, replace its usage with
withCustomHttpHeader(key, value).onRequestAndImplicitRequests()
.
ExpectedFailureCase
in the testutil
module has been deprecated. Please use a testing framework like
AssertJ instead. For example,
AssertJ offers comparable functionality with
Assertions.assertThatThrownBy
.
com.sap.cloud.sdk.s4hana.datamodel.odata.services
),
new operations in previously existing services, and new entity types.
The SDK supports all OData services listed in the SAP API Business Hub for
SAP S/4HANA Cloud.
asResilientCommand
method of fluent helper. To execute an OData request in a resilient manner, instead of
calling service.getAllBusinessPartner().execute()
, call
service.getAllBusinessPartner().asResilientCommand().execute()
.ODataRequestCommand
,
a sensible-default implementation of
ErpCommand
for OData requestscom.sap.cloud.servicesdk.prov:api
,
com.sap.cloud.servicesdk.prov:odata2.web
,
com.sap.cloud.servicesdk.prov:odata2.xsa
,
com.sap.cloud.servicesdk.prov:odatav2-hybrid
, and
com.sap.cloud.servicesdk.prov:odatav2-prov
.null
handling and type conversion)
occur during the parsing of OData payloads in the VDM. Previously, checked exceptions would be
thrown. In cases where the errors cannot be recovered from, an
ODataPayloadParsingFailedException
will be thrown, which is a RuntimeException
.DataModelGenerator
class, use the methods
linkToApiBusinessHub(boolean)
or
linkToApiBusinessHub()
.
linkToApiBusinessHub
.--generate-links-to-api-business-hub
.getHeaderParameters
in the class
Query
and introduce a new method with name
getCustomHttpHeaders
to better reflect the purpose of this method. The deprecated method will be removed in one of the
next releases.scp-cf-spring
archetype to 2.0.4.RELEASE..gitignore
files not being correctly generated by archetypes. The ignore file
includes sensible defaults, including ignoring credential files to avoid accidentally committing
them to Git.August 2, 2018 - Maven Central - Javadoc - Release blog
getEndpointUrl
on
VdmEntity
classes has been deprecated in favor of the more accurate term service path. Use
getServicePathForFetch
instead in subclasses.JwtBasedRequestContextExecutor
.
The new class allows specifying a JWT and execute code as if the JWT has been provided as part of a
HttpServletRequest
. This can be useful in asynchronous scenarios.EntityField
subclass to represent the custom field and supply
a type converter. Getters
and setters
using this EntityField
representation will automatically use the converter.
Edm.DateTime
can be handled as
LocalDateTime
instances instead of Calendar
, which would otherwise
be the default type representation of such custom fields, by using the
LocalDateTimeCalendarConverter
.
Similar converters exist out-of-the-box for LocalTime
and
ZonedDateTime
.EntityField
instance, not when using a string
identifier or when getting
all custom fields.field(String, TypeConverter<T, DomainT>)
(example)
of the corresponding VDM entity class.withServicePath(String)
(example)
to specify a custom service path that will override the default service path. The returned
new service instance will use the provided service path for all OData requests. The method
leaves the original service instance unchanged.DEFAULT_SERVICE_PATH
(example)
with the value of the default service path from SAP S/4HANA Cloud that is used if no custom
service path has been specified.withCustomHttpHeader
method of the base
Query
class provides a fluent API for adding single string-based key-value pairs, and the method
withSameCustomHttpHeadersAs
copies header parameters from another query.AuditedDataSubject
and
AuditedDataObject
.
July 5, 2018 - Maven Central - Release blog
<excludes>
), for the command line interface (--excludes
), and for
the Java class
(withExcludeFilePattern
).
It accepts an ant-style pattern such as
"*us_en.xml,*DE_de.edmx"
. All files matching the pattern will be excluded.Key
for fields in Java VDM entity classes that are defined to be part of the key. The annotation will be
added by the default annotation strategy of the Java VDM generator. Pre-delivered Java VDM entities
have this annotation applied to all key fields as well.withHttpHeader
method
of fluent helpers called
withCustomHttpHeader
,
which provides the same functionality in
a fluent manner and additionally has the option to specify headers only
for the actual OData request, but not any preflight request.scp-cf-tomcat
archetype:cargo-maven2-plugin
instead of jetty-maven-plugin
in local
deployments to use a pure Tomcat. Accordingly, instead of mvn jetty:run
, now
run the local deployment with mvn package cargo:run
.jaxrs
profile in TomEE Maven plugin of scp-cf-tomee
archetype for
parity between local deployment and deployment on Cloud Foundry with the SAP Java Buildpack.scp-cf-spring
archetype to 2.0.3.RELEASE.-XX:MaxPermSize
flag from archetypes.cxf
,
but mark them as optional instead.http
would throw an
UnsupportedSchemeException
.jackson
libraries from 2.9.5 to 2.9.6 to prevent yet undisclosed vulnerability.
index.html
welcome pages of archetypes.org.skyscreamer:jsonassert
from BOM.AuthToken
property in AuthTokenRequestContextListener
as confidential
so that it is not written to logs.June 7, 2018 - Maven Central - Release blog
fromIdentifier
to ofIdentifier
.ScpCfCloudPlatform
now throw
NoServiceBindingException
or
MultipleServiceBindingsException
instead of returning an empty Optional
.raml-api-console
module has been removed. If you still need
this module, refer to a previous release.@NonNull
annotations have been replaced with the JSR-305
@Nonnull
annotation to provide a cleaner API contract using only JSR-305
annotations.ScpCfService
for access to services on Cloud Foundry including OAuth2 authentication flow.AuditedDataObject
for information about the data being accessed/modified and
AuditableDataSubject
for the owner of the data being accessed/modified.objectId
and objectName
by
parameters expecting AuditedDataObject
and AuditableDataSubject
.
message
except for security event audit log
messages.AccessRequester
along with automatic retrieval from current requests. If you experience issues with tenant
identifiers in tests, make sure to mock the tenant using
mockCurrentTenant()
in MockUtil
.Jwt
and JwtDecoder
classes with DecodedJWT
provided
by java-jwt
.isConfidential
flag to Property
to indicate whether a property must be handled confidentially, e.g.,
by not writing its contained value and exception to the log.httpcore
) and 4.5.5 (client libraries).com.sap.cloud:neo-javaee7-wp-api
to 1.24.13 (also in archetype
scp-neo-javaee7
).scp-cf-spring
archetype, while keeping human-readable logs in local deployment.
slf4j-simple
for unit and integration tests in all archetypes. You can now
easily set the log level of all classes in tests with
-Dsurefire.logLevel=<level>
.RfcQuery
.
May 23, 2018 - Maven Central - Release blog
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.FluentIterable
,
Optional
, Function
, Predicate
and
Supplier
with corresponding native Java 8 types.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.HystrixUtil
command key methods. The CachingCommand
now uses
CacheKey.ofTenantAndUserIsolation()
by default.ALLOW_MOCKED_AUTH_HEADER
environment variable to true
to mock a tenant and still use the
destination service.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.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()
.
Optional
s in
TenantAccessor
,
UserAccessor
,
and
SecretStoreAccessor
.
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
.ErpEndpoint
, only use
ErpConfigContext
instead.EjbUtil
.RequestContextAccessor.getRequestContextProperty()
. Access
properties directly via
RequestContext.getProperty()
instead.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.AuditLogAccessException
to indicate issue when accessing audit log.ScpNeoHystrixBootstrapListener
. This is now replaced by a
standard Java ServiceLoader
.toQuery
methods of the fluent helpers throw
ODataException
.CacheKey
and apply unified namings with of
constructor methods.ConvertedObject
with of
constructor methods and fix misspelled "convertable", using
"convertible" instead.getXOrNull
, but the methods are now called
getXIfPresent
to better reflect the return type Optional
.
ResponseBuilder
to
ErrorResponseBuilder
to better reflect the purpose of this class.ErpServiceUriBuilder
to
ServiceUriBuilder
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.scp-cf-tomee
archetype to 1.7.5.
scp-cf-spring
archetype to 2.0.2.RELEASE.
spring-web
version to 5.0.6.RELEASE.com.sap.cloud.sdk.s4hana.datamodel.odata.services
),
new operations in previously existing services, and new entity types.
The SDK supports all OData services listed in the SAP API Business Hub for
SAP S/4HANA Cloud.
withHttpHeader
method to all fluent helpers. This adds the String-typed key and value pairs to the HTTP headers of
all underlying OData requests.ErpConfigContext
into the HTTP headers of all OData requests. To pass in different values than the default, create an
ErpConfigContext
object with the desired locale and/or SAP client and call the
execute()
method of the fluent helper with the ErpConfigContext
object as a parameter.resetChangedFields()
method to all VDM entities to reset the currently tracked changed fields for update requests.USE_MOCKED_TENANT
and USE_MOCKED_USER
environment variables for
fine-granular control over mocking at runtime.""
) and/or mocked user (""
) instead of an actual tenant or user,
respectively.MockUtil
now uses the AuditLog
, CloudPlatform
,
GenericDestination
/Destination
/RfcDestination
,
Tenant
, User
, and SecretStore
type of the respective Cloud
platform for mocking based on the chosen dependency of Cloud Foundry or Neo.MockUtil
to allow mocking of GenericDestination
s.ODataField
annotations to externalize the expected OData types.isKeyField()
to entity property models supplied to annotation strategy.com.sap.cloud.servicesdk.prov:odatav4
to the dependencies of a project.ServiceLoader
instead of a bootstrap listener to make it easier to use Hystrix
during app startup.SerializedQuery
now not only supports POST
, but also additional HTTP methods defined by
RequestMethod
.
java.lang.IllegalArgumentException: Not supported: http://javax.xml.XMLConstants/property/accessExternalDTD
issue in SoapRemoteFunctionQuerySerializer on Java EE 7.ClassNotFoundException
s instead
of the message provided by the respective assertRuntimeDependenciesExist()
method.May 10, 2018 - Maven Central - Release blog
includingFields
method to manually specify fields to include.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.includingFields
method of the fluent helper.--generate-pojo-only
, Maven plugin
configuration pojosOnly
).AnnotationStrategy
.
DefaultAnnotationStrategy
as basis (super class) for custom annotation strategies.--annotation-strategy-class <fully-qualified-class-name>
, the Maven
plugin configuration property annotationStrategy
..xml
files (in addition to .edmx
).BusinessEventQueue
service.April 12, 2018 - Maven Central - Release blog
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.JwtBearer
class has been replaced by
AuthToken
.
sap:label
attribute) to
derive the VDM name of entities and their properties. You can use the old strategy to use
the name instead with the corresponding command line interface (CLI) option
--use-odata-names
or the Maven plugin parameter nameSource
set to
NAME
.NamingStrategy
to define the mapping of metadata names and labels to Java identifiers. Supply the fully
qualified name of your class implementing this interface via the parameter
--name-strategy-class
(CLI) / namingStrategy
(Maven plugin).generate
to allow calling the Maven plugin (when
configured) via mvn odata-generator:generate
PATCH
request and only
send fields of the entity with non-null values.ETag
version identifier during read-by-key requests and supplying it as
If-Match
header during update requests.
ETag
version identifier manually on all entities.AuthTokenAcccessor
to transparently access the current authorization token on SAP Cloud Platform Cloud Foundry.RequestContextListeners
to debug
instead of warn
to avoid unnecessary warnings in situations where
this behavior is expected.DestinationPathsNotMergeableException
in
UriPathMerger
.
javax.inject
module from compile to provided in
odata-api
and bapi-api
modules.JmxMonitor
that occurred when deploying more than one
application to the same container.March 29, 2018 - Maven Central - Release blog
com.sap.cloud.s4hana.datamodel:odata-generator-cli
as a fat
jar that can be called via java -jar odata-generator-cli-1.9.4.jar
.
com.sap.cloud.s4hana.datamodel:odata-generator-maven-plugin
,
bound to the generate-sources
phase.DataModelGenerator
builder class.cx-server
).
cx-server
script.DestinationAccessException
occurred on SAP Cloud Platform Cloud Foundry when a subaccount had an on-premise destination
configured and the application was not bound to a connectivity service instance, even if this
destination was never used.
Destination#getProxyConfiguration
may now throw a DestinationAccessException
to indicate an issue while accessing
the destination.scp-neo-javaee7
archetype.March 15, 2018 - Maven Central - Release blog
ODataQueryBuilder
. Please find the release
notes of the SAP Cloud Platform SDK for service development at help.sap.com.or
and
not
to support complex filter expressions (together with the already previously existing
and
operator).scp-neo-maven-plugin
.February 15, 2018 - Maven Central - Release blog
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:CreateAndUpdateCommercialProjectsService
to CommercialProjectService
.ProcessSalesOrderService
to SalesOrderService
.ProcessPurchaseOrdersService
to PurchaseOrderService
.ReadCostCenterDataService
to
CostCenterService
, BillOfMaterialMaintainService
to
BillOfMaterialsService
, ReadGorlAccountService
to
GeneralLedgerAccountService
,
ManageWorkforceAvailabiltyService
to
WorkforceAvailabilityService
,
EnableExternalJobSchedulerIntegrationService
to
ExternalJobSchedulerIntegration
, ReadAndUpdatePirsService
to PlannedIndependentRequirementService
.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.EjbUtil
helper class has been deprecated, as its functionality is no longer
required in newer JavaEE containers.com.sap.cloud.sdk.s4hana.datamodel.odata.services
),
new operations in previously existing services, and new entity types.
The SDK supports all OData services listed in the SAP API Business Hub for
SAP S/4HANA Cloud.
com.sap.cloud.s4hana.frameworks:spring-web
that provides a ready-to-use
exception mapper for Spring applications
.
The exception mapper logs all unhandled exceptions with a reference ID and fills the response with
the error description, without the stacktrace.destinations
so far available for Cloud Foundry-based
applications can now be used independent of the underlying Cloud platform environment, enabling
consistent local testing of connectivity across environments.random-route
property by default in manifest.yml
by default as
part of all Cloud Foundry archetypes, so that the question for a unique hostname is not needed
anymore.frameworks.*
packages.GsonMessageBodyProvider
to a separate
com.sap.cloud.s4hana.frameworks:jaxrs-gson
module to avoid conflicts with other providers like Jackson.Edm.Binary
.
@Named
annotation to avoid conflicts between service classes using the same names in the VDM for OData and
BAPI.scp-cf-spring
archetype due to missing
@ComponentScan
annotation.February 1, 2018 - Maven Central - Release blog
com.sap.cloud.s4hana.frameworks:cxf
module to a new JAX-RS framework module
named com.sap.cloud.s4hana.frameworks:jaxrs
. Some classes have been moved
accordingly:
GsonMessageBodyProvider
from package com.sap.cloud.sdk.frameworks.cxf.jaxrs
to
com.sap.cloud.sdk.frameworks.jaxrs
,JaxRsErrorResponseBuilder
and
JaxRsExceptionMapper
from com.sap.cloud.sdk.frameworks.cxf.jaxrs
to
com.sap.cloud.sdk.frameworks.jaxrs.response
, andNotFoundExceptionMapper
and
WebApplicationExceptionMapper
from com.sap.cloud.sdk.frameworks.cxf.servlet.response.mapper
to
com.sap.cloud.sdk.frameworks.jaxrs.response.mapper
.TenantNotFoundException
to
TenantNotAvailableException
,
KeyStoreException
to
KeyStoreNotFoundException
,
andSecretStoreException
to
SecretStoreNotFoundException
.
TenantAccessException
and
UserAccessException
for a cleaner contract on the tenant and user accessors and facades; rename
TenantNotFoundException
to
TenantNotAvailableException
.
KeyStoreAccessException
and
SecretStoreAccessException
for a cleaner contract on the secret store accessor and facade; rename
KeyStoreException
to
KeyStoreNotFoundException
and SecretStoreException
to
SecretStoreNotFoundException
.
cloudplatform.*
packages.tomcat-catalina
lib from TomEE Maven plugin configuration in
application/pom.xml
generated by scp-cf-tomee
archetype in order to fix
local deployment issues (e.g.,
java.lang.NoSuchMethodError: org.apache.tomcat.util.ExceptionUtils.preload()V
) on some
developer machines.RequestContextListeners
for SAP Cloud Platform, Neo to avoid
failing JNDI lookups in non-container managed threads.HystrixUtil.getUserIsolatedKey
not considering tenant context (this may have caused circuit breakers to trigger for users with the
same name across different tenants).FacadeLocator
.January 18, 2018 - Maven Central - Release blog
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
).DestinationType
is now an enum instead of a class to better reflect the available destination types.com.sap.cloud.s4hana.archetypes:scp-neo-javaee7
for Java EE 7 on SAP
Cloud Platform Neo.FeatureToggleServlet
.
SchemaPerTenantProvisioner
for liquibase.LogInputSanitizer
that can be used to prevent log forging.
LogInputSanitizer
comes with an END_OF_LOG
token (by default:
(END OF LOG ENTRY)
) that will be appended to the end of each log entry.DestinationType
,
AuthenticationType
,
and
ProxyType
now provide methods for handling conversion from and to String
identifiers.AuthenticationType
enum values which are available on SAP Cloud Platform Neo and/or Cloud Foundry.Destination
interface: improve contract on some methods that may throw a DestinationAccessException
and add method getDescription()
.newTenantIsolatedOrGlobalKey
to CacheKey
.getTenantIsolatedOrGlobalKey
to HystrixUtil
.com.sap.cloud.s4hana.cloudplatform:concurrency-scp-neo
.MockUtil.mockErpServer
and
MockUtil.mockServer
.
ClientAndServer
object, the affected
MockUtil
methods now return a WireMockRule
.toString
method of destinations now replaces sensitive information such as
passwords with the String (hidden)
.December 21, 2017 - Maven Central - Release blog
to[NavigationProperty]
to [navigationProperty]
in order to improve
readability.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).BusinessPartner.BUSINESS_PARTNER_U_U_ID
has been renamed to
BusinessPartner.BUSINESS_PARTNER_UUID
).select
method of fluent helpers. Please note that there is no separate expand method.getAllBusinessPartner().select( BusinessPartner.TO_BUSINESS_PARTNER_ROLE, BusinessPartner.TO_BUSINESS_PARTNER_ADDRESS.select(BusinessPartnerAddress.COUNTRY) )to retrieve all business partners with their roles (all fields of role) and the country field of their addresses.
BusinessPartner.builder().businessPartnerAddress(...)
to add addresses while
constructing an entity.set[NavigationProperty]
and
add[NavigationProperty]
, no longer attempt to fetch the associated entities first.com.sap.cloud.sdk.s4hana.connectivity.rfc
and
com.sap.cloud.sdk.result
).
doCommit
in BapiQuery and RfcQuery to
isPerformingTransactionalCommit
.
doCommit
is now deprecated.LocalDate
and
LocalTime
when accessing BAPI and RFM results.AuditLoggingStateRepository
(Togglz integration).AutorizationApiDestination
to AuthorizationApiDestination
.December 7, 2017 - Maven Central - Release blog
getField
to
getCustomField
(hasCustomField
,
getCustomFieldNames
)
in order to clearly indicate that they deal with custom fields (i.e., extensions in
S/4HANA).get[NavigationProperty]OrNull
and get[NavigationProperty]OrFetch
(examples:
BusinessPartner.getBusinessPartnerAddressOrFetch
and
BusinessPartner.getBusinessPartnerAddressOrNull
).
set[NavigationProperty]
(to overwrite)
and, in case of 1:n associations, add[NavigationProperty]
(examples:
BusinessPartner.setBusinessPartnerAddress
and
BusinessPartner.addBusinessPartnerAddress
).
setCustomField
.
ODataVdmErrorResultHandler
used by default in all VDM operations exposes more information about exceptions that occur during
calls of the VDM.getCustomFields
returns a map of all custom fields of an entity and their values. November 23, 2017 - Maven Central - Release blog
_RFC
, for example,
ErpQueryEndpoint_RFC
.
See the explanation of the different options for the ErpConfigContext.
cx-server
script.November 9, 2017 - Maven Central
new
or inject them if using a JSR 330
compliant framework.
This simplifies testing and extensibility.
Each service class provides a default implementation starting with prefix
"Default"
.
void
instead of the instance itself.
Use the builder()
methods instead.
createBusinessPartner
in class
BusinessPartnerService
).execute
methods:
execute
with an
ErpEndpoint
argumentexecute
without any parameter. In this case the default
ErpConfigContext
is considered.getField
method of the derived
entity class.
hasField
and getFieldNames
can be used to determine which fields are
available.void
instead of instance.
Use the respective builder()
methods instead.
ErpEndpoint
and
ErpConfigContext
.October 26, 2017 - Maven Central
scp-neo-javaee6
archetype. It is strongly encouraged for Maven projects using
starter parents to migrate to explicit configuration
of properties and plugins.
trustStorePassword
to
mockDestination()
and
mockErpDestination()
.
To migrate to these methods, set
trustStorePassword
to
null
where ever previous versions of these methods were called.
ErpSystemInfo
.
scp-neo-maven-plugin
in the
scp-neo-javaee6
archetype uses a non-existing version. Please use version
1.2.0
instead of the declared version
1.2.0-SNAPSHOT
when generating a new project from this archetype.getTrustStorePassword()
to
Destination
.
newUserOrTenantIsolatedKey()
to
CacheKey
for a more graceful construction.getUserOrTenantIsolatedKey()
to
HystrixUtil
to more gracefully obtain a
Command
key.withErrorHandler()
and
toQuery()
methods in the OData virtual data model.mockErpServer()
method with
destinationName
parameter.SapClient
optional in
mockErpServer()
methods.CacheKey
.
ByKeyFluentHelper
.ErpEndpoint
)
to enable easier mocking.QueryExecutionMeasurements
to be measured as request building duration.ODataVdmErrorResultHandler
to extend
DefaultErrorResultHandler
instead of implementing
ErrorResultHandler
.mockErpDestination()
adding a
sap-client
header which ignores the
SapClient
in the
ErpConfigContext
.
October 12, 2017 - Maven Central
Details on the incompatible changes can be found here.
toQuery()
method to all service classes of the S/4HANA virtual data model for OData.
ODataQuery
without executing it.
ODataVdmErrorResultHandler
to provide more meaningful OData error messages.
index.html
to web application root of all archetypes.finalName
in web descriptor of
scp-neo-javaee6
archetype.ConnectionManager
in
DestinationsRequestContextListener
.
getByKey()
methods of the S/4HANA virtual data model for OData.September 29, 2017 - Maven Central
fetch
instead of
get
.
For example, a property that was previously named
getItem()
is now called
fetchItem()
.
DestinationType
to represent different destination types.
GenericDestination
as generic base interface for all destination types.
RfcDestination
to represent
RFC
destinations.
DestinationAccessor
for additional destination types.
destinations
environment variable. For details, see
ScpCfDestinationFacade
.
mvn tomee:run
and
mvn jetty:run
in TomEE and Tomcat archetypes for Cloud Foundry.DestinationAccessor
now throws
DestinationOAuthTokenException
for missing OAuth tokens.
MockUtil
now throws
TestConfigurationError
instead of
ShouldNotHappenException
for test configuration issues.
MockUtil
now redirects audit logs to the default test log instead of ignoring them.
compile
instead of
provided
.September 14, 2017 - Maven Central