This project contains a SOAP client library that can be used to call Symitar web services. WSDLs and XSDs are located
in: src/main/resources/wsdl
This project can be utilized in your Backbase integration services as a Maven dependency. Simply include the following
maven coordinates in the dependency
section of your service's pom.xml
<groupId>com.backbase.accelerators</groupId>
<artifactId>symitar-core-banking-client</artifactId>
<version>1.0.0</version>
From the root directory of this project, run:
mvn clean install
This will compile the project and generate Java classes from the WSDLs and XSDs in the resources folder. The generated
classes can be found in: target/generated-sources
Properties should be defined in your Backbase integration service as follows. Please obtain actual configuration values from your customer.
symitar:
client:
baseUrl: http://symitar.webservice.host:8087/SymXchange/2020.00
admin-credientials: ADMIN_CREDENTIALS
device-type: DEVICE_TYPE
device-number: 12345
@Data
@Configuration
@ConfigurationProperties("symitar.client")
public class SymitarCoreBankingClientProperties {
private String baseUrl;
private String adminCredentials;
private String deviceType;
private short deviceNumber;
public SymitarRequestSettings toSymitarRequestSettings() {
/* This example uses AdministrativeCredentials, but there are other credential types such as
UserNumberCredentials, TokenCredentials, AccountNumberCredentials, etc.
Review the AdminCredentialsChoice and CredentialsChoice classes to understand what options are available to set */
AdministrativeCredentials administrativeCredentials = new AdministrativeCredentials();
administrativeCredentials.setPassword(adminCredentials);
AdminCredentialsChoice adminCredentialsChoice = new AdminCredentialsChoice();
adminCredentialsChoice.setAdministrativeCredentials(administrativeCredentials);
CredentialsChoice credentialsChoice = new CredentialsChoice();
credentialsChoice.setAdministrativeCredentials(administrativeCredentials);
DeviceInformation deviceInformation = new DeviceInformation();
deviceInformation.setDeviceNumber(deviceNumber);
deviceInformation.setDeviceType(deviceType);
SymitarRequestSettings symitarRequestSettings = new SymitarRequestSettings();
symitarRequestSettings.setBaseUrl(baseUrl);
symitarRequestSettings.setAdminCredentialsChoice(adminCredentialsChoice);
symitarRequestSettings.setCredentialsChoice(credentialsChoice);
symitarRequestSettings.setDeviceInformation(deviceInformation);
symitarRequestSettings.setMessageId(UUID.randomUUID().toString());
return symitarRequestSettings;
}
}
The below example wires up the AccountClient
, TransactionClient
and TransferClient
as Spring beans.
@Configuration
public class SymitarCoreBankingClientConfiguration {
@Bean
@SneakyThrows
public AccountClient accountClient(SymitarCoreBankingClientProperties symitarCoreBankingClientProperties) {
return new AccountClient(
getAccountService(symitarCoreBankingClientProperties),
symitarCoreBankingClientProperties.toSymitarRequestSettings());
}
@Bean
@SneakyThrows
public TransactionClient transactionClient(SymitarCoreBankingClientProperties symitarCoreBankingClientProperties) {
return new TransactionClient(
getAccountService(symitarCoreBankingClientProperties),
symitarCoreBankingClientProperties.toSymitarRequestSettings());
}
@Bean
@SneakyThrows
public TransferClient transferClient(SymitarCoreBankingClientProperties symitarCoreBankingClientProperties) {
return new TransferClient(
getAccountService(symitarCoreBankingClientProperties),
getTransactionsService(symitarCoreBankingClientProperties),
symitarCoreBankingClientProperties.toSymitarRequestSettings());
}
@SneakyThrows
private AccountService getAccountService(SymitarCoreBankingClientProperties symitarCoreBankingClientProperties) {
String url = buildFinalUrl(symitarCoreBankingClientProperties.getBaseUrl(), Endpoints.ACCOUNT_ENDPOINT);
return new AccountService_Service(new URL(url)).getAccountServicePort();
}
@SneakyThrows
private TransactionsService getTransactionsService(SymitarCoreBankingClientProperties symitarCoreBankingClientProperties) {
String url = buildFinalUrl(symitarCoreBankingClientProperties.getBaseUrl(), Endpoints.TRANSACTIONS_ENDPOINT);
return new TransactionsService_Service(new URL(url)).getTransactionsServicePort();
}
private String buildFinalUrl(String baseUrl, String endpoint) {
return baseUrl.concat(endpoint);
}
}
The SymitarRequestSettings
supports additional nested configuration settings for the following:
- Stop check payments
- Wire transfers
This is done to promote feature-specific configurability that may vary across customers. For example, a stop check
payment fee withdrawal code for one institution may be 1
, but for another institution it may be 3
.
Leveraging the example above, you can define additional properties in your application.yml
as follows (this example
will use stop check payments):
symitar:
client:
baseUrl: http://symitar.webservice.host:8087/SymXchange/2020.00
admin-password: ADMIN_PASSWORD
device-type: DEVICE_TYPE
device-number: 12345
stopCheckPaymentOptions: # Adding stop check payment properties
withdrawalFeeAmount: 3.00
withdrawalFeeReasonText: Withdrawal fee for stop check payment
withdrawalFeeCode: 1
generalLedgerClearingCode: 33
And update SymitarCoreBankingClientProperties
:
@Data
@Configuration
@ConfigurationProperties("symitar.client")
public class SymitarCoreBankingClientProperties {
private String baseUrl;
private String adminPassword;
private String deviceType;
private short deviceNumber;
private StopCheckPaymentOptions stopCheckPaymentOptions; // New class member to bind application.yml properties to
// Static nested class to hold stop check payment configuration
@Data
public static class StopCheckPaymentOptions {
private BigDecimal withdrawalFeeAmount;
private String withdrawalFeeReasonText;
private short withdrawalFeeCode;
private short generalLedgerClearingCode;
}
public SymitarRequestSettings toSymitarRequestSettings() {
AdministrativeCredentials administrativeCredentials = new AdministrativeCredentials();
administrativeCredentials.setPassword(adminPassword);
AdminCredentialsChoice adminCredentialsChoice = new AdminCredentialsChoice();
adminCredentialsChoice.setAdministrativeCredentials(administrativeCredentials);
CredentialsChoice credentialsChoice = new CredentialsChoice();
credentialsChoice.setAdministrativeCredentials(administrativeCredentials);
DeviceInformation deviceInformation = new DeviceInformation();
deviceInformation.setDeviceNumber(deviceNumber);
deviceInformation.setDeviceType(deviceType);
// Mapping stop check payment properties from application.yml to SymitarRequestSettings.StopCheckPaymentSettings object
SymitarRequestSettings.StopCheckPaymentSettings stopCheckPaymentSettings = new SymitarRequestSettings.StopCheckPaymentSettings();
stopCheckPaymentSettings.setWithdrawalFeeAmount(stopCheckPaymentOptions.getWithdrawalFeeAmount());
stopCheckPaymentSettings.setWithdrawalFeeReasonText(stopCheckPaymentOptions.getWithdrawalFeeReasonText());
stopCheckPaymentSettings.setWithdrawalFeeCode(stopCheckPaymentOptions.getWithdrawalFeeCode());
stopCheckPaymentSettings.setGeneralLedgerClearingCode(stopCheckPaymentOptions.getGeneralLedgerClearingCode());
SymitarRequestSettings symitarRequestSettings = new SymitarRequestSettings();
symitarRequestSettings.setBaseUrl(baseUrl);
symitarRequestSettings.setAdminCredentialsChoice(adminCredentialsChoice);
symitarRequestSettings.setCredentialsChoice(credentialsChoice);
symitarRequestSettings.setDeviceInformation(deviceInformation);
symitarRequestSettings.setMessageId(UUID.randomUUID().toString());
symitarRequestSettings.setStopCheckPaymentSettings(stopCheckPaymentSettings);
return symitarRequestSettings;
}
}
See SymitarRequestSettings.java
class for all available configuration settings.