libeufin

Integration and sandbox testing for FinTech APIs and data formats
Log | Files | Refs | Submodules | README | LICENSE

commit 886857244fa220352d9f9745a2e3401a2436a770
parent 32124aafb399b6b2faa6e8581b07fbb2646244fb
Author: Florian Dold <florian.dold@gmail.com>
Date:   Tue,  5 Nov 2019 22:22:01 +0100

HTD order type JAXB and test

Diffstat:
Msandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt | 28++++++++++++++++++++++++++++
Msandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HTDResponseOrderData.kt | 180++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
Msandbox/src/test/kotlin/EbicsMessagesTest.kt | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 260 insertions(+), 6 deletions(-)

diff --git a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt @@ -179,4 +179,32 @@ class EbicsTypes private constructor() { @get:XmlSchemaType(name = "token") lateinit var encryptionVersion: String } + + @XmlAccessorType(XmlAccessType.NONE) + class FileFormatType { + @get:XmlAttribute(name = "CountryCode") + @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class) + lateinit var language: String + + @get:XmlValue + @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class) + lateinit var value: String + } + + /** + * Generic key-value pair. + */ + @XmlAccessorType(XmlAccessType.NONE) + @XmlType(name = "", propOrder = ["name", "value"]) + class Parameter { + @get:XmlAttribute(name = "Type", required = true) + lateinit var type: String + + @get:XmlElement(name = "Name", required = true) + lateinit var name: String + + @get:XmlElement(name = "Value", required = true) + lateinit var value: String + + } } \ No newline at end of file diff --git a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HTDResponseOrderData.kt b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HTDResponseOrderData.kt @@ -1,5 +1,6 @@ package tech.libeufin.schema.ebics_h004 +import java.security.Permission import javax.xml.bind.annotation.* @XmlAccessorType(XmlAccessType.NONE) @@ -13,21 +14,188 @@ class HTDResponseOrderData { lateinit var userInfo: UserInfo @XmlAccessorType(XmlAccessType.NONE) + @XmlType(name = "", propOrder = ["addressInfo", "bankInfo", "accountInfoList", "orderInfoList"]) class PartnerInfo { + @get:XmlElement(name = "AddressInfo", required = true) + lateinit var addressInfo: AddressInfo + + @get:XmlElement(name = "BankInfo", required = true) + lateinit var bankInfo: BankInfo + + @get:XmlElement(name = "AccountInfo", required = true) + var accountInfoList: List<AccountInfo>? = null + + @get:XmlElement(name = "OrderInfo") + lateinit var orderInfoList: List<AuthOrderInfoType> + } + + @XmlAccessorType(XmlAccessType.NONE) + @XmlType( + name = "", + propOrder = ["orderType", "fileFormat", "transferType", "orderFormat", "description", "numSigRequired"] + ) + class AuthOrderInfoType { + @get:XmlElement(name = "OrderType") + lateinit var orderType: String + + @get:XmlElement(name = "FileFormat") + val fileFormat: EbicsTypes.FileFormatType? = null + + @get:XmlElement(name = "TransferType") + lateinit var transferType: String + + @get:XmlElement(name = "OrderFormat", required = false) + var orderFormat: String? = null + + @get:XmlElement(name = "Description") + lateinit var description: String + + @get:XmlElement(name = "NumSigRequired") + var numSigRequired: Int? = null + + } + @XmlAccessorType(XmlAccessType.NONE) + class UserIDType { + @get:XmlValue + lateinit var value: String; + + @get:XmlAttribute(name = "Status") + var status: Int? = null } @XmlAccessorType(XmlAccessType.NONE) + @XmlType(name = "", propOrder = ["userID", "name", "permissionList"]) class UserInfo { + @get:XmlElement(name = "UserID", required = true) + lateinit var userID: UserIDType - @get:XmlElement(name = "AddressInfo", required = true) - lateinit var addressInfo: AddressInfo + @get:XmlElement(name = "Name") + var name: String? = null - @get:XmlElement(name = "BankInfo", required = true) - lateinit var bankInfo: BankInfo + @get:XmlElement(name = "Permission", type = UserPermission::class) + var permissionList: List<UserPermission>? = null + } + + @XmlAccessorType(XmlAccessType.NONE) + @XmlType(name = "", propOrder = ["orderTypes", "fileFormat", "accountID", "maxAmount"]) + class UserPermission { + @get:XmlAttribute(name = "AuthorizationLevel") + var authorizationLevel: String? = null + + @get:XmlElement(name = "OrderTypes") + var orderTypes: String? = null + + @get:XmlElement(name = "FileFormat") + val fileFormat: EbicsTypes.FileFormatType? = null + + @get:XmlElement(name = "AccountID") + val accountID: String? = null + + @get:XmlElement(name = "MaxAmount") + val maxAmount: String? = null + } + + @XmlAccessorType(XmlAccessType.NONE) + @XmlType(name = "", propOrder = ["name", "street", "postCode", "city", "region", "country"]) + class AddressInfo { + @get:XmlElement(name = "Name") + var name: String? = null + + @get:XmlElement(name = "Street") + var street: String? = null - class AddressInfo - class BankInfo + @get:XmlElement(name = "PostCode") + var postCode: String? = null + + @get:XmlElement(name = "City") + var city: String? = null + + @get:XmlElement(name = "Region") + var region: String? = null + + @get:XmlElement(name = "Country") + var country: String? = null + } + + + @XmlAccessorType(XmlAccessType.NONE) + class BankInfo { + @get:XmlElement(name = "HostID") + lateinit var hostID: String + + @get:XmlElement(type = EbicsTypes.Parameter::class) + var parameters: List<EbicsTypes.Parameter>? = null + } + + @XmlAccessorType(XmlAccessType.NONE) + @XmlType(name = "", propOrder = ["accountNumberList", "bankCodeList", "accountHolder"]) + class AccountInfo { + @get:XmlAttribute(name = "Currency") + var currency: String? = null + + @get:XmlAttribute(name = "ID") + lateinit var id: String + + @get:XmlAttribute(name = "Description") + var description: String? = null + + @get:XmlElements( + XmlElement(name = "AccountNumber", type = GeneralAccountNumber::class), + XmlElement(name = "NationalAccountNumber", type = NationalAccountNumber::class) + ) + var accountNumberList: List<AbstractAccountNumber>? = null + + @get:XmlElements( + XmlElement(name = "BankCode", type = GeneralBankCode::class), + XmlElement(name = "NationalBankCode", type = NationalBankCode::class) + ) + var bankCodeList: List<AbstractBankCode>? = null + + @get:XmlElement(name = "AccountHolder") + var accountHolder: String? = null + } + + interface AbstractAccountNumber + + @XmlAccessorType(XmlAccessType.NONE) + class GeneralAccountNumber : AbstractAccountNumber { + @get:XmlAttribute(name = "international") + var international: Boolean = false + + @get:XmlValue + lateinit var value: String + } + + @XmlAccessorType(XmlAccessType.NONE) + class NationalAccountNumber : AbstractAccountNumber { + @get:XmlAttribute(name = "format") + lateinit var format: String + + @get:XmlValue + lateinit var value: String + } + + interface AbstractBankCode + + @XmlAccessorType(XmlAccessType.NONE) + class GeneralBankCode : AbstractBankCode { + @get:XmlAttribute(name = "prefix") + var prefix: String? = null + + @get:XmlAttribute(name = "international") + var international: Boolean = false + + @get:XmlValue + lateinit var value: String + } + + @XmlAccessorType(XmlAccessType.NONE) + class NationalBankCode : AbstractBankCode { + @get:XmlValue + lateinit var value: String + @get:XmlAttribute(name = "format") + lateinit var format: String } } diff --git a/sandbox/src/test/kotlin/EbicsMessagesTest.kt b/sandbox/src/test/kotlin/EbicsMessagesTest.kt @@ -172,4 +172,62 @@ class EbicsMessagesTest { val text = classLoader.getResource("hpb_request.xml")!!.readText() XMLUtil.convertStringToJaxb<EbicsNpkdRequest>(text) } + + @Test + fun testHtd() { + val htd = HTDResponseOrderData().apply { + this.partnerInfo = HTDResponseOrderData.PartnerInfo().apply { + this.accountInfoList = listOf( + HTDResponseOrderData.AccountInfo().apply { + this.id = "acctid1" + this.accountHolder = "Mina Musterfrau" + this.accountNumberList = listOf( + HTDResponseOrderData.GeneralAccountNumber().apply { + this.international = true + this.value = "AT411100000237571500" + } + ) + this.currency = "EUR" + this.description = "some account" + this.bankCodeList = listOf( + HTDResponseOrderData.GeneralBankCode().apply { + this.international = true + this.value = "ABAGATWWXXX" + } + ) + } + ) + this.addressInfo = HTDResponseOrderData.AddressInfo().apply { + this.name = "Foo" + } + this.bankInfo = HTDResponseOrderData.BankInfo().apply { + this.hostID = "MYHOST" + } + this.orderInfoList = listOf( + HTDResponseOrderData.AuthOrderInfoType().apply { + this.description = "foo" + this.orderType = "CCC" + this.orderFormat = "foo" + this.transferType = "Upload" + } + ) + } + this.userInfo = HTDResponseOrderData.UserInfo().apply { + this.name = "Some User" + this.userID = HTDResponseOrderData.UserIDType().apply { + this.status = 2 + this.value = "myuserid" + } + this.permissionList = listOf( + HTDResponseOrderData.UserPermission().apply { + this.orderTypes = "CCC ABC" + } + ) + } + } + + val str = XMLUtil.convertJaxbToString(htd) + println(str) + assert(XMLUtil.validateFromString(str)) + } } \ No newline at end of file