[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libeufin] branch master updated: restructure JAXB
From: |
gnunet |
Subject: |
[libeufin] branch master updated: restructure JAXB |
Date: |
Tue, 05 Nov 2019 16:14:50 +0100 |
This is an automated email from the git hooks/post-receive script.
dold pushed a commit to branch master
in repository libeufin.
The following commit(s) were added to refs/heads/master by this push:
new f229468 restructure JAXB
f229468 is described below
commit f229468d6edc3511673f04d5f720100ef9ce2e55
Author: Florian Dold <address@hidden>
AuthorDate: Tue Nov 5 16:14:47 2019 +0100
restructure JAXB
---
.../src/main/kotlin/tech/libeufin/sandbox/DB.kt | 29 +-
.../src/main/kotlin/tech/libeufin/sandbox/Main.kt | 29 +-
.../ebics_h004/EbicsKeyManagementResponse.kt | 102 ++++
.../libeufin/schema/ebics_h004/EbicsMessages.kt | 634 ---------------------
.../libeufin/schema/ebics_h004/EbicsNpkdRequest.kt | 91 +++
.../libeufin/schema/ebics_h004/EbicsRequest.kt | 46 ++
.../libeufin/schema/ebics_h004/EbicsResponse.kt | 146 +++++
.../tech/libeufin/schema/ebics_h004/EbicsTypes.kt | 200 +++++++
.../schema/ebics_h004/EbicsUnsecuredRequest.kt | 93 +++
.../schema/ebics_h004/HIARequestOrderData.kt | 33 ++
.../schema/ebics_h004/HPBResponseOrderData.kt | 21 +
.../schema/ebics_h004/HTDResponseOrderData.kt | 33 ++
sandbox/src/test/kotlin/EbicsMessagesTest.kt | 18 +-
13 files changed, 816 insertions(+), 659 deletions(-)
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
index ad02887..74a2475 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/DB.kt
@@ -145,7 +145,7 @@ class EbicsHostEntity(id: EntityID<Int>) : IntEntity(id) {
* Subscribers table. This table associates users with partners
* and systems. Each value can appear multiple times in the same column.
*/
-object EbicsSubscribersTable: IntIdTable() {
+object EbicsSubscribersTable : IntIdTable() {
val userId = text("userID")
val partnerId = text("partnerID")
val systemId = text("systemID").nullable()
@@ -172,6 +172,33 @@ class EbicsSubscriberEntity(id: EntityID<Int>) :
IntEntity(id) {
}
+object EbicsDownloadTransactionsTable : IdTable<String>() {
+ override val id = text("transactionID").entityId()
+ val orderType = text("orderType")
+ val host = reference("host", EbicsHostsTable)
+ val subscriber = reference("subscriber", EbicsSubscribersTable)
+ val encodedResponse = blob("encodedResponse")
+ val orderID = text("orderID")
+ val numSegments = integer("numSegments")
+ val segmentSize = integer("segmentSize")
+ val receiptReceived = bool("receiptReceived")
+}
+
+
+class EbicsDownloadTransactionEntity(id: EntityID<String>) :
Entity<String>(id) {
+ companion object : EntityClass<String,
EbicsDownloadTransactionEntity>(EbicsDownloadTransactionsTable)
+
+ var orderType by EbicsDownloadTransactionsTable.orderType
+ var host by EbicsDownloadTransactionsTable.host
+ var subscriber by EbicsDownloadTransactionsTable.host
+ var encodedResponse by EbicsDownloadTransactionsTable.encodedResponse
+ var orderID by EbicsDownloadTransactionsTable.orderID
+ var numSegments by EbicsDownloadTransactionsTable.numSegments
+ var segmentSize by EbicsDownloadTransactionsTable.segmentSize
+ var receiptReceived by EbicsDownloadTransactionsTable.receiptReceived
+}
+
+
fun dbCreateTables() {
Database.connect("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", driver =
"org.h2.Driver")
diff --git a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
index 85376ad..102bc58 100644
--- a/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
+++ b/sandbox/src/main/kotlin/tech/libeufin/sandbox/Main.kt
@@ -53,7 +53,6 @@ import java.security.interfaces.RSAPublicKey
import java.text.DateFormat
import javax.sql.rowset.serial.SerialBlob
import javax.xml.bind.JAXBContext
-import javax.xml.datatype.XMLGregorianCalendar
val logger: Logger = LoggerFactory.getLogger("tech.libeufin.sandbox")
@@ -75,32 +74,32 @@ private suspend fun
ApplicationCall.respondEbicsKeyManagement(
version = "H004"
header = EbicsKeyManagementResponse.Header().apply {
authenticate = true
- mutable =
EbicsKeyManagementResponse.Header.KeyManagementResponseMutableHeaderType().apply
{
+ mutable = EbicsKeyManagementResponse.MutableHeaderType().apply {
reportText = errorText
returnCode = errorCode
if (orderId != null) {
this.orderID = orderId
}
}
- _static = EbicsKeyManagementResponse.Header.EmptyStaticHeader()
+ _static = EbicsKeyManagementResponse.EmptyStaticHeader()
}
body = EbicsKeyManagementResponse.Body().apply {
- this.returnCode =
EbicsKeyManagementResponse.Body.ReturnCode().apply {
+ this.returnCode = EbicsKeyManagementResponse.ReturnCode().apply {
this.authenticate = true
this.value = bankReturnCode
}
if (dataTransfer != null) {
- this.dataTransfer =
EbicsKeyManagementResponse.Body.DataTransfer().apply {
- this.dataEncryptionInfo = DataEncryptionInfo().apply {
+ this.dataTransfer =
EbicsKeyManagementResponse.DataTransfer().apply {
+ this.dataEncryptionInfo =
EbicsTypes.DataEncryptionInfo().apply {
this.authenticate = true
this.transactionKey =
dataTransfer.encryptedTransactionKey
- this.encryptionPubKeyDigest =
DataEncryptionInfo.EncryptionPubKeyDigest().apply {
+ this.encryptionPubKeyDigest =
EbicsTypes.DataEncryptionInfo.EncryptionPubKeyDigest().apply {
this.algorithm =
"http://www.w3.org/2001/04/xmlenc#sha256"
this.version = "E002"
this.value = dataTransfer.pubKeyDigest
}
}
- this.orderData =
EbicsResponse.Body.DataTransferResponseType.OrderData().apply {
+ this.orderData =
EbicsKeyManagementResponse.OrderData().apply {
this.value = dataTransfer.encryptedData
}
}
@@ -149,7 +148,7 @@ data class EbicsHostInfo(
private suspend fun ApplicationCall.handleEbicsHia(header:
EbicsUnsecuredRequest.Header, orderData: ByteArray) {
- val keyObject =
EbicsOrderUtil.decodeOrderDataXml<HIARequestOrderDataType>(orderData)
+ val keyObject =
EbicsOrderUtil.decodeOrderDataXml<HIARequestOrderData>(orderData)
val encPubXml = keyObject.encryptionPubKeyInfo.pubKeyValue.rsaKeyValue
val authPubXml = keyObject.authenticationPubKeyInfo.pubKeyValue.rsaKeyValue
val encPub = CryptoUtil.loadRsaPublicKeyFromComponents(encPubXml.modulus,
encPubXml.exponent)
@@ -208,7 +207,7 @@ private suspend fun ApplicationCall.handleEbicsIni(header:
EbicsUnsecuredRequest
private suspend fun ApplicationCall.handleEbicsHpb(
ebicsHostInfo: EbicsHostInfo,
requestDocument: Document,
- header: EbicsNoPubKeyDigestsRequest.Header
+ header: EbicsNpkdRequest.Header
) {
val subscriberKeys = transaction {
val ebicsSubscriber =
@@ -235,18 +234,18 @@ private suspend fun ApplicationCall.handleEbicsHpb(
throw EbicsKeyManagementError("invalid signature", "90000");
}
val hpbRespondeData = HPBResponseOrderData().apply {
- this.authenticationPubKeyInfo = AuthenticationPubKeyInfoType().apply {
+ this.authenticationPubKeyInfo =
EbicsTypes.AuthenticationPubKeyInfoType().apply {
this.authenticationVersion = "X002"
- this.pubKeyValue = PubKeyValueType().apply {
+ this.pubKeyValue = EbicsTypes.PubKeyValueType().apply {
this.rsaKeyValue = RSAKeyValueType().apply {
this.exponent =
ebicsHostInfo.authenticationPublicKey.publicExponent.toByteArray()
this.modulus =
ebicsHostInfo.authenticationPublicKey.modulus.toByteArray()
}
}
}
- this.encryptionPubKeyInfo = EncryptionPubKeyInfoType().apply {
+ this.encryptionPubKeyInfo =
EbicsTypes.EncryptionPubKeyInfoType().apply {
this.encryptionVersion = "E002"
- this.pubKeyValue = PubKeyValueType().apply {
+ this.pubKeyValue = EbicsTypes.PubKeyValueType().apply {
this.rsaKeyValue = RSAKeyValueType().apply {
this.exponent =
ebicsHostInfo.encryptionPublicKey.publicExponent.toByteArray()
this.modulus =
ebicsHostInfo.encryptionPublicKey.modulus.toByteArray()
@@ -334,7 +333,7 @@ private suspend fun ApplicationCall.ebicsweb() {
respondText(strResp, ContentType.Application.Xml,
HttpStatusCode.OK)
}
"ebicsNoPubKeyDigestsRequest" -> {
- val requestObject =
requestDocument.toObject<EbicsNoPubKeyDigestsRequest>()
+ val requestObject = requestDocument.toObject<EbicsNpkdRequest>()
val hostInfo = ensureEbicsHost(requestObject.header.static.hostID)
when (requestObject.header.static.orderDetails.orderType) {
"HPB" -> handleEbicsHpb(hostInfo, requestDocument,
requestObject.header)
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsKeyManagementResponse.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsKeyManagementResponse.kt
new file mode 100644
index 0000000..7d4ec06
--- /dev/null
+++
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsKeyManagementResponse.kt
@@ -0,0 +1,102 @@
+package tech.libeufin.schema.ebics_h004
+
+import javax.xml.bind.annotation.*
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
+import javax.xml.bind.annotation.adapters.NormalizedStringAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(name = "", propOrder = ["header", "body"])
+@XmlRootElement(name = "ebicsKeyManagementResponse")
+class EbicsKeyManagementResponse {
+ @get:XmlElement(required = true)
+ lateinit var header: Header
+
+ @get:XmlElement(required = true)
+ lateinit var body: Body
+
+ @get:XmlAttribute(name = "Version", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var version: String
+
+ @get:XmlAttribute(name = "Revision")
+ var revision: Int? = null
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["_static", "mutable"])
+ class Header {
+ @get:XmlElement(name = "static", required = true)
+ lateinit var _static: EmptyStaticHeader
+
+ @get:XmlElement(required = true)
+ lateinit var mutable: MutableHeaderType
+
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["orderID", "returnCode", "reportText"])
+ class MutableHeaderType {
+ @get:XmlElement(name = "OrderID")
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ var orderID: String? = null
+
+ @get:XmlElement(name = "ReturnCode", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ lateinit var returnCode: String
+
+ @get:XmlElement(name = "ReportText", required = true)
+ @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
+ @get:XmlSchemaType(name = "normalizedString")
+ lateinit var reportText: String
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "")
+ class EmptyStaticHeader
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["dataTransfer", "returnCode",
"timestampBankParameter"])
+ class Body {
+ @get:XmlElement(name = "DataTransfer")
+ var dataTransfer: DataTransfer? = null
+
+ @get:XmlElement(name = "ReturnCode", required = true)
+ lateinit var returnCode: ReturnCode
+
+ @get:XmlElement(name = "TimestampBankParameter")
+ var timestampBankParameter: EbicsTypes.TimestampBankParameter? = null
+ }
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class ReturnCode {
+ @get:XmlValue
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var value: String
+
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["dataEncryptionInfo", "orderData"])
+ class DataTransfer {
+ @get:XmlElement(name = "DataEncryptionInfo")
+ var dataEncryptionInfo: EbicsTypes.DataEncryptionInfo? = null
+
+ @get:XmlElement(name = "OrderData", required = true)
+ lateinit var orderData: OrderData
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class OrderData {
+ @get:XmlValue
+ lateinit var value: ByteArray
+ }
+}
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsMessages.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsMessages.kt
deleted file mode 100644
index 964fdc7..0000000
--- a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsMessages.kt
+++ /dev/null
@@ -1,634 +0,0 @@
-/*
- * This file is part of LibEuFin.
- * Copyright (C) 2019 Stanisci and Dold.
-
- * LibEuFin is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation; either version 3, or
- * (at your option) any later version.
-
- * LibEuFin is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
- * Public License for more details.
-
- * You should have received a copy of the GNU Affero General Public
- * License along with LibEuFin; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>
- */
-
-package tech.libeufin.schema.ebics_h004
-
-import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
-import org.apache.xml.security.binding.xmldsig.SignatureType
-import org.w3c.dom.Element
-import java.math.BigInteger
-import java.util.*
-import javax.xml.bind.annotation.*
-import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
-import javax.xml.bind.annotation.adapters.HexBinaryAdapter
-import javax.xml.bind.annotation.adapters.NormalizedStringAdapter
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
-import javax.xml.datatype.XMLGregorianCalendar
-import javax.xml.namespace.QName
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "Product", propOrder = ["value"])
-class Product {
- @get:XmlValue
- @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
- lateinit var value: String
-
- @get:XmlAttribute(name = "Language", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var language: String
-
- @get:XmlAttribute(name = "InstituteID")
- @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
- var instituteID: String? = null
-}
-
-
-/**
- * Order details for the static EBICS header.
- */
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "OrderDetailsType", propOrder = ["orderType",
"orderAttribute"])
-class OrderDetails {
- @get:XmlElement(name = "OrderType", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var orderType: String
-
- @get:XmlElement(name = "OrderAttribute", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var orderAttribute: String
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(
- name = "StaticHeader",
- propOrder = ["hostID", "nonce", "timestamp", "partnerID", "userID",
"systemID", "product", "orderDetails", "securityMedium"]
-)
-class StaticHeader {
- @get:XmlElement(name = "HostID", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var hostID: String
-
- @get:XmlElement(name = "Nonce", type = String::class)
- @get:XmlJavaTypeAdapter(HexBinaryAdapter::class)
- @get:XmlSchemaType(name = "hexBinary")
- var nonce: ByteArray? = null
-
- @get:XmlElement(name = "Timestamp")
- @get:XmlSchemaType(name = "dateTime")
- var timestamp: XMLGregorianCalendar? = null
-
- @get:XmlElement(name = "PartnerID", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var partnerID: String
-
- @get:XmlElement(name = "UserID", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var userID: String
-
- @get:XmlElement(name = "SystemID")
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- var systemID: String? = null
-
- @get:XmlElement(name = "Product")
- val product: Product? = null
-
- @get:XmlElement(name = "OrderDetails", required = true)
- lateinit var orderDetails: OrderDetails
-
- @get:XmlElement(name = "SecurityMedium", required = true)
- lateinit var securityMedium: String
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "", propOrder = ["header", "body"])
-@XmlRootElement(name = "ebicsUnsecuredRequest")
-class EbicsUnsecuredRequest {
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["static", "mutable"])
- class Header {
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "")
- class EmptyMutableHeader
-
- @get:XmlElement(name = "static", required = true)
- lateinit var static: StaticHeader
-
- @get:XmlElement(required = true)
- lateinit var mutable: EmptyMutableHeader
-
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
- }
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["dataTransfer"])
- class Body {
- @get:XmlElement(name = "DataTransfer", required = true)
- lateinit var dataTransfer: UnsecuredDataTransfer
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["orderData"])
- class UnsecuredDataTransfer {
- @get:XmlElement(name = "OrderData", required = true)
- lateinit var orderData: OrderData
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "")
- class OrderData {
- @get:XmlValue
- lateinit var value: ByteArray
-
- @get:XmlAnyAttribute
- val otherAttributes = HashMap<QName, String>()
- }
- }
- }
-
- @get:XmlAttribute(name = "Version", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var version: String
-
- @get:XmlAttribute(name = "Revision")
- var revision: Int? = null
-
- @get:XmlElement(name = "header", required = true)
- lateinit var header: Header
-
- @get:XmlElement(required = true)
- lateinit var body: Body
-}
-
-@XmlAccessorType(XmlAccessType.NONE)
-class DataEncryptionInfo {
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
-
- @get:XmlElement(name = "EncryptionPubKeyDigest", required = true)
- lateinit var encryptionPubKeyDigest: EncryptionPubKeyDigest
-
- @get:XmlElement(name = "TransactionKey", required = true)
- lateinit var transactionKey: ByteArray
-
- @get:XmlAnyElement(lax = true)
- var any: List<Any>? = null
-
- @XmlAccessorType(XmlAccessType.NONE)
- class EncryptionPubKeyDigest {
- /**
- * Version of the *digest* of the public key.
- */
- @get:XmlAttribute(name = "Version", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var version: String
-
- @XmlAttribute(name = "Algorithm", required = true)
- @XmlSchemaType(name = "anyURI")
- lateinit var algorithm: String
-
- @get:XmlValue
- lateinit var value: ByteArray
- }
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(
- name = "ResponseMutableHeaderType",
- propOrder = ["transactionPhase", "segmentNumber", "orderID", "returnCode",
"reportText", "any"]
-)
-class EbicsResponseMutableHeaderType {
- @get:XmlElement(name = "TransactionPhase", required = true)
- @get:XmlSchemaType(name = "token")
- lateinit var transactionPhase: TransactionPhaseType
-
- @get:XmlElement(name = "SegmentNumber")
- var segmentNumber: SegmentNumber? = null
-
- @get:XmlElement(name = "OrderID")
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- var orderID: String? = null
-
- @get:XmlElement(name = "ReturnCode", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- lateinit var returnCode: String
-
- @get:XmlElement(name = "ReportText", required = true)
- @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
- @get:XmlSchemaType(name = "normalizedString")
- lateinit var reportText: String
-
- @get:XmlAnyElement(lax = true)
- var any: List<Any>? = null
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["value"])
- class SegmentNumber {
- @XmlValue
- lateinit var value: BigInteger
-
- @XmlAttribute(name = "lastSegment", required = true)
- var lastSegment: Boolean = false
- }
-}
-
-@Suppress("UNUSED_PARAMETER")
-enum class TransactionPhaseType(value: String) {
- @XmlEnumValue("Initialisation")
- INITIALISATION("Initialisation"),
-
- /**
- * Auftragsdatentransfer
- *
- */
- @XmlEnumValue("Transfer")
- TRANSFER("Transfer"),
-
- /**
- * Quittungstransfer
- *
- */
- @XmlEnumValue("Receipt")
- RECEIPT("Receipt");
-}
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "ResponseStaticHeaderType", propOrder = ["transactionID",
"numSegments"])
-class ResponseStaticHeaderType {
- @get:XmlElement(name = "TransactionID", type = String::class)
- @get:XmlJavaTypeAdapter(HexBinaryAdapter::class)
- @get:XmlSchemaType(name = "hexBinary")
- var transactionID: ByteArray? = null
-
- @get:XmlElement(name = "NumSegments")
- @get:XmlSchemaType(name = "positiveInteger")
- var numSegments: BigInteger? = null
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "")
-class TimestampBankParameter {
- @get:XmlValue
- lateinit var value: XMLGregorianCalendar
-
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "", propOrder = ["header", "authSignature", "body"])
-@XmlRootElement(name = "ebicsResponse")
-class EbicsResponse {
- @get:XmlElement(required = true)
- lateinit var header: EbicsResponse.Header
-
- @get:XmlElement(name = "AuthSignature", required = true)
- lateinit var authSignature: SignatureType
-
- @get:XmlElement(required = true)
- lateinit var body: Body
-
- @get:XmlAttribute(name = "Version", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var version: String
-
- @get:XmlAttribute(name = "Revision")
- var revision: Int? = null
-
- @get:XmlAnyAttribute
- var otherAttributes = HashMap<QName, String>()
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["_static", "mutable"])
- class Header {
- @get:XmlElement(name = "static", required = true)
- lateinit var _static: ResponseStaticHeaderType
-
- @get:XmlElement(required = true)
- lateinit var mutable: EbicsResponseMutableHeaderType
-
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
- }
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["dataTransfer", "returnCode",
"timestampBankParameter"])
- class Body {
- @get:XmlElement(name = "DataTransfer")
- var dataTransfer: DataTransferResponseType? = null
-
- @get:XmlElement(name = "ReturnCode", required = true)
- lateinit var returnCode: ReturnCode
-
- @get:XmlElement(name = "TimestampBankParameter")
- var timestampBankParameter: TimestampBankParameter? = null
-
- @XmlAccessorType(XmlAccessType.NONE)
- class ReturnCode {
- @get:XmlValue
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var value: String
-
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
- }
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "DataTransferResponseType", propOrder =
["dataEncryptionInfo", "orderData", "any"])
- class DataTransferResponseType {
- @get:XmlElement(name = "DataEncryptionInfo")
- var dataEncryptionInfo: DataEncryptionInfo? = null
-
- @get:XmlElement(name = "OrderData", required = true)
- lateinit var orderData: OrderData
-
- @get:XmlAnyElement(lax = true)
- var any: List<Any>? = null
-
- @XmlAccessorType(XmlAccessType.NONE)
- class OrderData {
- @get:XmlValue
- lateinit var value: ByteArray
-
- @get:XmlAnyAttribute
- var otherAttributes = HashMap<QName, String>()
- }
- }
- }
-}
-
-
-@XmlType(
- name = "PubKeyValueType", propOrder = [
- "rsaKeyValue",
- "timeStamp"
- ]
-)
-@XmlAccessorType(XmlAccessType.NONE)
-class PubKeyValueType {
- @get:XmlElement(name = "RSAKeyValue", namespace =
"http://www.w3.org/2000/09/xmldsig#", required = true)
- lateinit var rsaKeyValue: RSAKeyValueType
-
- @get:XmlElement(name = "TimeStamp", required = false)
- @get:XmlSchemaType(name = "dateTime")
- var timeStamp: XMLGregorianCalendar? = null
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(
- name = "AuthenticationPubKeyInfoType", propOrder = [
- "x509Data",
- "pubKeyValue",
- "authenticationVersion"
- ]
-)
-class AuthenticationPubKeyInfoType {
- @get:XmlAnyElement()
- var x509Data: Element? = null
-
- @get:XmlElement(name = "PubKeyValue", required = true)
- lateinit var pubKeyValue: PubKeyValueType
-
- @get:XmlElement(name = "AuthenticationVersion", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- lateinit var authenticationVersion: String
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(
- name = "EncryptionPubKeyInfoType", propOrder = [
- "x509Data",
- "pubKeyValue",
- "encryptionVersion"
- ]
-)
-class EncryptionPubKeyInfoType {
- @get:XmlAnyElement()
- var x509Data: Element? = null
-
- @get:XmlElement(name = "PubKeyValue", required = true)
- lateinit var pubKeyValue: PubKeyValueType
-
- @get:XmlElement(name = "EncryptionVersion", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- lateinit var encryptionVersion: String
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(
- name = "HIARequestOrderDataType",
- propOrder = ["authenticationPubKeyInfo", "encryptionPubKeyInfo",
"partnerID", "userID", "any"]
-)
-@XmlRootElement(name = "HIARequestOrderData")
-class HIARequestOrderDataType {
- @get:XmlElement(name = "AuthenticationPubKeyInfo", required = true)
- lateinit var authenticationPubKeyInfo: AuthenticationPubKeyInfoType
-
- @get:XmlElement(name = "EncryptionPubKeyInfo", required = true)
- lateinit var encryptionPubKeyInfo: EncryptionPubKeyInfoType
-
- @get:XmlElement(name = "PartnerID", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- lateinit var partnerID: String
-
- @get:XmlElement(name = "UserID", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- lateinit var userID: String
-
- @get:XmlAnyElement(lax = true)
- var any: List<Any>? = null
-}
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "", propOrder = ["header", "body"])
-@XmlRootElement(name = "ebicsKeyManagementResponse")
-class EbicsKeyManagementResponse {
- @get:XmlElement(required = true)
- lateinit var header: Header
-
- @get:XmlElement(required = true)
- lateinit var body: Body
-
- @get:XmlAttribute(name = "Version", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var version: String
-
- @get:XmlAttribute(name = "Revision")
- var revision: Int? = null
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["_static", "mutable"])
- class Header {
- @get:XmlElement(name = "static", required = true)
- lateinit var _static: EmptyStaticHeader
-
- @get:XmlElement(required = true)
- lateinit var mutable: KeyManagementResponseMutableHeaderType
-
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "")
- class EmptyStaticHeader
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["orderID", "returnCode",
"reportText"])
- class KeyManagementResponseMutableHeaderType {
- @get:XmlElement(name = "OrderID")
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- var orderID: String? = null
-
- @get:XmlElement(name = "ReturnCode", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- @get:XmlSchemaType(name = "token")
- lateinit var returnCode: String
-
- @get:XmlElement(name = "ReportText", required = true)
- @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
- @get:XmlSchemaType(name = "normalizedString")
- lateinit var reportText: String
- }
- }
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["dataTransfer", "returnCode",
"timestampBankParameter"])
- class Body {
- @get:XmlElement(name = "DataTransfer")
- var dataTransfer: DataTransfer? = null
-
- @get:XmlElement(name = "ReturnCode", required = true)
- lateinit var returnCode: ReturnCode
-
- @get:XmlElement(name = "TimestampBankParameter")
- var timestampBankParameter: TimestampBankParameter? = null
-
- @XmlAccessorType(XmlAccessType.NONE)
- class ReturnCode {
- @get:XmlValue
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var value: String
-
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
- }
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["dataEncryptionInfo", "orderData"])
- class DataTransfer {
- @get:XmlElement(name = "DataEncryptionInfo")
- var dataEncryptionInfo: DataEncryptionInfo? = null
-
- @get:XmlElement(name = "OrderData", required = true)
- lateinit var orderData:
EbicsResponse.Body.DataTransferResponseType.OrderData
- }
- }
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "", propOrder = ["header", "authSignature", "body"])
-@XmlRootElement(name = "ebicsNoPubKeyDigestsRequest")
-class EbicsNoPubKeyDigestsRequest {
- @get:XmlAttribute(name = "Version", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var version: String
-
- @get:XmlAttribute(name = "Revision")
- var revision: Int? = null
-
- @get:XmlElement(name = "header", required = true)
- lateinit var header: Header
-
- @get:XmlElement(name = "AuthSignature", required = true)
- lateinit var authSignature: SignatureType
-
- @get:XmlElement(required = true)
- lateinit var body: EmptyBody
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "", propOrder = ["static", "mutable"])
- class Header {
- @get:XmlAttribute(name = "authenticate", required = true)
- var authenticate: Boolean = false
-
- @get:XmlElement(name = "static", required = true)
- lateinit var static: StaticHeader
-
- @get:XmlElement(required = true)
- lateinit var mutable: EmptyMutableHeader
-
- @XmlAccessorType(XmlAccessType.NONE)
- @XmlType(name = "")
- class EmptyMutableHeader
- }
-
- @XmlAccessorType(XmlAccessType.NONE)
- class EmptyBody
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "", propOrder = ["authenticationPubKeyInfo",
"encryptionPubKeyInfo", "hostID"])
-@XmlRootElement(name = "HPBResponseOrderData")
-class HPBResponseOrderData {
- @get:XmlElement(name = "AuthenticationPubKeyInfo", required = true)
- lateinit var authenticationPubKeyInfo: AuthenticationPubKeyInfoType
-
- @get:XmlElement(name = "EncryptionPubKeyInfo", required = true)
- lateinit var encryptionPubKeyInfo: EncryptionPubKeyInfoType
-
- @get:XmlElement(name = "HostID", required = true)
- @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
- lateinit var hostID: String
-}
-
-
-@XmlAccessorType(XmlAccessType.NONE)
-@XmlType(name = "", propOrder = ["partnerInfo", "userInfo"])
-@XmlRootElement(name = "HTDResponseOrderData")
-class HTDesponseOrderData {
- @get:XmlElement(name = "PartnerInfo", required = true)
- lateinit var partnerInfo: PartnerInfo
-
- @get:XmlElement(name = "UserInfo", required = true)
- lateinit var userInfo: UserInfo
-
- @XmlAccessorType(XmlAccessType.NONE)
- class PartnerInfo {
-
- }
-
- @XmlAccessorType(XmlAccessType.NONE)
- class UserInfo {
-
- @get:XmlElement(name = "AddressInfo", required = true)
- lateinit var addressInfo: AddressInfo
-
- @get:XmlElement(name = "BankInfo", required = true)
- lateinit var bankInfo: BankInfo
-
- class AddressInfo
- class BankInfo
-
- }
-}
\ No newline at end of file
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsNpkdRequest.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsNpkdRequest.kt
new file mode 100644
index 0000000..e079536
--- /dev/null
+++
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsNpkdRequest.kt
@@ -0,0 +1,91 @@
+package tech.libeufin.schema.ebics_h004
+
+import org.apache.xml.security.binding.xmldsig.SignatureType
+import javax.xml.bind.annotation.*
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+import javax.xml.datatype.XMLGregorianCalendar
+
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(name = "", propOrder = ["header", "authSignature", "body"])
+@XmlRootElement(name = "ebicsNoPubKeyDigestsRequest")
+class EbicsNpkdRequest {
+ @get:XmlAttribute(name = "Version", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var version: String
+
+ @get:XmlAttribute(name = "Revision")
+ var revision: Int? = null
+
+ @get:XmlElement(name = "header", required = true)
+ lateinit var header: Header
+
+ @get:XmlElement(name = "AuthSignature", required = true)
+ lateinit var authSignature: SignatureType
+
+ @get:XmlElement(required = true)
+ lateinit var body: EmptyBody
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["static", "mutable"])
+ class Header {
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+
+ @get:XmlElement(name = "static", required = true)
+ lateinit var static: StaticHeaderType
+
+ @get:XmlElement(required = true)
+ lateinit var mutable: EmptyMutableHeader
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(
+ name = "StaticHeader",
+ propOrder = ["hostID", "nonce", "timestamp", "partnerID", "userID",
"systemID", "product", "orderDetails", "securityMedium"]
+ )
+ class StaticHeaderType {
+ @get:XmlElement(name = "HostID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var hostID: String
+
+ @get:XmlElement(name = "Nonce", type = String::class)
+ @get:XmlJavaTypeAdapter(HexBinaryAdapter::class)
+ @get:XmlSchemaType(name = "hexBinary")
+ lateinit var nonce: ByteArray
+
+ @get:XmlElement(name = "Timestamp")
+ @get:XmlSchemaType(name = "dateTime")
+ var timestamp: XMLGregorianCalendar? = null
+
+ @get:XmlElement(name = "PartnerID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var partnerID: String
+
+ @get:XmlElement(name = "UserID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var userID: String
+
+ @get:XmlElement(name = "SystemID")
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ var systemID: String? = null
+
+ @get:XmlElement(name = "Product")
+ val product: EbicsTypes.Product? = null
+
+ @get:XmlElement(name = "OrderDetails", required = true)
+ lateinit var orderDetails: EbicsTypes.SimpleOrderDetails
+
+ @get:XmlElement(name = "SecurityMedium", required = true)
+ lateinit var securityMedium: String
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "")
+ class EmptyMutableHeader
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class EmptyBody
+}
\ No newline at end of file
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
new file mode 100644
index 0000000..544b7a9
--- /dev/null
+++ b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsRequest.kt
@@ -0,0 +1,46 @@
+package tech.libeufin.schema.ebics_h004
+
+import org.apache.xml.security.binding.xmldsig.SignatureType
+import javax.xml.bind.annotation.*
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(name = "", propOrder = ["header", "authSignature", "body"])
+@XmlRootElement(name = "ebicsRequest")
+class EbicsRequest {
+ @get:XmlElement(name = "header", required = true)
+ lateinit var header: Header
+
+ @get:XmlElement(name = "AuthSignature", required = true)
+ lateinit var authSignature: SignatureType
+
+ @get:XmlElement(name = "body")
+ lateinit var body: Body
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class Body {
+
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["static", "mutable"])
+ class Header {
+ @get:XmlElement(name = "static", required = true)
+ lateinit var static: StaticHeaderType
+
+ @get:XmlElement(required = true)
+ lateinit var mutable: MutableHeader
+
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+
+ }
+
+ class StaticHeaderType {
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "")
+ class MutableHeader {
+
+ }
+}
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
new file mode 100644
index 0000000..63e6d9f
--- /dev/null
+++ b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsResponse.kt
@@ -0,0 +1,146 @@
+package tech.libeufin.schema.ebics_h004
+
+import org.apache.xml.security.binding.xmldsig.SignatureType
+import java.math.BigInteger
+import javax.xml.bind.annotation.*
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter
+import javax.xml.bind.annotation.adapters.NormalizedStringAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+import javax.xml.namespace.QName
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(name = "", propOrder = ["header", "authSignature", "body"])
+@XmlRootElement(name = "ebicsResponse")
+class EbicsResponse {
+ @get:XmlElement(required = true)
+ lateinit var header: EbicsResponse.Header
+
+ @get:XmlElement(name = "AuthSignature", required = true)
+ lateinit var authSignature: SignatureType
+
+ @get:XmlElement(required = true)
+ lateinit var body: Body
+
+ @get:XmlAttribute(name = "Version", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var version: String
+
+ @get:XmlAttribute(name = "Revision")
+ var revision: Int? = null
+
+ @get:XmlAnyAttribute
+ var otherAttributes = HashMap<QName, String>()
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["_static", "mutable"])
+ class Header {
+ @get:XmlElement(name = "static", required = true)
+ lateinit var _static: StaticHeaderType
+
+ @get:XmlElement(required = true)
+ lateinit var mutable: MutableHeaderType
+
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["dataTransfer", "returnCode",
"timestampBankParameter"])
+ class Body {
+ @get:XmlElement(name = "DataTransfer")
+ var dataTransfer: DataTransferResponseType? = null
+
+ @get:XmlElement(name = "ReturnCode", required = true)
+ lateinit var returnCode: ReturnCode
+
+ @get:XmlElement(name = "TimestampBankParameter")
+ var timestampBankParameter: EbicsTypes.TimestampBankParameter? = null
+ }
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(
+ name = "ResponseMutableHeaderType",
+ propOrder = ["transactionPhase", "segmentNumber", "orderID",
"returnCode", "reportText", "any"]
+ )
+ class MutableHeaderType {
+ @get:XmlElement(name = "TransactionPhase", required = true)
+ @get:XmlSchemaType(name = "token")
+ lateinit var transactionPhase: EbicsTypes.TransactionPhaseType
+
+ @get:XmlElement(name = "SegmentNumber")
+ var segmentNumber: SegmentNumber? = null
+
+ @get:XmlElement(name = "OrderID")
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ var orderID: String? = null
+
+ @get:XmlElement(name = "ReturnCode", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ lateinit var returnCode: String
+
+ @get:XmlElement(name = "ReportText", required = true)
+ @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
+ @get:XmlSchemaType(name = "normalizedString")
+ lateinit var reportText: String
+
+ @get:XmlAnyElement(lax = true)
+ var any: List<Any>? = null
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["value"])
+ class SegmentNumber {
+ @XmlValue
+ lateinit var value: BigInteger
+
+ @XmlAttribute(name = "lastSegment", required = true)
+ var lastSegment: Boolean = false
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class OrderData {
+ @get:XmlValue
+ lateinit var value: ByteArray
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class ReturnCode {
+ @get:XmlValue
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var value: String
+
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "DataTransferResponseType", propOrder =
["dataEncryptionInfo", "orderData", "any"])
+ class DataTransferResponseType {
+ @get:XmlElement(name = "DataEncryptionInfo")
+ var dataEncryptionInfo: EbicsTypes.DataEncryptionInfo? = null
+
+ @get:XmlElement(name = "OrderData", required = true)
+ lateinit var orderData: OrderData
+
+ @get:XmlAnyElement(lax = true)
+ var any: List<Any>? = null
+ }
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "ResponseStaticHeaderType", propOrder = ["transactionID",
"numSegments"])
+ class StaticHeaderType {
+ @get:XmlElement(name = "TransactionID", type = String::class)
+ @get:XmlJavaTypeAdapter(HexBinaryAdapter::class)
+ @get:XmlSchemaType(name = "hexBinary")
+ var transactionID: ByteArray? = null
+
+ @get:XmlElement(name = "NumSegments")
+ @get:XmlSchemaType(name = "positiveInteger")
+ var numSegments: BigInteger? = null
+ }
+}
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
new file mode 100644
index 0000000..fa84ce1
--- /dev/null
+++ b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsTypes.kt
@@ -0,0 +1,200 @@
+/*
+ * This file is part of LibEuFin.
+ * Copyright (C) 2019 Stanisci and Dold.
+
+ * LibEuFin is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation; either version 3, or
+ * (at your option) any later version.
+
+ * LibEuFin is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
+ * Public License for more details.
+
+ * You should have received a copy of the GNU Affero General Public
+ * License along with LibEuFin; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>
+ */
+
+package tech.libeufin.schema.ebics_h004
+
+import org.apache.xml.security.binding.xmldsig.RSAKeyValueType
+import org.w3c.dom.Element
+import java.math.BigInteger
+import javax.xml.bind.annotation.*
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter
+import javax.xml.bind.annotation.adapters.NormalizedStringAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+import javax.xml.datatype.XMLGregorianCalendar
+
+
+/**
+ * EBICS type definitions that are shared between other requests / responses /
order types.
+ */
+class EbicsTypes private constructor() {
+ /**
+ * EBICS client product. Identifies the software that accesses the EBICS
host.
+ */
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "Product", propOrder = ["value"])
+ class Product {
+ @get:XmlValue
+ @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
+ lateinit var value: String
+
+ @get:XmlAttribute(name = "Language", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var language: String
+
+ @get:XmlAttribute(name = "InstituteID")
+ @get:XmlJavaTypeAdapter(NormalizedStringAdapter::class)
+ var instituteID: String? = null
+ }
+
+ /**
+ * Order details for the static EBICS header.
+ */
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "OrderDetailsType", propOrder = ["orderType",
"orderAttribute"])
+ class SimpleOrderDetails {
+ @get:XmlElement(name = "OrderType", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var orderType: String
+
+ @get:XmlElement(name = "OrderAttribute", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var orderAttribute: String
+ }
+
+
+
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class DataEncryptionInfo {
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+
+ @get:XmlElement(name = "EncryptionPubKeyDigest", required = true)
+ lateinit var encryptionPubKeyDigest: EncryptionPubKeyDigest
+
+ @get:XmlElement(name = "TransactionKey", required = true)
+ lateinit var transactionKey: ByteArray
+
+ @get:XmlAnyElement(lax = true)
+ var any: List<Any>? = null
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class EncryptionPubKeyDigest {
+ /**
+ * Version of the *digest* of the public key.
+ */
+ @get:XmlAttribute(name = "Version", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var version: String
+
+ @XmlAttribute(name = "Algorithm", required = true)
+ @XmlSchemaType(name = "anyURI")
+ lateinit var algorithm: String
+
+ @get:XmlValue
+ lateinit var value: ByteArray
+ }
+ }
+
+
+ @Suppress("UNUSED_PARAMETER")
+ enum class TransactionPhaseType(value: String) {
+ @XmlEnumValue("Initialisation")
+ INITIALISATION("Initialisation"),
+
+ /**
+ * Auftragsdatentransfer
+ *
+ */
+ @XmlEnumValue("Transfer")
+ TRANSFER("Transfer"),
+
+ /**
+ * Quittungstransfer
+ *
+ */
+ @XmlEnumValue("Receipt")
+ RECEIPT("Receipt");
+ }
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "")
+ class TimestampBankParameter {
+ @get:XmlValue
+ lateinit var value: XMLGregorianCalendar
+
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+ }
+
+
+
+ @XmlType(
+ name = "PubKeyValueType", propOrder = [
+ "rsaKeyValue",
+ "timeStamp"
+ ]
+ )
+ @XmlAccessorType(XmlAccessType.NONE)
+ class PubKeyValueType {
+ @get:XmlElement(name = "RSAKeyValue", namespace =
"http://www.w3.org/2000/09/xmldsig#", required = true)
+ lateinit var rsaKeyValue: RSAKeyValueType
+
+ @get:XmlElement(name = "TimeStamp", required = false)
+ @get:XmlSchemaType(name = "dateTime")
+ var timeStamp: XMLGregorianCalendar? = null
+ }
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(
+ name = "AuthenticationPubKeyInfoType", propOrder = [
+ "x509Data",
+ "pubKeyValue",
+ "authenticationVersion"
+ ]
+ )
+ class AuthenticationPubKeyInfoType {
+ @get:XmlAnyElement()
+ var x509Data: Element? = null
+
+ @get:XmlElement(name = "PubKeyValue", required = true)
+ lateinit var pubKeyValue: PubKeyValueType
+
+ @get:XmlElement(name = "AuthenticationVersion", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ lateinit var authenticationVersion: String
+ }
+
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(
+ name = "EncryptionPubKeyInfoType", propOrder = [
+ "x509Data",
+ "pubKeyValue",
+ "encryptionVersion"
+ ]
+ )
+ class EncryptionPubKeyInfoType {
+ @get:XmlAnyElement()
+ var x509Data: Element? = null
+
+ @get:XmlElement(name = "PubKeyValue", required = true)
+ lateinit var pubKeyValue: PubKeyValueType
+
+ @get:XmlElement(name = "EncryptionVersion", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ lateinit var encryptionVersion: String
+ }
+}
\ No newline at end of file
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsUnsecuredRequest.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsUnsecuredRequest.kt
new file mode 100644
index 0000000..51e991e
--- /dev/null
+++
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/EbicsUnsecuredRequest.kt
@@ -0,0 +1,93 @@
+package tech.libeufin.schema.ebics_h004
+
+import javax.xml.bind.annotation.*
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(name = "", propOrder = ["header", "body"])
+@XmlRootElement(name = "ebicsUnsecuredRequest")
+class EbicsUnsecuredRequest {
+ @get:XmlAttribute(name = "Version", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var version: String
+
+ @get:XmlAttribute(name = "Revision")
+ var revision: Int? = null
+
+ @get:XmlElement(name = "header", required = true)
+ lateinit var header: Header
+
+ @get:XmlElement(required = true)
+ lateinit var body: Body
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["static", "mutable"])
+ class Header {
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "")
+ class EmptyMutableHeader
+
+ @get:XmlElement(name = "static", required = true)
+ lateinit var static: StaticHeaderType
+
+ @get:XmlElement(required = true)
+ lateinit var mutable: EmptyMutableHeader
+
+ @get:XmlAttribute(name = "authenticate", required = true)
+ var authenticate: Boolean = false
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["dataTransfer"])
+ class Body {
+ @get:XmlElement(name = "DataTransfer", required = true)
+ lateinit var dataTransfer: UnsecuredDataTransfer
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "", propOrder = ["orderData"])
+ class UnsecuredDataTransfer {
+ @get:XmlElement(name = "OrderData", required = true)
+ lateinit var orderData: OrderData
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(name = "")
+ class OrderData {
+ @get:XmlValue
+ lateinit var value: ByteArray
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ @XmlType(
+ name = "",
+ propOrder = ["hostID", "partnerID", "userID", "systemID", "product",
"orderDetails", "securityMedium"]
+ )
+ class StaticHeaderType {
+ @get:XmlElement(name = "HostID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var hostID: String
+
+ @get:XmlElement(name = "PartnerID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var partnerID: String
+
+ @get:XmlElement(name = "UserID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var userID: String
+
+ @get:XmlElement(name = "SystemID")
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ var systemID: String? = null
+
+ @get:XmlElement(name = "Product")
+ val product: EbicsTypes.Product? = null
+
+ @get:XmlElement(name = "OrderDetails", required = true)
+ lateinit var orderDetails: EbicsTypes.SimpleOrderDetails
+
+ @get:XmlElement(name = "SecurityMedium", required = true)
+ lateinit var securityMedium: String
+ }
+}
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HIARequestOrderData.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HIARequestOrderData.kt
new file mode 100644
index 0000000..1164825
--- /dev/null
+++
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HIARequestOrderData.kt
@@ -0,0 +1,33 @@
+package tech.libeufin.schema.ebics_h004
+
+import javax.xml.bind.annotation.*
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(
+ name = "HIARequestOrderDataType",
+ propOrder = ["authenticationPubKeyInfo", "encryptionPubKeyInfo",
"partnerID", "userID", "any"]
+)
+@XmlRootElement(name = "HIARequestOrderData")
+class HIARequestOrderData {
+ @get:XmlElement(name = "AuthenticationPubKeyInfo", required = true)
+ lateinit var authenticationPubKeyInfo:
EbicsTypes.AuthenticationPubKeyInfoType
+
+ @get:XmlElement(name = "EncryptionPubKeyInfo", required = true)
+ lateinit var encryptionPubKeyInfo: EbicsTypes.EncryptionPubKeyInfoType
+
+ @get:XmlElement(name = "PartnerID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ lateinit var partnerID: String
+
+ @get:XmlElement(name = "UserID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ @get:XmlSchemaType(name = "token")
+ lateinit var userID: String
+
+ @get:XmlAnyElement(lax = true)
+ var any: List<Any>? = null
+}
\ No newline at end of file
diff --git
a/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HPBResponseOrderData.kt
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HPBResponseOrderData.kt
new file mode 100644
index 0000000..9efe51b
--- /dev/null
+++
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HPBResponseOrderData.kt
@@ -0,0 +1,21 @@
+package tech.libeufin.schema.ebics_h004
+
+import javax.xml.bind.annotation.*
+import javax.xml.bind.annotation.adapters.CollapsedStringAdapter
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
+
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(name = "", propOrder = ["authenticationPubKeyInfo",
"encryptionPubKeyInfo", "hostID"])
+@XmlRootElement(name = "HPBResponseOrderData")
+class HPBResponseOrderData {
+ @get:XmlElement(name = "AuthenticationPubKeyInfo", required = true)
+ lateinit var authenticationPubKeyInfo:
EbicsTypes.AuthenticationPubKeyInfoType
+
+ @get:XmlElement(name = "EncryptionPubKeyInfo", required = true)
+ lateinit var encryptionPubKeyInfo: EbicsTypes.EncryptionPubKeyInfoType
+
+ @get:XmlElement(name = "HostID", required = true)
+ @get:XmlJavaTypeAdapter(CollapsedStringAdapter::class)
+ lateinit var hostID: 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
new file mode 100644
index 0000000..64ea996
--- /dev/null
+++
b/sandbox/src/main/kotlin/tech/libeufin/schema/ebics_h004/HTDResponseOrderData.kt
@@ -0,0 +1,33 @@
+package tech.libeufin.schema.ebics_h004
+
+import javax.xml.bind.annotation.*
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlType(name = "", propOrder = ["partnerInfo", "userInfo"])
+@XmlRootElement(name = "HTDResponseOrderData")
+class HTDResponseOrderData {
+ @get:XmlElement(name = "PartnerInfo", required = true)
+ lateinit var partnerInfo: PartnerInfo
+
+ @get:XmlElement(name = "UserInfo", required = true)
+ lateinit var userInfo: UserInfo
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class PartnerInfo {
+
+ }
+
+ @XmlAccessorType(XmlAccessType.NONE)
+ class UserInfo {
+
+ @get:XmlElement(name = "AddressInfo", required = true)
+ lateinit var addressInfo: AddressInfo
+
+ @get:XmlElement(name = "BankInfo", required = true)
+ lateinit var bankInfo: BankInfo
+
+ class AddressInfo
+ class BankInfo
+
+ }
+}
diff --git a/sandbox/src/test/kotlin/EbicsMessagesTest.kt
b/sandbox/src/test/kotlin/EbicsMessagesTest.kt
index 20f7b20..e47f932 100644
--- a/sandbox/src/test/kotlin/EbicsMessagesTest.kt
+++ b/sandbox/src/test/kotlin/EbicsMessagesTest.kt
@@ -73,15 +73,15 @@ class EbicsMessagesTest {
fun testKeyMgmgResponse() {
val responseXml = EbicsKeyManagementResponse().apply {
header = EbicsKeyManagementResponse.Header().apply {
- mutable =
EbicsKeyManagementResponse.Header.KeyManagementResponseMutableHeaderType().apply
{
+ mutable = EbicsKeyManagementResponse.MutableHeaderType().apply
{
reportText = "foo"
returnCode = "bar"
}
- _static = EbicsKeyManagementResponse.Header.EmptyStaticHeader()
+ _static = EbicsKeyManagementResponse.EmptyStaticHeader()
}
version = "H004"
body = EbicsKeyManagementResponse.Body().apply {
- returnCode =
EbicsKeyManagementResponse.Body.ReturnCode().apply {
+ returnCode = EbicsKeyManagementResponse.ReturnCode().apply {
authenticate = true
value = "000000"
}
@@ -95,7 +95,7 @@ class EbicsMessagesTest {
fun testParseHiaRequestOrderData() {
val classLoader = ClassLoader.getSystemClassLoader()
val hia =
classLoader.getResource("hia_request_order_data.xml")!!.readText()
- XMLUtil.convertStringToJaxb<HIARequestOrderDataType>(hia)
+ XMLUtil.convertStringToJaxb<HIARequestOrderData>(hia)
}
@Test
@@ -148,16 +148,16 @@ class EbicsMessagesTest {
val response = EbicsResponse().apply {
version = "H004"
header = EbicsResponse.Header().apply {
- _static = ResponseStaticHeaderType()
- mutable = EbicsResponseMutableHeaderType().apply {
+ _static = EbicsResponse.StaticHeaderType()
+ mutable = EbicsResponse.MutableHeaderType().apply {
this.reportText = "foo"
this.returnCode = "bar"
- this.transactionPhase = TransactionPhaseType.INITIALISATION
+ this.transactionPhase =
EbicsTypes.TransactionPhaseType.INITIALISATION
}
}
authSignature = SignatureType()
body = EbicsResponse.Body().apply {
- returnCode = EbicsResponse.Body.ReturnCode().apply {
+ returnCode = EbicsResponse.ReturnCode().apply {
authenticate = true
value = "asdf"
}
@@ -170,6 +170,6 @@ class EbicsMessagesTest {
fun testLoadHpb() {
val classLoader = ClassLoader.getSystemClassLoader()
val text = classLoader.getResource("hpb_request.xml")!!.readText()
- XMLUtil.convertStringToJaxb<EbicsNoPubKeyDigestsRequest>(text)
+ XMLUtil.convertStringToJaxb<EbicsNpkdRequest>(text)
}
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
address@hidden.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libeufin] branch master updated: restructure JAXB,
gnunet <=