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:
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