2022.12 (December 2022)

SAS Business Orchestration Services on the SAS Viya 4 Platform

SAS Business Orchestration Services is now available on the SAS Viya 4 platform, running on Kubernetes. This increases the frequency that new features, fixes, and security updates can be made available to you. The following additional enhancements are available in this release:

  • Apache Camel is upgraded to version 3.14.4.
  • Spring Boot is upgraded to version 2.5.
  • Java Runtime is upgraded to Java 11.
  • Jasypt support is being discontinued in favor of cloud vault storage.

The SAS Viya 4 platform deployment of SAS Business Orchestration Services now runs as a pod in your Kubernetes environment, with the following impacts:

  • You deploy SAS Business Orchestration Services to your Kubernetes environment following standard SAS Viya 4 platform deployment procedures.
  • You provide your routes, beans, JAR files, properties files, and other configuration content to SAS Business Orchestration Services using an init container.
  • SAS Business Orchestration Services sends logging information to standard output (stdout) so that you can view and manage logging information using Kubernetes log tools.
  • Kubernetes automatically manages the life cycle of SAS Business Orchestration Services. You do not need to start or stop SAS Business Orchestration Services using a command-line script.
  • You might need to configure ingress rules to allow SAS Business Orchestration Services to connect to systems that are running outside your Kubernetes environment.

Apache Camel Upgrade

The version of Apache Camel that is included with SAS Business Orchestration Services has changed from 3.4.4 to 3.14.4. If you previously used JAR files that depend on Apache Camel 3.4.4 with an earlier version of SAS Business Orchestration Services, you now need to provide versions of those JAR files that are compatible with Apache Camel 3.14.4. You might need to update the syntax in your routes to match the syntax that is required by Apache Camel 3.14.4.

For more information about Apache Camel and upgrades from previous Apache Camel versions, see the following resources:

TipSAS strongly recommends that you review the Apache Camel Migration and Upgrade Guide for a complete list of the changes and migrations needed.

Changes That Are Required Following the Migration from SAS Viya 3.5 to the SAS Viya 4 Platform

Update Required to the odeLoadBalancerFactory Bean

A typographical error has been corrected in the bean named odeLoadBalancerFactory that references class com.sas.finance.fraud.ol.monitor.OdesDynamicFailoverLoadbalancerFactory. Correct the bean argument periodeInSec to periodInSec.

<constructor-arg name="periodInSec" value="30"/>

Using Multiple Simple Expressions within a Dynamic Endpoint Definition

If you use two simple expressions within a dynamic endpoint definition, then an invalid endpoint is generated. Here is an example of two simple expressions:

<route>
   <toD 
uri
="https:$simple{exchangeProperty.testconfig[processphoto-api-base-url]}?userToken=$simple{exchangeProperty.X-   USERTOKEN}
&amp;
httpMethod=POST
&amp;
copyHeaders=false
&amp;
bridgeEndpoint=true"
/>
</route>

The above route generates an invalid endpoint by appending an additional HTTPS.

https://https:retailid-test.intellicheck.com/api/CamUploader/
ProcessPhoto?bridgeEndpoint=true©Headers=false&httpMethod=POST

If you need to use more than one simple expression within a dynamic endpoint definition, you should provide the solution within Groovy. In the following example, the query string userToken has been set like any of the other message headers.

<route>
   <toD 
uri
="https:$simple{exchangeProperty.intellicheckConfig[processphoto-api-base-url]}?httpMethod=POST
&amp;
copyHeaders=false
&amp;
bridgeEndpoint=true"
/>
</route>

Update Required to the removeHeader EIP

If you use the removeHeader EIP in the XML DSL files of your routes, then you need to change the headerName attribute to name.

Here is an example before migration:

<removeHeader headerName="Authorization"/>

Here is an example after migration:

<removeHeader name="Authorization"/>

For more information about the removeHeader EIP, see the Camel documentation.

If you licensed any of the following third-party adapters and use the adapter sample route code, all instances of the removeHeader EIP need to be updated to use the name attribute.

  • Boku: routes/boku-route-test.xml (1 occurrence needs to be changed)
  • Intellicheck: routes/intellicheck-route-test.xml (5 occurrences need to be changed)
  • Iovation: routes/iovation-route-test.xml (2 occurrences need to be changed)
  • Prove: routes/payfone-route-test.xml (2 occurrences need to be changed)

Changes Affected by a Jackson Library Upgrade

The Jackson library is upgraded. This version of the library requires JavaTimeModule when LocalDate types are used. This module gets automatically registered by Spring Boot when you add the jackson-datatype-jsr310 dependency as follows:

compile 
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:
$
{jacksonDatatypeJsrVersion
}
"

The following example shows a verbose representation of a date in JSON when you use an older version of Jackson:

"trgDate5":{"year":2022,"month":"AUGUST","era":"CE","dayOfYear":217,"dayOfWeek":"FRIDAY","leapYear":false,"dayOfMonth":5,"monthValue":8,"chronology":{"id":"ISO","calendarType":"iso8601"}}

However, with the new version of Jackson, the default date format is changed and LocalDate is now serialized as follows:

"trgDate5":"2020-12-24"

The above is the ISO standard format. However, with the custom data type converter you can still convert dates to the legacy format, if needed.

Legacy Mode Change

If you use SOAP in any of your configurations, you need to add additional JAR files. You can download these files from their respective maven repository and include them in the lib directory.

  • javax.xml.soap-3.1.1.jar
  • javax.xml.soap-api-1.4.0.jar
  • saaj-api-1.3.5.jar
  • saaj-impl-1.4.0.jar
Last updated: September 11, 2026