diff --git a/.gitignore b/.gitignore
index 56997cefd9..ee6a47a274 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,10 @@ obp-api/src/main/resources/*
!obp-api/src/main/resources/media/
obp-api/src/test/resources/**
!obp-api/src/test/resources/frozen_type_meta_data
+# The blob's text rendering, which FrozenMetaDataTextTest compares it against. It is what
+# makes a regeneration reviewable, and without this line it is silently untracked - the test
+# then passes for whoever generated it and fails on every clean checkout.
+!obp-api/src/test/resources/frozen_type_meta_data.txt
!obp-api/src/test/resources/logback-test.xml
# The development certificate set (scripts/generate_dev_certs.sh) is a test fixture and belongs in
# the repository. Without these two lines a regenerated set is silently untracked and the tests
diff --git a/obp-api/pom.xml b/obp-api/pom.xml
index 2ee120e9f1..6c0811ab60 100644
--- a/obp-api/pom.xml
+++ b/obp-api/pom.xml
@@ -161,10 +161,14 @@
scalatest_${scala.version}
+
- cglib
- cglib
- 3.3.0
+ net.bytebuddy
+ byte-buddy
+ 1.18.11
org.apache.commons
@@ -235,24 +239,24 @@
com.twitter
chill_${scala.version}
- 0.9.3
+ 0.9.5
com.twitter
chill-bijection_${scala.version}
- 0.9.1
+ 0.9.5
com.github.cb372
scalacache-redis_${scala.version}
- 0.9.3
+ 0.28.0
com.github.cb372
scalacache-guava_${scala.version}
- 0.9.3
+ 0.28.0
org.apache.pekko
@@ -263,7 +267,7 @@
com.github.dwickern
scala-nameof_${scala.version}
- 1.0.3
+ 2.0.0
@@ -271,16 +275,23 @@
nimbus-jose-jwt
10.5
+
- com.github.OpenBankProject
- scala-macros
- v1.0.0-alpha.3
+ com.github.OpenBankProject.scala-macros
+ macros_${scala.version}
+ v1.0.0-alpha.4
org.scalameta
scalameta_${scala.version}
- 3.7.4
+ 4.1.12
@@ -379,7 +390,7 @@
com.thesamet.scalapb
scalapb-runtime-grpc_${scala.version}
- 0.8.4
+ 0.9.0
io.grpc
@@ -701,6 +712,12 @@
-deprecation
-feature
+
+
+ -Ymacro-annotations
diff --git a/obp-api/src/main/scala/code/abacrule/AbacRuleEngine.scala b/obp-api/src/main/scala/code/abacrule/AbacRuleEngine.scala
index 802a0abf12..bbd9b72906 100644
--- a/obp-api/src/main/scala/code/abacrule/AbacRuleEngine.scala
+++ b/obp-api/src/main/scala/code/abacrule/AbacRuleEngine.scala
@@ -11,7 +11,7 @@ import net.liftweb.common.{Box, Empty, Failure, Full}
import net.liftweb.util.Helpers.tryo
import java.util.concurrent.ConcurrentHashMap
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.collection.concurrent
import scala.concurrent.Future
diff --git a/obp-api/src/main/scala/code/accountaccessrequest/AccountAccessRequestTrait.scala b/obp-api/src/main/scala/code/accountaccessrequest/AccountAccessRequestTrait.scala
index 6a11dbb6e4..cd6c9752f9 100644
--- a/obp-api/src/main/scala/code/accountaccessrequest/AccountAccessRequestTrait.scala
+++ b/obp-api/src/main/scala/code/accountaccessrequest/AccountAccessRequestTrait.scala
@@ -5,7 +5,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object AccountAccessRequestTrait extends SimpleInjector {
- val accountAccessRequest = new Inject(buildOne _) {}
+ val accountAccessRequest = new Inject(() => buildOne) {}
def buildOne: AccountAccessRequestProvider = MappedAccountAccessRequestProvider
}
diff --git a/obp-api/src/main/scala/code/accountapplication/AccountApplication.scala b/obp-api/src/main/scala/code/accountapplication/AccountApplication.scala
index 0e12f318db..a1436b0cd0 100644
--- a/obp-api/src/main/scala/code/accountapplication/AccountApplication.scala
+++ b/obp-api/src/main/scala/code/accountapplication/AccountApplication.scala
@@ -10,7 +10,7 @@ import scala.concurrent.Future
object AccountApplicationX extends SimpleInjector {
- val accountApplication = new Inject(buildOne _) {}
+ val accountApplication = new Inject(() => buildOne) {}
def buildOne: AccountApplicationProvider = MappedAccountApplicationProvider
diff --git a/obp-api/src/main/scala/code/accountattribute/AccountAttribute.scala b/obp-api/src/main/scala/code/accountattribute/AccountAttribute.scala
index c6bfdcc568..d0db61c14f 100644
--- a/obp-api/src/main/scala/code/accountattribute/AccountAttribute.scala
+++ b/obp-api/src/main/scala/code/accountattribute/AccountAttribute.scala
@@ -14,7 +14,7 @@ import scala.concurrent.Future
object AccountAttributeX extends SimpleInjector {
- val accountAttributeProvider = new Inject(buildOne _) {}
+ val accountAttributeProvider = new Inject(() => buildOne) {}
def buildOne: AccountAttributeProvider = MappedAccountAttributeProvider
diff --git a/obp-api/src/main/scala/code/accountholders/AccountHolders.scala b/obp-api/src/main/scala/code/accountholders/AccountHolders.scala
index 274acda202..20232de006 100644
--- a/obp-api/src/main/scala/code/accountholders/AccountHolders.scala
+++ b/obp-api/src/main/scala/code/accountholders/AccountHolders.scala
@@ -8,7 +8,7 @@ import net.liftweb.util.SimpleInjector
object AccountHolders extends SimpleInjector {
- val accountHolders = new Inject(buildOne _) {}
+ val accountHolders = new Inject(() => buildOne) {}
def buildOne: AccountHolders = MapperAccountHolders
diff --git a/obp-api/src/main/scala/code/api/OAuth2.scala b/obp-api/src/main/scala/code/api/OAuth2.scala
index 869501ff8c..7164a2ba95 100644
--- a/obp-api/src/main/scala/code/api/OAuth2.scala
+++ b/obp-api/src/main/scala/code/api/OAuth2.scala
@@ -46,7 +46,7 @@ import org.apache.commons.lang3.StringUtils
import java.net.URI
import scala.concurrent.Future
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
/**
* This object provides the API calls necessary to third party applications
diff --git a/obp-api/src/main/scala/code/api/OBPRestHelper.scala b/obp-api/src/main/scala/code/api/OBPRestHelper.scala
index 4a89f7c0c0..ccad0101ae 100644
--- a/obp-api/src/main/scala/code/api/OBPRestHelper.scala
+++ b/obp-api/src/main/scala/code/api/OBPRestHelper.scala
@@ -151,7 +151,9 @@ object ApiVersionHolder {
// https://github.com/alibaba/transmittable-thread-local/issues/100
private val threadLocal: ThreadLocal[ApiVersion] =
new TransmittableThreadLocal[ApiVersion]() {
- override protected def childValue(parentValue: ApiVersion): ApiVersion = null
+ // Public, not protected: TransmittableThreadLocal declares childValue public, and an
+ // override may not narrow that. 2.12 accepted the narrowing; 2.13 rejects it.
+ override def childValue(parentValue: ApiVersion): ApiVersion = null
}
def setApiVersion(apiVersion: ApiVersion) = threadLocal.set(apiVersion)
diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala
index e8abcfc360..918929197b 100644
--- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala
+++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerJSONFactory.scala
@@ -36,11 +36,24 @@ import net.liftweb.common.Box.tryo
import net.liftweb.common.{EmptyBox, Full}
import com.openbankproject.commons.util.json
-import scala.collection.GenTraversableLike
import scala.reflect.runtime.universe
object SwaggerJSONFactory extends MdcLoggable {
- type Coll[T] = GenTraversableLike[T, _]
+ // GenTraversableLike is gone in 2.13. This alias only ever feeds reflective subtype tests
+ // against declared field types - List[X], Seq[X], Set[X] - so it needs to be a supertype of all
+ // of them and nothing more; no method is ever called through it.
+ //
+ // IterableOnce, not Iterable, and the difference is not cosmetic. These tests run through
+ // scala-reflect at run time, and 2.13's Iterable carries a deep base-class graph (IterableOps,
+ // IterableFactoryDefaults and friends) that the runtime member search walks for every candidate
+ // field. With Iterable here, SwaggerFactoryUnitTest hangs and then dies with a StackOverflowError
+ // inside FindMembers/AsSeenFromMap. IterableOnce is a two-method trait, which is as shallow as
+ // 2.12's GenTraversableLike was, and it is also the closest match to the GenTraversableOnce the
+ // rest of this migration replaced.
+ //
+ // Runtime pattern matches that go on to call head or nonEmpty match Iterable directly rather
+ // than going through this alias, since IterableOnce has neither.
+ type Coll[T] = IterableOnce[T]
/**
* Escapes a string value to be safely included in JSON.
@@ -371,7 +384,7 @@ object SwaggerJSONFactory extends MdcLoggable {
// "400": {
// "description": "Error",
// "schema": {"$ref": "#/definitions/Error"
- val paths: ListMap[String, Map[String, OperationObjectJson]] = resourceDocList.groupBy(x => x.specified_url).toSeq.sortBy(x => x._1).map { mrd =>
+ val pathPairs = resourceDocList.groupBy(x => x.specified_url).toSeq.sortBy(x => x._1).map { mrd =>
//`/banks/BANK_ID` --> `/obp/v3.0.0/banks/BANK_ID`
val pathAddedObpandVersion = mrd._1
@@ -583,7 +596,11 @@ object SwaggerJSONFactory extends MdcLoggable {
)
).toMap
(path, operationObjects.toSeq.sortBy(m => m._1).toMap)
- }(collection.breakOut)
+ // breakOut is removed in 2.13. Collecting the pairs and handing them to ListMap builds the
+ // same value on both versions, at the cost of one intermediate sequence that breakOut avoided.
+ // Order is unaffected: the sortBy above fixes it and ListMap preserves insertion order.
+ }
+ val paths: ListMap[String, Map[String, OperationObjectJson]] = ListMap(pathPairs: _*)
SwaggerResourceDoc(
swagger = "2.0",
@@ -711,9 +728,21 @@ object SwaggerJSONFactory extends MdcLoggable {
//String
case t if isAnyOfType[String, JString, XString] || isEnumeration(t) => s""" {"type":"string" $example}"""
+ // Option before Coll, as every other scalar block here already has it. Coll is IterableOnce,
+ // which 2.13's Option implements and 2.12's did not, so Coll[String] answers true for
+ // Option[String] and this was the one block whose order let that through - publishing every
+ // optional string as an array of strings.
+ //
+ // Only the type test moves. These cases each carry a second, independent clause testing for
+ // an enumeration, and those are ordered among themselves: isNestEnumeration digs to the
+ // innermost type argument, so Option[List[Colour]] satisfies isNestEnumeration[Option[_]]
+ // exactly as well as isNestEnumeration[Option[List[_]]], and only the latter is right for it.
+ // Carrying the Option[_] enumeration clause up here with the type test made every optional
+ // list of enumerations a string. It stays below, after the list forms have had their turn.
+ case t if isAnyOfType[Option[String], Option[JString], Option[XString]] => s""" {"type":"string" $example}"""
case t if isAnyOfType[Coll[String], Coll[JString], Coll[XString]] || isNestEnumeration[List[_]](t) => s""" {"type":"array", "items":{"type": "string"}}"""
case t if isAnyOfType[Option[Coll[String]], Option[Coll[JString]], Option[Coll[XString]]] || isNestEnumeration[Option[List[_]]](t) => s""" {"type":"array", "items":{"type": "string"}}"""
- case t if isAnyOfType[Option[String], Option[JString], Option[XString]] || isNestEnumeration[Option[_]](t) => s""" {"type":"string" $example}"""
+ case t if isNestEnumeration[Option[_]](t) => s""" {"type":"string" $example}"""
//Int
case _ if isAnyOfType[Int, JInt, XInt] => s""" {"type":"integer", "format":"int32" $example}"""
@@ -754,7 +783,7 @@ object SwaggerJSONFactory extends MdcLoggable {
val tp = ReflectUtils.getNestTypeArg(t, 0, 0)
val value = exampleValue match {
case v: Array[_] => v.headOption.flatMap(_.asInstanceOf[Option[_]]).orNull
- case coll: Coll[_] => coll.headOption.flatMap(_.asInstanceOf[Option[_]]).orNull
+ case coll: Iterable[_] => coll.headOption.flatMap(_.asInstanceOf[Option[_]]).orNull
case _ => null
}
s""" {"type": "array", "items":${buildSwaggerSchema(tp, value)}}"""
@@ -764,19 +793,22 @@ object SwaggerJSONFactory extends MdcLoggable {
val tp = ReflectUtils.getNestTypeArg(t, 0, 0)
val value = exampleValue match {
case Some(v: Array[_]) if v.nonEmpty => v.head
- case Some(coll :Coll[_]) if coll.nonEmpty => coll.head
+ case Some(coll: Iterable[_]) if coll.nonEmpty => coll.head
case (v: Array[_]) if v.nonEmpty => v.head
- case (coll: Coll[_]) if coll.nonEmpty => coll.head
+ case (coll: Iterable[_]) if coll.nonEmpty => coll.head
case _ => null
}
s""" {"type": "array", "items":${buildSwaggerSchema(tp, value)}}"""
- // List or Array data
- case t if isOneOfType[Coll[_], Array[_]] =>
+ // List or Array data. Not an Option: Coll is IterableOnce, which 2.13's Option implements, so
+ // without this guard every Option the cases above did not name by type - an Option of a case
+ // class, of a JValue - is published as an array of it. Option[Coll[_]] is already handled
+ // above, so what this excludes falls to the Option case below, which unwraps and recurses.
+ case t if isOneOfType[Coll[_], Array[_]] && !isTypeOf[Option[_]] =>
val tp = ReflectUtils.getNestTypeArg(t, 0)
val value = exampleValue match {
case v: Array[_] => v.head
- case coll : Coll[_] if coll.nonEmpty => coll.head
+ case coll: Iterable[_] if coll.nonEmpty => coll.head
case _ => null
}
s""" {"type": "array", "items":${buildSwaggerSchema(tp, value)}}"""
@@ -818,9 +850,14 @@ object SwaggerJSONFactory extends MdcLoggable {
}
case _ if isTypeOf[JValue] =>
- Objects.nonNull(exampleValue)
- val jValue = exampleValue.asInstanceOf[JValue]
- buildSwaggerSchema(JsonUtils.getType(jValue), exampleValue)
+ // The guard here used to be `Objects.nonNull(exampleValue)`, which returns a Boolean and
+ // discards it - it never stopped anything, and a null example reached JsonUtils.getType,
+ // whose own requireNonNull then threw. The collection branches above hand null down
+ // whenever the example collection is empty, so this was always reachable; it surfaces now
+ // because the array-shaped bodies reworked for 2.13 take that path more often. An unknown
+ // example describes the field as a plain object rather than failing the whole document.
+ if (exampleValue == null) """ {"type":"object"}"""
+ else buildSwaggerSchema(JsonUtils.getType(exampleValue.asInstanceOf[JValue]), exampleValue)
//Single object
case t => s""" {"$$ref":"#/definitions/${getRefEntityName(t, exampleValue)}"}"""
diff --git a/obp-api/src/main/scala/code/api/attributedefinition/AttributeDefinition.scala b/obp-api/src/main/scala/code/api/attributedefinition/AttributeDefinition.scala
index f00fd3fa5f..46352845a0 100644
--- a/obp-api/src/main/scala/code/api/attributedefinition/AttributeDefinition.scala
+++ b/obp-api/src/main/scala/code/api/attributedefinition/AttributeDefinition.scala
@@ -10,7 +10,7 @@ import scala.collection.immutable.List
import scala.concurrent.Future
object AttributeDefinitionDI extends SimpleInjector {
- val attributeDefinition = new Inject(buildOne _) {}
+ val attributeDefinition = new Inject(() => buildOne) {}
def buildOne: AttributeDefinitionProviderTrait = MappedAttributeDefinitionProvider
}
diff --git a/obp-api/src/main/scala/code/api/cache/InMemory.scala b/obp-api/src/main/scala/code/api/cache/InMemory.scala
index 9c40544309..67813c740d 100644
--- a/obp-api/src/main/scala/code/api/cache/InMemory.scala
+++ b/obp-api/src/main/scala/code/api/cache/InMemory.scala
@@ -1,10 +1,10 @@
package code.api.cache
import code.util.Helper.MdcLoggable
-import com.google.common.cache.CacheBuilder
-import scalacache.ScalaCache
+import com.google.common.cache.{CacheBuilder, Cache => GuavaUnderlying}
+import scalacache.{Cache, Entry}
import scalacache.guava.GuavaCache
-import scalacache.memoization.{cacheKeyExclude, memoize, memoizeSync}
+import scalacache.memoization.{cacheKeyExclude, memoizeF, memoizeSync}
import scala.concurrent.Future
import scala.concurrent.duration.Duration
@@ -13,17 +13,30 @@ import com.openbankproject.commons.ExecutionContext.Implicits.global
object InMemory extends MdcLoggable {
- val underlyingGuavaCache = CacheBuilder.newBuilder().maximumSize(100000L).build[String, Object]
- implicit val scalaCache = ScalaCache(GuavaCache(underlyingGuavaCache))
+ // scalacache 0.28 types its Cache by the value type, while these wrappers are generic in A and
+ // a single Guava instance has to serve every one of them. The underlying store is declared at
+ // Entry[Any] and narrowed per call: the cast is erased at run time, and a given key always holds
+ // the type its own call site wrote, which is the same assumption the untyped ScalaCache made.
+ val underlyingGuavaCache: GuavaUnderlying[String, Entry[Any]] =
+ CacheBuilder.newBuilder().maximumSize(100000L).build[String, Entry[Any]]()
+
+ // Built once, for the same reason as Redis's: the wrapper holds no per-type state and the cast is
+ // erased, so one instance serves every A instead of one allocation per cache read.
+ private val sharedCache: Cache[Any] = GuavaCache(underlyingGuavaCache)
+ private def cacheFor[A]: Cache[A] = sharedCache.asInstanceOf[Cache[A]]
def memoizeSyncWithInMemory[A](cacheKey: Option[String])(@cacheKeyExclude ttl: Duration)(@cacheKeyExclude f: => A): A = {
logger.trace(s"InMemory.memoizeSyncWithInMemory.underlyingGuavaCache size ${underlyingGuavaCache.size()}, current cache key is $cacheKey")
- memoizeSync(ttl)(f)
+ import scalacache.modes.sync._
+ implicit val cache: Cache[A] = cacheFor[A]
+ memoizeSync(Some(ttl))(f)
}
def memoizeWithInMemory[A](cacheKey: Option[String])(@cacheKeyExclude ttl: Duration)(@cacheKeyExclude f: => Future[A])(implicit @cacheKeyExclude m: Manifest[A]): Future[A] = {
logger.trace(s"InMemory.memoizeWithInMemory.underlyingGuavaCache size ${underlyingGuavaCache.size()}, current cache key is $cacheKey")
- memoize(ttl)(f)
+ import scalacache.modes.scalaFuture._
+ implicit val cache: Cache[A] = cacheFor[A]
+ memoizeF(Some(ttl))(f)
}
/**
@@ -35,7 +48,7 @@ object InMemory extends MdcLoggable {
try {
val regex = pattern.replace("*", ".*").r
val allKeys = underlyingGuavaCache.asMap().keySet()
- import scala.collection.JavaConverters._
+ import scala.jdk.CollectionConverters._
allKeys.asScala.count(key => regex.pattern.matcher(key).matches())
} catch {
case e: Throwable =>
diff --git a/obp-api/src/main/scala/code/api/cache/Redis.scala b/obp-api/src/main/scala/code/api/cache/Redis.scala
index 99ef445cce..05208e3360 100644
--- a/obp-api/src/main/scala/code/api/cache/Redis.scala
+++ b/obp-api/src/main/scala/code/api/cache/Redis.scala
@@ -6,10 +6,10 @@ import code.api.Constant
import code.util.Helper.MdcLoggable
import com.openbankproject.commons.ExecutionContext.Implicits.global
import redis.clients.jedis.{Jedis, JedisPool, JedisPoolConfig}
-import scalacache.memoization.{cacheKeyExclude, memoize, memoizeSync}
-import scalacache.{Flags, ScalaCache}
+import scalacache.memoization.{cacheKeyExclude, memoizeF, memoizeSync}
+import scalacache.{Cache, Flags}
import scalacache.redis.RedisCache
-import scalacache.serialization.Codec
+import scalacache.serialization.{Codec, FailedToDecode}
import redis.clients.jedis.{Jedis, JedisPool, JedisPoolConfig}
import java.net.URI
@@ -197,7 +197,7 @@ object Redis extends MdcLoggable {
}else if (method ==JedisMethod.GET) {
jedisConnection.head.get(key)
} else if (method == JedisMethod.SCAN) {
- import scala.collection.JavaConverters._
+ import scala.jdk.CollectionConverters._
jedisConnection.head.keys(key).asScala.mkString(",")
} else if(method ==JedisMethod.SET && value.isDefined){
if (ttlSeconds.isDefined) {//if set ttl, call `setex` method to set the expired seconds.
@@ -313,45 +313,59 @@ object Redis extends MdcLoggable {
// optionally SSL-configured connection. The RedisCache(url, port) overload builds its own
// JedisPool internally with no password and no SSL, so with `requirepass` enabled it fails
// with NOAUTH while the jedisPool-based paths keep working.
- implicit val scalaCache = ScalaCache(RedisCache(jedisPool))
implicit val flags = Flags(readsEnabled = true, writesEnabled = true)
- implicit def anyToByte[T](implicit m: Manifest[T]) = new Codec[T, Array[Byte]] {
+ // scalacache 0.28 types its Cache by the value type, while these wrappers are generic in A. One
+ // instance still serves them all: RedisCache carries no per-type state, its value type is erased,
+ // and the codec below ignores the Manifest it takes, so every A would get an identical wrapper -
+ // building one per call only put two allocations in front of every cache read on the request
+ // path. RedisCache is a thin wrapper over the pool built above and opens nothing of its own, so
+ // the pool, its authentication and its SSL configuration stay shared.
+ private val sharedCache: Cache[Any] = RedisCache[Any](jedisPool)
+ private def cacheFor[A]: Cache[A] = sharedCache.asInstanceOf[Cache[A]]
+
+ implicit def anyToByte[T](implicit m: Manifest[T]): Codec[T] = new Codec[T] {
import com.twitter.chill.KryoInjection
- def serialize(value: T): Array[Byte] = {
+ def encode(value: T): Array[Byte] = {
logger.debug("KryoInjection started")
val bytes: Array[Byte] = KryoInjection(value)
logger.debug("KryoInjection finished")
bytes
}
- def deserialize(data: Array[Byte]): T = {
+ def decode(data: Array[Byte]): Codec.DecodingResult[T] = {
import scala.util.{Failure, Success}
- val tryDecode: scala.util.Try[Any] = KryoInjection.invert(data)
- tryDecode match {
- case Success(v) => v.asInstanceOf[T]
+ KryoInjection.invert(data) match {
+ case Success(v) => Right(v.asInstanceOf[T])
case Failure(e) =>
- // Deserialization failed: corrupt bytes, a class-shape change across a redeploy,
- // Kryo registration drift, etc. Returning a sentinel value cast to T poisons the
- // cache - scalacache treats it as a HIT and hands e.g. a String to a caller
- // expecting List[MethodRoutingT], throwing ClassCastException for the whole TTL.
- // Rethrow instead: scalacache.TypedApi._caching treats a failed read as a cache
- // miss, recomputes from the source block, and repopulates the key with a fresh,
- // valid serialization (self-healing).
- logger.error("Redis cache deserialization failed; treating as a cache miss and recomputing.", e)
- throw e
+ // Decoding failed: corrupt bytes, a class-shape change across a redeploy, Kryo
+ // registration drift. Never answer with a sentinel value cast to T - scalacache would
+ // treat that as a HIT and hand e.g. a String to a caller expecting List[MethodRoutingT],
+ // throwing ClassCastException for the whole TTL.
+ //
+ // Reporting the failure is what makes the cache self-heal, though the mechanism moved in
+ // 0.28: the codec returns Left instead of throwing, RedisCacheBase.doGet raises it, and
+ // AbstractCache._caching - the path memoize takes - wraps the read in handleNonFatal and
+ // substitutes None. So a failed decode is still a miss: the source block runs and the key
+ // is rewritten with a valid serialisation. RedisDeserializeMissTest pins this.
+ logger.error("Redis cache decoding failed; treating as a cache miss and recomputing.", e)
+ Left(FailedToDecode(e))
}
}
}
def memoizeSyncWithRedis[A](cacheKey: Option[String])(@cacheKeyExclude ttl: Duration)(@cacheKeyExclude f: => A)(implicit @cacheKeyExclude m: Manifest[A]): A = {
- memoizeSync(ttl)(f)
+ import scalacache.modes.sync._
+ implicit val cache: Cache[A] = cacheFor[A]
+ memoizeSync(Some(ttl))(f)
}
def memoizeWithRedis[A](cacheKey: Option[String])(@cacheKeyExclude ttl: Duration)(@cacheKeyExclude f: => Future[A])(implicit @cacheKeyExclude m: Manifest[A]): Future[A] = {
- memoize(ttl)(f)
+ import scalacache.modes.scalaFuture._
+ implicit val cache: Cache[A] = cacheFor[A]
+ memoizeF(Some(ttl))(f)
}
@@ -368,7 +382,7 @@ object Redis extends MdcLoggable {
jedisConnection = Some(jedisPool.getResource())
val jedis = jedisConnection.get
- import scala.collection.JavaConverters._
+ import scala.jdk.CollectionConverters._
val keys = jedis.keys(pattern)
keys.asScala.toList
diff --git a/obp-api/src/main/scala/code/api/cache/RedisLogger.scala b/obp-api/src/main/scala/code/api/cache/RedisLogger.scala
index 19bcce2781..04b30c476d 100644
--- a/obp-api/src/main/scala/code/api/cache/RedisLogger.scala
+++ b/obp-api/src/main/scala/code/api/cache/RedisLogger.scala
@@ -12,7 +12,7 @@ import redis.clients.jedis.{Jedis, Pipeline}
import java.util.concurrent.{Executors, ScheduledThreadPoolExecutor, TimeUnit}
import java.util.concurrent.atomic.{AtomicBoolean, AtomicLong}
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.concurrent.{ExecutionContext, Future}
import scala.util.{Failure, Success, Try}
diff --git a/obp-api/src/main/scala/code/api/cache/RedisMessaging.scala b/obp-api/src/main/scala/code/api/cache/RedisMessaging.scala
index aba3545b03..018d1a4276 100644
--- a/obp-api/src/main/scala/code/api/cache/RedisMessaging.scala
+++ b/obp-api/src/main/scala/code/api/cache/RedisMessaging.scala
@@ -5,7 +5,7 @@ import code.api.util.APIUtil
import code.util.Helper.MdcLoggable
import redis.clients.jedis.Jedis
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
object RedisMessaging extends MdcLoggable {
diff --git a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala
index efb6aae404..f84a21368f 100644
--- a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala
+++ b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpointHelper.scala
@@ -36,7 +36,7 @@ import com.openbankproject.commons.model.enums.DynamicEntityOperation.GET_ALL
import io.swagger.v3.oas.models.examples.Example
import org.json4s.{Formats, JBool}
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.collection.immutable.List
import scala.collection.mutable
import scala.collection.mutable.{ArrayBuffer, ListBuffer}
diff --git a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpoints.scala b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpoints.scala
index 2294a82332..beaad62688 100644
--- a/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpoints.scala
+++ b/obp-api/src/main/scala/code/api/dynamic/endpoint/helper/DynamicEndpoints.scala
@@ -185,7 +185,7 @@ case class CompiledObjects(exampleRequestBody: Option[JValue], successResponseBo
}
private def toCaseObject(jValue: Option[JValue]): Product = {
- if (jValue.isEmpty || jValue.exists(JNothing ==)) {
+ if (jValue.isEmpty || jValue.exists(JNothing == _)) {
EmptyBody
} else {
jValue.orNull match {
diff --git a/obp-api/src/main/scala/code/api/dynamic/entity/Http4sDynamicEntity.scala b/obp-api/src/main/scala/code/api/dynamic/entity/Http4sDynamicEntity.scala
index a66fa5e495..f3e9e82354 100644
--- a/obp-api/src/main/scala/code/api/dynamic/entity/Http4sDynamicEntity.scala
+++ b/obp-api/src/main/scala/code/api/dynamic/entity/Http4sDynamicEntity.scala
@@ -133,7 +133,7 @@ object Http4sDynamicEntity extends MdcLoggable {
/** Apply a validated plan to the fetched records (Phase 1: in-memory; the SQL backend comes later). */
private def applyQueryPlan(resultList: JArray, plan: QueryPlan, indexed: Map[String, FieldSpec]): JArray = {
val records = resultList.arr.collect { case o: JObject => o }
- val fieldTypes = indexed.mapValues(_.fieldType).toMap
+ val fieldTypes = indexed.map { case (name, field) => name -> field.fieldType }
JArray(InMemoryQueryExecutor.execute(records, plan, fieldTypes))
}
diff --git a/obp-api/src/main/scala/code/api/dynamic/entity/helper/DynamicEntityHelper.scala b/obp-api/src/main/scala/code/api/dynamic/entity/helper/DynamicEntityHelper.scala
index 4b0d6c1f1a..29845859a9 100644
--- a/obp-api/src/main/scala/code/api/dynamic/entity/helper/DynamicEntityHelper.scala
+++ b/obp-api/src/main/scala/code/api/dynamic/entity/helper/DynamicEntityHelper.scala
@@ -755,7 +755,6 @@ case class DynamicEntityInfo(definition: String, entityName: String, bankId: Opt
val singleName = StringHelpers.snakify(entityName).replaceFirst("[-_]*$", "")
- val jsonTypeMap: Map[String, Class[_]] = DynamicEntityFieldType.nameToValue.mapValues(_.jValueType)
val definitionJson = json.parse(definition).asInstanceOf[JObject]
val entity = (definitionJson \ entityName).asInstanceOf[JObject]
@@ -798,10 +797,7 @@ case class DynamicEntityInfo(definition: String, entityName: String, bankId: Opt
.map(field => (field.name, (field.value \ "type").asInstanceOf[JString].s))
.toMap
- val fieldNameToType: Map[String, Class[_]] = fieldNameToTypeName
- .mapValues(jsonTypeMap(_))
-
- val fields = result.obj.filter(it => fieldNameToType.keySet.contains(it.name))
+ val fields = result.obj.filter(it => fieldNameToTypeName.keySet.contains(it.name))
(id, fields.exists(_.name == idName)) match {
case (Some(idValue), false) => JObject(JField(idName, JString(idValue)) :: fields)
diff --git a/obp-api/src/main/scala/code/api/pemusage/PemUsage.scala b/obp-api/src/main/scala/code/api/pemusage/PemUsage.scala
index a6530d7793..91e9c965c4 100644
--- a/obp-api/src/main/scala/code/api/pemusage/PemUsage.scala
+++ b/obp-api/src/main/scala/code/api/pemusage/PemUsage.scala
@@ -4,7 +4,7 @@ import code.api.util.APIUtil
import net.liftweb.util.SimpleInjector
object PemUsageDI extends SimpleInjector {
- val pemUsage = new Inject(buildOne _) {}
+ val pemUsage = new Inject(() => buildOne) {}
def buildOne: PemUsageProviderTrait = MappedPemUsageProvider
}
diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala
index a625ce703e..a2a3fabb2a 100644
--- a/obp-api/src/main/scala/code/api/util/APIUtil.scala
+++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala
@@ -1533,7 +1533,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
case BigIntBody(v) => JInt(v)
case FloatBody(v) => JDouble(v)
case DoubleBody(v) => JDouble(v)
- case BigDecimalBody(v) => JDouble(v.doubleValue())
+ case BigDecimalBody(v) => JDouble(v.doubleValue)
case JArrayBody(v) => v
case _ => throw new RuntimeException(s"$value is not supported, please add a case for it.")
}
@@ -1598,8 +1598,18 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
requestUrl: String, // The URL. THIS GETS MODIFIED TO include the implemented in prefix e.g. /obp/vX.X). Starts with / No trailing slash.
summary: String, // A summary of the call (originally taken from code comment) SHOULD be under 120 chars to be inline with Swagger
var description: String, // Longer description (originally taken from github wiki)
- exampleRequestBody: scala.Product, // An example of the request body, any type of: case class, JObject, EmptyBody or sub type of PrimaryDataBody, PrimaryDataBody is for primary type
- successResponseBody: scala.Product, // A successful response body, any type of: case class, JObject, EmptyBody or sub type of PrimaryDataBody, PrimaryDataBody is for primary type
+ // Any rather than scala.Product: 2.12's List was a Product and 2.13's is
+ // not, and a list is a legitimate body here - getAllFields has always had
+ // a branch for one. The bound did do something, which is why widening it
+ // is not free: getAllFields reads these values as products, and the bound
+ // rejected a non-Product body at compile time across every ResourceDoc.
+ // Nothing replaces that check. Making getAllFields throw on a body it
+ // cannot describe was tried and reverted - it recurses into scalars, so
+ // the throw fired on legitimate input and took out five suites. A body of
+ // the wrong type now yields an empty field table, silently, and the place
+ // to catch it is a check here rather than in the field walker.
+ exampleRequestBody: Any, // An example of the request body, any type of: case class, List, JObject, EmptyBody or sub type of PrimaryDataBody, PrimaryDataBody is for primary type
+ successResponseBody: Any, // A successful response body, any type of: case class, List, JObject, EmptyBody or sub type of PrimaryDataBody, PrimaryDataBody is for primary type
var errorResponseBodies: List[String], // Possible error responses
tags: List[ResourceDocTag],
var roles: Option[List[ApiRole]] = None,
@@ -1828,7 +1838,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{
val errorMessage = if (rolesForCheck.filter(_.requiresBankId).isEmpty) UserHasMissingRoles + rolesForCheck.mkString(" or ")
else UserHasMissingRoles + rolesForCheck.mkString(" or ") + s" for BankId($bankIdStr)."
Helper.booleanToFuture(errorMessage, cc = callContext) { APIUtil.handleAccessControlWithAuthMode(bankIdStr, userIdStr, consumerId, rolesForCheck, authMode) }
- } else Future.successful(Full(Unit))
+ } else Future.successful(Full(()))
def checkAccount(bankId: Option[BankId], accountId: Option[AccountId], callContext: Option[CallContext]): Future[(BankAccount, Option[CallContext])] =
if (isNeedCheckAccount && bankId.isDefined && accountId.isDefined) checkAccountFun(bankId.get)(accountId.get, callContext) else Future.successful(null.asInstanceOf[BankAccount] -> callContext)
def checkView(viewId: Option[ViewId], bankId: Option[BankId], accountId: Option[AccountId], boxUser: Box[User], callContext: Option[CallContext]): Future[View] =
diff --git a/obp-api/src/main/scala/code/api/util/ApiRole.scala b/obp-api/src/main/scala/code/api/util/ApiRole.scala
index 30b2cbeb1a..7e808099fd 100644
--- a/obp-api/src/main/scala/code/api/util/ApiRole.scala
+++ b/obp-api/src/main/scala/code/api/util/ApiRole.scala
@@ -1504,7 +1504,7 @@ object ApiRole extends MdcLoggable{
}
def availableRoles: List[String] = {
- import scala.collection.JavaConverters._
+ import scala.jdk.CollectionConverters._
val dynamicRoles = dynamicApiRoles.keys().asScala.toList
dynamicRoles ::: roles.map(_.toString)
}
diff --git a/obp-api/src/main/scala/code/api/util/CertificateVerifier.scala b/obp-api/src/main/scala/code/api/util/CertificateVerifier.scala
index 66743d4832..38d7466c9c 100644
--- a/obp-api/src/main/scala/code/api/util/CertificateVerifier.scala
+++ b/obp-api/src/main/scala/code/api/util/CertificateVerifier.scala
@@ -8,7 +8,7 @@ import java.security.cert._
import java.util.{Base64, Collections}
import javax.net.ssl.TrustManagerFactory
import scala.io.Source
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.util.{Failure, Success, Try}
object CertificateVerifier extends MdcLoggable {
@@ -69,7 +69,7 @@ object CertificateVerifier extends MdcLoggable {
trustManagerFactory.init(trustStore)
// Get trusted CAs from the trust store
- val trustAnchors = enumerationAsScalaIterator(trustStore.aliases())
+ val trustAnchors = trustStore.aliases().asScala
.filter(trustStore.isCertificateEntry(_))
.map(alias => trustStore.getCertificate(alias).asInstanceOf[X509Certificate])
.map(cert => new TrustAnchor(cert, null))
diff --git a/obp-api/src/main/scala/code/api/util/DynamicUtil.scala b/obp-api/src/main/scala/code/api/util/DynamicUtil.scala
index 878e3bc08c..69ca8dea3c 100644
--- a/obp-api/src/main/scala/code/api/util/DynamicUtil.scala
+++ b/obp-api/src/main/scala/code/api/util/DynamicUtil.scala
@@ -385,7 +385,11 @@ object DynamicUtil extends MdcLoggable{
val allowedRuntimePermissions = permissions.openOrThrowException("Can not compile the props `dynamic_code_sandbox_permissions` to permissions")
val dependenciesString = APIUtil.getPropsValue("dynamic_code_compile_validate_dependencies", "[]").trim
- val scalaCodeDependencies = s"${DynamicUtil.importStatements}"+dependenciesString.replaceFirst("\\[","Map(").dropRight(1) +").mapValues(v => StringUtils.split(v, ',').map(_.trim).toSet)"
+ // `Map[String, String](` rather than `Map(`: the props default is an empty list, and a bare
+ // `Map()` leaves its type parameters undetermined, so the trailing .toMap cannot prove the
+ // elements are pairs and the reflective compilation fails. The .toMap itself is needed because
+ // mapValues returns a view rather than a Map.
+ val scalaCodeDependencies = s"${DynamicUtil.importStatements}"+dependenciesString.replaceFirst("\\[","Map[String, String](").dropRight(1) +").mapValues(v => StringUtils.split(v, ',').map(_.trim).toSet).toMap"
val dependenciesBox: Box[Map[String, Set[String]]] = DynamicUtil.compileScalaCodeUnchecked(scalaCodeDependencies)
/**
diff --git a/obp-api/src/main/scala/code/api/util/ErrorMessages.scala b/obp-api/src/main/scala/code/api/util/ErrorMessages.scala
index 35a14c5dba..33040e83d4 100644
--- a/obp-api/src/main/scala/code/api/util/ErrorMessages.scala
+++ b/obp-api/src/main/scala/code/api/util/ErrorMessages.scala
@@ -1170,7 +1170,7 @@ object ErrorMessages {
}
val list = listOfMessaegeNumbers.flatten
val duplicatedMessageNumbers = list
- .groupBy(x => x).mapValues(x => x.length) // Compute the number of occurrences of each message number
+ .groupBy(x => x).map { case (n, occurrences) => n -> occurrences.length } // Compute the number of occurrences of each message number
.toList.filter(_._2 > 1) // Make a list with numbers which have more than 1 occurrences
duplicatedMessageNumbers
}
diff --git a/obp-api/src/main/scala/code/api/util/Glossary.scala b/obp-api/src/main/scala/code/api/util/Glossary.scala
index 2a1bf0faab..f252fbf92d 100644
--- a/obp-api/src/main/scala/code/api/util/Glossary.scala
+++ b/obp-api/src/main/scala/code/api/util/Glossary.scala
@@ -5089,7 +5089,7 @@ object Glossary extends MdcLoggable {
val conn = resourceUrl.openConnection().asInstanceOf[java.net.JarURLConnection]
val jar = conn.getJarFile
val prefix = conn.getEntryName + "/"
- import scala.collection.JavaConverters._
+ import scala.jdk.CollectionConverters._
jar.entries().asScala
.filter(e => !e.isDirectory && e.getName.startsWith(prefix) && e.getName.endsWith(".md"))
.map { entry =>
diff --git a/obp-api/src/main/scala/code/api/util/JwsUtil.scala b/obp-api/src/main/scala/code/api/util/JwsUtil.scala
index d7c979e665..f879ce6188 100644
--- a/obp-api/src/main/scala/code/api/util/JwsUtil.scala
+++ b/obp-api/src/main/scala/code/api/util/JwsUtil.scala
@@ -18,7 +18,7 @@ import java.time.format.DateTimeFormatter
import java.time.{Duration, ZoneOffset, ZonedDateTime}
import java.util
import scala.collection.immutable.{HashMap, List}
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
object JwsUtil extends MdcLoggable {
diff --git a/obp-api/src/main/scala/code/api/util/JwtUtil.scala b/obp-api/src/main/scala/code/api/util/JwtUtil.scala
index b6ddeabb15..048b28b8ec 100644
--- a/obp-api/src/main/scala/code/api/util/JwtUtil.scala
+++ b/obp-api/src/main/scala/code/api/util/JwtUtil.scala
@@ -134,7 +134,7 @@ object JwtUtil extends MdcLoggable {
try {
val signedJWT = SignedJWT.parse(jwtToken)
// claims extraction...
- import scala.collection.JavaConverters._
+ import scala.jdk.CollectionConverters._
signedJWT.getJWTClaimsSet.getAudience().asScala.toList
} catch {
case e: Exception =>
diff --git a/obp-api/src/main/scala/code/api/util/http4s/RequestScopeConnection.scala b/obp-api/src/main/scala/code/api/util/http4s/RequestScopeConnection.scala
index 0f98d1bf88..7715f26f25 100644
--- a/obp-api/src/main/scala/code/api/util/http4s/RequestScopeConnection.scala
+++ b/obp-api/src/main/scala/code/api/util/http4s/RequestScopeConnection.scala
@@ -112,7 +112,9 @@ object RequestScopeConnection extends MdcLoggable {
*/
val currentProxy: TransmittableThreadLocal[Connection] =
new TransmittableThreadLocal[Connection]() {
- override protected def childValue(parentValue: Connection): Connection = null
+ // Public, not protected: TransmittableThreadLocal declares childValue public, and an
+ // override may not narrow that. 2.12 accepted the narrowing; 2.13 rejects it.
+ override def childValue(parentValue: Connection): Connection = null
}
/**
diff --git a/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala b/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala
index 7b432420bf..b70552fe01 100644
--- a/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala
+++ b/obp-api/src/main/scala/code/api/v1_4_0/JSONFactory1_4_0.scala
@@ -347,8 +347,8 @@ object JSONFactory1_4_0 extends MdcLoggable{
summary: String,
description: String, //This will be a `HTML` format.
description_markdown: String,// This will be a `MARK_DOWN` format.
- example_request_body: scala.Product,
- success_response_body: scala.Product,
+ example_request_body: Any,
+ success_response_body: Any,
error_response_bodies: List[String],
tags: List[String],
typed_request_body: JValue, //JSON Schema --> https://spacetelescope.github.io/understanding-json-schema/index.html
@@ -482,39 +482,52 @@ object JSONFactory1_4_0 extends MdcLoggable{
}
}
- def getAllFields(jsonBody: scala.Product): List[Field] = {
- def loopAllFields(rootFields: List[Field]) = {
+ def getAllFields(jsonBody: Any): List[Field] = {
+ def loopAllFields(product: scala.Product, rootFields: List[Field]) = {
val fields = for {
- field <- jsonBody.productIterator.toList if (field.isInstanceOf[scala.Product] && field != jsonBody)
+ field <- product.productIterator.toList if (field.isInstanceOf[scala.Product] && field != product)
fields = getAllFields(field.asInstanceOf[scala.Product])
} yield
fields
(rootFields ++ fields.flatten).toSet.toList
}
- //The root level is a list: eg: List[Users]
- if(jsonBody.isInstanceOf[List[Any]] && jsonBody.productIterator.toList.nonEmpty){
- val rootFields: List[Field] = jsonBody.productIterator.toSet.head.getClass.getDeclaredFields.toList
- loopAllFields(rootFields)
- }else {
- jsonBody match {
- case JvalueCaseClass(jValue) =>
- val types = Nil
- types
- case _ =>
- val rootFields: List[Field] = jsonBody.getClass().getDeclaredFields().toSet.toList
- loopAllFields(rootFields)
- }
+ jsonBody match {
+ // A root-level collection - eg List[Users] - documents the fields of what it holds, not of
+ // the collection. Any, rather than scala.Product, because 2.13's List is not a Product: on
+ // 2.12 this arrived through productIterator, and `head` was picked out of a Set of two, so
+ // the tail could win the coin toss and the fields came out wrong.
+ //
+ // Every element is read, not just the head: a heterogeneous list would otherwise document
+ // only what its first entry declares. That does mean the collection is forced, so a lazy or
+ // infinite one would not survive here - reading every element is the point of the branch,
+ // and an example body is a literal, so there is nothing to be lazy about.
+ case coll: Iterable[_] =>
+ // flatMap over the iterator rather than folding with ++, which rebuilt the accumulator per
+ // element. distinct, not toSet.toList: it is equally linear and keeps first-seen order.
+ coll.iterator.flatMap(getAllFields).toList.distinct
+ case JvalueCaseClass(_) => Nil
+ case product: scala.Product =>
+ loopAllFields(product, product.getClass().getDeclaredFields().toSet.toList)
+ // Nil, deliberately. Rejecting an undescribable value was tried and is wrong: this method
+ // recurses, and it legitimately reaches scalars - the elements of a List[String] field, a
+ // null - which simply have no fields to report. Throwing here took out five existing suites.
+ //
+ // The cost is real though. The parameter is Any so that a list can be documented, and that
+ // gives up the compile-time check the old scala.Product bound applied at every ResourceDoc,
+ // so a body of the wrong type now yields an empty field table rather than a build error.
+ // Catching that belongs at the ResourceDoc call site, not in a recursive field walker.
+ case _ => Nil
}
}
- def checkFieldOption(jsonBody: scala.Product, rootFields: List[Field]) = {
+ def checkFieldOption(jsonBody: Any, rootFields: List[Field]) = {
val types = rootFields.map(f => (f.getName(), f.getType().getCanonicalName().contains("Option")))
(decompose(jsonBody), types)
}
- def prepareJsonFieldDescription(jsonBody: scala.Product, jsonType: String, jsonRequestBodyFieldsI18n: String, jsonResponseBodyFieldsI18n: String): String = {
+ def prepareJsonFieldDescription(jsonBody: Any, jsonType: String, jsonRequestBodyFieldsI18n: String, jsonResponseBodyFieldsI18n: String): String = {
val allFields = getAllFields(jsonBody)
val (jsonBodyJValue: json.JValue, allFieldsAndOptionStatus) = checkFieldOption(jsonBody, allFields)
// Group by is mandatory criteria and sort those 2 groups by name of the field
@@ -742,6 +755,36 @@ object JSONFactory1_4_0 extends MdcLoggable{
* @return
* the OBP type format.
*/
+ /**
+ * The schema for one element of a bare collection.
+ *
+ * translateEntity only knows how to describe an object - it reflects over constructor arguments -
+ * so handing it a scalar answers {"properties":{},"type":"object"} and the element's real type is
+ * lost. The scalar vocabulary lives in the per-field loop inside translateEntity, keyed by field
+ * name, and cannot be reached from a value alone; these cases mirror it for the kinds a
+ * collection element can be.
+ *
+ * Enumerations are the reason this exists. 2.12 reflected over the cons cell, which made `head` a
+ * field, and a field holding an EnumValue goes through the case that emits {"type":"string",
+ * "enum":[...]}. Describing the list as an array of its head has to keep those members - twelve
+ * published request bodies across createAuthenticationTypeValidation and
+ * updateAuthenticationTypeValidation are lists of them.
+ *
+ * Anything not named here is an object and goes back through translateEntity, as before.
+ */
+ private def elementSchema(element: Any): String = element match {
+ case e: EnumValue =>
+ val enumValues = OBPEnumeration.getValuesByInstance(e).map(it => s""""$it"""").mkString("[", ", ", "]")
+ s"""{"type":"string","enum": $enumValues}"""
+ case _: String | _: JString => """{"type":"string"}"""
+ case _: Boolean | _: JBool => """{"type":"boolean"}"""
+ case _: Int | _: Long | _: JInt => """{"type":"integer"}"""
+ case _: Double | _: Float | _: JDouble => """{"type":"number"}"""
+ case _: BigDecimal => """{"type":"string"}"""
+ case _: java.util.Date => """{"type": "string","format": "date-time"}"""
+ case other => translateEntity(other, false)
+ }
+
def translateEntity(entity: Any, isArray:Boolean): String = {
val extractedEntity = entity match {
case Full(v) => v
@@ -774,6 +817,16 @@ object JSONFactory1_4_0 extends MdcLoggable{
case JArray(List()) =>
// Empty array
return """{"type": "array"}"""
+ // A bare Scala collection is the same shape as a JArray and gets the same answer: the element
+ // carries the schema. It is not reflected over - that yields head and tail rather than API
+ // fields, and on 2.13 it does not terminate, because Nil holds a static EmptyUnzip of (Nil,
+ // Nil) and following it returns to Nil for ever. Reading the head, or nothing when there is
+ // no head, touches neither. Falling through instead published "properties": {} for the three
+ // endpoints that return a bare List, which is less than 2.12 said even while leaking head/tl.
+ // Map is excluded deliberately: it is an Iterable but it is not a JSON array.
+ case coll: Iterable[_] if !coll.isInstanceOf[scala.collection.Map[_, _]] =>
+ return if (coll.isEmpty) """{"type": "array"}"""
+ else """{"type": "array", "items": """ + elementSchema(coll.head) + "}"
case _ => // Continue with normal processing
}
@@ -782,6 +835,10 @@ object JSONFactory1_4_0 extends MdcLoggable{
case ListResult(name, results) => Map((name, results))
case JObject(jFields) => jFields.map(it => (it.name, it.value)).toMap
case _: JArray => Map.empty // Don't extract fields from JArray - it has internal "arr" field
+ // Only a Map reaches this now - every other collection returned above as an array. A Map is
+ // not reflected over for the same reason a List is not: what reflection yields is the
+ // collection's own machinery, not API fields.
+ case _: Iterable[_] => Map.empty
case _ => ReflectUtils.getFieldValues(extractedEntity.asInstanceOf[AnyRef])()
}
@@ -903,7 +960,7 @@ object JSONFactory1_4_0 extends MdcLoggable{
definition
}
- def createTypedBody(exampleRequestBody: scala.Product): JValue = {
+ def createTypedBody(exampleRequestBody: Any): JValue = {
def res = translateEntity(exampleRequestBody,false)
exampleRequestBody match {
case EmptyBody => JNothing
diff --git a/obp-api/src/main/scala/code/api/v4_0_0/Http4s400.scala b/obp-api/src/main/scala/code/api/v4_0_0/Http4s400.scala
index 6851508e34..8221f69018 100644
--- a/obp-api/src/main/scala/code/api/v4_0_0/Http4s400.scala
+++ b/obp-api/src/main/scala/code/api/v4_0_0/Http4s400.scala
@@ -73,7 +73,7 @@ import java.text.SimpleDateFormat
import java.util
import com.networknt.schema.ValidationMessage
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import code.model._ // implicit BankAccountExtended → moderatedBankAccount
import code.model.dataAccess.AuthUser
import code.ratelimiting.RateLimitingDI
@@ -2031,7 +2031,7 @@ object Http4s400 {
for {
(dynamicEndpoints, _) <- NewStyle.function.getDynamicEndpoints(bankId, Some(cc))
} yield {
- val resultList = dynamicEndpoints.map[JObject, List[JObject]] { dynamicEndpoint =>
+ val resultList = dynamicEndpoints.map[JObject] { dynamicEndpoint =>
val swaggerJson = parse(dynamicEndpoint.swaggerString)
("user_id", cc.userId) ~ ("dynamic_endpoint_id", dynamicEndpoint.dynamicEndpointId) ~
("swagger_string", swaggerJson)
@@ -2425,7 +2425,7 @@ object Http4s400 {
for {
(dynamicEndpoints, _) <- NewStyle.function.getDynamicEndpointsByUserId(user.userId, Some(cc))
} yield {
- val resultList = dynamicEndpoints.map[JObject, List[JObject]] { dynamicEndpoint =>
+ val resultList = dynamicEndpoints.map[JObject] { dynamicEndpoint =>
val swaggerJson = parse(dynamicEndpoint.swaggerString)
("user_id", user.userId) ~ ("dynamic_endpoint_id", dynamicEndpoint.dynamicEndpointId) ~
("swagger_string", swaggerJson)
diff --git a/obp-api/src/main/scala/code/api/v5_1_0/Http4s510.scala b/obp-api/src/main/scala/code/api/v5_1_0/Http4s510.scala
index 78e39f7e99..96e1d695d0 100644
--- a/obp-api/src/main/scala/code/api/v5_1_0/Http4s510.scala
+++ b/obp-api/src/main/scala/code/api/v5_1_0/Http4s510.scala
@@ -987,7 +987,7 @@ object Http4s510 {
case Full(value) =>
val wanted = value.split(",").map(_.trim.toLowerCase).filter(_.nonEmpty).toSet
if (wanted.contains("none")) Nil
- else availableProviders.filterKeys(wanted.contains).values.toList
+ else availableProviders.filter { case (name, _) => wanted.contains(name) }.values.toList
case _ => Nil
}
WellKnownUrisJsonV510(providersToShow)
diff --git a/obp-api/src/main/scala/code/api/v6_0_0/Http4s600.scala b/obp-api/src/main/scala/code/api/v6_0_0/Http4s600.scala
index dce78f7fa1..01b6bae3a7 100644
--- a/obp-api/src/main/scala/code/api/v6_0_0/Http4s600.scala
+++ b/obp-api/src/main/scala/code/api/v6_0_0/Http4s600.scala
@@ -99,7 +99,7 @@ import org.http4s.{Header, HttpRoutes, Request, Response, Uri}
import org.http4s.dsl.io._
import org.typelevel.ci.CIString
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.collection.mutable.ArrayBuffer
import scala.concurrent.Future
@@ -757,7 +757,7 @@ object Http4s600 {
case req @ GET -> `prefixPath` / "banks" / _ / "accounts" =>
EndpointHelpers.withUserAndBank(req) { (user, bank, cc) =>
val filteredParams: Map[String, List[String]] = req.uri.query.multiParams
- .filterKeys(k => k != PARAM_TIMESTAMP && k != PARAM_LOCALE)
+ .filter { case (k, _) => k != PARAM_TIMESTAMP && k != PARAM_LOCALE }
.map { case (k, vs) => k -> vs.toList }
.toMap
for {
diff --git a/obp-api/src/main/scala/code/api/v7_0_0/Http4s700.scala b/obp-api/src/main/scala/code/api/v7_0_0/Http4s700.scala
index cbcbe948bb..0607cb6aab 100644
--- a/obp-api/src/main/scala/code/api/v7_0_0/Http4s700.scala
+++ b/obp-api/src/main/scala/code/api/v7_0_0/Http4s700.scala
@@ -55,7 +55,7 @@ import org.http4s._
import org.http4s.dsl.io._
import org.typelevel.ci.CIString
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.collection.mutable.ArrayBuffer
import scala.concurrent.Future
import scala.language.{higherKinds, implicitConversions}
diff --git a/obp-api/src/main/scala/code/atmattribute/AtmAttribute.scala b/obp-api/src/main/scala/code/atmattribute/AtmAttribute.scala
index 2270602688..a9c67187e4 100644
--- a/obp-api/src/main/scala/code/atmattribute/AtmAttribute.scala
+++ b/obp-api/src/main/scala/code/atmattribute/AtmAttribute.scala
@@ -12,7 +12,7 @@ import scala.concurrent.Future
object AtmAttributeX extends SimpleInjector {
- val atmAttributeProvider = new Inject(buildOne _) {}
+ val atmAttributeProvider = new Inject(() => buildOne) {}
def buildOne: AtmAttributeProviderTrait = AtmAttributeProvider
diff --git a/obp-api/src/main/scala/code/atms/Atms.scala b/obp-api/src/main/scala/code/atms/Atms.scala
index 98a5fa9e4d..647c7648e5 100644
--- a/obp-api/src/main/scala/code/atms/Atms.scala
+++ b/obp-api/src/main/scala/code/atms/Atms.scala
@@ -66,7 +66,7 @@ object Atms extends SimpleInjector {
) extends AtmT
- val atmsProvider = new Inject(buildOne _) {}
+ val atmsProvider = new Inject(() => buildOne) {}
def buildOne: AtmsProvider = MappedAtmsProvider
diff --git a/obp-api/src/main/scala/code/authtypevalidation/AuthenticationTypeValidationProvider.scala b/obp-api/src/main/scala/code/authtypevalidation/AuthenticationTypeValidationProvider.scala
index 1a6060fa42..eada38e8ec 100644
--- a/obp-api/src/main/scala/code/authtypevalidation/AuthenticationTypeValidationProvider.scala
+++ b/obp-api/src/main/scala/code/authtypevalidation/AuthenticationTypeValidationProvider.scala
@@ -14,7 +14,7 @@ import org.apache.commons.lang3.StringUtils
object AuthenticationTypeValidationProvider extends SimpleInjector {
- val validationProvider = new Inject(buildOne _) {}
+ val validationProvider = new Inject(() => buildOne) {}
def buildOne: MappedAuthTypeValidationProvider.type = MappedAuthTypeValidationProvider
}
diff --git a/obp-api/src/main/scala/code/bankaccountbalance/BankAccountBalanceProvider.scala b/obp-api/src/main/scala/code/bankaccountbalance/BankAccountBalanceProvider.scala
index ae2e6372c8..554e755a4b 100644
--- a/obp-api/src/main/scala/code/bankaccountbalance/BankAccountBalanceProvider.scala
+++ b/obp-api/src/main/scala/code/bankaccountbalance/BankAccountBalanceProvider.scala
@@ -13,7 +13,7 @@ import scala.concurrent.Future
object BankAccountBalanceX extends SimpleInjector {
- val bankAccountBalanceProvider = new Inject(buildOne _) {}
+ val bankAccountBalanceProvider = new Inject(() => buildOne) {}
def buildOne: BankAccountBalanceProviderTrait = MappedBankAccountBalanceProvider
diff --git a/obp-api/src/main/scala/code/bankattribute/BankAttribute.scala b/obp-api/src/main/scala/code/bankattribute/BankAttribute.scala
index d395823f88..d4cc54ff4b 100644
--- a/obp-api/src/main/scala/code/bankattribute/BankAttribute.scala
+++ b/obp-api/src/main/scala/code/bankattribute/BankAttribute.scala
@@ -13,7 +13,7 @@ import scala.concurrent.Future
object BankAttributeX extends SimpleInjector {
- val bankAttributeProvider = new Inject(buildOne _) {}
+ val bankAttributeProvider = new Inject(() => buildOne) {}
def buildOne: BankAttributeProviderTrait = BankAttributeProvider
diff --git a/obp-api/src/main/scala/code/bankconnectors/Connector.scala b/obp-api/src/main/scala/code/bankconnectors/Connector.scala
index 68c06963a9..3ad2c20c27 100644
--- a/obp-api/src/main/scala/code/bankconnectors/Connector.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/Connector.scala
@@ -84,7 +84,7 @@ object Connector extends SimpleInjector {
}
}
- val connector = new Inject(buildOne _) {}
+ val connector = new Inject(() => buildOne) {}
def buildOne: Connector = {
val connectorProps = code.api.Constant.CONNECTOR.openOrThrowException(s"$MandatoryPropertyIsNotSet The missing props is 'connector'")
diff --git a/obp-api/src/main/scala/code/bankconnectors/ConnectorProxy.scala b/obp-api/src/main/scala/code/bankconnectors/ConnectorProxy.scala
new file mode 100644
index 0000000000..f0af513793
--- /dev/null
+++ b/obp-api/src/main/scala/code/bankconnectors/ConnectorProxy.scala
@@ -0,0 +1,73 @@
+package code.bankconnectors
+
+import java.lang.reflect.InvocationHandler
+
+import net.bytebuddy.ByteBuddy
+import net.bytebuddy.dynamic.loading.ClassLoadingStrategy
+import net.bytebuddy.implementation.InvocationHandlerAdapter
+import net.bytebuddy.matcher.ElementMatchers
+
+/**
+ * Generates the runtime `Connector` proxies. Three of them exist - StarConnector in the package
+ * object, InternalConnector, and ConnectorUtils.proxyConnector - and they differ only in what their
+ * handler does, so the generation itself lives here rather than three times over.
+ *
+ * This replaces cglib's Enhancer. cglib 3.3.0 bundles ASM 7.1, which reads class files only up to
+ * major version 57; Scala 2.13 compiled with -release 25 emits major 69, so every one of these
+ * proxies would fail to generate the moment the compiler is switched. That is why the swap happens
+ * before the version flip rather than as part of it.
+ *
+ * `Connector` is a trait, so the generated class implements it rather than extending it - both
+ * Enhancer.setSuperclass and ByteBuddy.subclass accept an interface and do the right thing.
+ *
+ * Object's own methods are left alone. Enhancer routed them to the callback as well, and for two of
+ * the three handlers that was harmless because they forward by `method.invoke(delegate, ...)`. It
+ * was not harmless for InternalConnector, whose handler reads any unrecognised name as a dynamic
+ * connector method to look up and compile: toString, hashCode and equals on that proxy all threw
+ * IllegalStateException, so logging the connector, interpolating it into a string, or using it as a
+ * map key blew up. Excluding them gives the generated class the ordinary Object implementations,
+ * which is also what makes proxy identity behave - reference equality, and a toString that does not
+ * depend on a delegate.
+ *
+ * `args` is null, not empty, for a method that declares no parameters - InvocationHandlerAdapter
+ * follows `java.lang.reflect.Proxy` here, where cglib passed a zero-length array. Forwarding with
+ * `method.invoke(target, args: _*)` survives it, because that compiles to Java varargs and
+ * `Method.invoke` reads a null array as no arguments; ProxyConnectorTest pins that on the proxy
+ * connector, whose synthetic `$default$` accessors are all no-argument. Anything that treats `args`
+ * as a collection does not survive it: `args.collectFirst`, `xs.zip(args)` and the like throw NPE.
+ * StarConnector's handler zipped parameter names with `args` for every method it did not recognise,
+ * so `logger` on that proxy threw NullPointerException until isInheritedMember was applied to it.
+ */
+private[bankconnectors] object ConnectorProxy {
+
+ /**
+ * Whether the interface carries this method from somewhere other than Connector itself - in
+ * practice MdcLoggable's logger, clazzName, initiate and the two setter bridges.
+ *
+ * No connector implements them, no dynamic code defines them and no MethodRouting names them, so
+ * every handler has to answer them from a real Connector instance instead of treating them as a
+ * connector call. That rule lives here because all three proxies need it and each one had to be
+ * taught it separately otherwise: InternalConnector threw IllegalStateException on them and
+ * StarConnector threw NullPointerException, both discovered one proxy at a time.
+ *
+ * Object's own methods are excluded here as well for symmetry, though create already leaves them
+ * unintercepted so a handler never sees one.
+ */
+ def isInheritedMember(method: java.lang.reflect.Method): Boolean =
+ method.getDeclaringClass != classOf[Connector] && method.getDeclaringClass != classOf[Object]
+
+ def create(handler: InvocationHandler): Connector =
+ new ByteBuddy()
+ .subclass(classOf[Connector])
+ .method(ElementMatchers.any().and(ElementMatchers.not(ElementMatchers.isDeclaredBy(classOf[Object]))))
+ .intercept(InvocationHandlerAdapter.of(handler))
+ .make()
+ // WRAPPER puts the generated class in a child class loader of the one that defines Connector.
+ // The alternative, injecting into that loader itself, needs the kind of JDK-internal access
+ // that keeps being closed off in newer releases; the proxies need nothing from it.
+ .load(classOf[Connector].getClassLoader, ClassLoadingStrategy.Default.WRAPPER)
+ .getLoaded
+ .getDeclaredConstructor()
+ .newInstance()
+ .asInstanceOf[Connector]
+}
diff --git a/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala b/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala
index f76260390b..6af21df486 100644
--- a/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/ConnectorUtils.scala
@@ -10,9 +10,8 @@ import net.liftweb.common.Full
import com.openbankproject.commons.util.json
import org.json4s.JsonDSL._
import org.json4s.{Formats, JObject, JValue}
-import net.sf.cglib.proxy.{Enhancer, MethodInterceptor, MethodProxy}
import org.apache.commons.lang3.StringUtils
-import java.lang.reflect.Method
+import java.lang.reflect.{InvocationHandler, Method}
import scala.concurrent.Future
import scala.reflect.ManifestFactory
import scala.reflect.runtime.universe
@@ -22,23 +21,20 @@ object ConnectorUtils {
lazy val proxyConnector: Connector = {
val excludeProxyMethods = Set("getDynamicEndpoints", "dynamicEntityProcess", "setAccountHolder", "updateUserAccountViewsOld")
- val intercept:MethodInterceptor = (_: Any, method: Method, args: Array[AnyRef], _: MethodProxy) => {
- val originResult: AnyRef = method.invoke(LocalMappedConnector, args:_*)
+ val intercept: InvocationHandler = new InvocationHandler {
+ override def invoke(proxy: AnyRef, method: Method, args: Array[AnyRef]): AnyRef = {
+ val originResult: AnyRef = method.invoke(LocalMappedConnector, args: _*)
-
- val methodName = method.getName
- val inBoundType: Option[Class[_]] = ReflectUtils.forClassOption(s"com.openbankproject.commons.dto.InBound${methodName.capitalize}")
- if (!methodName.contains("$default$") && inBoundType.isDefined && !excludeProxyMethods.contains(methodName)) {
- deleteIgnoreFieldValue(originResult, inBoundType.orNull).asInstanceOf[AnyRef]
- } else {
- originResult
+ val methodName = method.getName
+ val inBoundType: Option[Class[_]] = ReflectUtils.forClassOption(s"com.openbankproject.commons.dto.InBound${methodName.capitalize}")
+ if (!methodName.contains("$default$") && inBoundType.isDefined && !excludeProxyMethods.contains(methodName)) {
+ deleteIgnoreFieldValue(originResult, inBoundType.orNull).asInstanceOf[AnyRef]
+ } else {
+ originResult
+ }
}
-
}
- val enhancer: Enhancer = new Enhancer()
- enhancer.setSuperclass(classOf[Connector])
- enhancer.setCallback(intercept)
- enhancer.create().asInstanceOf[Connector]
+ ConnectorProxy.create(intercept)
}
private def deleteIgnoreFieldValue(obj: Any, inBoundClass: Class[_]): Any = obj match {
diff --git a/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala b/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala
index 758f5b10ba..3c7a29a34e 100644
--- a/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/InternalConnector.scala
@@ -9,9 +9,7 @@ import scala.concurrent.Future
import code.connectormethod.{ConnectorMethodProvider, JsonConnectorMethod}
import com.github.dwickern.macros.NameOf.nameOf
import net.liftweb.common.{Box, Failure}
-import net.sf.cglib.proxy.{Enhancer, MethodInterceptor, MethodProxy}
-
-import java.lang.reflect.Method
+import java.lang.reflect.{InvocationHandler, Method}
import code.api.util.{CallContext, DynamicUtil}
import org.apache.commons.lang3.StringUtils
import org.apache.commons.text.StringEscapeUtils
@@ -27,10 +25,7 @@ import scala.reflect.runtime.universe.{MethodSymbol, TermSymbol, typeOf}
object InternalConnector {
lazy val instance: Connector = {
- val enhancer: Enhancer = new Enhancer()
- enhancer.setSuperclass(classOf[Connector])
- enhancer.setCallback(intercept)
- enhancer.create().asInstanceOf[Connector]
+ ConnectorProxy.create(intercept)
}
//this object is a empty Connector implementation, just for supply default args
@@ -39,18 +34,40 @@ object InternalConnector {
// in this object, you must make sure this object is empty.
}
- private val intercept:MethodInterceptor = (_: Any, method: Method, args: Array[AnyRef], _: MethodProxy) => {
- val methodName = method.getName
- if(methodName == nameOf(connector.callableMethods)) {
- this.callableMethods
- } else if (methodName.contains("$default$")) {
- method.invoke(connector, args:_*)
- } else {
- val function = getFunction(methodName)
- DynamicUtil.executeFunction(methodName, function, args)
+ private val intercept: InvocationHandler = new InvocationHandler {
+ override def invoke(proxy: AnyRef, method: Method, args: Array[AnyRef]): AnyRef = {
+ val methodName = method.getName
+ if(methodName == nameOf(connector.callableMethods)) {
+ InternalConnector.this.callableMethods
+ // isInheritedMember is subsumed by isDynamicallyImplementable today, and asked anyway: the
+ // second is derived from methodNameToSignature, a map built for rendering signatures whose
+ // exclusion of inherited members is a side effect of how it is filtered rather than something
+ // it promises. Naming the rule directly is what keeps this from depending on that accident.
+ } else if (methodName.contains("$default$") || ConnectorProxy.isInheritedMember(method)
+ || !isDynamicallyImplementable(methodName)) {
+ // Anything outside the Connector API goes to the empty Connector object, which implements
+ // it for real. Connector extends Helper.MdcLoggable, so the interface also carries logger,
+ // clazzName and initiate; dynamic code never defines those, and sending them down the
+ // lookup-and-compile path threw IllegalStateException - which is what happened to anything
+ // that logged or interpolated this proxy. The $default$ accessors take the same route.
+ method.invoke(connector, args:_*)
+ } else {
+ val function = getFunction(methodName)
+ DynamicUtil.executeFunction(methodName, function, args)
+ }
}
}
+ /**
+ * Whether dynamic code can supply this method at all. It is the key set of methodNameToSignature,
+ * named separately because the handler asks a different question of it than its builder answers:
+ * that map is decls filtered by `!t.isVal && !t.isVar`, so on top of ConnectorProxy's inherited
+ * members it also excludes Connector's own vals - messageDocs among them. Everything it excludes
+ * is answered by the empty stub, which for a val means the stub's own instance.
+ */
+ private def isDynamicallyImplementable(methodName: String): Boolean =
+ methodNameToSignature.contains(methodName)
+
private def getFunction(methodName: String) = {
ConnectorMethodProvider.provider.vend.getByMethodNameWithCache(methodName) map {
case v :JsonConnectorMethod =>
@@ -258,7 +275,14 @@ object InternalConnector {
case (methodName, methodSymbol) =>
val signature = methodSymbol.typeSignature.toString
val returnType = methodSymbol.returnType.toString
- val methodSignature = StringUtils.substringBeforeLast(signature, returnType) + ":" + returnType
+ // Strip any colon the parameter part already ends with before adding one back. 2.12 rendered
+ // a method type as "(params)ReturnType" and 2.13 renders it as "(params): ReturnType", so
+ // appending unconditionally produced "(params): : ReturnType" - which the runtime compiler
+ // rejected with "identifier expected but ':' found", failing every dynamic connector method.
+ val paramsPart = StringUtils.substringBeforeLast(signature, returnType).trim.stripSuffix(":")
+ // No space after the colon: the boxRegx/futureRegx/obpReturnTypeRegx patterns above match
+ // ")\\s*:" immediately followed by the type name.
+ val methodSignature = s"$paramsPart:$returnType"
methodName -> methodSignature
}
}
\ No newline at end of file
diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala
index ba9fef0c5b..13b62768ba 100644
--- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala
@@ -90,7 +90,7 @@ import code.api.util.DoobieUtil
import java.util.Date
import java.util.UUID.randomUUID
import scala.collection.immutable.{List, Nil}
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.concurrent._
import scala.concurrent.duration._
import scala.language.postfixOps
@@ -1045,7 +1045,7 @@ object LocalMappedConnector extends Connector with MdcLoggable {
}
val allCurrencies = accountsBalances.map(_.balance.currency)
- val mostCommonCurrency = if (allCurrencies.isEmpty) "EUR" else allCurrencies.groupBy(identity).mapValues(_.size).maxBy(_._2)._1
+ val mostCommonCurrency = if (allCurrencies.isEmpty) "EUR" else allCurrencies.groupBy(identity).map { case (currency, occurrences) => currency -> occurrences.size }.maxBy(_._2)._1
val allCommonCurrencyBalances = for {
accountBalance <- accountsBalances
diff --git a/obp-api/src/main/scala/code/bankconnectors/generator/ConnectorBuilderUtil.scala b/obp-api/src/main/scala/code/bankconnectors/generator/ConnectorBuilderUtil.scala
index 0ae4ea0330..d36055f2bc 100644
--- a/obp-api/src/main/scala/code/bankconnectors/generator/ConnectorBuilderUtil.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/generator/ConnectorBuilderUtil.scala
@@ -10,7 +10,7 @@ import org.apache.commons.lang3.StringUtils.uncapitalize
import java.io.File
import java.net.URL
import java.util.Date
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.language.postfixOps
import scala.reflect.runtime.universe._
import scala.reflect.runtime.{universe => ru}
diff --git a/obp-api/src/main/scala/code/bankconnectors/package.scala b/obp-api/src/main/scala/code/bankconnectors/package.scala
index 8f8ebda4a8..7d835d1097 100644
--- a/obp-api/src/main/scala/code/bankconnectors/package.scala
+++ b/obp-api/src/main/scala/code/bankconnectors/package.scala
@@ -1,6 +1,6 @@
package code
-import java.lang.reflect.Method
+import java.lang.reflect.{InvocationHandler, Method}
import java.util.regex.Pattern
import org.apache.pekko.http.scaladsl.model.HttpMethod
@@ -18,10 +18,7 @@ import com.openbankproject.commons.ExecutionContext.Implicits.global
import net.liftweb.common.{Box, Empty, EmptyBox, Failure, Full, ParamFailure}
import net.liftweb.util.Helpers.now
import net.liftweb.util.ThreadGlobal
-import net.sf.cglib.proxy.{Enhancer, MethodInterceptor, MethodProxy}
-import scala.collection.mutable.ArrayBuffer
-import scala.collection.GenTraversableOnce
import scala.concurrent.Future
import scala.reflect.runtime.universe.{MethodSymbol, Type, typeOf}
import scala.util.{Success => TrySuccess, Failure => TryFailure}
@@ -49,50 +46,84 @@ package object bankconnectors extends MdcLoggable {
//this object is a empty Connector implementation, just for supply default args
object StubConnector extends Connector
- val intercept:MethodInterceptor = (_: Any, method: Method, args: Array[AnyRef], _: MethodProxy) => {
- if (method.getReturnType.getName == "scala.concurrent.Future" && !canOpenFuture(method.getName)) {
- throw new RuntimeException(ServiceIsTooBusy + s"Current Service(${method.getName})")
- } else {
- if (method.getName.contains("$default$")) {
- val connectorMethodResult = method.invoke(StubConnector, args:_*)
- if (connectorMethodResult.isInstanceOf[Future[_]] && canOpenFuture(method.getName)) {
- FutureUtil.futureWithLimits(connectorMethodResult.asInstanceOf[Future[_]], method.getName)
- }
- connectorMethodResult
+ val intercept: InvocationHandler = new InvocationHandler {
+ override def invoke(proxy: AnyRef, method: Method, args: Array[AnyRef]): AnyRef = {
+ if (method.getReturnType.getName == "scala.concurrent.Future" && !canOpenFuture(method.getName)) {
+ throw new RuntimeException(ServiceIsTooBusy + s"Current Service(${method.getName})")
} else {
- val methodName = method.getName
- val argNameToValue: Array[(String, AnyRef)] = method.getParameters.map(_.getName).zip(args)
- // TODO: getConnectorNameAndMethodRouting is also called inside invokeMethod.
- // Consider refactoring invokeMethod to accept a pre-resolved connectorName to avoid the duplicate lookup.
- val (_, connectorName) = getConnectorNameAndMethodRouting(methodName, argNameToValue)
-
- // Extract correlationId from CallContext before entering any Future callback,
- // because Lift's S.containerSession is unavailable in async contexts.
- val correlationId: String = args.collectFirst {
- case Some(cc: CallContext) => cc.correlationId
- case Full(cc: CallContext) => cc.correlationId
- }.getOrElse(getCorrelationId()) // fallback to Lift session if no CallContext in args
-
- // Record outbound (before call)
- ConnectorCountsRedis.incrementOutbound(connectorName, methodName)
- val t0 = System.currentTimeMillis()
-
- val (connectorMethodResult, methodSymbol) = invokeMethod(method, args)
-
- // Track metrics for Future results
- if (connectorMethodResult.isInstanceOf[Future[_]]) {
- val future = connectorMethodResult.asInstanceOf[Future[Any]]
- future.onComplete { result =>
- val duration = System.currentTimeMillis() - t0
- val isSuccess = result match {
- case TrySuccess(value) => !isFailureBox(value)
- case TryFailure(_) => false
+ if (method.getName.contains("$default$") || ConnectorProxy.isInheritedMember(method)) {
+ // The empty Connector implements both: the $default$ accessors it inherits, and the
+ // members Connector itself does not declare. Routing the latter would look them up as
+ // connector calls - and NPE on the way, since args is null for a no-arg method.
+ val connectorMethodResult = method.invoke(StubConnector, args:_*)
+ if (connectorMethodResult.isInstanceOf[Future[_]] && canOpenFuture(method.getName)) {
+ FutureUtil.futureWithLimits(connectorMethodResult.asInstanceOf[Future[_]], method.getName)
+ }
+ connectorMethodResult
+ } else {
+ val methodName = method.getName
+ val argNameToValue: Array[(String, AnyRef)] = method.getParameters.map(_.getName).zip(args)
+ // TODO: getConnectorNameAndMethodRouting is also called inside invokeMethod.
+ // Consider refactoring invokeMethod to accept a pre-resolved connectorName to avoid the duplicate lookup.
+ val (_, connectorName) = getConnectorNameAndMethodRouting(methodName, argNameToValue)
+
+ // Extract correlationId from CallContext before entering any Future callback,
+ // because Lift's S.containerSession is unavailable in async contexts.
+ val correlationId: String = args.collectFirst {
+ case Some(cc: CallContext) => cc.correlationId
+ case Full(cc: CallContext) => cc.correlationId
+ }.getOrElse(getCorrelationId()) // fallback to Lift session if no CallContext in args
+
+ // Record outbound (before call)
+ ConnectorCountsRedis.incrementOutbound(connectorName, methodName)
+ val t0 = System.currentTimeMillis()
+
+ val (connectorMethodResult, methodSymbol) = invokeMethod(method, args)
+
+ // Track metrics for Future results
+ if (connectorMethodResult.isInstanceOf[Future[_]]) {
+ val future = connectorMethodResult.asInstanceOf[Future[Any]]
+ future.onComplete { result =>
+ val duration = System.currentTimeMillis() - t0
+ val isSuccess = result match {
+ case TrySuccess(value) => !isFailureBox(value)
+ case TryFailure(_) => false
+ }
+
+ // Record inbound
+ ConnectorCountsRedis.incrementInbound(connectorName, methodName, isSuccess)
+
+ // Record detailed metric to DB
+ if (getPropsAsBoolValue("write_connector_metrics", false)) {
+ val params = extractKeyParams(args)
+ Future {
+ ConnectorMetricsProvider.metrics.vend.saveConnectorMetric(
+ connectorName, methodName, correlationId, now, duration, params, isSuccess)
+ }
+ }
+
+ // Record connector trace (outbound/inbound messages)
+ if (getPropsAsBoolValue("write_connector_trace", false)) {
+ val outbound = serializeOutboundArgs(method, args)
+ val inbound = serializeInboundResult(result)
+ val correlationId = getCorrelationId()
+ val (detailUserId, detailHttpVerb, detailApiUrl) = extractCallContextInfo(args)
+ val bankIdValue = extractBankIdFromArgs(args)
+ Future {
+ ConnectorTraceProvider.saveConnectorTrace(
+ correlationId, connectorName, methodName, bankIdValue,
+ outbound, inbound, now, duration, isSuccess,
+ detailUserId, detailHttpVerb, detailApiUrl)
+ }
+ }
}
+ } else {
+ // Non-future (legacy Box) result - track synchronously
+ val duration = System.currentTimeMillis() - t0
+ val isSuccess = !isFailureBox(connectorMethodResult)
- // Record inbound
ConnectorCountsRedis.incrementInbound(connectorName, methodName, isSuccess)
- // Record detailed metric to DB
if (getPropsAsBoolValue("write_connector_metrics", false)) {
val params = extractKeyParams(args)
Future {
@@ -104,7 +135,7 @@ package object bankconnectors extends MdcLoggable {
// Record connector trace (outbound/inbound messages)
if (getPropsAsBoolValue("write_connector_trace", false)) {
val outbound = serializeOutboundArgs(method, args)
- val inbound = serializeInboundResult(result)
+ val inbound = serializeInboundResult(TrySuccess(connectorMethodResult))
val correlationId = getCorrelationId()
val (detailUserId, detailHttpVerb, detailApiUrl) = extractCallContextInfo(args)
val bankIdValue = extractBankIdFromArgs(args)
@@ -116,50 +147,18 @@ package object bankconnectors extends MdcLoggable {
}
}
}
- } else {
- // Non-future (legacy Box) result - track synchronously
- val duration = System.currentTimeMillis() - t0
- val isSuccess = !isFailureBox(connectorMethodResult)
-
- ConnectorCountsRedis.incrementInbound(connectorName, methodName, isSuccess)
- if (getPropsAsBoolValue("write_connector_metrics", false)) {
- val params = extractKeyParams(args)
- Future {
- ConnectorMetricsProvider.metrics.vend.saveConnectorMetric(
- connectorName, methodName, correlationId, now, duration, params, isSuccess)
- }
+ if (connectorMethodResult.isInstanceOf[Future[_]] && canOpenFuture(method.getName)) {
+ FutureUtil.futureWithLimits(connectorMethodResult.asInstanceOf[Future[_]], method.getName)
}
-
- // Record connector trace (outbound/inbound messages)
- if (getPropsAsBoolValue("write_connector_trace", false)) {
- val outbound = serializeOutboundArgs(method, args)
- val inbound = serializeInboundResult(TrySuccess(connectorMethodResult))
- val correlationId = getCorrelationId()
- val (detailUserId, detailHttpVerb, detailApiUrl) = extractCallContextInfo(args)
- val bankIdValue = extractBankIdFromArgs(args)
- Future {
- ConnectorTraceProvider.saveConnectorTrace(
- correlationId, connectorName, methodName, bankIdValue,
- outbound, inbound, now, duration, isSuccess,
- detailUserId, detailHttpVerb, detailApiUrl)
- }
- }
- }
-
- if (connectorMethodResult.isInstanceOf[Future[_]] && canOpenFuture(method.getName)) {
- FutureUtil.futureWithLimits(connectorMethodResult.asInstanceOf[Future[_]], method.getName)
+ logger.debug(s"do required field validation for ${methodSymbol.typeSignature}")
+ val apiVersion = ApiVersionHolder.getApiVersion
+ validateRequiredFields(connectorMethodResult, methodSymbol.returnType, apiVersion)
}
- logger.debug(s"do required field validation for ${methodSymbol.typeSignature}")
- val apiVersion = ApiVersionHolder.getApiVersion
- validateRequiredFields(connectorMethodResult, methodSymbol.returnType, apiVersion)
}
}
}
- val enhancer: Enhancer = new Enhancer()
- enhancer.setSuperclass(classOf[Connector])
- enhancer.setCallback(intercept)
- enhancer.create().asInstanceOf[Connector]
+ ConnectorProxy.create(intercept)
}
/**
@@ -338,17 +337,23 @@ package object bankconnectors extends MdcLoggable {
value match {
// when method return one of Unit, null, EmptyBox, None, empty Array, empty collection,
// don't validate fields.
- case Unit | null => value
+ // BoxedUnit, not `Unit`: the old spelling matched the Unit companion object, which
+ // reflectively invoking a Unit-returning connector method never produces, so this arm
+ // never fired. () cannot be matched against an AnyRef scrutinee, and the boxed value is
+ // what actually arrives here.
+ case _: scala.runtime.BoxedUnit | null => value
case v @(_: EmptyBox, Some(_:CallContext) | None) => v
case n @(_:EmptyBox | None | Array()) => n
- case n : GenTraversableOnce[_] if n.isEmpty => n
+ case n : Iterable[_] if n.isEmpty => n
// all the follow return value need do validation of requied fields.
- case coll @(_:Array[_] | _: ArrayBuffer[_] | _: GenTraversableOnce[_]) =>
+ // ArrayBuffer used to be listed here beside GenTraversableOnce; it is an Iterable, so it is
+ // covered by the arm below and naming it separately only read as a deliberate special case.
+ case coll @(_:Array[_] | _: Iterable[_]) =>
val elementTpe = returnType.typeArgs.head
validate(value, elementTpe, coll, apiVersion, None, false)
- case Full((coll: GenTraversableOnce[_], cc: Option[_]))
+ case Full((coll: Iterable[_], cc: Option[_]))
if coll.nonEmpty && returnType <:< typeOf[Box[(_, Option[CallContext])]] =>
val elementTpe = getNestTypeArg(returnType, 0, 0, 0)
val callContext = cc.asInstanceOf[Option[CallContext]]
@@ -366,19 +371,19 @@ package object bankconnectors extends MdcLoggable {
validateMultiple(value, apiVersion)(v1 -> tpe1, v2 -> tpe2)
// return type is: Box[List[(ProductCollectionItem, Product, List[ProductAttribute])]]
- case Full(coll: Traversable[_])
+ case Full(coll: Iterable[_])
if coll.nonEmpty &&
- getNestTypeArg(returnType, 0, 0) <:< typeOf[(_, _, GenTraversableOnce[_])] =>
+ getNestTypeArg(returnType, 0, 0) <:< typeOf[(_, _, Iterable[_])] =>
val tpe1 = getNestTypeArg(returnType, 0, 0, 0)
val tpe2 = getNestTypeArg(returnType, 0, 0, 1)
val tpe3 = getNestTypeArg(returnType, 0, 0, 2, 0)
- val collTuple = coll.asInstanceOf[Traversable[(_, _, _)]]
+ val collTuple = coll.asInstanceOf[Iterable[(_, _, _)]]
val v1 = collTuple.map(_._1)
val v2 = collTuple.map(_._2)
val v3 = collTuple.map(_._3)
validateMultiple(value, apiVersion)(v1 -> tpe1, v2 -> tpe2, v3 -> tpe3)
- case Full(coll: GenTraversableOnce[_]) if coll.nonEmpty =>
+ case Full(coll: Iterable[_]) if coll.nonEmpty =>
val elementTpe = getNestTypeArg(returnType, 0, 0)
validate(value, elementTpe, coll, apiVersion)
@@ -438,7 +443,7 @@ package object bankconnectors extends MdcLoggable {
if(lefts.isEmpty) { // all validation passed
originValue
} else {
- val missingFields = lefts.flatMap(_.left.get)
+ val missingFields = lefts.collect { case Left(fields) => fields }.flatten
val value = missingFieldsToFailure(missingFields, cc)
if(resultIsBox) value else fullBoxOrException(value)
}
diff --git a/obp-api/src/main/scala/code/branches/Branches.scala b/obp-api/src/main/scala/code/branches/Branches.scala
index d16036f577..27d98b5f13 100644
--- a/obp-api/src/main/scala/code/branches/Branches.scala
+++ b/obp-api/src/main/scala/code/branches/Branches.scala
@@ -191,7 +191,7 @@ object Branches extends SimpleInjector {
- val branchesProvider = new Inject(buildOne _) {}
+ val branchesProvider = new Inject(() => buildOne) {}
def buildOne: BranchesProvider = MappedBranchesProvider
diff --git a/obp-api/src/main/scala/code/bulkpayment/BulkPaymentTrait.scala b/obp-api/src/main/scala/code/bulkpayment/BulkPaymentTrait.scala
index 9fd4638d05..4d8469a172 100644
--- a/obp-api/src/main/scala/code/bulkpayment/BulkPaymentTrait.scala
+++ b/obp-api/src/main/scala/code/bulkpayment/BulkPaymentTrait.scala
@@ -4,7 +4,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object BulkPayments extends SimpleInjector {
- val bulkPayment = new Inject(buildOne _) {}
+ val bulkPayment = new Inject(() => buildOne) {}
def buildOne: BulkPaymentProvider = MappedBulkPaymentProvider
}
diff --git a/obp-api/src/main/scala/code/cardattribute/CardAttribute.scala b/obp-api/src/main/scala/code/cardattribute/CardAttribute.scala
index e2f18124ea..64e42263a2 100644
--- a/obp-api/src/main/scala/code/cardattribute/CardAttribute.scala
+++ b/obp-api/src/main/scala/code/cardattribute/CardAttribute.scala
@@ -13,7 +13,7 @@ import scala.concurrent.Future
object CardAttributeX extends SimpleInjector {
- val cardAttributeProvider = new Inject(buildOne _) {}
+ val cardAttributeProvider = new Inject(() => buildOne) {}
def buildOne: CardAttributeProvider = MappedCardAttributeProvider
// Helper to get the count out of an option
diff --git a/obp-api/src/main/scala/code/cards/PhisicalCardProvider.scala b/obp-api/src/main/scala/code/cards/PhisicalCardProvider.scala
index b13c669866..53269538b6 100644
--- a/obp-api/src/main/scala/code/cards/PhisicalCardProvider.scala
+++ b/obp-api/src/main/scala/code/cards/PhisicalCardProvider.scala
@@ -12,7 +12,7 @@ import scala.collection.immutable.List
object PhysicalCard extends SimpleInjector {
- val physicalCardProvider = new Inject(buildOne _) {}
+ val physicalCardProvider = new Inject(() => buildOne) {}
def buildOne: PhysicalCardProvider = MappedPhysicalCardProvider
diff --git a/obp-api/src/main/scala/code/chat/ChatEventBus.scala b/obp-api/src/main/scala/code/chat/ChatEventBus.scala
index cbac73654d..44973526b2 100644
--- a/obp-api/src/main/scala/code/chat/ChatEventBus.scala
+++ b/obp-api/src/main/scala/code/chat/ChatEventBus.scala
@@ -11,7 +11,7 @@ import org.json4s.native.Serialization.write
import redis.clients.jedis.{Jedis, JedisPubSub}
import java.util.concurrent.{ConcurrentHashMap, CopyOnWriteArrayList}
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
/**
* Redis pub/sub event bus for chat real-time streaming.
@@ -138,6 +138,9 @@ object ChatEventBus extends MdcLoggable {
logger.info("ChatEventBus says: Started")
}
+ /** Whether this bus is already subscribed, so a caller can tell whether it started it. */
+ def isRunning: Boolean = running
+
def stop(): Unit = {
running = false
try {
diff --git a/obp-api/src/main/scala/code/chat/ChatMessageTrait.scala b/obp-api/src/main/scala/code/chat/ChatMessageTrait.scala
index b3a1a5e9d0..9b32a40174 100644
--- a/obp-api/src/main/scala/code/chat/ChatMessageTrait.scala
+++ b/obp-api/src/main/scala/code/chat/ChatMessageTrait.scala
@@ -5,7 +5,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object ChatMessageTrait extends SimpleInjector {
- val chatMessageProvider = new Inject(buildOne _) {}
+ val chatMessageProvider = new Inject(() => buildOne) {}
def buildOne: ChatMessageProvider = MappedChatMessageProvider
}
diff --git a/obp-api/src/main/scala/code/chat/ChatRoomTrait.scala b/obp-api/src/main/scala/code/chat/ChatRoomTrait.scala
index 0bf6836652..4ea50c79ca 100644
--- a/obp-api/src/main/scala/code/chat/ChatRoomTrait.scala
+++ b/obp-api/src/main/scala/code/chat/ChatRoomTrait.scala
@@ -5,7 +5,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object ChatRoomTrait extends SimpleInjector {
- val chatRoomProvider = new Inject(buildOne _) {}
+ val chatRoomProvider = new Inject(() => buildOne) {}
def buildOne: ChatRoomProvider = MappedChatRoomProvider
}
diff --git a/obp-api/src/main/scala/code/chat/ParticipantTrait.scala b/obp-api/src/main/scala/code/chat/ParticipantTrait.scala
index f68f653f6b..63059f8426 100644
--- a/obp-api/src/main/scala/code/chat/ParticipantTrait.scala
+++ b/obp-api/src/main/scala/code/chat/ParticipantTrait.scala
@@ -5,7 +5,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object ParticipantTrait extends SimpleInjector {
- val participantProvider = new Inject(buildOne _) {}
+ val participantProvider = new Inject(() => buildOne) {}
def buildOne: ParticipantProvider = MappedParticipantProvider
}
diff --git a/obp-api/src/main/scala/code/chat/ReactionTrait.scala b/obp-api/src/main/scala/code/chat/ReactionTrait.scala
index c28ebd35e7..0fa9f3211b 100644
--- a/obp-api/src/main/scala/code/chat/ReactionTrait.scala
+++ b/obp-api/src/main/scala/code/chat/ReactionTrait.scala
@@ -5,7 +5,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object ReactionTrait extends SimpleInjector {
- val reactionProvider = new Inject(buildOne _) {}
+ val reactionProvider = new Inject(() => buildOne) {}
def buildOne: ReactionProvider = MappedReactionProvider
}
diff --git a/obp-api/src/main/scala/code/connectormethod/ConnectorMethodProvider.scala b/obp-api/src/main/scala/code/connectormethod/ConnectorMethodProvider.scala
index fb11b6cc82..b313d00b42 100644
--- a/obp-api/src/main/scala/code/connectormethod/ConnectorMethodProvider.scala
+++ b/obp-api/src/main/scala/code/connectormethod/ConnectorMethodProvider.scala
@@ -8,7 +8,7 @@ import java.net.URLDecoder
object ConnectorMethodProvider extends SimpleInjector {
- val provider = new Inject(buildOne _) {}
+ val provider = new Inject(() => buildOne) {}
def buildOne: MappedConnectorMethodProvider.type = MappedConnectorMethodProvider
}
diff --git a/obp-api/src/main/scala/code/consent/ConsentProvider.scala b/obp-api/src/main/scala/code/consent/ConsentProvider.scala
index 3932ed12bc..863e251a4d 100644
--- a/obp-api/src/main/scala/code/consent/ConsentProvider.scala
+++ b/obp-api/src/main/scala/code/consent/ConsentProvider.scala
@@ -12,7 +12,7 @@ import code.model.Consumer
import scala.collection.immutable.List
object Consents extends SimpleInjector {
- val consentProvider = new Inject(buildOne _) {}
+ val consentProvider = new Inject(() => buildOne) {}
def buildOne: ConsentProvider = MappedConsentProvider
}
diff --git a/obp-api/src/main/scala/code/consent/ConsentRequesProvider.scala b/obp-api/src/main/scala/code/consent/ConsentRequesProvider.scala
index ccb351ff46..6515f3a351 100644
--- a/obp-api/src/main/scala/code/consent/ConsentRequesProvider.scala
+++ b/obp-api/src/main/scala/code/consent/ConsentRequesProvider.scala
@@ -6,7 +6,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object ConsentRequests extends SimpleInjector {
- val consentRequestProvider = new Inject(buildOne _) {}
+ val consentRequestProvider = new Inject(() => buildOne) {}
def buildOne: ConsentRequestProvider = MappedConsentRequestProvider
}
diff --git a/obp-api/src/main/scala/code/consumer/ConsumerProvider.scala b/obp-api/src/main/scala/code/consumer/ConsumerProvider.scala
index a32beaa7ad..a6de30c184 100644
--- a/obp-api/src/main/scala/code/consumer/ConsumerProvider.scala
+++ b/obp-api/src/main/scala/code/consumer/ConsumerProvider.scala
@@ -10,7 +10,7 @@ import scala.concurrent.Future
object Consumers extends SimpleInjector {
- val consumers = new Inject(buildOne _) {}
+ val consumers = new Inject(() => buildOne) {}
def buildOne: ConsumersProvider = MappedConsumersProvider
diff --git a/obp-api/src/main/scala/code/context/ConsentAuthContextProvider.scala b/obp-api/src/main/scala/code/context/ConsentAuthContextProvider.scala
index 4bdcf750c5..cff770e946 100644
--- a/obp-api/src/main/scala/code/context/ConsentAuthContextProvider.scala
+++ b/obp-api/src/main/scala/code/context/ConsentAuthContextProvider.scala
@@ -11,7 +11,7 @@ import scala.concurrent.Future
object ConsentAuthContextProvider extends SimpleInjector {
- val consentAuthContextProvider = new Inject(buildOne _) {}
+ val consentAuthContextProvider = new Inject(() => buildOne) {}
def buildOne: ConsentAuthContextProvider = MappedConsentAuthContextProvider
diff --git a/obp-api/src/main/scala/code/context/UserAuthContextProvider.scala b/obp-api/src/main/scala/code/context/UserAuthContextProvider.scala
index 7095a7996e..ccf60b8fc1 100644
--- a/obp-api/src/main/scala/code/context/UserAuthContextProvider.scala
+++ b/obp-api/src/main/scala/code/context/UserAuthContextProvider.scala
@@ -11,7 +11,7 @@ import scala.concurrent.Future
object UserAuthContextProvider extends SimpleInjector {
- val userAuthContextProvider = new Inject(buildOne _) {}
+ val userAuthContextProvider = new Inject(() => buildOne) {}
def buildOne: UserAuthContextProvider = MappedUserAuthContextProvider
diff --git a/obp-api/src/main/scala/code/context/UserAuthContextUpdateProvider.scala b/obp-api/src/main/scala/code/context/UserAuthContextUpdateProvider.scala
index 3b2ca9845f..67953b8674 100644
--- a/obp-api/src/main/scala/code/context/UserAuthContextUpdateProvider.scala
+++ b/obp-api/src/main/scala/code/context/UserAuthContextUpdateProvider.scala
@@ -10,7 +10,7 @@ import scala.concurrent.Future
object UserAuthContextUpdateProvider extends SimpleInjector {
- val userAuthContextUpdateProvider = new Inject(buildOne _) {}
+ val userAuthContextUpdateProvider = new Inject(() => buildOne) {}
def buildOne: UserAuthContextUpdateProvider = MappedUserAuthContextUpdateProvider
diff --git a/obp-api/src/main/scala/code/counterpartyattribute/CounterpartyAttribute.scala b/obp-api/src/main/scala/code/counterpartyattribute/CounterpartyAttribute.scala
index c9bd3b45dd..e03c0e168c 100644
--- a/obp-api/src/main/scala/code/counterpartyattribute/CounterpartyAttribute.scala
+++ b/obp-api/src/main/scala/code/counterpartyattribute/CounterpartyAttribute.scala
@@ -9,7 +9,7 @@ import scala.concurrent.Future
object CounterpartyAttributeX extends SimpleInjector {
- val counterpartyAttributeProvider = new Inject(buildOne _) {}
+ val counterpartyAttributeProvider = new Inject(() => buildOne) {}
def buildOne: CounterpartyAttributeProviderTrait = CounterpartyAttributeProvider
diff --git a/obp-api/src/main/scala/code/counterpartylimit/CounterpartyLimit.scala b/obp-api/src/main/scala/code/counterpartylimit/CounterpartyLimit.scala
index 2d1ab8a6d6..87fb336dd0 100644
--- a/obp-api/src/main/scala/code/counterpartylimit/CounterpartyLimit.scala
+++ b/obp-api/src/main/scala/code/counterpartylimit/CounterpartyLimit.scala
@@ -6,7 +6,7 @@ import net.liftweb.common.Box
import scala.concurrent.Future
object CounterpartyLimitProvider extends SimpleInjector {
- val counterpartyLimit = new Inject(buildOne _) {}
+ val counterpartyLimit = new Inject(() => buildOne) {}
def buildOne: CounterpartyLimitProviderTrait = MappedCounterpartyLimitProvider
}
diff --git a/obp-api/src/main/scala/code/crm/CrmEvent.scala b/obp-api/src/main/scala/code/crm/CrmEvent.scala
index 73cf7835f4..3629b2fcd0 100644
--- a/obp-api/src/main/scala/code/crm/CrmEvent.scala
+++ b/obp-api/src/main/scala/code/crm/CrmEvent.scala
@@ -33,7 +33,7 @@ object CrmEvent extends util.SimpleInjector {
def actualDate: Date
def result: String}
- val crmEventProvider = new Inject(buildOne _) {}
+ val crmEventProvider = new Inject(() => buildOne) {}
def buildOne: CrmEventProvider = MappedCrmEventProvider
diff --git a/obp-api/src/main/scala/code/customer/CustomerMessage.scala b/obp-api/src/main/scala/code/customer/CustomerMessage.scala
index e3df76702f..faf8f719d7 100644
--- a/obp-api/src/main/scala/code/customer/CustomerMessage.scala
+++ b/obp-api/src/main/scala/code/customer/CustomerMessage.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
object CustomerMessages extends SimpleInjector {
- val customerMessageProvider = new Inject(buildOne _) {}
+ val customerMessageProvider = new Inject(() => buildOne) {}
def buildOne: CustomerMessageProvider = MappedCustomerMessageProvider
diff --git a/obp-api/src/main/scala/code/customer/CustomerProvider.scala b/obp-api/src/main/scala/code/customer/CustomerProvider.scala
index 3d4748b67f..218190da41 100644
--- a/obp-api/src/main/scala/code/customer/CustomerProvider.scala
+++ b/obp-api/src/main/scala/code/customer/CustomerProvider.scala
@@ -14,7 +14,7 @@ import scala.concurrent.Future
object CustomerX extends SimpleInjector {
- val customerProvider = new Inject(buildOne _) {}
+ val customerProvider = new Inject(() => buildOne) {}
def buildOne: CustomerProvider = MappedCustomerProvider
diff --git a/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala b/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala
index e78aebf7ce..87993d2b98 100644
--- a/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala
+++ b/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala
@@ -10,7 +10,7 @@ import scala.concurrent.Future
object AgentX extends SimpleInjector {
- val agentProvider = new Inject(buildOne _) {}
+ val agentProvider = new Inject(() => buildOne) {}
def buildOne: AgentProvider = MappedAgentProvider
diff --git a/obp-api/src/main/scala/code/customer/internalMapping/CustomerIdMappingProvider.scala b/obp-api/src/main/scala/code/customer/internalMapping/CustomerIdMappingProvider.scala
index 418919e39c..22ef69e5cf 100644
--- a/obp-api/src/main/scala/code/customer/internalMapping/CustomerIdMappingProvider.scala
+++ b/obp-api/src/main/scala/code/customer/internalMapping/CustomerIdMappingProvider.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
object CustomerIdMappingProvider extends SimpleInjector {
- val customerIdMappingProvider = new Inject(buildOne _) {}
+ val customerIdMappingProvider = new Inject(() => buildOne) {}
def buildOne: CustomerIdMappingProvider = MappedCustomerIdMappingProvider
diff --git a/obp-api/src/main/scala/code/customerDobDependants/CustomerDependants.scala b/obp-api/src/main/scala/code/customerDobDependants/CustomerDependants.scala
index 8a974bf4ac..0083705c3c 100644
--- a/obp-api/src/main/scala/code/customerDobDependants/CustomerDependants.scala
+++ b/obp-api/src/main/scala/code/customerDobDependants/CustomerDependants.scala
@@ -8,7 +8,7 @@ import scala.collection.immutable.List
object CustomerDependants extends SimpleInjector {
- val CustomerDependants = new Inject(buildOne _) {}
+ val CustomerDependants = new Inject(() => buildOne) {}
def buildOne: CustomerDependants = MappedCustomerDependants
diff --git a/obp-api/src/main/scala/code/customeraccountlinks/CustomerAccountLink.scala b/obp-api/src/main/scala/code/customeraccountlinks/CustomerAccountLink.scala
index 79c383ae3e..3d6a8c8b38 100644
--- a/obp-api/src/main/scala/code/customeraccountlinks/CustomerAccountLink.scala
+++ b/obp-api/src/main/scala/code/customeraccountlinks/CustomerAccountLink.scala
@@ -8,7 +8,7 @@ import scala.concurrent.Future
object CustomerAccountLinkX extends SimpleInjector {
- val customerAccountLink = new Inject(buildOne _) {}
+ val customerAccountLink = new Inject(() => buildOne) {}
def buildOne: CustomerAccountLinkProvider = MappedCustomerAccountLinkProvider
diff --git a/obp-api/src/main/scala/code/customeraddress/CustomerAddress.scala b/obp-api/src/main/scala/code/customeraddress/CustomerAddress.scala
index 6a39f560d0..1ff961caa9 100644
--- a/obp-api/src/main/scala/code/customeraddress/CustomerAddress.scala
+++ b/obp-api/src/main/scala/code/customeraddress/CustomerAddress.scala
@@ -9,7 +9,7 @@ import scala.concurrent.Future
object CustomerAddressX extends SimpleInjector {
- val address = new Inject(buildOne _) {}
+ val address = new Inject(() => buildOne) {}
def buildOne: CustomerAddressProvider = MappedCustomerAddressProvider
diff --git a/obp-api/src/main/scala/code/customerattribute/CustomerAttribute.scala b/obp-api/src/main/scala/code/customerattribute/CustomerAttribute.scala
index b9c9159f24..5610025452 100644
--- a/obp-api/src/main/scala/code/customerattribute/CustomerAttribute.scala
+++ b/obp-api/src/main/scala/code/customerattribute/CustomerAttribute.scala
@@ -15,7 +15,7 @@ import scala.concurrent.Future
object CustomerAttributeX extends SimpleInjector {
- val customerAttributeProvider = new Inject(buildOne _) {}
+ val customerAttributeProvider = new Inject(() => buildOne) {}
def buildOne: CustomerAttributeProvider = MappedCustomerAttributeProvider
diff --git a/obp-api/src/main/scala/code/customerlinks/CustomerLink.scala b/obp-api/src/main/scala/code/customerlinks/CustomerLink.scala
index 837168d85f..25f657208d 100644
--- a/obp-api/src/main/scala/code/customerlinks/CustomerLink.scala
+++ b/obp-api/src/main/scala/code/customerlinks/CustomerLink.scala
@@ -10,7 +10,7 @@ import scala.concurrent.Future
object CustomerLinkX extends SimpleInjector {
- val customerLink = new Inject(buildOne _) {}
+ val customerLink = new Inject(() => buildOne) {}
def buildOne: CustomerLinkProvider = MappedCustomerLinkProvider
diff --git a/obp-api/src/main/scala/code/database/authorisation/Authorisation.scala b/obp-api/src/main/scala/code/database/authorisation/Authorisation.scala
index 1f0ff89bf0..9b3131b0bb 100644
--- a/obp-api/src/main/scala/code/database/authorisation/Authorisation.scala
+++ b/obp-api/src/main/scala/code/database/authorisation/Authorisation.scala
@@ -5,7 +5,7 @@
//
//
//object Authorisations extends SimpleInjector {
-// val authorisationProvider = new Inject(buildOne _) {}
+// val authorisationProvider = new Inject(() => buildOne) {}
// def buildOne: AuthorisationProvider = MappedAuthorisationProvider
//}
//
diff --git a/obp-api/src/main/scala/code/directdebit/DirectDebit.scala b/obp-api/src/main/scala/code/directdebit/DirectDebit.scala
index 712f0b24c4..de6457b27e 100644
--- a/obp-api/src/main/scala/code/directdebit/DirectDebit.scala
+++ b/obp-api/src/main/scala/code/directdebit/DirectDebit.scala
@@ -8,7 +8,7 @@ import com.openbankproject.commons.model.DirectDebitTrait
object DirectDebits extends SimpleInjector {
- val directDebitProvider = new Inject(buildOne _) {}
+ val directDebitProvider = new Inject(() => buildOne) {}
def buildOne: DirectDebitProvider = MappedDirectDebitProvider
}
diff --git a/obp-api/src/main/scala/code/dynamicEndpoint/DynamicEndpointProvider.scala b/obp-api/src/main/scala/code/dynamicEndpoint/DynamicEndpointProvider.scala
index 2473e8e68f..cf189462ba 100644
--- a/obp-api/src/main/scala/code/dynamicEndpoint/DynamicEndpointProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicEndpoint/DynamicEndpointProvider.scala
@@ -6,7 +6,7 @@ import net.liftweb.util.SimpleInjector
object DynamicEndpointProvider extends SimpleInjector {
- val connectorMethodProvider = new Inject(buildOne _) {}
+ val connectorMethodProvider = new Inject(() => buildOne) {}
def buildOne: MappedDynamicEndpointProvider.type = MappedDynamicEndpointProvider
}
diff --git a/obp-api/src/main/scala/code/dynamicEntity/DynamicDataAccessProvider.scala b/obp-api/src/main/scala/code/dynamicEntity/DynamicDataAccessProvider.scala
index 5f6e21af58..3116948354 100644
--- a/obp-api/src/main/scala/code/dynamicEntity/DynamicDataAccessProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicEntity/DynamicDataAccessProvider.scala
@@ -11,7 +11,7 @@ import net.liftweb.util.SimpleInjector
* per-entity owner/community scope. See ideas/DYNAMIC_ENTITY_ROW_LEVEL_ACCESS.md.
*/
object DynamicDataAccessProvider extends SimpleInjector {
- val provider = new Inject(buildOne _) {}
+ val provider = new Inject(() => buildOne) {}
def buildOne: MappedDynamicDataAccessProvider.type = MappedDynamicDataAccessProvider
}
diff --git a/obp-api/src/main/scala/code/dynamicEntity/DynamicDataProvider.scala b/obp-api/src/main/scala/code/dynamicEntity/DynamicDataProvider.scala
index 9143095d3d..f550467dff 100644
--- a/obp-api/src/main/scala/code/dynamicEntity/DynamicDataProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicEntity/DynamicDataProvider.scala
@@ -8,7 +8,7 @@ import net.liftweb.util.SimpleInjector
object DynamicDataProvider extends SimpleInjector {
- val connectorMethodProvider = new Inject(buildOne _) {}
+ val connectorMethodProvider = new Inject(() => buildOne) {}
def buildOne: MappedDynamicDataProvider.type = MappedDynamicDataProvider
}
diff --git a/obp-api/src/main/scala/code/dynamicEntity/DynamicEntityProvider.scala b/obp-api/src/main/scala/code/dynamicEntity/DynamicEntityProvider.scala
index 3e409928c7..0c19f0c16a 100644
--- a/obp-api/src/main/scala/code/dynamicEntity/DynamicEntityProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicEntity/DynamicEntityProvider.scala
@@ -22,7 +22,7 @@ import scala.util.matching.Regex
object DynamicEntityProvider extends SimpleInjector {
- val connectorMethodProvider = new Inject(buildOne _) {}
+ val connectorMethodProvider = new Inject(() => buildOne) {}
def buildOne: MappedDynamicEntityProvider.type = MappedDynamicEntityProvider
}
@@ -563,7 +563,7 @@ object DynamicEntityCommons extends Converter[DynamicEntityT, DynamicEntityCommo
if(fieldTypeOp.exists(_ == DynamicEntityFieldType.string)) {
val minLength = value \ "minLength"
val maxLength = value \ "maxLength"
- def toInt(jValue: JValue) = jValue.asInstanceOf[JInt].num.intValue()
+ def toInt(jValue: JValue) = jValue.asInstanceOf[JInt].num.intValue
if(minLength != JNothing) {
checkFormat(minLength.isInstanceOf[JInt], s"$DynamicEntityInstanceValidateFail The property of minLength's 'type' should be integer")
checkFormat(toInt(minLength) >= 0, s"$DynamicEntityInstanceValidateFail The property of minLength value should be non-negative integer, current value: ${toInt(minLength)}")
diff --git a/obp-api/src/main/scala/code/dynamicMessageDoc/DynamicMessageDocProvider.scala b/obp-api/src/main/scala/code/dynamicMessageDoc/DynamicMessageDocProvider.scala
index c47a94631a..27e4ad505f 100644
--- a/obp-api/src/main/scala/code/dynamicMessageDoc/DynamicMessageDocProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicMessageDoc/DynamicMessageDocProvider.scala
@@ -11,7 +11,7 @@ import scala.collection.immutable.List
object DynamicMessageDocProvider extends SimpleInjector {
- val provider = new Inject(buildOne _) {}
+ val provider = new Inject(() => buildOne) {}
def buildOne: MappedDynamicMessageDocProvider.type = MappedDynamicMessageDocProvider
}
diff --git a/obp-api/src/main/scala/code/dynamicResourceDoc/DynamicResourceDocProvider.scala b/obp-api/src/main/scala/code/dynamicResourceDoc/DynamicResourceDocProvider.scala
index 9ec0927ae6..c2769c8a48 100644
--- a/obp-api/src/main/scala/code/dynamicResourceDoc/DynamicResourceDocProvider.scala
+++ b/obp-api/src/main/scala/code/dynamicResourceDoc/DynamicResourceDocProvider.scala
@@ -15,7 +15,7 @@ import scala.collection.immutable.List
object DynamicResourceDocProvider extends SimpleInjector {
- val provider = new Inject(buildOne _) {}
+ val provider = new Inject(() => buildOne) {}
def buildOne: MappedDynamicResourceDocProvider.type = MappedDynamicResourceDocProvider
}
diff --git a/obp-api/src/main/scala/code/endpointMapping/EndpointMappingProvider.scala b/obp-api/src/main/scala/code/endpointMapping/EndpointMappingProvider.scala
index 18f65ceaac..ed2ec53270 100644
--- a/obp-api/src/main/scala/code/endpointMapping/EndpointMappingProvider.scala
+++ b/obp-api/src/main/scala/code/endpointMapping/EndpointMappingProvider.scala
@@ -13,7 +13,7 @@ import net.liftweb.util.SimpleInjector
object EndpointMappingProvider extends SimpleInjector {
- val endpointMappingProvider = new Inject(buildOne _) {}
+ val endpointMappingProvider = new Inject(() => buildOne) {}
def buildOne: MappedEndpointMappingProvider.type = MappedEndpointMappingProvider
}
diff --git a/obp-api/src/main/scala/code/endpointTag/EndpointMappingProvider.scala b/obp-api/src/main/scala/code/endpointTag/EndpointMappingProvider.scala
index 8bd8f2e2e7..47e25967f1 100644
--- a/obp-api/src/main/scala/code/endpointTag/EndpointMappingProvider.scala
+++ b/obp-api/src/main/scala/code/endpointTag/EndpointMappingProvider.scala
@@ -11,7 +11,7 @@ import net.liftweb.util.SimpleInjector
object EndpointTagProvider extends SimpleInjector {
- val endpointTagProvider = new Inject(buildOne _) {}
+ val endpointTagProvider = new Inject(() => buildOne) {}
def buildOne: MappedEndpointTagProvider.type = MappedEndpointTagProvider
}
diff --git a/obp-api/src/main/scala/code/entitlement/Entilement.scala b/obp-api/src/main/scala/code/entitlement/Entilement.scala
index 68fa07ae10..211d227f0a 100644
--- a/obp-api/src/main/scala/code/entitlement/Entilement.scala
+++ b/obp-api/src/main/scala/code/entitlement/Entilement.scala
@@ -8,7 +8,7 @@ import scala.concurrent.Future
object Entitlement extends SimpleInjector {
- val entitlement = new Inject(buildOne _) {}
+ val entitlement = new Inject(() => buildOne) {}
def buildOne: EntitlementProvider = MappedEntitlementsProvider
diff --git a/obp-api/src/main/scala/code/entitlementrequest/EntilementRequest.scala b/obp-api/src/main/scala/code/entitlementrequest/EntilementRequest.scala
index 1bb52a701f..f20fb53817 100644
--- a/obp-api/src/main/scala/code/entitlementrequest/EntilementRequest.scala
+++ b/obp-api/src/main/scala/code/entitlementrequest/EntilementRequest.scala
@@ -11,7 +11,7 @@ import scala.concurrent.Future
object EntitlementRequest extends SimpleInjector {
- val entitlementRequest = new Inject(buildOne _) {}
+ val entitlementRequest = new Inject(() => buildOne) {}
def buildOne: EntitlementRequestProvider = MappedEntitlementRequestsProvider
}
diff --git a/obp-api/src/main/scala/code/examplething/Thing.scala b/obp-api/src/main/scala/code/examplething/Thing.scala
index 70f264d943..8973371d17 100644
--- a/obp-api/src/main/scala/code/examplething/Thing.scala
+++ b/obp-api/src/main/scala/code/examplething/Thing.scala
@@ -10,7 +10,7 @@ import code.util.Helper.MdcLoggable
object Thing extends SimpleInjector {
- val thingProvider = new Inject(buildOne _) {}
+ val thingProvider = new Inject(() => buildOne) {}
def buildOne: ThingProvider = MappedThingProvider
//If you set props `provider.thing`, you can set to different providers
diff --git a/obp-api/src/main/scala/code/group/GroupTrait.scala b/obp-api/src/main/scala/code/group/GroupTrait.scala
index 939454b724..cc318cbb67 100644
--- a/obp-api/src/main/scala/code/group/GroupTrait.scala
+++ b/obp-api/src/main/scala/code/group/GroupTrait.scala
@@ -6,7 +6,7 @@ import net.liftweb.util.SimpleInjector
import scala.concurrent.Future
object GroupTrait extends SimpleInjector {
- val group = new Inject(buildOne _) {}
+ val group = new Inject(() => buildOne) {}
def buildOne: GroupProvider = MappedGroupProvider
}
diff --git a/obp-api/src/main/scala/code/kyccheck/KycCheck.scala b/obp-api/src/main/scala/code/kyccheck/KycCheck.scala
index 63dd6ad46d..80b4858f94 100644
--- a/obp-api/src/main/scala/code/kyccheck/KycCheck.scala
+++ b/obp-api/src/main/scala/code/kyccheck/KycCheck.scala
@@ -9,7 +9,7 @@ import net.liftweb.common.Box
object KycChecks extends SimpleInjector {
- val kycCheckProvider = new Inject(buildOne _) {}
+ val kycCheckProvider = new Inject(() => buildOne) {}
def buildOne: KycCheckProvider = MappedKycChecksProvider
diff --git a/obp-api/src/main/scala/code/kycdocuments/KycDocuments.scala b/obp-api/src/main/scala/code/kycdocuments/KycDocuments.scala
index 86976c039b..dd9ef39950 100644
--- a/obp-api/src/main/scala/code/kycdocuments/KycDocuments.scala
+++ b/obp-api/src/main/scala/code/kycdocuments/KycDocuments.scala
@@ -9,7 +9,7 @@ import net.liftweb.common.Box
object KycDocuments extends SimpleInjector {
- val kycDocumentProvider = new Inject(buildOne _) {}
+ val kycDocumentProvider = new Inject(() => buildOne) {}
def buildOne: KycDocumentProvider = MappedKycDocumentsProvider
diff --git a/obp-api/src/main/scala/code/kycmedia/KycMedia.scala b/obp-api/src/main/scala/code/kycmedia/KycMedia.scala
index cda437d7e0..38f70864e9 100644
--- a/obp-api/src/main/scala/code/kycmedia/KycMedia.scala
+++ b/obp-api/src/main/scala/code/kycmedia/KycMedia.scala
@@ -9,7 +9,7 @@ import net.liftweb.common.Box
object KycMedias extends SimpleInjector {
- val kycMediaProvider = new Inject(buildOne _) {}
+ val kycMediaProvider = new Inject(() => buildOne) {}
def buildOne: KycMediaProvider = MappedKycMediasProvider
diff --git a/obp-api/src/main/scala/code/kycstatus/KycStatus.scala b/obp-api/src/main/scala/code/kycstatus/KycStatus.scala
index 7dc1ccc7b7..1e93c80274 100644
--- a/obp-api/src/main/scala/code/kycstatus/KycStatus.scala
+++ b/obp-api/src/main/scala/code/kycstatus/KycStatus.scala
@@ -9,7 +9,7 @@ import net.liftweb.common.Box
object KycStatuses extends SimpleInjector {
- val kycStatusProvider = new Inject(buildOne _) {}
+ val kycStatusProvider = new Inject(() => buildOne) {}
def buildOne: KycStatusProvider = MappedKycStatusesProvider
diff --git a/obp-api/src/main/scala/code/logcache/LogCacheEventBus.scala b/obp-api/src/main/scala/code/logcache/LogCacheEventBus.scala
index de12f9a35f..818d956386 100644
--- a/obp-api/src/main/scala/code/logcache/LogCacheEventBus.scala
+++ b/obp-api/src/main/scala/code/logcache/LogCacheEventBus.scala
@@ -8,7 +8,7 @@ import redis.clients.jedis.{Jedis, JedisPubSub, Pipeline}
import java.util.concurrent.{ArrayBlockingQueue, ConcurrentHashMap, CopyOnWriteArrayList, TimeUnit}
import java.util.concurrent.atomic.AtomicLong
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
/**
* Redis pub/sub event bus for log cache streaming.
@@ -122,6 +122,9 @@ object LogCacheEventBus extends MdcLoggable {
logger.info("LogCacheEventBus says: Started")
}
+ /** Whether this bus is already subscribed, so a caller can tell whether it started it. */
+ def isRunning: Boolean = running
+
def stop(): Unit = {
running = false
try { if (pubSub != null) pubSub.punsubscribe() } catch { case _: Throwable => }
diff --git a/obp-api/src/main/scala/code/meetings/Meetings.scala b/obp-api/src/main/scala/code/meetings/Meetings.scala
index 3133212ecd..c3764158d8 100644
--- a/obp-api/src/main/scala/code/meetings/Meetings.scala
+++ b/obp-api/src/main/scala/code/meetings/Meetings.scala
@@ -16,7 +16,7 @@ case class ContactMedium(
object Meetings extends SimpleInjector {
- val meetingProvider = new Inject(buildOne _) {}
+ val meetingProvider = new Inject(() => buildOne) {}
def buildOne: MeetingProvider = MappedMeetingProvider
diff --git a/obp-api/src/main/scala/code/metadata/comments/Comments.scala b/obp-api/src/main/scala/code/metadata/comments/Comments.scala
index 43e07cd452..c7f2d701aa 100644
--- a/obp-api/src/main/scala/code/metadata/comments/Comments.scala
+++ b/obp-api/src/main/scala/code/metadata/comments/Comments.scala
@@ -10,7 +10,7 @@ import net.liftweb.util.{Props, SimpleInjector}
object Comments extends SimpleInjector {
- val comments = new Inject(buildOne _) {}
+ val comments = new Inject(() => buildOne) {}
def buildOne: Comments = MappedComments
diff --git a/obp-api/src/main/scala/code/metadata/counterparties/Counterparties.scala b/obp-api/src/main/scala/code/metadata/counterparties/Counterparties.scala
index 0a471fa02e..6a70a0989f 100644
--- a/obp-api/src/main/scala/code/metadata/counterparties/Counterparties.scala
+++ b/obp-api/src/main/scala/code/metadata/counterparties/Counterparties.scala
@@ -12,7 +12,7 @@ import scala.collection.immutable.List
object Counterparties extends SimpleInjector {
- val counterparties = new Inject(buildOne _) {}
+ val counterparties = new Inject(() => buildOne) {}
def buildOne: Counterparties = MapperCounterparties
diff --git a/obp-api/src/main/scala/code/metadata/counterparties/CounterpartyBespokes.scala b/obp-api/src/main/scala/code/metadata/counterparties/CounterpartyBespokes.scala
index a2e40fb6b0..fe5a9e8011 100644
--- a/obp-api/src/main/scala/code/metadata/counterparties/CounterpartyBespokes.scala
+++ b/obp-api/src/main/scala/code/metadata/counterparties/CounterpartyBespokes.scala
@@ -8,7 +8,7 @@ import scala.collection.immutable.List
object CounterpartyBespokes extends SimpleInjector {
- val counterpartyBespokers = new Inject(buildOne _) {}
+ val counterpartyBespokers = new Inject(() => buildOne) {}
def buildOne: CounterpartyBespokes = MapperCounterpartyBespokes
diff --git a/obp-api/src/main/scala/code/metadata/narrative/Narrative.scala b/obp-api/src/main/scala/code/metadata/narrative/Narrative.scala
index 667b7374af..e9b8f98221 100644
--- a/obp-api/src/main/scala/code/metadata/narrative/Narrative.scala
+++ b/obp-api/src/main/scala/code/metadata/narrative/Narrative.scala
@@ -5,7 +5,7 @@ import net.liftweb.util.{Props, SimpleInjector}
object Narrative extends SimpleInjector {
- val narrative = new Inject(buildOne _) {}
+ val narrative = new Inject(() => buildOne) {}
def buildOne: Narrative = MappedNarratives
diff --git a/obp-api/src/main/scala/code/metadata/tags/Tags.scala b/obp-api/src/main/scala/code/metadata/tags/Tags.scala
index ae7ac5ece9..be4659482b 100644
--- a/obp-api/src/main/scala/code/metadata/tags/Tags.scala
+++ b/obp-api/src/main/scala/code/metadata/tags/Tags.scala
@@ -10,7 +10,7 @@ import net.liftweb.util.{Props, SimpleInjector}
object Tags extends SimpleInjector {
- val tags = new Inject(buildOne _) {}
+ val tags = new Inject(() => buildOne) {}
def buildOne: Tags = MappedTags
diff --git a/obp-api/src/main/scala/code/metadata/transactionimages/TransactionImages.scala b/obp-api/src/main/scala/code/metadata/transactionimages/TransactionImages.scala
index fedef1d514..05b7bd9f39 100644
--- a/obp-api/src/main/scala/code/metadata/transactionimages/TransactionImages.scala
+++ b/obp-api/src/main/scala/code/metadata/transactionimages/TransactionImages.scala
@@ -10,7 +10,7 @@ import net.liftweb.util.{Props, SimpleInjector}
object TransactionImages extends SimpleInjector {
- val transactionImages = new Inject(buildOne _) {}
+ val transactionImages = new Inject(() => buildOne) {}
def buildOne: TransactionImages = MapperTransactionImages
diff --git a/obp-api/src/main/scala/code/metadata/wheretags/WhereTags.scala b/obp-api/src/main/scala/code/metadata/wheretags/WhereTags.scala
index f6aafce4ce..2ce40b0597 100644
--- a/obp-api/src/main/scala/code/metadata/wheretags/WhereTags.scala
+++ b/obp-api/src/main/scala/code/metadata/wheretags/WhereTags.scala
@@ -10,7 +10,7 @@ import net.liftweb.util.{Props, SimpleInjector}
object WhereTags extends SimpleInjector {
- val whereTags = new Inject(buildOne _) {}
+ val whereTags = new Inject(() => buildOne) {}
def buildOne: WhereTags = MapperWhereTags
diff --git a/obp-api/src/main/scala/code/methodrouting/MethodRoutingProvider.scala b/obp-api/src/main/scala/code/methodrouting/MethodRoutingProvider.scala
index ffafd1c2ab..ba0dcb5690 100644
--- a/obp-api/src/main/scala/code/methodrouting/MethodRoutingProvider.scala
+++ b/obp-api/src/main/scala/code/methodrouting/MethodRoutingProvider.scala
@@ -14,7 +14,7 @@ import net.liftweb.util.SimpleInjector
object MethodRoutingProvider extends SimpleInjector {
- val connectorMethodProvider = new Inject(buildOne _) {}
+ val connectorMethodProvider = new Inject(() => buildOne) {}
def buildOne: MappedMethodRoutingProvider.type = MappedMethodRoutingProvider
}
diff --git a/obp-api/src/main/scala/code/metrics/APIMetrics.scala b/obp-api/src/main/scala/code/metrics/APIMetrics.scala
index ece284cf7e..706539d5bd 100644
--- a/obp-api/src/main/scala/code/metrics/APIMetrics.scala
+++ b/obp-api/src/main/scala/code/metrics/APIMetrics.scala
@@ -10,7 +10,7 @@ import scala.concurrent.Future
object APIMetrics extends SimpleInjector {
- val apiMetrics = new Inject(buildOne _) {}
+ val apiMetrics = new Inject(() => buildOne) {}
def buildOne: APIMetrics =
APIUtil.getPropsAsBoolValue("allow_elasticsearch", false) &&
diff --git a/obp-api/src/main/scala/code/metrics/ConnectorMetricsProvider.scala b/obp-api/src/main/scala/code/metrics/ConnectorMetricsProvider.scala
index a0b8639131..6c8e9dd2b8 100644
--- a/obp-api/src/main/scala/code/metrics/ConnectorMetricsProvider.scala
+++ b/obp-api/src/main/scala/code/metrics/ConnectorMetricsProvider.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
object ConnectorMetricsProvider extends SimpleInjector {
- val metrics = new Inject(buildOne _) {}
+ val metrics = new Inject(() => buildOne) {}
def buildOne: ConnectorMetricsProvider = ConnectorMetrics
diff --git a/obp-api/src/main/scala/code/metricsstream/MetricsEventBus.scala b/obp-api/src/main/scala/code/metricsstream/MetricsEventBus.scala
index 41a52df5a0..db7582a8e1 100644
--- a/obp-api/src/main/scala/code/metricsstream/MetricsEventBus.scala
+++ b/obp-api/src/main/scala/code/metricsstream/MetricsEventBus.scala
@@ -8,7 +8,7 @@ import redis.clients.jedis.{Jedis, JedisPubSub}
import java.util.concurrent.{ArrayBlockingQueue, ConcurrentHashMap, CopyOnWriteArrayList, TimeUnit}
import java.util.concurrent.atomic.AtomicLong
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
/**
* Redis pub/sub event bus for metrics streaming.
@@ -117,6 +117,9 @@ object MetricsEventBus extends MdcLoggable {
logger.info("MetricsEventBus says: Started")
}
+ /** Whether this bus is already subscribed, so a caller can tell whether it started it. */
+ def isRunning: Boolean = running
+
def stop(): Unit = {
running = false
try { if (pubSub != null) pubSub.unsubscribe() } catch { case _: Throwable => }
diff --git a/obp-api/src/main/scala/code/migration/MigrationScriptLogProvider.scala b/obp-api/src/main/scala/code/migration/MigrationScriptLogProvider.scala
index 31235bd6ff..334c556a6d 100644
--- a/obp-api/src/main/scala/code/migration/MigrationScriptLogProvider.scala
+++ b/obp-api/src/main/scala/code/migration/MigrationScriptLogProvider.scala
@@ -5,7 +5,7 @@ import net.liftweb.util.SimpleInjector
object MigrationScriptLogProvider extends SimpleInjector {
- val migrationScriptLogProvider = new Inject(buildOne _) {}
+ val migrationScriptLogProvider = new Inject(() => buildOne) {}
def buildOne: MigrationScriptLogProvider = MappedMigrationScriptLogProvider
}
diff --git a/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala b/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala
index 441255c044..503bbf6b79 100644
--- a/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala
+++ b/obp-api/src/main/scala/code/model/dataAccess/AuthUser.scala
@@ -538,7 +538,7 @@ import net.liftweb.util.Helpers._
/**
* Overridden to use the hostname set in the props file
*/
- override def sendValidationEmail(user: TheUserType) {
+ override def sendValidationEmail(user: TheUserType): Unit = {
APIUtil.getPropsValue("portal_external_url") match {
case Full(portalUrl) =>
// Create a JWT token with the uniqueId as subject and configurable expiry
diff --git a/obp-api/src/main/scala/code/model/dataAccess/internalMapping/AccountIdMappingProvider.scala b/obp-api/src/main/scala/code/model/dataAccess/internalMapping/AccountIdMappingProvider.scala
index 798d35397a..56c0786bb9 100644
--- a/obp-api/src/main/scala/code/model/dataAccess/internalMapping/AccountIdMappingProvider.scala
+++ b/obp-api/src/main/scala/code/model/dataAccess/internalMapping/AccountIdMappingProvider.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
object AccountIdMappingProvider extends SimpleInjector {
- val accountIdMappingProvider = new Inject(buildOne _) {}
+ val accountIdMappingProvider = new Inject(() => buildOne) {}
def buildOne: AccountIdMappingProvider = MappedAccountIdMappingProvider
diff --git a/obp-api/src/main/scala/code/nonce/NonceProvider.scala b/obp-api/src/main/scala/code/nonce/NonceProvider.scala
index 59ea15d510..c8d4f2c359 100644
--- a/obp-api/src/main/scala/code/nonce/NonceProvider.scala
+++ b/obp-api/src/main/scala/code/nonce/NonceProvider.scala
@@ -12,7 +12,7 @@ import scala.concurrent.Future
object Nonces extends SimpleInjector {
- val nonces = new Inject(buildOne _) {}
+ val nonces = new Inject(() => buildOne) {}
def buildOne: NoncesProvider = MappedNonceProvider
diff --git a/obp-api/src/main/scala/code/obp/grpc/ObpGrpcServer.scala b/obp-api/src/main/scala/code/obp/grpc/ObpGrpcServer.scala
index 8ccb72c9e4..e5bf4aa98a 100644
--- a/obp-api/src/main/scala/code/obp/grpc/ObpGrpcServer.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/ObpGrpcServer.scala
@@ -22,6 +22,7 @@ import org.json4s.JsonDSL._
import org.json4s.{Extraction, JArray}
import scala.concurrent.{ExecutionContext, Future}
+import scala.util.control.NonFatal
/**
* OBP gRPC server — serves banking RPCs (ObpService) and chat streaming RPCs (ChatStreamService).
@@ -38,20 +39,70 @@ object ObpGrpcServer {
val port = APIUtil.getPropsAsIntValue("grpc.server.port", 50051)
}
-class ObpGrpcServer(executionContext: ExecutionContext) extends MdcLoggable { self =>
+// The port is a constructor parameter defaulting to the configured one, so a test can pass 0 and
+// let the OS choose. Shards run as parallel JVMs, and two of them starting this server on the same
+// port aborts one run with a BindException. Read boundPort afterwards - asking for a free port,
+// closing it, then binding leaves a window for another process to take it.
+class ObpGrpcServer(executionContext: ExecutionContext, port: Int = ObpGrpcServer.port) extends MdcLoggable { self =>
private[this] var server: Server = null
+ // Recorded at start rather than read back off the server: stop() nulls the field, and for a
+ // server given port 0 the constructor argument it would fall back to is 0. @volatile because
+ // start() runs on one thread and callers read this from another.
+ @volatile private[this] var actualPort: Int = port
+ // Which of the process-wide buses this instance actually started. Each is an object holding one
+ // subscriber connection, start() is a no-op once it is running, and stop() was not - so a second
+ // server's stop() closed the connection the first one was still serving from.
+ // @volatile for the same reason as actualPort: stop() also runs on the JVM's shutdown-hook
+ // thread, which never synchronised with the thread that ran start().
+ @volatile private[this] var startedChatBus = false
+ @volatile private[this] var startedLogCacheBus = false
+ @volatile private[this] var startedMetricsBus = false
+ @volatile private[this] var shutdownHook: scala.sys.ShutdownHookThread = null
+
def start(): Unit = {
+ // A second start() on the same instance would recompute the ownership flags against buses it
+ // had already started - reading them as someone else's - overwrite `server`, leaking the first
+ // one with its port still bound, and overwrite shutdownHook, orphaning the first with no
+ // reference left to remove it. Guarded rather than made to restart: the buses guard the same
+ // way, and nothing here has a use for a second server on one instance.
+ if (server != null) {
+ logger.warn(s"gRPC server is already started on port $actualPort; ignoring this start()")
+ return
+ }
+
+ // The guard above keys off `server`, which is set last, so a start that fails partway - a
+ // BindException is the ordinary case - leaves it null and lets a retry back in. Without the
+ // rollback below, that retry would find the buses this instance started already running,
+ // record them as somebody else's, and leave them up for the life of the process.
+ try startInternal() catch {
+ case NonFatal(e) =>
+ // Suppressed rather than swallowed or thrown in its place: a failure while tearing down
+ // must not replace the start failure that is the reason anyone is reading this.
+ try stop() catch { case NonFatal(cleanupFailure) => e.addSuppressed(cleanupFailure) }
+ throw e
+ }
+ }
+
+ private def startInternal(): Unit = {
+ // Ownership is read after each start() rather than before: a disabled bus makes start() a
+ // no-op, and "was not running beforehand" alone would claim one this instance never started.
// Start chat event bus for Redis pub/sub streaming
+ val chatWasRunning = code.chat.ChatEventBus.isRunning
code.chat.ChatEventBus.start()
+ startedChatBus = !chatWasRunning && code.chat.ChatEventBus.isRunning
// Start log cache event bus (no-op if grpc.log_cache_stream.enabled=false)
+ val logCacheWasRunning = code.logcache.LogCacheEventBus.isRunning
code.logcache.LogCacheEventBus.start()
+ startedLogCacheBus = !logCacheWasRunning && code.logcache.LogCacheEventBus.isRunning
// Start metrics event bus (no-op if grpc.metrics_stream.enabled=false)
+ val metricsWasRunning = code.metricsstream.MetricsEventBus.isRunning
code.metricsstream.MetricsEventBus.start()
+ startedMetricsBus = !metricsWasRunning && code.metricsstream.MetricsEventBus.isRunning
- val baseBuilder = ServerBuilder.forPort(ObpGrpcServer.port)
+ val baseBuilder = ServerBuilder.forPort(port)
.addService(ObpServiceGrpc.bindService(ObpServiceImpl, executionContext))
.addService(code.obp.grpc.chat.api.ChatStreamServiceGrpc.bindService(
code.obp.grpc.chat.ChatStreamServiceImpl, executionContext))
@@ -71,22 +122,33 @@ class ObpGrpcServer(executionContext: ExecutionContext) extends MdcLoggable { se
else withLogCache)
.asInstanceOf[ServerBuilder[_]]
server = serverBuilder.build.start;
- logger.info("Server started, listening on " + ObpGrpcServer.port)
- sys.addShutdownHook {
+ actualPort = server.getPort
+ logger.info("Server started, listening on " + actualPort)
+ // Kept so stop() can take it down again: without that, every server ever started leaves a hook
+ // behind, and each one calls stop() on an instance that has usually stopped already.
+ shutdownHook = sys.addShutdownHook {
System.err.println("*** shutting down gRPC server since JVM is shutting down")
self.stop()
System.err.println("*** server shut down")
}
}
+ /** The port actually bound, which differs from the requested one when 0 was asked for. */
+ def boundPort: Int = actualPort
+
def stop(): Unit = {
- code.chat.ChatEventBus.stop()
- code.logcache.LogCacheEventBus.stop()
- code.metricsstream.MetricsEventBus.stop()
+ if (startedChatBus) { code.chat.ChatEventBus.stop(); startedChatBus = false }
+ if (startedLogCacheBus) { code.logcache.LogCacheEventBus.stop(); startedLogCacheBus = false }
+ if (startedMetricsBus) { code.metricsstream.MetricsEventBus.stop(); startedMetricsBus = false }
if (server != null) {
server.shutdown()
server = null
}
+ if (shutdownHook != null) {
+ // remove() throws once the JVM is already shutting down, which is exactly when the hook runs.
+ try shutdownHook.remove() catch { case _: IllegalStateException => () }
+ shutdownHook = null
+ }
}
private def blockUntilShutdown(): Unit = {
@@ -106,9 +168,16 @@ class ObpGrpcServer(executionContext: ExecutionContext) extends MdcLoggable { se
val (bankList, _) = it
val json40: BanksJson400 = JSONFactory400.createBanksJson(bankList)
val grpcBanks: List[BankJson400Grpc] = json40.banks.map(bank => {
- val BankJson400(id, short_name, full_name, logo, website, bank_routings, None) = bank
- val bankRoutingGrpcs = bank_routings.map(routings => BankRoutingJsonV121Grpc(routings.scheme, routings.address))
- BankJson400Grpc(id, short_name, full_name, logo, website, bankRoutingGrpcs)
+ // This used to destructure with `val BankJson400(..., None) = bank`, a refutable
+ // pattern in a val definition: any bank whose attributes are Some - Some(List())
+ // included - threw a MatchError, which the client saw as INTERNAL. The attributes are
+ // not carried over the wire anyway, so read the fields instead of matching on them.
+ val bankRoutingGrpcs = bank.bank_routings.map(routings => BankRoutingJsonV121Grpc(routings.scheme, routings.address))
+ // protobuf string fields reject null, and logo and website are both nullable here.
+ def orEmpty(value: String): String = Option(value).getOrElse("")
+ BankJson400Grpc(
+ bank.id, bank.short_name, bank.full_name,
+ orEmpty(bank.logo), orEmpty(bank.website), bankRoutingGrpcs)
})
BanksJson400Grpc(grpcBanks)
})
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/AccountIdGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/AccountIdGrpc.scala
index d720e09d77..f41e0cc047 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/AccountIdGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/AccountIdGrpc.scala
@@ -87,7 +87,7 @@ object AccountIdGrpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.api
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ApiProto.javaDescriptor.getMessageTypes.get(9)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ApiProto.scalaDescriptor.messages(9)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.AccountIdGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/AccountJSONGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/AccountJSONGrpc.scala
index 1918df9dbe..55dc9d3816 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/AccountJSONGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/AccountJSONGrpc.scala
@@ -112,7 +112,7 @@ final case class AccountJSONGrpc(
(__field.number: @_root_.scala.unchecked) match {
case 1 => _root_.scalapb.descriptors.PString(id)
case 2 => _root_.scalapb.descriptors.PString(label)
- case 3 => _root_.scalapb.descriptors.PRepeated(viewsAvailable.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 3 => _root_.scalapb.descriptors.PRepeated(viewsAvailable.iterator.map(_.toPMessage).toVector)
case 4 => _root_.scalapb.descriptors.PString(bankId)
}
}
@@ -152,7 +152,7 @@ object AccountJSONGrpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.a
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.AccountJSONGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/AccountsBalancesV310JsonGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/AccountsBalancesV310JsonGrpc.scala
index 84a24f0180..47ece8a37a 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/AccountsBalancesV310JsonGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/AccountsBalancesV310JsonGrpc.scala
@@ -93,7 +93,7 @@ final case class AccountsBalancesV310JsonGrpc(
def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
require(__field.containingMessage eq companion.scalaDescriptor)
(__field.number: @_root_.scala.unchecked) match {
- case 1 => _root_.scalapb.descriptors.PRepeated(accounts.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 1 => _root_.scalapb.descriptors.PRepeated(accounts.iterator.map(_.toPMessage).toVector)
case 2 => overallBalance.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
case 3 => _root_.scalapb.descriptors.PString(overallBalanceDate)
}
@@ -133,7 +133,7 @@ object AccountsBalancesV310JsonGrpc extends scalapb.GeneratedMessageCompanion[co
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_]](
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
_root_.code.obp.grpc.api.AccountsBalancesV310JsonGrpc.AmountOfMoneyGrpc,
_root_.code.obp.grpc.api.AccountsBalancesV310JsonGrpc.AccountRoutingGrpc,
_root_.code.obp.grpc.api.AccountsBalancesV310JsonGrpc.AccountBalanceV310Grpc
@@ -243,7 +243,7 @@ object AccountsBalancesV310JsonGrpc extends scalapb.GeneratedMessageCompanion[co
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.AccountsBalancesV310JsonGrpc.javaDescriptor.getNestedTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.AccountsBalancesV310JsonGrpc.scalaDescriptor.nestedMessages(0)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.AccountsBalancesV310JsonGrpc.AmountOfMoneyGrpc(
)
@@ -357,7 +357,7 @@ object AccountsBalancesV310JsonGrpc extends scalapb.GeneratedMessageCompanion[co
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.AccountsBalancesV310JsonGrpc.javaDescriptor.getNestedTypes.get(1)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.AccountsBalancesV310JsonGrpc.scalaDescriptor.nestedMessages(1)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.AccountsBalancesV310JsonGrpc.AccountRoutingGrpc(
)
@@ -492,7 +492,7 @@ object AccountsBalancesV310JsonGrpc extends scalapb.GeneratedMessageCompanion[co
case 1 => _root_.scalapb.descriptors.PString(id)
case 2 => _root_.scalapb.descriptors.PString(label)
case 3 => _root_.scalapb.descriptors.PString(bankId)
- case 4 => _root_.scalapb.descriptors.PRepeated(accountRoutings.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 4 => _root_.scalapb.descriptors.PRepeated(accountRoutings.iterator.map(_.toPMessage).toVector)
case 5 => balance.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
}
}
@@ -535,7 +535,7 @@ object AccountsBalancesV310JsonGrpc extends scalapb.GeneratedMessageCompanion[co
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.AccountsBalancesV310JsonGrpc.AccountBalanceV310Grpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/AccountsGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/AccountsGrpc.scala
index 4e5cb580d4..defe175b5c 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/AccountsGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/AccountsGrpc.scala
@@ -61,7 +61,7 @@ final case class AccountsGrpc(
def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
require(__field.containingMessage eq companion.scalaDescriptor)
(__field.number: @_root_.scala.unchecked) match {
- case 1 => _root_.scalapb.descriptors.PRepeated(accounts.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 1 => _root_.scalapb.descriptors.PRepeated(accounts.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -94,7 +94,7 @@ object AccountsGrpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.api.
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.AccountsGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/AccountsJSONGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/AccountsJSONGrpc.scala
index 3206997ad8..82c307a3be 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/AccountsJSONGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/AccountsJSONGrpc.scala
@@ -59,7 +59,7 @@ final case class AccountsJSONGrpc(
def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
require(__field.containingMessage eq companion.scalaDescriptor)
(__field.number: @_root_.scala.unchecked) match {
- case 1 => _root_.scalapb.descriptors.PRepeated(accounts.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 1 => _root_.scalapb.descriptors.PRepeated(accounts.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -92,7 +92,7 @@ object AccountsJSONGrpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.AccountsJSONGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/ApiProto.scala b/obp-api/src/main/scala/code/obp/grpc/api/ApiProto.scala
index 10730dae58..e5724b5b90 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/ApiProto.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/ApiProto.scala
@@ -10,7 +10,7 @@ object ApiProto extends _root_.scalapb.GeneratedFileObject {
com.google.protobuf.empty.EmptyProto,
com.google.protobuf.timestamp.TimestampProto
)
- lazy val messagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq(
+ lazy val messagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq(
code.obp.grpc.api.BanksJson400Grpc,
code.obp.grpc.api.AccountsJSONGrpc,
code.obp.grpc.api.AccountJSONGrpc,
@@ -142,7 +142,7 @@ object ApiProto extends _root_.scalapb.GeneratedFileObject {
_root_.scalapb.descriptors.FileDescriptor.buildFrom(scalaProto, dependencies.map(_.scalaDescriptor))
}
lazy val javaDescriptor: com.google.protobuf.Descriptors.FileDescriptor = {
- import scala.collection.JavaConverters._
+ import scala.jdk.CollectionConverters._
val javaProto = com.google.protobuf.DescriptorProtos.FileDescriptorProto.parseFrom(ProtoBytes)
// Filter ObpService to expose only getBanks. The other methods
// (getPrivateAccountsAtOneBank, getBankAccountsBalances,
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/BankIdAccountIdAndUserIdGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/BankIdAccountIdAndUserIdGrpc.scala
index 021e75b50e..3bf9a01d48 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/BankIdAccountIdAndUserIdGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/BankIdAccountIdAndUserIdGrpc.scala
@@ -127,7 +127,7 @@ object BankIdAccountIdAndUserIdGrpc extends scalapb.GeneratedMessageCompanion[co
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ApiProto.javaDescriptor.getMessageTypes.get(12)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ApiProto.scalaDescriptor.messages(12)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.BankIdAccountIdAndUserIdGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/BankIdAndAccountIdGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/BankIdAndAccountIdGrpc.scala
index c126e08f21..82fbdde718 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/BankIdAndAccountIdGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/BankIdAndAccountIdGrpc.scala
@@ -107,7 +107,7 @@ object BankIdAndAccountIdGrpc extends scalapb.GeneratedMessageCompanion[code.obp
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ApiProto.javaDescriptor.getMessageTypes.get(11)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ApiProto.scalaDescriptor.messages(11)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.BankIdAndAccountIdGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/BankIdGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/BankIdGrpc.scala
index b73580be38..b89bf03474 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/BankIdGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/BankIdGrpc.scala
@@ -107,7 +107,7 @@ object BankIdGrpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.api.Ba
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ApiProto.javaDescriptor.getMessageTypes.get(7)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ApiProto.scalaDescriptor.messages(7)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.BankIdGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/BankIdUserIdGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/BankIdUserIdGrpc.scala
index b4ed96d3cb..e7218634d3 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/BankIdUserIdGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/BankIdUserIdGrpc.scala
@@ -107,7 +107,7 @@ object BankIdUserIdGrpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ApiProto.javaDescriptor.getMessageTypes.get(8)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ApiProto.scalaDescriptor.messages(8)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.BankIdUserIdGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/BanksJson400Grpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/BanksJson400Grpc.scala
index 067a46e415..d69f8e1c8c 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/BanksJson400Grpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/BanksJson400Grpc.scala
@@ -61,7 +61,7 @@ final case class BanksJson400Grpc(
def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
require(__field.containingMessage eq companion.scalaDescriptor)
(__field.number: @_root_.scala.unchecked) match {
- case 1 => _root_.scalapb.descriptors.PRepeated(banks.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 1 => _root_.scalapb.descriptors.PRepeated(banks.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -94,7 +94,7 @@ object BanksJson400Grpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_]](
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
_root_.code.obp.grpc.api.BanksJson400Grpc.BankRoutingJsonV121Grpc,
_root_.code.obp.grpc.api.BanksJson400Grpc.BankJson400Grpc
)
@@ -203,7 +203,7 @@ object BanksJson400Grpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.BanksJson400Grpc.javaDescriptor.getNestedTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.BanksJson400Grpc.scalaDescriptor.nestedMessages(0)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.BanksJson400Grpc.BankRoutingJsonV121Grpc(
)
@@ -359,7 +359,7 @@ object BanksJson400Grpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
case 3 => _root_.scalapb.descriptors.PString(fullName)
case 4 => _root_.scalapb.descriptors.PString(logo)
case 5 => _root_.scalapb.descriptors.PString(website)
- case 6 => _root_.scalapb.descriptors.PRepeated(bankRoutings.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 6 => _root_.scalapb.descriptors.PRepeated(bankRoutings.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -402,7 +402,7 @@ object BanksJson400Grpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.BanksJson400Grpc.BankJson400Grpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/BasicAccountJSONGrpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/BasicAccountJSONGrpc.scala
index 373e71eec5..5b85b79044 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/BasicAccountJSONGrpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/BasicAccountJSONGrpc.scala
@@ -113,7 +113,7 @@ final case class BasicAccountJSONGrpc(
case 1 => _root_.scalapb.descriptors.PString(id)
case 2 => _root_.scalapb.descriptors.PString(label)
case 3 => _root_.scalapb.descriptors.PString(bankId)
- case 4 => _root_.scalapb.descriptors.PRepeated(viewsAvailable.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 4 => _root_.scalapb.descriptors.PRepeated(viewsAvailable.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -152,7 +152,7 @@ object BasicAccountJSONGrpc extends scalapb.GeneratedMessageCompanion[code.obp.g
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_]](
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
_root_.code.obp.grpc.api.BasicAccountJSONGrpc.BasicViewJson
)
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
@@ -280,7 +280,7 @@ object BasicAccountJSONGrpc extends scalapb.GeneratedMessageCompanion[code.obp.g
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.BasicAccountJSONGrpc.javaDescriptor.getNestedTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.BasicAccountJSONGrpc.scalaDescriptor.nestedMessages(0)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.BasicAccountJSONGrpc.BasicViewJson(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/CoreTransactionsJsonV300Grpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/CoreTransactionsJsonV300Grpc.scala
index 8f819cd99a..96666d4131 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/CoreTransactionsJsonV300Grpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/CoreTransactionsJsonV300Grpc.scala
@@ -59,7 +59,7 @@ final case class CoreTransactionsJsonV300Grpc(
def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
require(__field.containingMessage eq companion.scalaDescriptor)
(__field.number: @_root_.scala.unchecked) match {
- case 1 => _root_.scalapb.descriptors.PRepeated(transactions.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 1 => _root_.scalapb.descriptors.PRepeated(transactions.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -92,7 +92,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_]](
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]](
_root_.code.obp.grpc.api.CoreTransactionsJsonV300Grpc.CoreTransactionJsonV300Grpc,
_root_.code.obp.grpc.api.CoreTransactionsJsonV300Grpc.AccountHolderJSONGrpc,
_root_.code.obp.grpc.api.CoreTransactionsJsonV300Grpc.AccountRoutingJsonV121Grpc,
@@ -249,7 +249,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.CoreTransactionJsonV300Grpc(
)
@@ -370,7 +370,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.javaDescriptor.getNestedTypes.get(1)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.scalaDescriptor.nestedMessages(1)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.AccountHolderJSONGrpc(
)
@@ -484,7 +484,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.javaDescriptor.getNestedTypes.get(2)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.scalaDescriptor.nestedMessages(2)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.AccountRoutingJsonV121Grpc(
)
@@ -598,7 +598,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.javaDescriptor.getNestedTypes.get(3)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.scalaDescriptor.nestedMessages(3)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.BankRoutingJsonV121Grpc(
)
@@ -714,8 +714,8 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
(__field.number: @_root_.scala.unchecked) match {
case 1 => _root_.scalapb.descriptors.PString(id)
case 2 => bankRouting.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
- case 3 => _root_.scalapb.descriptors.PRepeated(accountRoutings.map(_.toPMessage)(_root_.scala.collection.breakOut))
- case 4 => _root_.scalapb.descriptors.PRepeated(holders.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 3 => _root_.scalapb.descriptors.PRepeated(accountRoutings.iterator.map(_.toPMessage).toVector)
+ case 4 => _root_.scalapb.descriptors.PRepeated(holders.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -756,7 +756,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.ThisAccountJsonV300Grpc(
)
@@ -877,7 +877,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
case 1 => _root_.scalapb.descriptors.PString(id)
case 2 => holder.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
case 3 => bankRouting.map(_.toPMessage).getOrElse(_root_.scalapb.descriptors.PEmpty)
- case 4 => _root_.scalapb.descriptors.PRepeated(accountRoutings.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 4 => _root_.scalapb.descriptors.PRepeated(accountRoutings.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -918,7 +918,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.CoreCounterpartyJsonV300Grpc(
)
@@ -1038,7 +1038,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.javaDescriptor.getNestedTypes.get(6)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.scalaDescriptor.nestedMessages(6)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.AmountOfMoneyJsonV121Grpc(
)
@@ -1239,7 +1239,7 @@ object CoreTransactionsJsonV300Grpc extends scalapb.GeneratedMessageCompanion[co
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.CoreTransactionsJsonV300Grpc.CoreTransactionDetailsJSONGrpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/ViewJSONV121Grpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/ViewJSONV121Grpc.scala
index 5c557ab1ed..e4d91439f5 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/ViewJSONV121Grpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/ViewJSONV121Grpc.scala
@@ -1367,7 +1367,7 @@ object ViewJSONV121Grpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ApiProto.javaDescriptor.getMessageTypes.get(4)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = ApiProto.scalaDescriptor.messages(4)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.ViewJSONV121Grpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/api/ViewsJSONV121Grpc.scala b/obp-api/src/main/scala/code/obp/grpc/api/ViewsJSONV121Grpc.scala
index 2255cd3c70..2a03dcfe42 100644
--- a/obp-api/src/main/scala/code/obp/grpc/api/ViewsJSONV121Grpc.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/api/ViewsJSONV121Grpc.scala
@@ -59,7 +59,7 @@ final case class ViewsJSONV121Grpc(
def getField(__field: _root_.scalapb.descriptors.FieldDescriptor): _root_.scalapb.descriptors.PValue = {
require(__field.containingMessage eq companion.scalaDescriptor)
(__field.number: @_root_.scala.unchecked) match {
- case 1 => _root_.scalapb.descriptors.PRepeated(views.map(_.toPMessage)(_root_.scala.collection.breakOut))
+ case 1 => _root_.scalapb.descriptors.PRepeated(views.iterator.map(_.toPMessage).toVector)
}
}
def toProtoString: _root_.scala.Predef.String = _root_.scalapb.TextFormat.printToUnicodeString(this)
@@ -92,7 +92,7 @@ object ViewsJSONV121Grpc extends scalapb.GeneratedMessageCompanion[code.obp.grpc
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.api.ViewsJSONV121Grpc(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/ChatMessageEvent.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/ChatMessageEvent.scala
index 98268d973c..638572107b 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/ChatMessageEvent.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/ChatMessageEvent.scala
@@ -394,7 +394,7 @@ object ChatMessageEvent extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
case 16 => com.google.protobuf.timestamp.Timestamp
}
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.ChatMessageEvent(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/PresenceEvent.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/PresenceEvent.scala
index bc2480d819..b8da94b498 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/PresenceEvent.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/PresenceEvent.scala
@@ -147,7 +147,7 @@ object PresenceEvent extends scalapb.GeneratedMessageCompanion[code.obp.grpc.cha
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ChatProto.javaDescriptor.getMessageTypes.get(5)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.PresenceEvent(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamMessagesRequest.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamMessagesRequest.scala
index 87fec2d637..d0f3272c28 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamMessagesRequest.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamMessagesRequest.scala
@@ -87,7 +87,7 @@ object StreamMessagesRequest extends scalapb.GeneratedMessageCompanion[code.obp.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ChatProto.javaDescriptor.getMessageTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.StreamMessagesRequest(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamPresenceRequest.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamPresenceRequest.scala
index bfec51377f..1bbbb6974a 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamPresenceRequest.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamPresenceRequest.scala
@@ -87,7 +87,7 @@ object StreamPresenceRequest extends scalapb.GeneratedMessageCompanion[code.obp.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ChatProto.javaDescriptor.getMessageTypes.get(2)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.StreamPresenceRequest(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamUnreadCountsRequest.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamUnreadCountsRequest.scala
index 5c569a0f1c..e5e45738bb 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamUnreadCountsRequest.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/StreamUnreadCountsRequest.scala
@@ -68,7 +68,7 @@ object StreamUnreadCountsRequest extends scalapb.GeneratedMessageCompanion[code.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ChatProto.javaDescriptor.getMessageTypes.get(3)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.StreamUnreadCountsRequest(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingEvent.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingEvent.scala
index 8613170b93..b8a8149a7d 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingEvent.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingEvent.scala
@@ -107,7 +107,7 @@ object TypingEvent extends scalapb.GeneratedMessageCompanion[code.obp.grpc.chat.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ChatProto.javaDescriptor.getMessageTypes.get(1)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.TypingEvent(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingIndicator.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingIndicator.scala
index a4edb6cdc6..626100a835 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingIndicator.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/TypingIndicator.scala
@@ -167,7 +167,7 @@ object TypingIndicator extends scalapb.GeneratedMessageCompanion[code.obp.grpc.c
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ChatProto.javaDescriptor.getMessageTypes.get(3)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.TypingIndicator(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/chat/api/UnreadCountEvent.scala b/obp-api/src/main/scala/code/obp/grpc/chat/api/UnreadCountEvent.scala
index 47f4cf11a9..cdc6af9b63 100644
--- a/obp-api/src/main/scala/code/obp/grpc/chat/api/UnreadCountEvent.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/chat/api/UnreadCountEvent.scala
@@ -107,7 +107,7 @@ object UnreadCountEvent extends scalapb.GeneratedMessageCompanion[code.obp.grpc.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = ChatProto.javaDescriptor.getMessageTypes.get(7)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.chat.api.UnreadCountEvent(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/logcache/api/LogCacheEntry.scala b/obp-api/src/main/scala/code/obp/grpc/logcache/api/LogCacheEntry.scala
index 375af30f4d..fa8437f993 100644
--- a/obp-api/src/main/scala/code/obp/grpc/logcache/api/LogCacheEntry.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/logcache/api/LogCacheEntry.scala
@@ -151,7 +151,7 @@ object LogCacheEntry extends scalapb.GeneratedMessageCompanion[code.obp.grpc.log
}
__out
}
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.logcache.api.LogCacheEntry(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/logcache/api/StreamLogCacheRequest.scala b/obp-api/src/main/scala/code/obp/grpc/logcache/api/StreamLogCacheRequest.scala
index 8c6bfec9e5..3011bff6bb 100644
--- a/obp-api/src/main/scala/code/obp/grpc/logcache/api/StreamLogCacheRequest.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/logcache/api/StreamLogCacheRequest.scala
@@ -88,7 +88,7 @@ object StreamLogCacheRequest extends scalapb.GeneratedMessageCompanion[code.obp.
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = LogCacheProto.javaDescriptor.getMessageTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.logcache.api.StreamLogCacheRequest(
)
diff --git a/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/MetricEvent.scala b/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/MetricEvent.scala
index 391a2d0ec9..630e1d8e5a 100644
--- a/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/MetricEvent.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/MetricEvent.scala
@@ -265,7 +265,7 @@ object MetricEvent extends scalapb.GeneratedMessageCompanion[code.obp.grpc.metri
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = MetricsStreamProto.javaDescriptor.getMessageTypes.get(1)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.metricsstream.api.MetricEvent()
implicit class MetricEventLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, code.obp.grpc.metricsstream.api.MetricEvent]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, code.obp.grpc.metricsstream.api.MetricEvent](_l) {
diff --git a/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/StreamMetricsRequest.scala b/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/StreamMetricsRequest.scala
index 2e5b38a0cb..c5fe31cc83 100644
--- a/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/StreamMetricsRequest.scala
+++ b/obp-api/src/main/scala/code/obp/grpc/metricsstream/api/StreamMetricsRequest.scala
@@ -145,7 +145,7 @@ object StreamMetricsRequest extends scalapb.GeneratedMessageCompanion[code.obp.g
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = MetricsStreamProto.javaDescriptor.getMessageTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = throw new UnsupportedOperationException("scalaDescriptor not available")
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = code.obp.grpc.metricsstream.api.StreamMetricsRequest()
implicit class StreamMetricsRequestLens[UpperPB](_l: _root_.scalapb.lenses.Lens[UpperPB, code.obp.grpc.metricsstream.api.StreamMetricsRequest]) extends _root_.scalapb.lenses.ObjectLens[UpperPB, code.obp.grpc.metricsstream.api.StreamMetricsRequest](_l) {
diff --git a/obp-api/src/main/scala/code/organisation/OrganisationTrait.scala b/obp-api/src/main/scala/code/organisation/OrganisationTrait.scala
index 8982fe20b7..0b61489895 100644
--- a/obp-api/src/main/scala/code/organisation/OrganisationTrait.scala
+++ b/obp-api/src/main/scala/code/organisation/OrganisationTrait.scala
@@ -6,7 +6,7 @@ import net.liftweb.util.SimpleInjector
import scala.concurrent.Future
object Organisations extends SimpleInjector {
- val organisation = new Inject(buildOne _) {}
+ val organisation = new Inject(() => buildOne) {}
def buildOne: OrganisationProvider = MappedOrganisationProvider
}
diff --git a/obp-api/src/main/scala/code/payeelookup/PayeeLookupTrait.scala b/obp-api/src/main/scala/code/payeelookup/PayeeLookupTrait.scala
index ae3e8df832..27c3c25b4d 100644
--- a/obp-api/src/main/scala/code/payeelookup/PayeeLookupTrait.scala
+++ b/obp-api/src/main/scala/code/payeelookup/PayeeLookupTrait.scala
@@ -4,7 +4,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object PayeeLookups extends SimpleInjector {
- val payeeLookup = new Inject(buildOne _) {}
+ val payeeLookup = new Inject(() => buildOne) {}
def buildOne: PayeeLookupProvider = MappedPayeeLookupProvider
}
diff --git a/obp-api/src/main/scala/code/productattribute/ProductAttribute.scala b/obp-api/src/main/scala/code/productattribute/ProductAttribute.scala
index c1b62fb5da..5ed4d3aaa3 100644
--- a/obp-api/src/main/scala/code/productattribute/ProductAttribute.scala
+++ b/obp-api/src/main/scala/code/productattribute/ProductAttribute.scala
@@ -14,7 +14,7 @@ import scala.concurrent.Future
object ProductAttributeX extends SimpleInjector {
- val productAttributeProvider = new Inject(buildOne _) {}
+ val productAttributeProvider = new Inject(() => buildOne) {}
def buildOne: ProductAttributeProvider = MappedProductAttributeProvider
diff --git a/obp-api/src/main/scala/code/productcollection/ProductCollction.scala b/obp-api/src/main/scala/code/productcollection/ProductCollction.scala
index 25b9f0e81b..91c89eef7c 100644
--- a/obp-api/src/main/scala/code/productcollection/ProductCollction.scala
+++ b/obp-api/src/main/scala/code/productcollection/ProductCollction.scala
@@ -10,7 +10,7 @@ import scala.concurrent.Future
object ProductCollectionX extends SimpleInjector {
- val productCollection = new Inject(buildOne _) {}
+ val productCollection = new Inject(() => buildOne) {}
def buildOne: ProductCollectionProvider = MappedProductCollectionProvider
diff --git a/obp-api/src/main/scala/code/productcollectionitem/ProductCollctionItem.scala b/obp-api/src/main/scala/code/productcollectionitem/ProductCollctionItem.scala
index c115906063..e05b8c414a 100644
--- a/obp-api/src/main/scala/code/productcollectionitem/ProductCollctionItem.scala
+++ b/obp-api/src/main/scala/code/productcollectionitem/ProductCollctionItem.scala
@@ -11,7 +11,7 @@ import scala.concurrent.Future
object ProductCollectionItems extends SimpleInjector {
- val productCollectionItem = new Inject(buildOne _) {}
+ val productCollectionItem = new Inject(() => buildOne) {}
def buildOne: ProductCollectionItemProvider = MappedProductCollectionItemProvider
diff --git a/obp-api/src/main/scala/code/productfee/ProductFee.scala b/obp-api/src/main/scala/code/productfee/ProductFee.scala
index 41be4026c3..5682ce99f8 100644
--- a/obp-api/src/main/scala/code/productfee/ProductFee.scala
+++ b/obp-api/src/main/scala/code/productfee/ProductFee.scala
@@ -13,7 +13,7 @@ import scala.math.BigDecimal
object ProductFeeX extends SimpleInjector {
- val productFeeProvider = new Inject(buildOne _) {}
+ val productFeeProvider = new Inject(() => buildOne) {}
def buildOne: ProductFeeProvider = MappedProductFeeProvider
diff --git a/obp-api/src/main/scala/code/products/Products.scala b/obp-api/src/main/scala/code/products/Products.scala
index 8467915f98..04509c8dc0 100644
--- a/obp-api/src/main/scala/code/products/Products.scala
+++ b/obp-api/src/main/scala/code/products/Products.scala
@@ -12,7 +12,7 @@ import com.openbankproject.commons.model.Product
object Products extends SimpleInjector {
- val productsProvider = new Inject(buildOne _) {}
+ val productsProvider = new Inject(() => buildOne) {}
def buildOne: ProductsProvider = MappedProductsProvider
diff --git a/obp-api/src/main/scala/code/ratelimiting/RateLimiting.scala b/obp-api/src/main/scala/code/ratelimiting/RateLimiting.scala
index 01a7250b15..e75f922786 100644
--- a/obp-api/src/main/scala/code/ratelimiting/RateLimiting.scala
+++ b/obp-api/src/main/scala/code/ratelimiting/RateLimiting.scala
@@ -9,7 +9,7 @@ import net.liftweb.common.Box
import scala.concurrent.Future
object RateLimitingDI extends SimpleInjector {
- val rateLimiting = new Inject(buildOne _) {}
+ val rateLimiting = new Inject(() => buildOne) {}
def buildOne: RateLimitingProviderTrait = MappedRateLimitingProvider
}
diff --git a/obp-api/src/main/scala/code/refreshuser/UserRefreshes.scala b/obp-api/src/main/scala/code/refreshuser/UserRefreshes.scala
index ac38bd856f..33753f58c1 100644
--- a/obp-api/src/main/scala/code/refreshuser/UserRefreshes.scala
+++ b/obp-api/src/main/scala/code/refreshuser/UserRefreshes.scala
@@ -5,7 +5,7 @@ import net.liftweb.util.SimpleInjector
object UserRefreshes extends SimpleInjector {
- val UserRefreshes = new Inject(buildOne _) {}
+ val UserRefreshes = new Inject(() => buildOne) {}
def buildOne: UserRefreshesProvider = MappedUserRefreshesProvider
}
diff --git a/obp-api/src/main/scala/code/regulatedentities/RegulatedEntity.scala b/obp-api/src/main/scala/code/regulatedentities/RegulatedEntity.scala
index 9e0587d2f4..57c23d72d7 100644
--- a/obp-api/src/main/scala/code/regulatedentities/RegulatedEntity.scala
+++ b/obp-api/src/main/scala/code/regulatedentities/RegulatedEntity.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
import code.util.Helper.MdcLoggable
object RegulatedEntityX extends SimpleInjector {
- val regulatedEntityProvider = new Inject(buildOne _) {}
+ val regulatedEntityProvider = new Inject(() => buildOne) {}
def buildOne: RegulatedEntityProvider = MappedRegulatedEntityProvider
}
/* For ProductFee */
diff --git a/obp-api/src/main/scala/code/regulatedentities/attribute/RegulatedEntityAttribute.scala b/obp-api/src/main/scala/code/regulatedentities/attribute/RegulatedEntityAttribute.scala
index 1480502602..3837606a93 100644
--- a/obp-api/src/main/scala/code/regulatedentities/attribute/RegulatedEntityAttribute.scala
+++ b/obp-api/src/main/scala/code/regulatedentities/attribute/RegulatedEntityAttribute.scala
@@ -11,7 +11,7 @@ import scala.concurrent.Future
object RegulatedEntityAttributeX extends SimpleInjector {
- val regulatedEntityAttributeProvider = new Inject(buildOne _) {}
+ val regulatedEntityAttributeProvider = new Inject(() => buildOne) {}
def buildOne: RegulatedEntityAttributeProviderTrait = RegulatedEntityAttributeProvider
diff --git a/obp-api/src/main/scala/code/routingscheme/RoutingSchemeTrait.scala b/obp-api/src/main/scala/code/routingscheme/RoutingSchemeTrait.scala
index e99dce41d2..6fc564d03a 100644
--- a/obp-api/src/main/scala/code/routingscheme/RoutingSchemeTrait.scala
+++ b/obp-api/src/main/scala/code/routingscheme/RoutingSchemeTrait.scala
@@ -6,7 +6,7 @@ import net.liftweb.util.SimpleInjector
import scala.concurrent.Future
object RoutingSchemes extends SimpleInjector {
- val routingScheme = new Inject(buildOne _) {}
+ val routingScheme = new Inject(() => buildOne) {}
def buildOne: RoutingSchemeProvider = MappedRoutingSchemeProvider
}
diff --git a/obp-api/src/main/scala/code/sandbox/OBPDataImport.scala b/obp-api/src/main/scala/code/sandbox/OBPDataImport.scala
index eee5069a61..4b24a4753e 100644
--- a/obp-api/src/main/scala/code/sandbox/OBPDataImport.scala
+++ b/obp-api/src/main/scala/code/sandbox/OBPDataImport.scala
@@ -29,7 +29,7 @@ import scala.collection.immutable.List
object OBPDataImport extends SimpleInjector {
- val importer = new Inject(buildOne _) {}
+ val importer = new Inject(() => buildOne) {}
def buildOne : OBPDataImport = LocalMappedConnectorDataImport
diff --git a/obp-api/src/main/scala/code/scope/Scope.scala b/obp-api/src/main/scala/code/scope/Scope.scala
index 7022c3a826..386c4c86a4 100644
--- a/obp-api/src/main/scala/code/scope/Scope.scala
+++ b/obp-api/src/main/scala/code/scope/Scope.scala
@@ -7,7 +7,7 @@ import scala.concurrent.Future
object Scope extends SimpleInjector {
- val scope = new Inject(buildOne _) {}
+ val scope = new Inject(() => buildOne) {}
def buildOne: ScopeProvider = MappedScopesProvider
diff --git a/obp-api/src/main/scala/code/scope/UserScope.scala b/obp-api/src/main/scala/code/scope/UserScope.scala
index 6dc8e1a71c..8ec423cf42 100644
--- a/obp-api/src/main/scala/code/scope/UserScope.scala
+++ b/obp-api/src/main/scala/code/scope/UserScope.scala
@@ -5,7 +5,7 @@ import net.liftweb.util.SimpleInjector
object UserScope extends SimpleInjector {
- val userScope = new Inject(buildOne _) {}
+ val userScope = new Inject(() => buildOne) {}
def buildOne: UserScopeProvider = MappedUserScopeProvider
}
diff --git a/obp-api/src/main/scala/code/search/search.scala b/obp-api/src/main/scala/code/search/search.scala
index 97109c2fb9..af6a108700 100644
--- a/obp-api/src/main/scala/code/search/search.scala
+++ b/obp-api/src/main/scala/code/search/search.scala
@@ -245,7 +245,7 @@ class elasticsearchMetrics extends elasticsearch {
}
}
- def indexMetric(userId: String, url: String, date: Date, duration: Long, userName: String, appName: String, developerEmail: String, correlationId: String, apiInstanceId: String) {
+ def indexMetric(userId: String, url: String, date: Date, duration: Long, userName: String, appName: String, developerEmail: String, correlationId: String, apiInstanceId: String): Unit = {
if (APIUtil.getPropsAsBoolValue("allow_elasticsearch", false) && APIUtil.getPropsAsBoolValue("allow_elasticsearch_metrics", false) ) {
try {
import com.sksamuel.elastic4s.ElasticDsl._
diff --git a/obp-api/src/main/scala/code/signingbaskets/MappedSigningBasketProvider.scala b/obp-api/src/main/scala/code/signingbaskets/MappedSigningBasketProvider.scala
index b39568d052..ddeffde14a 100644
--- a/obp-api/src/main/scala/code/signingbaskets/MappedSigningBasketProvider.scala
+++ b/obp-api/src/main/scala/code/signingbaskets/MappedSigningBasketProvider.scala
@@ -50,7 +50,7 @@ object MappedSigningBasketProvider extends SigningBasketProvider {
throw new Error(entity.validate.map(_.msg.toString()).mkString(";"))
}
paymentIds.getOrElse(Nil).map { paymentId =>
- MappedSigningBasketPayment.create.BasketId(entity.basketId).PaymentId(paymentId)saveMe()
+ MappedSigningBasketPayment.create.BasketId(entity.basketId).PaymentId(paymentId).saveMe()
}
consentIds.getOrElse(Nil).map { consentId =>
MappedSigningBasketConsent.create.BasketId(entity.basketId).ConsentId(consentId).saveMe()
diff --git a/obp-api/src/main/scala/code/signingbaskets/SigningBasket.scala b/obp-api/src/main/scala/code/signingbaskets/SigningBasket.scala
index 132c8e1441..cb7bb0284c 100644
--- a/obp-api/src/main/scala/code/signingbaskets/SigningBasket.scala
+++ b/obp-api/src/main/scala/code/signingbaskets/SigningBasket.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
import code.util.Helper.MdcLoggable
object SigningBasketX extends SimpleInjector {
- val signingBasketProvider: SigningBasketX.Inject[SigningBasketProvider] = new Inject(buildOne _) {}
+ val signingBasketProvider: SigningBasketX.Inject[SigningBasketProvider] = new Inject(() => buildOne) {}
private def buildOne: SigningBasketProvider = MappedSigningBasketProvider
}
diff --git a/obp-api/src/main/scala/code/socialmedia/SocialMedia.scala b/obp-api/src/main/scala/code/socialmedia/SocialMedia.scala
index 290dc699d6..8290b9f9e3 100644
--- a/obp-api/src/main/scala/code/socialmedia/SocialMedia.scala
+++ b/obp-api/src/main/scala/code/socialmedia/SocialMedia.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
// TODO Rename to SocialMediaHandle
object SocialMediaHandle extends SimpleInjector {
- val socialMediaHandleProvider = new Inject(buildOne _) {}
+ val socialMediaHandleProvider = new Inject(() => buildOne) {}
def buildOne: SocialMediaHandleProvider = MappedSocialMediasProvider
diff --git a/obp-api/src/main/scala/code/standingorders/StandingOrder.scala b/obp-api/src/main/scala/code/standingorders/StandingOrder.scala
index e38376f5c0..7f637c6540 100644
--- a/obp-api/src/main/scala/code/standingorders/StandingOrder.scala
+++ b/obp-api/src/main/scala/code/standingorders/StandingOrder.scala
@@ -9,7 +9,7 @@ import scala.math.BigDecimal
object StandingOrders extends SimpleInjector {
- val provider = new Inject(buildOne _) {}
+ val provider = new Inject(() => buildOne) {}
def buildOne: StandingOrderProvider = MappedStandingOrderProvider
}
diff --git a/obp-api/src/main/scala/code/taxresidence/TaxResidence.scala b/obp-api/src/main/scala/code/taxresidence/TaxResidence.scala
index 3c58758621..2ddf624d02 100644
--- a/obp-api/src/main/scala/code/taxresidence/TaxResidence.scala
+++ b/obp-api/src/main/scala/code/taxresidence/TaxResidence.scala
@@ -9,7 +9,7 @@ import scala.concurrent.Future
object TaxResidenceX extends SimpleInjector {
- val taxResidence = new Inject(buildOne _) {}
+ val taxResidence = new Inject(() => buildOne) {}
def buildOne: TaxResidenceProvider = MappedTaxResidenceProvider
diff --git a/obp-api/src/main/scala/code/token/OpenIDConnectTokenProvider.scala b/obp-api/src/main/scala/code/token/OpenIDConnectTokenProvider.scala
index 8b99c7f80f..2574640b3e 100644
--- a/obp-api/src/main/scala/code/token/OpenIDConnectTokenProvider.scala
+++ b/obp-api/src/main/scala/code/token/OpenIDConnectTokenProvider.scala
@@ -4,7 +4,7 @@ import net.liftweb.common.Box
import net.liftweb.util.SimpleInjector
object TokensOpenIDConnect extends SimpleInjector {
- val tokens = new Inject(buildOne _) {}
+ val tokens = new Inject(() => buildOne) {}
def buildOne: OpenIDConnectTokensProvider = MappedOpenIDConnectTokensProvider
}
diff --git a/obp-api/src/main/scala/code/token/TokenProvider.scala b/obp-api/src/main/scala/code/token/TokenProvider.scala
index 0dcf44b543..83921fe91c 100644
--- a/obp-api/src/main/scala/code/token/TokenProvider.scala
+++ b/obp-api/src/main/scala/code/token/TokenProvider.scala
@@ -11,7 +11,7 @@ import scala.concurrent.Future
object Tokens extends SimpleInjector {
- val tokens = new Inject(buildOne _) {}
+ val tokens = new Inject(() => buildOne) {}
def buildOne: TokensProvider = MappedTokenProvider
diff --git a/obp-api/src/main/scala/code/transaction/internalMapping/TransactionIdMappingProvider.scala b/obp-api/src/main/scala/code/transaction/internalMapping/TransactionIdMappingProvider.scala
index 4352c6899c..b3afd5f6ba 100644
--- a/obp-api/src/main/scala/code/transaction/internalMapping/TransactionIdMappingProvider.scala
+++ b/obp-api/src/main/scala/code/transaction/internalMapping/TransactionIdMappingProvider.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
object TransactionIdMappingProvider extends SimpleInjector {
- val transactionIdMappingProvider = new Inject(buildOne _) {}
+ val transactionIdMappingProvider = new Inject(() => buildOne) {}
def buildOne: TransactionIdMappingProvider = MappedTransactionIdMappingProvider
diff --git a/obp-api/src/main/scala/code/transactionChallenge/ChallengeTrait.scala b/obp-api/src/main/scala/code/transactionChallenge/ChallengeTrait.scala
index c0ff954d22..8f948799d9 100644
--- a/obp-api/src/main/scala/code/transactionChallenge/ChallengeTrait.scala
+++ b/obp-api/src/main/scala/code/transactionChallenge/ChallengeTrait.scala
@@ -11,7 +11,7 @@ import net.liftweb.util.{Props, SimpleInjector}
object Challenges extends SimpleInjector {
- val ChallengeProvider = new Inject(buildOne _) {}
+ val ChallengeProvider = new Inject(() => buildOne) {}
def buildOne: ChallengeProvider = MappedChallengeProvider
diff --git a/obp-api/src/main/scala/code/transactionRequestAttribute/TransactionRequestAttributeX.scala b/obp-api/src/main/scala/code/transactionRequestAttribute/TransactionRequestAttributeX.scala
index a002b20c4c..a415895f29 100644
--- a/obp-api/src/main/scala/code/transactionRequestAttribute/TransactionRequestAttributeX.scala
+++ b/obp-api/src/main/scala/code/transactionRequestAttribute/TransactionRequestAttributeX.scala
@@ -8,7 +8,7 @@ import scala.collection.immutable.List
object TransactionRequestAttributeX extends SimpleInjector {
- val transactionRequestAttributeProvider = new Inject(buildOne _) {}
+ val transactionRequestAttributeProvider = new Inject(() => buildOne) {}
def buildOne: TransactionRequestAttributeProvider = MappedTransactionRequestAttributeProvider
diff --git a/obp-api/src/main/scala/code/transactionattribute/TransactionAttribute.scala b/obp-api/src/main/scala/code/transactionattribute/TransactionAttribute.scala
index beed0169d0..be84ab2077 100644
--- a/obp-api/src/main/scala/code/transactionattribute/TransactionAttribute.scala
+++ b/obp-api/src/main/scala/code/transactionattribute/TransactionAttribute.scala
@@ -14,7 +14,7 @@ import scala.concurrent.Future
object TransactionAttributeX extends SimpleInjector {
- val transactionAttributeProvider = new Inject(buildOne _) {}
+ val transactionAttributeProvider = new Inject(() => buildOne) {}
def buildOne: TransactionAttributeProvider = MappedTransactionAttributeProvider
diff --git a/obp-api/src/main/scala/code/transactionrequests/TransactionRequests.scala b/obp-api/src/main/scala/code/transactionrequests/TransactionRequests.scala
index e65ca437b4..3d1cbcfe2c 100644
--- a/obp-api/src/main/scala/code/transactionrequests/TransactionRequests.scala
+++ b/obp-api/src/main/scala/code/transactionrequests/TransactionRequests.scala
@@ -11,7 +11,7 @@ object TransactionRequests extends SimpleInjector {
def updatestatus(newStatus: String) = {}
- val transactionRequestProvider = new Inject(buildOne _) {}
+ val transactionRequestProvider = new Inject(() => buildOne) {}
def buildOne: TransactionRequestProvider =
APIUtil.getPropsValue("transactionRequests_connector", "mapped") match {
diff --git a/obp-api/src/main/scala/code/transactiontypes/TransactionType.scala b/obp-api/src/main/scala/code/transactiontypes/TransactionType.scala
index 77ca0c4dc3..877ff3c9ce 100644
--- a/obp-api/src/main/scala/code/transactiontypes/TransactionType.scala
+++ b/obp-api/src/main/scala/code/transactiontypes/TransactionType.scala
@@ -42,7 +42,7 @@ object TransactionType extends SimpleInjector {
)
- val TransactionTypeProvider = new Inject(buildOne _) {}
+ val TransactionTypeProvider = new Inject(() => buildOne) {}
def buildOne: TransactionTypeProvider =
APIUtil.getPropsValue("TransactionTypes_connector", "mapped") match {
diff --git a/obp-api/src/main/scala/code/usercustomerlinks/UserCustomerLink.scala b/obp-api/src/main/scala/code/usercustomerlinks/UserCustomerLink.scala
index ab8469d055..ab78b1eea4 100644
--- a/obp-api/src/main/scala/code/usercustomerlinks/UserCustomerLink.scala
+++ b/obp-api/src/main/scala/code/usercustomerlinks/UserCustomerLink.scala
@@ -11,7 +11,7 @@ import scala.concurrent.Future
object UserCustomerLink extends SimpleInjector {
- val userCustomerLink = new Inject(buildOne _) {}
+ val userCustomerLink = new Inject(() => buildOne) {}
def buildOne: UserCustomerLinkProvider = MappedUserCustomerLinkProvider
diff --git a/obp-api/src/main/scala/code/users/UserAgreementProvider.scala b/obp-api/src/main/scala/code/users/UserAgreementProvider.scala
index 8381fdbe98..fdb514fdd2 100644
--- a/obp-api/src/main/scala/code/users/UserAgreementProvider.scala
+++ b/obp-api/src/main/scala/code/users/UserAgreementProvider.scala
@@ -9,7 +9,7 @@ import net.liftweb.util.SimpleInjector
object UserAgreementProvider extends SimpleInjector {
- val userAgreementProvider = new Inject(buildOne _) {}
+ val userAgreementProvider = new Inject(() => buildOne) {}
def buildOne: UserAgreementProvider = MappedUserAgreementProvider
diff --git a/obp-api/src/main/scala/code/users/UserAttributeProvider.scala b/obp-api/src/main/scala/code/users/UserAttributeProvider.scala
index 80c4de192d..d15c56460b 100644
--- a/obp-api/src/main/scala/code/users/UserAttributeProvider.scala
+++ b/obp-api/src/main/scala/code/users/UserAttributeProvider.scala
@@ -13,7 +13,7 @@ import scala.concurrent.Future
object UserAttributeProvider extends SimpleInjector {
- val userAttributeProvider = new Inject(buildOne _) {}
+ val userAttributeProvider = new Inject(() => buildOne) {}
def buildOne: UserAttributeProvider = MappedUserAttributeProvider
diff --git a/obp-api/src/main/scala/code/users/UserInvitationProvider.scala b/obp-api/src/main/scala/code/users/UserInvitationProvider.scala
index fc15bb4f4a..b8bc81123f 100644
--- a/obp-api/src/main/scala/code/users/UserInvitationProvider.scala
+++ b/obp-api/src/main/scala/code/users/UserInvitationProvider.scala
@@ -7,7 +7,7 @@ import net.liftweb.util.SimpleInjector
object UserInvitationProvider extends SimpleInjector {
- val userInvitationProvider = new Inject(buildOne _) {}
+ val userInvitationProvider = new Inject(() => buildOne) {}
def buildOne: UserInvitationProvider = MappedUserInvitationProvider
diff --git a/obp-api/src/main/scala/code/users/Users.scala b/obp-api/src/main/scala/code/users/Users.scala
index 786c4bc970..95e08d4e2c 100644
--- a/obp-api/src/main/scala/code/users/Users.scala
+++ b/obp-api/src/main/scala/code/users/Users.scala
@@ -14,7 +14,7 @@ import scala.concurrent.Future
object Users extends SimpleInjector {
- val users = new Inject(buildOne _) {}
+ val users = new Inject(() => buildOne) {}
def buildOne: Users = LiftUsers
diff --git a/obp-api/src/main/scala/code/util/AttributeQueryTrait.scala b/obp-api/src/main/scala/code/util/AttributeQueryTrait.scala
index 4041854603..1a4bf288a3 100644
--- a/obp-api/src/main/scala/code/util/AttributeQueryTrait.scala
+++ b/obp-api/src/main/scala/code/util/AttributeQueryTrait.scala
@@ -50,11 +50,11 @@ trait AttributeQueryTrait { self: BaseMetaMapper =>
// Group by parentId and filter
val parentIdToAttributes: Map[String, List[(String, String, String)]] = results.groupBy(_._1)
- val parentIdToNameValues: Map[String, Map[String, String]] = parentIdToAttributes.mapValues(rows => {
- rows.map { case (_, name, value) =>
+ val parentIdToNameValues: Map[String, Map[String, String]] = parentIdToAttributes.map { case (parentId, rows) =>
+ parentId -> rows.map { case (_, name, value) =>
name -> value
}.toMap
- })
+ }
for {
(parentId, attributes: Map[String, String]) <- parentIdToNameValues.toList
diff --git a/obp-api/src/main/scala/code/util/Helper.scala b/obp-api/src/main/scala/code/util/Helper.scala
index 1e7124778f..3dc961e61a 100644
--- a/obp-api/src/main/scala/code/util/Helper.scala
+++ b/obp-api/src/main/scala/code/util/Helper.scala
@@ -110,7 +110,9 @@ object Helper extends Loggable {
}
}
- val deprecatedJsonGenerationMessage = "json generation handled elsewhere as it changes from api version to api version"
+ // final: 2.13 requires an annotation argument to be a compile-time constant, and only a
+ // final val of a literal qualifies. It is used as @deprecated(deprecatedJsonGenerationMessage).
+ final val deprecatedJsonGenerationMessage = "json generation handled elsewhere as it changes from api version to api version"
/**
* Converts a number representing the smallest unit of a currency into a big decimal formatted according to the rules of
diff --git a/obp-api/src/main/scala/code/util/NewAttributeQueryTrait.scala b/obp-api/src/main/scala/code/util/NewAttributeQueryTrait.scala
index 23e3f42c2f..fc434ff41c 100644
--- a/obp-api/src/main/scala/code/util/NewAttributeQueryTrait.scala
+++ b/obp-api/src/main/scala/code/util/NewAttributeQueryTrait.scala
@@ -47,11 +47,11 @@ trait NewAttributeQueryTrait {
// Group by parentId and filter
val parentIdToAttributes: Map[String, List[(String, String, String)]] = results.groupBy(_._1)
- val parentIdToNameValues: Map[String, Map[String, String]] = parentIdToAttributes.mapValues(rows => {
- rows.map { case (_, name, value) =>
+ val parentIdToNameValues: Map[String, Map[String, String]] = parentIdToAttributes.map { case (parentId, rows) =>
+ parentId -> rows.map { case (_, name, value) =>
name -> value
}.toMap
- })
+ }
for {
(parentId, attributes: Map[String, String]) <- parentIdToNameValues.toList
diff --git a/obp-api/src/main/scala/code/util/TTLCache.scala b/obp-api/src/main/scala/code/util/TTLCache.scala
index d0c5831063..7a27b685cf 100644
--- a/obp-api/src/main/scala/code/util/TTLCache.scala
+++ b/obp-api/src/main/scala/code/util/TTLCache.scala
@@ -43,7 +43,7 @@ class Cache[K <: String, V <: AnyRef](cache: GuavaCache[K,V]) extends Caching[K,
* @param k key
* @param v value
*/
- def set(k: K, v: V) {
+ def set(k: K, v: V): Unit = {
cache.put(k, v)
}
@@ -52,7 +52,7 @@ class Cache[K <: String, V <: AnyRef](cache: GuavaCache[K,V]) extends Caching[K,
*
* @param k the key to evict
*/
- def remove(k: K) {
+ def remove(k: K): Unit = {
cache.invalidate(k)
}
@@ -60,7 +60,7 @@ class Cache[K <: String, V <: AnyRef](cache: GuavaCache[K,V]) extends Caching[K,
* Clear all items in the cache
*
*/
- def clear() {
+ def clear(): Unit = {
cache.invalidateAll()
}
diff --git a/obp-api/src/main/scala/code/utilitypayment/UtilityPaymentCallback.scala b/obp-api/src/main/scala/code/utilitypayment/UtilityPaymentCallback.scala
index 4cb8dbeab9..b1a96463ce 100644
--- a/obp-api/src/main/scala/code/utilitypayment/UtilityPaymentCallback.scala
+++ b/obp-api/src/main/scala/code/utilitypayment/UtilityPaymentCallback.scala
@@ -16,7 +16,7 @@ import net.liftweb.util.SimpleInjector
* a single transaction request.
*/
object UtilityPaymentCallbacks extends SimpleInjector {
- val utilityPaymentCallback = new Inject(buildOne _) {}
+ val utilityPaymentCallback = new Inject(() => buildOne) {}
def buildOne: UtilityPaymentCallbackProvider = MappedUtilityPaymentCallbackProvider
}
diff --git a/obp-api/src/main/scala/code/validation/JsonSchemaValidationProvider.scala b/obp-api/src/main/scala/code/validation/JsonSchemaValidationProvider.scala
index f80bccb64c..826e25f0a5 100644
--- a/obp-api/src/main/scala/code/validation/JsonSchemaValidationProvider.scala
+++ b/obp-api/src/main/scala/code/validation/JsonSchemaValidationProvider.scala
@@ -12,7 +12,7 @@ import com.openbankproject.commons.util.json
object JsonSchemaValidationProvider extends SimpleInjector {
- val validationProvider = new Inject(buildOne _) {}
+ val validationProvider = new Inject(() => buildOne) {}
def buildOne: MappedJsonSchemaValidationProvider.type = MappedJsonSchemaValidationProvider
}
diff --git a/obp-api/src/main/scala/code/views/MapperViews.scala b/obp-api/src/main/scala/code/views/MapperViews.scala
index 6a25480a45..5aff41a0d3 100644
--- a/obp-api/src/main/scala/code/views/MapperViews.scala
+++ b/obp-api/src/main/scala/code/views/MapperViews.scala
@@ -371,7 +371,7 @@ object MapperViews extends Views with MdcLoggable {
//returns Full if deletable, Failure if not
def canRevokeOwnerAccessAsBox(bankId: BankId, accountId: AccountId, viewDefinition : ViewDefinition, user : User) : Box[Unit] = {
- if(canRevokeOwnerAccess(bankId: BankId, accountId: AccountId, viewDefinition, user)) Full(Unit)
+ if(canRevokeOwnerAccess(bankId: BankId, accountId: AccountId, viewDefinition, user)) Full(())
else Failure("access cannot be revoked")
}
diff --git a/obp-api/src/main/scala/code/views/Views.scala b/obp-api/src/main/scala/code/views/Views.scala
index ac59c49e78..a2d037929a 100644
--- a/obp-api/src/main/scala/code/views/Views.scala
+++ b/obp-api/src/main/scala/code/views/Views.scala
@@ -13,7 +13,7 @@ import scala.concurrent.Future
object Views extends SimpleInjector {
- val views = new Inject(buildOne _) {}
+ val views = new Inject(() => buildOne) {}
def buildOne: Views = MapperViews
diff --git a/obp-api/src/main/scala/code/webhook/AccountWebhook.scala b/obp-api/src/main/scala/code/webhook/AccountWebhook.scala
index 1952a96e78..5421f5f4a0 100644
--- a/obp-api/src/main/scala/code/webhook/AccountWebhook.scala
+++ b/obp-api/src/main/scala/code/webhook/AccountWebhook.scala
@@ -8,7 +8,7 @@ import scala.collection.immutable.List
import scala.concurrent.Future
object AccountWebhook extends SimpleInjector {
- val accountWebhook = new Inject(buildOne _) {}
+ val accountWebhook = new Inject(() => buildOne) {}
def buildOne: AccountWebhookProvider = MappedAccountWebhookProvider
}
diff --git a/obp-api/src/main/scala/code/webhook/BankAccountNotification.scala b/obp-api/src/main/scala/code/webhook/BankAccountNotification.scala
index 736177abd1..83a8a8c0ad 100644
--- a/obp-api/src/main/scala/code/webhook/BankAccountNotification.scala
+++ b/obp-api/src/main/scala/code/webhook/BankAccountNotification.scala
@@ -8,7 +8,7 @@ import scala.collection.immutable.List
import scala.concurrent.Future
object BankAccountNotificationWebhookTrait extends SimpleInjector {
- val bankAccountNotificationWebhook = new Inject(buildOne _) {}
+ val bankAccountNotificationWebhook = new Inject(() => buildOne) {}
def buildOne: BankAccountNotificationWebhookProvider = MappedBankAccountNotificationWebhookProvider
}
diff --git a/obp-api/src/main/scala/code/webhook/SystemAccountNotification.scala b/obp-api/src/main/scala/code/webhook/SystemAccountNotification.scala
index 46d6fdaa75..252bfb988f 100644
--- a/obp-api/src/main/scala/code/webhook/SystemAccountNotification.scala
+++ b/obp-api/src/main/scala/code/webhook/SystemAccountNotification.scala
@@ -8,7 +8,7 @@ import scala.collection.immutable.List
import scala.concurrent.Future
object SystemAccountNotificationWebhookTrait extends SimpleInjector {
- val systemAccountNotificationWebhook = new Inject(buildOne _) {}
+ val systemAccountNotificationWebhook = new Inject(() => buildOne) {}
def buildOne: SystemAccountNotificationWebhookProvider = MappedSystemAccountNotificationWebhookProvider
}
diff --git a/obp-api/src/main/scala/code/yearlycustomercharges/YearlyCharge.scala b/obp-api/src/main/scala/code/yearlycustomercharges/YearlyCharge.scala
index 92d55fe54f..54a817ee88 100644
--- a/obp-api/src/main/scala/code/yearlycustomercharges/YearlyCharge.scala
+++ b/obp-api/src/main/scala/code/yearlycustomercharges/YearlyCharge.scala
@@ -7,7 +7,7 @@
//
//object YearlyCharge extends SimpleInjector {
//
-// val yearlyChargeProvider = new Inject(buildOne _) {}
+// val yearlyChargeProvider = new Inject(() => buildOne) {}
//
//
// // This determines the provider we use
diff --git a/obp-api/src/main/scala/com/google/protobuf/empty/Empty.scala b/obp-api/src/main/scala/com/google/protobuf/empty/Empty.scala
index 6af185b330..3a72fea793 100644
--- a/obp-api/src/main/scala/com/google/protobuf/empty/Empty.scala
+++ b/obp-api/src/main/scala/com/google/protobuf/empty/Empty.scala
@@ -56,7 +56,7 @@ object Empty extends scalapb.GeneratedMessageCompanion[com.google.protobuf.empty
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = EmptyProto.javaDescriptor.getMessageTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = EmptyProto.scalaDescriptor.messages(0)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = com.google.protobuf.empty.Empty(
)
diff --git a/obp-api/src/main/scala/com/google/protobuf/empty/EmptyProto.scala b/obp-api/src/main/scala/com/google/protobuf/empty/EmptyProto.scala
index f2db787186..e5d6614a24 100644
--- a/obp-api/src/main/scala/com/google/protobuf/empty/EmptyProto.scala
+++ b/obp-api/src/main/scala/com/google/protobuf/empty/EmptyProto.scala
@@ -8,7 +8,7 @@ package com.google.protobuf.empty
object EmptyProto extends _root_.scalapb.GeneratedFileObject {
lazy val dependencies: Seq[_root_.scalapb.GeneratedFileObject] = Seq(
)
- lazy val messagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq(
+ lazy val messagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq(
com.google.protobuf.empty.Empty
)
private lazy val ProtoBytes: Array[Byte] =
diff --git a/obp-api/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala b/obp-api/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala
index 0b0b6d4eee..d162115bf9 100644
--- a/obp-api/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala
+++ b/obp-api/src/main/scala/com/google/protobuf/timestamp/Timestamp.scala
@@ -200,7 +200,7 @@ object Timestamp extends scalapb.GeneratedMessageCompanion[com.google.protobuf.t
def javaDescriptor: _root_.com.google.protobuf.Descriptors.Descriptor = TimestampProto.javaDescriptor.getMessageTypes.get(0)
def scalaDescriptor: _root_.scalapb.descriptors.Descriptor = TimestampProto.scalaDescriptor.messages(0)
def messageCompanionForFieldNumber(__number: _root_.scala.Int): _root_.scalapb.GeneratedMessageCompanion[_] = throw new MatchError(__number)
- lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq.empty
+ lazy val nestedMessagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq.empty
def enumCompanionForFieldNumber(__fieldNumber: _root_.scala.Int): _root_.scalapb.GeneratedEnumCompanion[_] = throw new MatchError(__fieldNumber)
lazy val defaultInstance = com.google.protobuf.timestamp.Timestamp(
)
diff --git a/obp-api/src/main/scala/com/google/protobuf/timestamp/TimestampProto.scala b/obp-api/src/main/scala/com/google/protobuf/timestamp/TimestampProto.scala
index 4415d9ac57..82e1f44d79 100644
--- a/obp-api/src/main/scala/com/google/protobuf/timestamp/TimestampProto.scala
+++ b/obp-api/src/main/scala/com/google/protobuf/timestamp/TimestampProto.scala
@@ -8,7 +8,7 @@ package com.google.protobuf.timestamp
object TimestampProto extends _root_.scalapb.GeneratedFileObject {
lazy val dependencies: Seq[_root_.scalapb.GeneratedFileObject] = Seq(
)
- lazy val messagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_]] = Seq(
+ lazy val messagesCompanions: Seq[_root_.scalapb.GeneratedMessageCompanion[_ <: _root_.scalapb.GeneratedMessage]] = Seq(
com.google.protobuf.timestamp.Timestamp
)
private lazy val ProtoBytes: Array[Byte] =
diff --git a/obp-api/src/test/resources/frozen_type_meta_data b/obp-api/src/test/resources/frozen_type_meta_data
index 808121cd51..a15d8f1900 100644
Binary files a/obp-api/src/test/resources/frozen_type_meta_data and b/obp-api/src/test/resources/frozen_type_meta_data differ
diff --git a/obp-api/src/test/resources/frozen_type_meta_data.txt b/obp-api/src/test/resources/frozen_type_meta_data.txt
new file mode 100644
index 0000000000..d7bddd02ce
--- /dev/null
+++ b/obp-api/src/test/resources/frozen_type_meta_data.txt
@@ -0,0 +1,3375 @@
+endpoint v2.1.0 addCardForBank
+endpoint v2.1.0 answerTransactionRequestChallengeCounterparty
+endpoint v2.1.0 answerTransactionRequestChallengeFree_form
+endpoint v2.1.0 answerTransactionRequestChallengeSandbox_tan
+endpoint v2.1.0 answerTransactionRequestChallengeSepa
+endpoint v2.1.0 createBranch
+endpoint v2.1.0 createCustomer
+endpoint v2.1.0 createTransactionRequestCounterparty
+endpoint v2.1.0 createTransactionRequestFreeForm
+endpoint v2.1.0 createTransactionRequestSandboxTan
+endpoint v2.1.0 createTransactionRequestSepa
+endpoint v2.1.0 createTransactionType
+endpoint v2.1.0 enableDisableConsumers
+endpoint v2.1.0 getAtm
+endpoint v2.1.0 getBranch
+endpoint v2.1.0 getConsumer
+endpoint v2.1.0 getConsumers
+endpoint v2.1.0 getCustomersForCurrentUserAtBank
+endpoint v2.1.0 getCustomersForUser
+endpoint v2.1.0 getEntitlementsByBankAndUser
+endpoint v2.1.0 getMetrics
+endpoint v2.1.0 getProduct
+endpoint v2.1.0 getProducts
+endpoint v2.1.0 getRoles
+endpoint v2.1.0 getTransactionRequestTypesSupportedByBank
+endpoint v2.1.0 getTransactionRequests
+endpoint v2.1.0 getUsers
+endpoint v2.1.0 root
+endpoint v2.1.0 sandboxDataImport
+endpoint v2.1.0 updateBranch
+endpoint v2.1.0 updateConsumerRedirectUrl
+endpoint v2.2.0 config
+endpoint v2.2.0 createAccount
+endpoint v2.2.0 createAtm
+endpoint v2.2.0 createBank
+endpoint v2.2.0 createBranch
+endpoint v2.2.0 createConsumer
+endpoint v2.2.0 createCounterparty
+endpoint v2.2.0 createFx
+endpoint v2.2.0 createProduct
+endpoint v2.2.0 createViewForBankAccount
+endpoint v2.2.0 getConnectorMetrics
+endpoint v2.2.0 getCurrentFxRate
+endpoint v2.2.0 getExplicitCounterpartiesForAccount
+endpoint v2.2.0 getExplicitCounterpartyById
+endpoint v2.2.0 getMessageDocs
+endpoint v2.2.0 getViewsForBankAccount
+endpoint v2.2.0 root
+endpoint v2.2.0 updateViewForBankAccount
+endpoint v3.0.0 addEntitlementRequest
+endpoint v3.0.0 addScope
+endpoint v3.0.0 bankById
+endpoint v3.0.0 corePrivateAccountsAllBanks
+endpoint v3.0.0 createAtm
+endpoint v3.0.0 createBranch
+endpoint v3.0.0 createViewForBankAccount
+endpoint v3.0.0 dataWarehouseSearch
+endpoint v3.0.0 dataWarehouseStatistics
+endpoint v3.0.0 deleteEntitlementRequest
+endpoint v3.0.0 deleteScope
+endpoint v3.0.0 getAccountsHeld
+endpoint v3.0.0 getAdapterInfoForBank
+endpoint v3.0.0 getAggregateMetrics
+endpoint v3.0.0 getAllEntitlementRequests
+endpoint v3.0.0 getApiGlossary
+endpoint v3.0.0 getAtm
+endpoint v3.0.0 getAtms
+endpoint v3.0.0 getBanks
+endpoint v3.0.0 getBranch
+endpoint v3.0.0 getBranches
+endpoint v3.0.0 getCoreAccountById
+endpoint v3.0.0 getCoreTransactionsForBankAccount
+endpoint v3.0.0 getCurrentUser
+endpoint v3.0.0 getCustomersForUser
+endpoint v3.0.0 getEntitlementRequests
+endpoint v3.0.0 getEntitlementRequestsForCurrentUser
+endpoint v3.0.0 getEntitlementsForCurrentUser
+endpoint v3.0.0 getFirehoseAccountsAtOneBank
+endpoint v3.0.0 getFirehoseTransactionsForBankAccount
+endpoint v3.0.0 getOtherAccountByIdForBankAccount
+endpoint v3.0.0 getOtherAccountsForBankAccount
+endpoint v3.0.0 getPermissionForUserForBankAccount
+endpoint v3.0.0 getPrivateAccountById
+endpoint v3.0.0 getPrivateAccountIdsbyBankId
+endpoint v3.0.0 getPublicAccountById
+endpoint v3.0.0 getScopes
+endpoint v3.0.0 getTransactionsForBankAccount
+endpoint v3.0.0 getUser
+endpoint v3.0.0 getUserByUserId
+endpoint v3.0.0 getUserByUsername
+endpoint v3.0.0 getUsers
+endpoint v3.0.0 getViewsForBankAccount
+endpoint v3.0.0 privateAccountsAtOneBank
+endpoint v3.0.0 root
+endpoint v3.0.0 updateBranch
+endpoint v3.0.0 updateViewForBankAccount
+endpoint v3.1.0 addCardForBank
+endpoint v3.1.0 answerConsentChallenge
+endpoint v3.1.0 answerUserAuthContextUpdateChallenge
+endpoint v3.1.0 callsLimit
+endpoint v3.1.0 checkFundsAvailable
+endpoint v3.1.0 config
+endpoint v3.1.0 createAccount
+endpoint v3.1.0 createAccountApplication
+endpoint v3.1.0 createAccountAttribute
+endpoint v3.1.0 createAccountWebhook
+endpoint v3.1.0 createCardAttribute
+endpoint v3.1.0 createConsentEmail
+endpoint v3.1.0 createConsentImplicit
+endpoint v3.1.0 createConsentSms
+endpoint v3.1.0 createCustomer
+endpoint v3.1.0 createCustomerAddress
+endpoint v3.1.0 createMeeting
+endpoint v3.1.0 createMethodRouting
+endpoint v3.1.0 createProduct
+endpoint v3.1.0 createProductAttribute
+endpoint v3.1.0 createProductCollection
+endpoint v3.1.0 createSystemView
+endpoint v3.1.0 createTaxResidence
+endpoint v3.1.0 createUserAuthContext
+endpoint v3.1.0 createUserAuthContextUpdateRequest
+endpoint v3.1.0 createWebUiProps
+endpoint v3.1.0 deleteBranch
+endpoint v3.1.0 deleteCardForBank
+endpoint v3.1.0 deleteCustomerAddress
+endpoint v3.1.0 deleteMethodRouting
+endpoint v3.1.0 deleteProductAttribute
+endpoint v3.1.0 deleteSystemView
+endpoint v3.1.0 deleteTaxResidence
+endpoint v3.1.0 deleteUserAuthContextById
+endpoint v3.1.0 deleteUserAuthContexts
+endpoint v3.1.0 deleteWebUiProps
+endpoint v3.1.0 enableDisableAccountWebhook
+endpoint v3.1.0 enableDisableConsumers
+endpoint v3.1.0 getAccountApplication
+endpoint v3.1.0 getAccountApplications
+endpoint v3.1.0 getAccountWebhooks
+endpoint v3.1.0 getAdapterInfo
+endpoint v3.1.0 getAllEntitlements
+endpoint v3.1.0 getBadLoginStatus
+endpoint v3.1.0 getBankAccountsBalances
+endpoint v3.1.0 getCallsLimit
+endpoint v3.1.0 getCardForBank
+endpoint v3.1.0 getCardsForBank
+endpoint v3.1.0 getCheckbookOrders
+endpoint v3.1.0 getConsents
+endpoint v3.1.0 getConsumer
+endpoint v3.1.0 getConsumers
+endpoint v3.1.0 getConsumersForCurrentUser
+endpoint v3.1.0 getCustomerAddresses
+endpoint v3.1.0 getCustomerByCustomerId
+endpoint v3.1.0 getCustomerByCustomerNumber
+endpoint v3.1.0 getFirehoseCustomers
+endpoint v3.1.0 getMeeting
+endpoint v3.1.0 getMeetings
+endpoint v3.1.0 getMessageDocsSwagger
+endpoint v3.1.0 getMethodRoutings
+endpoint v3.1.0 getMetricsTopConsumers
+endpoint v3.1.0 getOAuth2ServerJWKsURIs
+endpoint v3.1.0 getObpConnectorLoopback
+endpoint v3.1.0 getPrivateAccountByIdFull
+endpoint v3.1.0 getProduct
+endpoint v3.1.0 getProductAttribute
+endpoint v3.1.0 getProductCollection
+endpoint v3.1.0 getProductTree
+endpoint v3.1.0 getProducts
+endpoint v3.1.0 getRateLimitingInfo
+endpoint v3.1.0 getServerJWK
+endpoint v3.1.0 getStatusOfCreditCardOrder
+endpoint v3.1.0 getSystemView
+endpoint v3.1.0 getTaxResidence
+endpoint v3.1.0 getTopAPIs
+endpoint v3.1.0 getTransactionByIdForBankAccount
+endpoint v3.1.0 getTransactionRequests
+endpoint v3.1.0 getUserAuthContexts
+endpoint v3.1.0 getWebUiProps
+endpoint v3.1.0 refreshUser
+endpoint v3.1.0 revokeConsent
+endpoint v3.1.0 root
+endpoint v3.1.0 saveHistoricalTransaction
+endpoint v3.1.0 unlockUser
+endpoint v3.1.0 updateAccount
+endpoint v3.1.0 updateAccountApplicationStatus
+endpoint v3.1.0 updateAccountAttribute
+endpoint v3.1.0 updateCardAttribute
+endpoint v3.1.0 updateCustomerAddress
+endpoint v3.1.0 updateCustomerBranch
+endpoint v3.1.0 updateCustomerCreditLimit
+endpoint v3.1.0 updateCustomerCreditRatingAndSource
+endpoint v3.1.0 updateCustomerData
+endpoint v3.1.0 updateCustomerEmail
+endpoint v3.1.0 updateCustomerIdentity
+endpoint v3.1.0 updateCustomerMobileNumber
+endpoint v3.1.0 updateCustomerNumber
+endpoint v3.1.0 updateMethodRouting
+endpoint v3.1.0 updateProductAttribute
+endpoint v3.1.0 updateSystemView
+endpoint v3.1.0 updatedCardForBank
+endpoint v4.0.0 addAccount
+endpoint v4.0.0 addConsentUser
+endpoint v4.0.0 addScope
+endpoint v4.0.0 addTagForViewOnAccount
+endpoint v4.0.0 answerTransactionRequestChallenge
+endpoint v4.0.0 buildDynamicEndpointTemplate
+endpoint v4.0.0 callsLimit
+endpoint v4.0.0 createAtm
+endpoint v4.0.0 createAuthenticationTypeValidation
+endpoint v4.0.0 createBank
+endpoint v4.0.0 createBankAccountNotificationWebhook
+endpoint v4.0.0 createBankAttribute
+endpoint v4.0.0 createBankLevelDynamicEndpoint
+endpoint v4.0.0 createBankLevelDynamicEntity
+endpoint v4.0.0 createBankLevelDynamicMessageDoc
+endpoint v4.0.0 createBankLevelDynamicResourceDoc
+endpoint v4.0.0 createBankLevelEndpointMapping
+endpoint v4.0.0 createBankLevelEndpointTag
+endpoint v4.0.0 createConnectorMethod
+endpoint v4.0.0 createConsumer
+endpoint v4.0.0 createCounterparty
+endpoint v4.0.0 createCounterpartyForAnyAccount
+endpoint v4.0.0 createCustomer
+endpoint v4.0.0 createCustomerAttribute
+endpoint v4.0.0 createCustomerMessage
+endpoint v4.0.0 createDirectDebit
+endpoint v4.0.0 createDirectDebitManagement
+endpoint v4.0.0 createDynamicEndpoint
+endpoint v4.0.0 createDynamicMessageDoc
+endpoint v4.0.0 createDynamicResourceDoc
+endpoint v4.0.0 createEndpointMapping
+endpoint v4.0.0 createHistoricalTransactionAtBank
+endpoint v4.0.0 createJsonSchemaValidation
+endpoint v4.0.0 createMyApiCollection
+endpoint v4.0.0 createMyApiCollectionEndpoint
+endpoint v4.0.0 createMyApiCollectionEndpointById
+endpoint v4.0.0 createMyPersonalUserAttribute
+endpoint v4.0.0 createOrUpdateAccountAttributeDefinition
+endpoint v4.0.0 createOrUpdateBankAttributeDefinition
+endpoint v4.0.0 createOrUpdateCardAttributeDefinition
+endpoint v4.0.0 createOrUpdateCustomerAttributeAttributeDefinition
+endpoint v4.0.0 createOrUpdateProductAttributeDefinition
+endpoint v4.0.0 createOrUpdateTransactionAttributeDefinition
+endpoint v4.0.0 createOrUpdateTransactionRequestAttributeDefinition
+endpoint v4.0.0 createProduct
+endpoint v4.0.0 createProductAttribute
+endpoint v4.0.0 createProductFee
+endpoint v4.0.0 createSettlementAccount
+endpoint v4.0.0 createStandingOrder
+endpoint v4.0.0 createStandingOrderManagement
+endpoint v4.0.0 createSystemAccountNotificationWebhook
+endpoint v4.0.0 createSystemDynamicEntity
+endpoint v4.0.0 createSystemLevelEndpointTag
+endpoint v4.0.0 createTransactionAttribute
+endpoint v4.0.0 createTransactionRequestAccount
+endpoint v4.0.0 createTransactionRequestAccountOtp
+endpoint v4.0.0 createTransactionRequestAgentCashWithDrawal
+endpoint v4.0.0 createTransactionRequestAttribute
+endpoint v4.0.0 createTransactionRequestCard
+endpoint v4.0.0 createTransactionRequestCounterparty
+endpoint v4.0.0 createTransactionRequestFreeForm
+endpoint v4.0.0 createTransactionRequestRefund
+endpoint v4.0.0 createTransactionRequestSepa
+endpoint v4.0.0 createTransactionRequestSimple
+endpoint v4.0.0 createUserCustomerLinks
+endpoint v4.0.0 createUserInvitation
+endpoint v4.0.0 createUserWithAccountAccess
+endpoint v4.0.0 createUserWithRoles
+endpoint v4.0.0 deleteAccountAttributeDefinition
+endpoint v4.0.0 deleteAccountCascade
+endpoint v4.0.0 deleteAtm
+endpoint v4.0.0 deleteAuthenticationTypeValidation
+endpoint v4.0.0 deleteBankAttribute
+endpoint v4.0.0 deleteBankCascade
+endpoint v4.0.0 deleteBankLevelDynamicEndpoint
+endpoint v4.0.0 deleteBankLevelDynamicEntity
+endpoint v4.0.0 deleteBankLevelDynamicMessageDoc
+endpoint v4.0.0 deleteBankLevelDynamicResourceDoc
+endpoint v4.0.0 deleteBankLevelEndpointMapping
+endpoint v4.0.0 deleteBankLevelEndpointTag
+endpoint v4.0.0 deleteCardAttributeDefinition
+endpoint v4.0.0 deleteCounterpartyForAnyAccount
+endpoint v4.0.0 deleteCustomerAttribute
+endpoint v4.0.0 deleteCustomerAttributeDefinition
+endpoint v4.0.0 deleteCustomerCascade
+endpoint v4.0.0 deleteDynamicEndpoint
+endpoint v4.0.0 deleteDynamicMessageDoc
+endpoint v4.0.0 deleteDynamicResourceDoc
+endpoint v4.0.0 deleteEndpointMapping
+endpoint v4.0.0 deleteExplicitCounterparty
+endpoint v4.0.0 deleteJsonSchemaValidation
+endpoint v4.0.0 deleteMyApiCollection
+endpoint v4.0.0 deleteMyApiCollectionEndpoint
+endpoint v4.0.0 deleteMyApiCollectionEndpointById
+endpoint v4.0.0 deleteMyApiCollectionEndpointByOperationId
+endpoint v4.0.0 deleteMyDynamicEndpoint
+endpoint v4.0.0 deleteMyDynamicEntity
+endpoint v4.0.0 deleteProductAttributeDefinition
+endpoint v4.0.0 deleteProductCascade
+endpoint v4.0.0 deleteProductFee
+endpoint v4.0.0 deleteSystemDynamicEntity
+endpoint v4.0.0 deleteSystemLevelEndpointTag
+endpoint v4.0.0 deleteTagForViewOnAccount
+endpoint v4.0.0 deleteTransactionAttributeDefinition
+endpoint v4.0.0 deleteTransactionCascade
+endpoint v4.0.0 deleteTransactionRequestAttributeDefinition
+endpoint v4.0.0 deleteUser
+endpoint v4.0.0 deleteUserCustomerLink
+endpoint v4.0.0 getAccountAttributeDefinition
+endpoint v4.0.0 getAccountByAccountRouting
+endpoint v4.0.0 getAccountsByAccountRoutingRegex
+endpoint v4.0.0 getAccountsMinimalByCustomerId
+endpoint v4.0.0 getAllAuthenticationTypeValidations
+endpoint v4.0.0 getAllBankLevelDynamicMessageDocs
+endpoint v4.0.0 getAllBankLevelDynamicResourceDocs
+endpoint v4.0.0 getAllBankLevelEndpointMappings
+endpoint v4.0.0 getAllConnectorMethods
+endpoint v4.0.0 getAllDynamicMessageDocs
+endpoint v4.0.0 getAllDynamicResourceDocs
+endpoint v4.0.0 getAllEndpointMappings
+endpoint v4.0.0 getAllJsonSchemaValidations
+endpoint v4.0.0 getApiCollectionEndpoints
+endpoint v4.0.0 getApiCollectionsForUser
+endpoint v4.0.0 getAtm
+endpoint v4.0.0 getAtms
+endpoint v4.0.0 getAuthenticationTypeValidation
+endpoint v4.0.0 getBalancingTransaction
+endpoint v4.0.0 getBank
+endpoint v4.0.0 getBankAccountBalancesForCurrentUser
+endpoint v4.0.0 getBankAccountsBalancesForCurrentUser
+endpoint v4.0.0 getBankAttribute
+endpoint v4.0.0 getBankAttributes
+endpoint v4.0.0 getBankLevelDynamicEndpoint
+endpoint v4.0.0 getBankLevelDynamicEndpoints
+endpoint v4.0.0 getBankLevelDynamicEntities
+endpoint v4.0.0 getBankLevelDynamicMessageDoc
+endpoint v4.0.0 getBankLevelDynamicResourceDoc
+endpoint v4.0.0 getBankLevelEndpointMapping
+endpoint v4.0.0 getBankLevelEndpointTags
+endpoint v4.0.0 getBanks
+endpoint v4.0.0 getCallContext
+endpoint v4.0.0 getCardAttributeDefinition
+endpoint v4.0.0 getConnectorMethod
+endpoint v4.0.0 getConsentInfos
+endpoint v4.0.0 getConsentInfosByBank
+endpoint v4.0.0 getConsents
+endpoint v4.0.0 getCoreAccountById
+endpoint v4.0.0 getCorrelatedUsersInfoByCustomerId
+endpoint v4.0.0 getCounterpartiesForAnyAccount
+endpoint v4.0.0 getCounterpartyByIdForAnyAccount
+endpoint v4.0.0 getCounterpartyByNameForAnyAccount
+endpoint v4.0.0 getCurrentUserId
+endpoint v4.0.0 getCustomerAttributeById
+endpoint v4.0.0 getCustomerAttributeDefinition
+endpoint v4.0.0 getCustomerAttributes
+endpoint v4.0.0 getCustomerMessages
+endpoint v4.0.0 getCustomersAtAnyBank
+endpoint v4.0.0 getCustomersByAttributes
+endpoint v4.0.0 getCustomersByCustomerPhoneNumber
+endpoint v4.0.0 getCustomersMinimalAtAnyBank
+endpoint v4.0.0 getDoubleEntryTransaction
+endpoint v4.0.0 getDynamicEndpoint
+endpoint v4.0.0 getDynamicEndpoints
+endpoint v4.0.0 getDynamicMessageDoc
+endpoint v4.0.0 getDynamicResourceDoc
+endpoint v4.0.0 getEndpointMapping
+endpoint v4.0.0 getEntitlements
+endpoint v4.0.0 getEntitlementsForBank
+endpoint v4.0.0 getExplicitCounterpartiesForAccount
+endpoint v4.0.0 getExplicitCounterpartyById
+endpoint v4.0.0 getFastFirehoseAccountsAtOneBank
+endpoint v4.0.0 getFeaturedApiCollections
+endpoint v4.0.0 getFirehoseAccountsAtOneBank
+endpoint v4.0.0 getJsonSchemaValidation
+endpoint v4.0.0 getLogoutLink
+endpoint v4.0.0 getMapperDatabaseInfo
+endpoint v4.0.0 getMyApiCollectionById
+endpoint v4.0.0 getMyApiCollectionByName
+endpoint v4.0.0 getMyApiCollectionEndpoint
+endpoint v4.0.0 getMyApiCollectionEndpoints
+endpoint v4.0.0 getMyApiCollectionEndpointsById
+endpoint v4.0.0 getMyApiCollections
+endpoint v4.0.0 getMyCorrelatedEntities
+endpoint v4.0.0 getMyDynamicEndpoints
+endpoint v4.0.0 getMyDynamicEntities
+endpoint v4.0.0 getMyPersonalUserAttributes
+endpoint v4.0.0 getMySpaces
+endpoint v4.0.0 getPrivateAccountByIdFull
+endpoint v4.0.0 getPrivateAccountsAtOneBank
+endpoint v4.0.0 getProduct
+endpoint v4.0.0 getProductAttribute
+endpoint v4.0.0 getProductAttributeDefinition
+endpoint v4.0.0 getProductFee
+endpoint v4.0.0 getProductFees
+endpoint v4.0.0 getProducts
+endpoint v4.0.0 getScannedApiVersions
+endpoint v4.0.0 getScopes
+endpoint v4.0.0 getSettlementAccounts
+endpoint v4.0.0 getSharableApiCollectionById
+endpoint v4.0.0 getSystemDynamicEntities
+endpoint v4.0.0 getSystemLevelEndpointTags
+endpoint v4.0.0 getTagsForViewOnAccount
+endpoint v4.0.0 getTransactionAttributeById
+endpoint v4.0.0 getTransactionAttributeDefinition
+endpoint v4.0.0 getTransactionAttributes
+endpoint v4.0.0 getTransactionRequest
+endpoint v4.0.0 getTransactionRequestAttributeById
+endpoint v4.0.0 getTransactionRequestAttributeDefinition
+endpoint v4.0.0 getTransactionRequestAttributes
+endpoint v4.0.0 getUserByUserId
+endpoint v4.0.0 getUserByUsername
+endpoint v4.0.0 getUserCustomerLinksByCustomerId
+endpoint v4.0.0 getUserCustomerLinksByUserId
+endpoint v4.0.0 getUserInvitation
+endpoint v4.0.0 getUserInvitationAnonymous
+endpoint v4.0.0 getUserInvitations
+endpoint v4.0.0 getUserWithAttributes
+endpoint v4.0.0 getUsers
+endpoint v4.0.0 getUsersByEmail
+endpoint v4.0.0 grantUserAccessToView
+endpoint v4.0.0 ibanChecker
+endpoint v4.0.0 lockUser
+endpoint v4.0.0 resetPasswordUrl
+endpoint v4.0.0 revokeGrantUserAccessToViews
+endpoint v4.0.0 revokeUserAccessToView
+endpoint v4.0.0 root
+endpoint v4.0.0 updateAccountLabel
+endpoint v4.0.0 updateAtm
+endpoint v4.0.0 updateAtmAccessibilityFeatures
+endpoint v4.0.0 updateAtmLocationCategories
+endpoint v4.0.0 updateAtmNotes
+endpoint v4.0.0 updateAtmServices
+endpoint v4.0.0 updateAtmSupportedCurrencies
+endpoint v4.0.0 updateAtmSupportedLanguages
+endpoint v4.0.0 updateAuthenticationTypeValidation
+endpoint v4.0.0 updateBankAttribute
+endpoint v4.0.0 updateBankLevelDynamicEndpointHost
+endpoint v4.0.0 updateBankLevelDynamicEntity
+endpoint v4.0.0 updateBankLevelDynamicMessageDoc
+endpoint v4.0.0 updateBankLevelDynamicResourceDoc
+endpoint v4.0.0 updateBankLevelEndpointMapping
+endpoint v4.0.0 updateBankLevelEndpointTag
+endpoint v4.0.0 updateConnectorMethod
+endpoint v4.0.0 updateConsentStatus
+endpoint v4.0.0 updateCustomerAttribute
+endpoint v4.0.0 updateDynamicEndpointHost
+endpoint v4.0.0 updateDynamicMessageDoc
+endpoint v4.0.0 updateDynamicResourceDoc
+endpoint v4.0.0 updateEndpointMapping
+endpoint v4.0.0 updateJsonSchemaValidation
+endpoint v4.0.0 updateMyDynamicEntity
+endpoint v4.0.0 updateMyPersonalUserAttribute
+endpoint v4.0.0 updateProductAttribute
+endpoint v4.0.0 updateProductFee
+endpoint v4.0.0 updateSystemDynamicEntity
+endpoint v4.0.0 updateSystemLevelEndpointTag
+endpoint v4.0.0 updateTransactionAttribute
+endpoint v4.0.0 updateTransactionRequestAttribute
+endpoint v4.0.0 verifyRequestSignResponse
+endpoint v5.0.0 addCardForBank
+endpoint v5.0.0 answerUserAuthContextUpdateChallenge
+endpoint v5.0.0 createAccount
+endpoint v5.0.0 createBank
+endpoint v5.0.0 createConsentByConsentRequestIdEmail
+endpoint v5.0.0 createConsentByConsentRequestIdImplicit
+endpoint v5.0.0 createConsentByConsentRequestIdSms
+endpoint v5.0.0 createConsentRequest
+endpoint v5.0.0 createCustomer
+endpoint v5.0.0 createCustomerAccountLink
+endpoint v5.0.0 createProduct
+endpoint v5.0.0 createSystemView
+endpoint v5.0.0 createUserAuthContext
+endpoint v5.0.0 createUserAuthContextUpdateRequest
+endpoint v5.0.0 deleteCustomerAccountLinkById
+endpoint v5.0.0 deleteSystemView
+endpoint v5.0.0 getAdapterInfo
+endpoint v5.0.0 getBank
+endpoint v5.0.0 getBanks
+endpoint v5.0.0 getConsentByConsentRequestId
+endpoint v5.0.0 getConsentRequest
+endpoint v5.0.0 getCustomerAccountLinkById
+endpoint v5.0.0 getCustomerAccountLinksByBankIdAccountId
+endpoint v5.0.0 getCustomerAccountLinksByCustomerId
+endpoint v5.0.0 getCustomerOverview
+endpoint v5.0.0 getCustomerOverviewFlat
+endpoint v5.0.0 getCustomersAtOneBank
+endpoint v5.0.0 getCustomersMinimalAtOneBank
+endpoint v5.0.0 getMetricsAtBank
+endpoint v5.0.0 getMyCustomersAtAnyBank
+endpoint v5.0.0 getMyCustomersAtBank
+endpoint v5.0.0 getProduct
+endpoint v5.0.0 getProducts
+endpoint v5.0.0 getSystemView
+endpoint v5.0.0 getSystemViewsIds
+endpoint v5.0.0 getUserAuthContexts
+endpoint v5.0.0 getViewsForBankAccount
+endpoint v5.0.0 headAtms
+endpoint v5.0.0 root
+endpoint v5.0.0 updateBank
+endpoint v5.0.0 updateCustomerAccountLinkById
+endpoint v5.0.0 updateSystemView
+field code.TransactionTypes.TransactionType.TransactionType bankId com.openbankproject.commons.model.BankId
+field code.TransactionTypes.TransactionType.TransactionType charge com.openbankproject.commons.model.AmountOfMoney
+field code.TransactionTypes.TransactionType.TransactionType description String
+field code.TransactionTypes.TransactionType.TransactionType id com.openbankproject.commons.model.TransactionTypeId
+field code.TransactionTypes.TransactionType.TransactionType shortCode String
+field code.TransactionTypes.TransactionType.TransactionType summary String
+field code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.SeverJWK e String
+field code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.SeverJWK kid String
+field code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.SeverJWK kty String
+field code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.SeverJWK n String
+field code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.SeverJWK use String
+field code.api.util.APIUtil.BooleanBody value Boolean
+field code.api.util.APIUtil.EndpointInfo name String
+field code.api.util.APIUtil.EndpointInfo version String
+field code.api.util.APIUtil.JArrayBody value org.json4s.JArray
+field code.api.v1_2_1.APIInfoJSON connector String
+field code.api.v1_2_1.APIInfoJSON git_commit String
+field code.api.v1_2_1.APIInfoJSON hosted_by code.api.v1_2_1.HostedBy
+field code.api.v1_2_1.APIInfoJSON version String
+field code.api.v1_2_1.APIInfoJSON version_status String
+field code.api.v1_2_1.AccountHolderJSON is_alias Boolean
+field code.api.v1_2_1.AccountHolderJSON name String
+field code.api.v1_2_1.AccountJSON bank_id String
+field code.api.v1_2_1.AccountJSON id String
+field code.api.v1_2_1.AccountJSON label String
+field code.api.v1_2_1.AccountJSON views_available List[code.api.v1_2_1.ViewJSONV121]
+field code.api.v1_2_1.AliasJSON alias String
+field code.api.v1_2_1.BankJSON bank_routing code.api.v1_2_1.BankRoutingJsonV121
+field code.api.v1_2_1.BankJSON full_name String
+field code.api.v1_2_1.BankJSON id String
+field code.api.v1_2_1.BankJSON logo String
+field code.api.v1_2_1.BankJSON short_name String
+field code.api.v1_2_1.BankJSON website String
+field code.api.v1_2_1.BankRoutingJsonV121 address String
+field code.api.v1_2_1.BankRoutingJsonV121 scheme String
+field code.api.v1_2_1.BanksJSON banks List[code.api.v1_2_1.BankJSON]
+field code.api.v1_2_1.CorporateLocationJSON corporate_location code.api.v1_2_1.LocationPlainJSON
+field code.api.v1_2_1.CreateViewJsonV121 allowed_actions List[String]
+field code.api.v1_2_1.CreateViewJsonV121 description String
+field code.api.v1_2_1.CreateViewJsonV121 hide_metadata_if_alias_used Boolean
+field code.api.v1_2_1.CreateViewJsonV121 is_public Boolean
+field code.api.v1_2_1.CreateViewJsonV121 name String
+field code.api.v1_2_1.CreateViewJsonV121 which_alias_to_use String
+field code.api.v1_2_1.HostedBy email String
+field code.api.v1_2_1.HostedBy organisation String
+field code.api.v1_2_1.HostedBy organisation_website String
+field code.api.v1_2_1.HostedBy phone String
+field code.api.v1_2_1.ImageUrlJSON image_URL String
+field code.api.v1_2_1.LocationJSONV121 date java.util.Date
+field code.api.v1_2_1.LocationJSONV121 latitude Double
+field code.api.v1_2_1.LocationJSONV121 longitude Double
+field code.api.v1_2_1.LocationJSONV121 user code.api.v1_2_1.UserJSONV121
+field code.api.v1_2_1.LocationPlainJSON latitude Double
+field code.api.v1_2_1.LocationPlainJSON longitude Double
+field code.api.v1_2_1.MinimalBankJSON name String
+field code.api.v1_2_1.MinimalBankJSON national_identifier String
+field code.api.v1_2_1.ModeratedAccountJSON IBAN String
+field code.api.v1_2_1.ModeratedAccountJSON account_routing com.openbankproject.commons.model.AccountRoutingJsonV121
+field code.api.v1_2_1.ModeratedAccountJSON balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v1_2_1.ModeratedAccountJSON bank_id String
+field code.api.v1_2_1.ModeratedAccountJSON id String
+field code.api.v1_2_1.ModeratedAccountJSON label String
+field code.api.v1_2_1.ModeratedAccountJSON number String
+field code.api.v1_2_1.ModeratedAccountJSON owners List[code.api.v1_2_1.UserJSONV121]
+field code.api.v1_2_1.ModeratedAccountJSON swift_bic String
+field code.api.v1_2_1.ModeratedAccountJSON type String
+field code.api.v1_2_1.ModeratedAccountJSON views_available List[code.api.v1_2_1.ViewJSONV121]
+field code.api.v1_2_1.MoreInfoJSON more_info String
+field code.api.v1_2_1.OpenCorporateUrlJSON open_corporates_URL String
+field code.api.v1_2_1.OtherAccountJSON IBAN String
+field code.api.v1_2_1.OtherAccountJSON bank code.api.v1_2_1.MinimalBankJSON
+field code.api.v1_2_1.OtherAccountJSON holder code.api.v1_2_1.AccountHolderJSON
+field code.api.v1_2_1.OtherAccountJSON id String
+field code.api.v1_2_1.OtherAccountJSON kind String
+field code.api.v1_2_1.OtherAccountJSON metadata code.api.v1_2_1.OtherAccountMetadataJSON
+field code.api.v1_2_1.OtherAccountJSON number String
+field code.api.v1_2_1.OtherAccountJSON swift_bic String
+field code.api.v1_2_1.OtherAccountMetadataJSON URL String
+field code.api.v1_2_1.OtherAccountMetadataJSON corporate_location code.api.v1_2_1.LocationJSONV121
+field code.api.v1_2_1.OtherAccountMetadataJSON image_URL String
+field code.api.v1_2_1.OtherAccountMetadataJSON more_info String
+field code.api.v1_2_1.OtherAccountMetadataJSON open_corporates_URL String
+field code.api.v1_2_1.OtherAccountMetadataJSON physical_location code.api.v1_2_1.LocationJSONV121
+field code.api.v1_2_1.OtherAccountMetadataJSON private_alias String
+field code.api.v1_2_1.OtherAccountMetadataJSON public_alias String
+field code.api.v1_2_1.OtherAccountsJSON other_accounts List[code.api.v1_2_1.OtherAccountJSON]
+field code.api.v1_2_1.PermissionJSON user code.api.v1_2_1.UserJSONV121
+field code.api.v1_2_1.PermissionJSON views List[code.api.v1_2_1.ViewJSONV121]
+field code.api.v1_2_1.PermissionsJSON permissions List[code.api.v1_2_1.PermissionJSON]
+field code.api.v1_2_1.PhysicalLocationJSON physical_location code.api.v1_2_1.LocationPlainJSON
+field code.api.v1_2_1.PostTransactionCommentJSON value String
+field code.api.v1_2_1.PostTransactionImageJSON URL String
+field code.api.v1_2_1.PostTransactionImageJSON label String
+field code.api.v1_2_1.PostTransactionTagJSON value String
+field code.api.v1_2_1.PostTransactionWhereJSON where code.api.v1_2_1.LocationPlainJSON
+field code.api.v1_2_1.SuccessMessage success String
+field code.api.v1_2_1.ThisAccountJSON IBAN String
+field code.api.v1_2_1.ThisAccountJSON bank code.api.v1_2_1.MinimalBankJSON
+field code.api.v1_2_1.ThisAccountJSON holders List[code.api.v1_2_1.AccountHolderJSON]
+field code.api.v1_2_1.ThisAccountJSON id String
+field code.api.v1_2_1.ThisAccountJSON kind String
+field code.api.v1_2_1.ThisAccountJSON number String
+field code.api.v1_2_1.ThisAccountJSON swift_bic String
+field code.api.v1_2_1.TransactionCommentJSON date java.util.Date
+field code.api.v1_2_1.TransactionCommentJSON id String
+field code.api.v1_2_1.TransactionCommentJSON user code.api.v1_2_1.UserJSONV121
+field code.api.v1_2_1.TransactionCommentJSON value String
+field code.api.v1_2_1.TransactionCommentsJSON comments List[code.api.v1_2_1.TransactionCommentJSON]
+field code.api.v1_2_1.TransactionDetailsJSON completed java.util.Date
+field code.api.v1_2_1.TransactionDetailsJSON description String
+field code.api.v1_2_1.TransactionDetailsJSON new_balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v1_2_1.TransactionDetailsJSON posted java.util.Date
+field code.api.v1_2_1.TransactionDetailsJSON type String
+field code.api.v1_2_1.TransactionDetailsJSON value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v1_2_1.TransactionImageJSON URL String
+field code.api.v1_2_1.TransactionImageJSON date java.util.Date
+field code.api.v1_2_1.TransactionImageJSON id String
+field code.api.v1_2_1.TransactionImageJSON label String
+field code.api.v1_2_1.TransactionImageJSON user code.api.v1_2_1.UserJSONV121
+field code.api.v1_2_1.TransactionImagesJSON images List[code.api.v1_2_1.TransactionImageJSON]
+field code.api.v1_2_1.TransactionJSON details code.api.v1_2_1.TransactionDetailsJSON
+field code.api.v1_2_1.TransactionJSON id String
+field code.api.v1_2_1.TransactionJSON metadata code.api.v1_2_1.TransactionMetadataJSON
+field code.api.v1_2_1.TransactionJSON other_account code.api.v1_2_1.OtherAccountJSON
+field code.api.v1_2_1.TransactionJSON this_account code.api.v1_2_1.ThisAccountJSON
+field code.api.v1_2_1.TransactionMetadataJSON comments List[code.api.v1_2_1.TransactionCommentJSON]
+field code.api.v1_2_1.TransactionMetadataJSON images List[code.api.v1_2_1.TransactionImageJSON]
+field code.api.v1_2_1.TransactionMetadataJSON narrative String
+field code.api.v1_2_1.TransactionMetadataJSON tags List[code.api.v1_2_1.TransactionTagJSON]
+field code.api.v1_2_1.TransactionMetadataJSON where code.api.v1_2_1.LocationJSONV121
+field code.api.v1_2_1.TransactionNarrativeJSON narrative String
+field code.api.v1_2_1.TransactionTagJSON date java.util.Date
+field code.api.v1_2_1.TransactionTagJSON id String
+field code.api.v1_2_1.TransactionTagJSON user code.api.v1_2_1.UserJSONV121
+field code.api.v1_2_1.TransactionTagJSON value String
+field code.api.v1_2_1.TransactionWhereJSON where code.api.v1_2_1.LocationJSONV121
+field code.api.v1_2_1.TransactionsJSON transactions List[code.api.v1_2_1.TransactionJSON]
+field code.api.v1_2_1.UpdateAccountJSON bank_id String
+field code.api.v1_2_1.UpdateAccountJSON id String
+field code.api.v1_2_1.UpdateAccountJSON label String
+field code.api.v1_2_1.UpdateViewJsonV121 allowed_actions List[String]
+field code.api.v1_2_1.UpdateViewJsonV121 description String
+field code.api.v1_2_1.UpdateViewJsonV121 hide_metadata_if_alias_used Boolean
+field code.api.v1_2_1.UpdateViewJsonV121 is_public Boolean
+field code.api.v1_2_1.UpdateViewJsonV121 which_alias_to_use String
+field code.api.v1_2_1.UrlJSON URL String
+field code.api.v1_2_1.UserJSONV121 display_name String
+field code.api.v1_2_1.UserJSONV121 id String
+field code.api.v1_2_1.UserJSONV121 provider String
+field code.api.v1_2_1.ViewIdsJson views List[String]
+field code.api.v1_2_1.ViewJSONV121 alias String
+field code.api.v1_2_1.ViewJSONV121 can_add_comment Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_corporate_location Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_image Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_image_url Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_more_info Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_open_corporates_url Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_physical_location Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_private_alias Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_public_alias Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_tag Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_url Boolean
+field code.api.v1_2_1.ViewJSONV121 can_add_where_tag Boolean
+field code.api.v1_2_1.ViewJSONV121 can_delete_comment Boolean
+field code.api.v1_2_1.ViewJSONV121 can_delete_corporate_location Boolean
+field code.api.v1_2_1.ViewJSONV121 can_delete_image Boolean
+field code.api.v1_2_1.ViewJSONV121 can_delete_physical_location Boolean
+field code.api.v1_2_1.ViewJSONV121 can_delete_tag Boolean
+field code.api.v1_2_1.ViewJSONV121 can_delete_where_tag Boolean
+field code.api.v1_2_1.ViewJSONV121 can_edit_owner_comment Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_balance Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_bank_name Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_currency Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_iban Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_label Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_national_identifier Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_number Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_owners Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_swift_bic Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_bank_account_type Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_comments Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_corporate_location Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_image_url Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_images Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_more_info Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_open_corporates_url Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_other_account_bank_name Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_other_account_iban Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_other_account_kind Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_other_account_metadata Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_other_account_national_identifier Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_other_account_number Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_other_account_swift_bic Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_owner_comment Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_physical_location Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_private_alias Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_public_alias Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_tags Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_amount Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_balance Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_currency Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_description Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_finish_date Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_metadata Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_other_bank_account Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_start_date Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_this_bank_account Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_transaction_type Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_url Boolean
+field code.api.v1_2_1.ViewJSONV121 can_see_where_tag Boolean
+field code.api.v1_2_1.ViewJSONV121 description String
+field code.api.v1_2_1.ViewJSONV121 hide_metadata_if_alias_used Boolean
+field code.api.v1_2_1.ViewJSONV121 id String
+field code.api.v1_2_1.ViewJSONV121 is_public Boolean
+field code.api.v1_2_1.ViewJSONV121 short_name String
+field code.api.v1_2_1.ViewsJSONV121 views List[code.api.v1_2_1.ViewJSONV121]
+field code.api.v1_3_0.PhysicalCardJSON account code.api.v1_2_1.AccountJSON
+field code.api.v1_3_0.PhysicalCardJSON allows List[String]
+field code.api.v1_3_0.PhysicalCardJSON bank_card_number String
+field code.api.v1_3_0.PhysicalCardJSON bank_id String
+field code.api.v1_3_0.PhysicalCardJSON cancelled Boolean
+field code.api.v1_3_0.PhysicalCardJSON collected java.util.Date
+field code.api.v1_3_0.PhysicalCardJSON enabled Boolean
+field code.api.v1_3_0.PhysicalCardJSON expires_date java.util.Date
+field code.api.v1_3_0.PhysicalCardJSON issue_number String
+field code.api.v1_3_0.PhysicalCardJSON name_on_card String
+field code.api.v1_3_0.PhysicalCardJSON networks List[String]
+field code.api.v1_3_0.PhysicalCardJSON on_hot_list Boolean
+field code.api.v1_3_0.PhysicalCardJSON pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v1_3_0.PhysicalCardJSON posted java.util.Date
+field code.api.v1_3_0.PhysicalCardJSON replacement code.api.v1_3_0.ReplacementJSON
+field code.api.v1_3_0.PhysicalCardJSON serial_number String
+field code.api.v1_3_0.PhysicalCardJSON technology String
+field code.api.v1_3_0.PhysicalCardJSON valid_from_date java.util.Date
+field code.api.v1_3_0.PhysicalCardsJSON cards List[code.api.v1_3_0.PhysicalCardJSON]
+field code.api.v1_3_0.PinResetJSON reason_requested String
+field code.api.v1_3_0.PinResetJSON requested_date java.util.Date
+field code.api.v1_3_0.PostPhysicalCardJSON account_id String
+field code.api.v1_3_0.PostPhysicalCardJSON allows List[String]
+field code.api.v1_3_0.PostPhysicalCardJSON bank_card_number String
+field code.api.v1_3_0.PostPhysicalCardJSON collected java.util.Date
+field code.api.v1_3_0.PostPhysicalCardJSON enabled Boolean
+field code.api.v1_3_0.PostPhysicalCardJSON expires_date java.util.Date
+field code.api.v1_3_0.PostPhysicalCardJSON issue_number String
+field code.api.v1_3_0.PostPhysicalCardJSON name_on_card String
+field code.api.v1_3_0.PostPhysicalCardJSON networks List[String]
+field code.api.v1_3_0.PostPhysicalCardJSON pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v1_3_0.PostPhysicalCardJSON posted java.util.Date
+field code.api.v1_3_0.PostPhysicalCardJSON replacement code.api.v1_3_0.ReplacementJSON
+field code.api.v1_3_0.PostPhysicalCardJSON serial_number String
+field code.api.v1_3_0.PostPhysicalCardJSON technology String
+field code.api.v1_3_0.PostPhysicalCardJSON valid_from_date java.util.Date
+field code.api.v1_3_0.ReplacementJSON reason_requested String
+field code.api.v1_3_0.ReplacementJSON requested_date java.util.Date
+field code.api.v1_4_0.JSONFactory1_4_0.AddCustomerMessageJson from_department String
+field code.api.v1_4_0.JSONFactory1_4_0.AddCustomerMessageJson from_person String
+field code.api.v1_4_0.JSONFactory1_4_0.AddCustomerMessageJson message String
+field code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140 city String
+field code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140 country String
+field code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140 line_1 String
+field code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140 line_2 String
+field code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140 line_3 String
+field code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140 postcode String
+field code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140 state String
+field code.api.v1_4_0.JSONFactory1_4_0.AtmJson address code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.AtmJson id String
+field code.api.v1_4_0.JSONFactory1_4_0.AtmJson location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.AtmJson meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.AtmJson name String
+field code.api.v1_4_0.JSONFactory1_4_0.AtmsJson atms List[code.api.v1_4_0.JSONFactory1_4_0.AtmJson]
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson address code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson branch_routing com.openbankproject.commons.model.BranchRoutingJsonV141
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson drive_up code.api.v1_4_0.JSONFactory1_4_0.DriveUpStringJson
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson id String
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson lobby code.api.v1_4_0.JSONFactory1_4_0.LobbyStringJson
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.BranchJson name String
+field code.api.v1_4_0.JSONFactory1_4_0.BranchesJson branches List[code.api.v1_4_0.JSONFactory1_4_0.BranchJson]
+field code.api.v1_4_0.JSONFactory1_4_0.ChallengeAnswerJSON answer String
+field code.api.v1_4_0.JSONFactory1_4_0.ChallengeAnswerJSON id String
+field code.api.v1_4_0.JSONFactory1_4_0.ChallengeJsonV140 allowed_attempts Int
+field code.api.v1_4_0.JSONFactory1_4_0.ChallengeJsonV140 challenge_type String
+field code.api.v1_4_0.JSONFactory1_4_0.ChallengeJsonV140 id String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson actual_date java.util.Date
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson bank_id String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson category String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson channel String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson customer_name String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson customer_number String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson detail String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson id String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson result String
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson scheduled_date java.util.Date
+field code.api.v1_4_0.JSONFactory1_4_0.CrmEventsJson crm_events List[code.api.v1_4_0.JSONFactory1_4_0.CrmEventJson]
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson date java.util.Date
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson url String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 customer_id String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 customer_number String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 date_of_birth java.util.Date
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 dependants Int
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 dob_of_dependants List[java.util.Date]
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 email String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 employment_status String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 highest_education_attained String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 kyc_status Boolean
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 last_ok_date java.util.Date
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 legal_name String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 mobile_phone_number String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerJsonV140 relationship_status String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerMessageJson date java.util.Date
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerMessageJson from_department String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerMessageJson from_person String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerMessageJson id String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerMessageJson message String
+field code.api.v1_4_0.JSONFactory1_4_0.CustomerMessagesJson messages List[code.api.v1_4_0.JSONFactory1_4_0.CustomerMessageJson]
+field code.api.v1_4_0.JSONFactory1_4_0.DriveUpStringJson hours String
+field code.api.v1_4_0.JSONFactory1_4_0.LicenseJsonV140 id String
+field code.api.v1_4_0.JSONFactory1_4_0.LicenseJsonV140 name String
+field code.api.v1_4_0.JSONFactory1_4_0.LobbyStringJson hours String
+field code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140 latitude Double
+field code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140 longitude Double
+field code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140 license code.api.v1_4_0.JSONFactory1_4_0.LicenseJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestAccountJsonV140 account_id String
+field code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestAccountJsonV140 bank_id String
+field code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestChargeJsonV140 summary String
+field code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestChargeJsonV140 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestTypeJsonV140 charge code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestChargeJsonV140
+field code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestTypeJsonV140 value String
+field code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestTypesJsonV140 transaction_request_types List[code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestTypeJsonV140]
+field code.api.v2_0_0.BasicAccountJSON bank_id String
+field code.api.v2_0_0.BasicAccountJSON id String
+field code.api.v2_0_0.BasicAccountJSON label String
+field code.api.v2_0_0.BasicAccountJSON views_available List[code.api.v2_0_0.BasicViewJson]
+field code.api.v2_0_0.BasicAccountsJSON accounts List[code.api.v2_0_0.BasicAccountJSON]
+field code.api.v2_0_0.BasicViewJson id String
+field code.api.v2_0_0.BasicViewJson is_public Boolean
+field code.api.v2_0_0.BasicViewJson short_name String
+field code.api.v2_0_0.CoreAccountJSON _links org.json4s.JsonAST.JValue
+field code.api.v2_0_0.CoreAccountJSON bank_id String
+field code.api.v2_0_0.CoreAccountJSON id String
+field code.api.v2_0_0.CoreAccountJSON label String
+field code.api.v2_0_0.CoreAccountsJSON accounts List[code.api.v2_0_0.CoreAccountJSON]
+field code.api.v2_0_0.CreateAccountJSON balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_0_0.CreateAccountJSON label String
+field code.api.v2_0_0.CreateAccountJSON type String
+field code.api.v2_0_0.CreateAccountJSON user_id String
+field code.api.v2_0_0.CreateCustomerJson branchId String
+field code.api.v2_0_0.CreateCustomerJson customer_number String
+field code.api.v2_0_0.CreateCustomerJson date_of_birth java.util.Date
+field code.api.v2_0_0.CreateCustomerJson dependants Int
+field code.api.v2_0_0.CreateCustomerJson dob_of_dependants List[java.util.Date]
+field code.api.v2_0_0.CreateCustomerJson email String
+field code.api.v2_0_0.CreateCustomerJson employment_status String
+field code.api.v2_0_0.CreateCustomerJson face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v2_0_0.CreateCustomerJson highest_education_attained String
+field code.api.v2_0_0.CreateCustomerJson kyc_status Boolean
+field code.api.v2_0_0.CreateCustomerJson last_ok_date java.util.Date
+field code.api.v2_0_0.CreateCustomerJson legal_name String
+field code.api.v2_0_0.CreateCustomerJson mobile_phone_number String
+field code.api.v2_0_0.CreateCustomerJson nameSuffix String
+field code.api.v2_0_0.CreateCustomerJson relationship_status String
+field code.api.v2_0_0.CreateCustomerJson title String
+field code.api.v2_0_0.CreateCustomerJson user_id String
+field code.api.v2_0_0.CreateEntitlementJSON bank_id String
+field code.api.v2_0_0.CreateEntitlementJSON role_name String
+field code.api.v2_0_0.CreateUserCustomerLinkJson customer_id String
+field code.api.v2_0_0.CreateUserCustomerLinkJson user_id String
+field code.api.v2_0_0.CreateUserJson email String
+field code.api.v2_0_0.CreateUserJson first_name String
+field code.api.v2_0_0.CreateUserJson last_name String
+field code.api.v2_0_0.CreateUserJson password String
+field code.api.v2_0_0.CreateUserJson username String
+field code.api.v2_0_0.EntitlementJSON bank_id String
+field code.api.v2_0_0.EntitlementJSON entitlement_id String
+field code.api.v2_0_0.EntitlementJSON role_name String
+field code.api.v2_0_0.EntitlementJSONs list List[code.api.v2_0_0.EntitlementJSON]
+field code.api.v2_0_0.JSONFactory200.CoreAccountHolderJSON name String
+field code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON IBAN String
+field code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON bank code.api.v1_2_1.MinimalBankJSON
+field code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON holder code.api.v2_0_0.JSONFactory200.CoreAccountHolderJSON
+field code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON id String
+field code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON kind String
+field code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON number String
+field code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON swift_bic String
+field code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON completed java.util.Date
+field code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON description String
+field code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON new_balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON posted java.util.Date
+field code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON type String
+field code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_0_0.JSONFactory200.CoreTransactionJSON account code.api.v1_2_1.ThisAccountJSON
+field code.api.v2_0_0.JSONFactory200.CoreTransactionJSON counterparty code.api.v2_0_0.JSONFactory200.CoreCounterpartyJSON
+field code.api.v2_0_0.JSONFactory200.CoreTransactionJSON details code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON
+field code.api.v2_0_0.JSONFactory200.CoreTransactionJSON id String
+field code.api.v2_0_0.JSONFactory200.CoreTransactionsJSON transactions List[code.api.v2_0_0.JSONFactory200.CoreTransactionJSON]
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON IBAN String
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON account_routing com.openbankproject.commons.model.AccountRoutingJsonV121
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON bank_id String
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON id String
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON label String
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON number String
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON owners List[code.api.v1_2_1.UserJSONV121]
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON swift_bic String
+field code.api.v2_0_0.JSONFactory200.ModeratedCoreAccountJSON type String
+field code.api.v2_0_0.JSONFactory200.UserJsonV200 email String
+field code.api.v2_0_0.JSONFactory200.UserJsonV200 entitlements code.api.v2_0_0.EntitlementJSONs
+field code.api.v2_0_0.JSONFactory200.UserJsonV200 provider String
+field code.api.v2_0_0.JSONFactory200.UserJsonV200 provider_id String
+field code.api.v2_0_0.JSONFactory200.UserJsonV200 user_id String
+field code.api.v2_0_0.JSONFactory200.UserJsonV200 username String
+field code.api.v2_0_0.JSONFactory200.UsersJsonV200 users List[code.api.v2_0_0.JSONFactory200.UserJsonV200]
+field code.api.v2_0_0.KycCheckJSON bank_id String
+field code.api.v2_0_0.KycCheckJSON comments String
+field code.api.v2_0_0.KycCheckJSON customer_id String
+field code.api.v2_0_0.KycCheckJSON customer_number String
+field code.api.v2_0_0.KycCheckJSON date java.util.Date
+field code.api.v2_0_0.KycCheckJSON how String
+field code.api.v2_0_0.KycCheckJSON id String
+field code.api.v2_0_0.KycCheckJSON satisfied Boolean
+field code.api.v2_0_0.KycCheckJSON staff_name String
+field code.api.v2_0_0.KycCheckJSON staff_user_id String
+field code.api.v2_0_0.KycChecksJSON checks List[code.api.v2_0_0.KycCheckJSON]
+field code.api.v2_0_0.KycDocumentJSON bank_id String
+field code.api.v2_0_0.KycDocumentJSON customer_id String
+field code.api.v2_0_0.KycDocumentJSON customer_number String
+field code.api.v2_0_0.KycDocumentJSON expiry_date java.util.Date
+field code.api.v2_0_0.KycDocumentJSON id String
+field code.api.v2_0_0.KycDocumentJSON issue_date java.util.Date
+field code.api.v2_0_0.KycDocumentJSON issue_place String
+field code.api.v2_0_0.KycDocumentJSON number String
+field code.api.v2_0_0.KycDocumentJSON type String
+field code.api.v2_0_0.KycDocumentsJSON documents List[code.api.v2_0_0.KycDocumentJSON]
+field code.api.v2_0_0.KycMediaJSON bank_id String
+field code.api.v2_0_0.KycMediaJSON customer_id String
+field code.api.v2_0_0.KycMediaJSON customer_number String
+field code.api.v2_0_0.KycMediaJSON date java.util.Date
+field code.api.v2_0_0.KycMediaJSON id String
+field code.api.v2_0_0.KycMediaJSON relates_to_kyc_check_id String
+field code.api.v2_0_0.KycMediaJSON relates_to_kyc_document_id String
+field code.api.v2_0_0.KycMediaJSON type String
+field code.api.v2_0_0.KycMediaJSON url String
+field code.api.v2_0_0.KycMediasJSON medias List[code.api.v2_0_0.KycMediaJSON]
+field code.api.v2_0_0.KycStatusJSON customer_id String
+field code.api.v2_0_0.KycStatusJSON customer_number String
+field code.api.v2_0_0.KycStatusJSON date java.util.Date
+field code.api.v2_0_0.KycStatusJSON ok Boolean
+field code.api.v2_0_0.KycStatusesJSON statuses List[code.api.v2_0_0.KycStatusJSON]
+field code.api.v2_0_0.MeetingKeysJson customer_token String
+field code.api.v2_0_0.MeetingKeysJson session_id String
+field code.api.v2_0_0.MeetingKeysJson staff_token String
+field code.api.v2_0_0.MeetingPresentJson customer_user_id String
+field code.api.v2_0_0.MeetingPresentJson staff_user_id String
+field code.api.v2_0_0.PostKycCheckJSON comments String
+field code.api.v2_0_0.PostKycCheckJSON customer_number String
+field code.api.v2_0_0.PostKycCheckJSON date java.util.Date
+field code.api.v2_0_0.PostKycCheckJSON how String
+field code.api.v2_0_0.PostKycCheckJSON satisfied Boolean
+field code.api.v2_0_0.PostKycCheckJSON staff_name String
+field code.api.v2_0_0.PostKycCheckJSON staff_user_id String
+field code.api.v2_0_0.PostKycDocumentJSON customer_number String
+field code.api.v2_0_0.PostKycDocumentJSON expiry_date java.util.Date
+field code.api.v2_0_0.PostKycDocumentJSON issue_date java.util.Date
+field code.api.v2_0_0.PostKycDocumentJSON issue_place String
+field code.api.v2_0_0.PostKycDocumentJSON number String
+field code.api.v2_0_0.PostKycDocumentJSON type String
+field code.api.v2_0_0.PostKycMediaJSON customer_number String
+field code.api.v2_0_0.PostKycMediaJSON date java.util.Date
+field code.api.v2_0_0.PostKycMediaJSON relates_to_kyc_check_id String
+field code.api.v2_0_0.PostKycMediaJSON relates_to_kyc_document_id String
+field code.api.v2_0_0.PostKycMediaJSON type String
+field code.api.v2_0_0.PostKycMediaJSON url String
+field code.api.v2_0_0.PostKycStatusJSON customer_number String
+field code.api.v2_0_0.PostKycStatusJSON date java.util.Date
+field code.api.v2_0_0.PostKycStatusJSON ok Boolean
+field code.api.v2_0_0.SocialMediaJSON customer_number String
+field code.api.v2_0_0.SocialMediaJSON date_activated java.util.Date
+field code.api.v2_0_0.SocialMediaJSON date_added java.util.Date
+field code.api.v2_0_0.SocialMediaJSON handle String
+field code.api.v2_0_0.SocialMediaJSON type String
+field code.api.v2_0_0.SocialMediasJSON checks List[code.api.v2_0_0.SocialMediaJSON]
+field code.api.v2_0_0.TransactionRequestBodyJsonV200 description String
+field code.api.v2_0_0.TransactionRequestBodyJsonV200 to code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestAccountJsonV140
+field code.api.v2_0_0.TransactionRequestBodyJsonV200 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_0_0.TransactionRequestChargeJsonV200 summary String
+field code.api.v2_0_0.TransactionRequestChargeJsonV200 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_0_0.TransactionRequestWithChargeJson challenge code.api.v1_4_0.JSONFactory1_4_0.ChallengeJsonV140
+field code.api.v2_0_0.TransactionRequestWithChargeJson charge code.api.v2_0_0.TransactionRequestChargeJsonV200
+field code.api.v2_0_0.TransactionRequestWithChargeJson details com.openbankproject.commons.model.TransactionRequestBody
+field code.api.v2_0_0.TransactionRequestWithChargeJson end_date java.util.Date
+field code.api.v2_0_0.TransactionRequestWithChargeJson from code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestAccountJsonV140
+field code.api.v2_0_0.TransactionRequestWithChargeJson id String
+field code.api.v2_0_0.TransactionRequestWithChargeJson start_date java.util.Date
+field code.api.v2_0_0.TransactionRequestWithChargeJson status String
+field code.api.v2_0_0.TransactionRequestWithChargeJson transaction_ids String
+field code.api.v2_0_0.TransactionRequestWithChargeJson type String
+field code.api.v2_0_0.TransactionTypeJsonV200 bank_id String
+field code.api.v2_0_0.TransactionTypeJsonV200 charge com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_0_0.TransactionTypeJsonV200 description String
+field code.api.v2_0_0.TransactionTypeJsonV200 id com.openbankproject.commons.model.TransactionTypeId
+field code.api.v2_0_0.TransactionTypeJsonV200 short_code String
+field code.api.v2_0_0.TransactionTypeJsonV200 summary String
+field code.api.v2_0_0.TransactionTypesJsonV200 transaction_types List[code.api.v2_0_0.TransactionTypeJsonV200]
+field code.api.v2_0_0.UserCustomerLinkJson customer_id String
+field code.api.v2_0_0.UserCustomerLinkJson date_inserted java.util.Date
+field code.api.v2_0_0.UserCustomerLinkJson is_active Boolean
+field code.api.v2_0_0.UserCustomerLinkJson user_customer_link_id String
+field code.api.v2_0_0.UserCustomerLinkJson user_id String
+field code.api.v2_0_0.UserCustomerLinksJson user_customer_links List[code.api.v2_0_0.UserCustomerLinkJson]
+field code.api.v2_1_0.AvailableRoleJSON requires_bank_id Boolean
+field code.api.v2_1_0.AvailableRoleJSON role String
+field code.api.v2_1_0.AvailableRolesJSON roles List[code.api.v2_1_0.AvailableRoleJSON]
+field code.api.v2_1_0.BranchJsonPostV210 address code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140
+field code.api.v2_1_0.BranchJsonPostV210 bank_id String
+field code.api.v2_1_0.BranchJsonPostV210 drive_up code.api.v1_4_0.JSONFactory1_4_0.DriveUpStringJson
+field code.api.v2_1_0.BranchJsonPostV210 id String
+field code.api.v2_1_0.BranchJsonPostV210 lobby code.api.v1_4_0.JSONFactory1_4_0.LobbyStringJson
+field code.api.v2_1_0.BranchJsonPostV210 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v2_1_0.BranchJsonPostV210 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v2_1_0.BranchJsonPostV210 name String
+field code.api.v2_1_0.BranchJsonPutV210 address code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140
+field code.api.v2_1_0.BranchJsonPutV210 bank_id String
+field code.api.v2_1_0.BranchJsonPutV210 drive_up code.api.v1_4_0.JSONFactory1_4_0.DriveUpStringJson
+field code.api.v2_1_0.BranchJsonPutV210 lobby code.api.v1_4_0.JSONFactory1_4_0.LobbyStringJson
+field code.api.v2_1_0.BranchJsonPutV210 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v2_1_0.BranchJsonPutV210 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v2_1_0.BranchJsonPutV210 name String
+field code.api.v2_1_0.ConsumerJsonV210 app_name String
+field code.api.v2_1_0.ConsumerJsonV210 app_type String
+field code.api.v2_1_0.ConsumerJsonV210 consumer_id Long
+field code.api.v2_1_0.ConsumerJsonV210 created java.util.Date
+field code.api.v2_1_0.ConsumerJsonV210 created_by_user code.api.v2_1_0.ResourceUserJSON
+field code.api.v2_1_0.ConsumerJsonV210 created_by_user_id String
+field code.api.v2_1_0.ConsumerJsonV210 description String
+field code.api.v2_1_0.ConsumerJsonV210 developer_email String
+field code.api.v2_1_0.ConsumerJsonV210 enabled Boolean
+field code.api.v2_1_0.ConsumerJsonV210 redirect_url String
+field code.api.v2_1_0.ConsumerPostJSON app_name String
+field code.api.v2_1_0.ConsumerPostJSON app_type String
+field code.api.v2_1_0.ConsumerPostJSON clientCertificate String
+field code.api.v2_1_0.ConsumerPostJSON created java.util.Date
+field code.api.v2_1_0.ConsumerPostJSON created_by_user_id String
+field code.api.v2_1_0.ConsumerPostJSON description String
+field code.api.v2_1_0.ConsumerPostJSON developer_email String
+field code.api.v2_1_0.ConsumerPostJSON enabled Boolean
+field code.api.v2_1_0.ConsumerPostJSON redirect_url String
+field code.api.v2_1_0.ConsumerRedirectUrlJSON redirect_url String
+field code.api.v2_1_0.ConsumersJson list List[code.api.v2_1_0.ConsumerJsonV210]
+field code.api.v2_1_0.CounterpartyIdJson counterparty_id String
+field code.api.v2_1_0.CustomerCreditRatingJSON rating String
+field code.api.v2_1_0.CustomerCreditRatingJSON source String
+field code.api.v2_1_0.CustomerJSONs customers List[code.api.v2_1_0.CustomerJsonV210]
+field code.api.v2_1_0.CustomerJsonV210 bank_id String
+field code.api.v2_1_0.CustomerJsonV210 credit_limit Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v2_1_0.CustomerJsonV210 credit_rating Option[code.api.v2_1_0.CustomerCreditRatingJSON]
+field code.api.v2_1_0.CustomerJsonV210 customer_id String
+field code.api.v2_1_0.CustomerJsonV210 customer_number String
+field code.api.v2_1_0.CustomerJsonV210 date_of_birth java.util.Date
+field code.api.v2_1_0.CustomerJsonV210 dependants Integer
+field code.api.v2_1_0.CustomerJsonV210 dob_of_dependants List[java.util.Date]
+field code.api.v2_1_0.CustomerJsonV210 email String
+field code.api.v2_1_0.CustomerJsonV210 employment_status String
+field code.api.v2_1_0.CustomerJsonV210 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v2_1_0.CustomerJsonV210 highest_education_attained String
+field code.api.v2_1_0.CustomerJsonV210 kyc_status Boolean
+field code.api.v2_1_0.CustomerJsonV210 last_ok_date java.util.Date
+field code.api.v2_1_0.CustomerJsonV210 legal_name String
+field code.api.v2_1_0.CustomerJsonV210 mobile_phone_number String
+field code.api.v2_1_0.CustomerJsonV210 relationship_status String
+field code.api.v2_1_0.IbanJson iban String
+field code.api.v2_1_0.LocationJsonV210 date java.util.Date
+field code.api.v2_1_0.LocationJsonV210 latitude Double
+field code.api.v2_1_0.LocationJsonV210 longitude Double
+field code.api.v2_1_0.LocationJsonV210 user code.api.v2_1_0.UserJSONV210
+field code.api.v2_1_0.MetricJson app_name String
+field code.api.v2_1_0.MetricJson consumer_id String
+field code.api.v2_1_0.MetricJson correlation_id String
+field code.api.v2_1_0.MetricJson date java.util.Date
+field code.api.v2_1_0.MetricJson developer_email String
+field code.api.v2_1_0.MetricJson duration Long
+field code.api.v2_1_0.MetricJson implemented_by_partial_function String
+field code.api.v2_1_0.MetricJson implemented_in_version String
+field code.api.v2_1_0.MetricJson url String
+field code.api.v2_1_0.MetricJson user_id String
+field code.api.v2_1_0.MetricJson user_name String
+field code.api.v2_1_0.MetricJson verb String
+field code.api.v2_1_0.MetricsJson metrics List[code.api.v2_1_0.MetricJson]
+field code.api.v2_1_0.PostCounterpartyBespokeJson key String
+field code.api.v2_1_0.PostCounterpartyBespokeJson value String
+field code.api.v2_1_0.PostCounterpartyJSON bespoke List[code.api.v2_1_0.PostCounterpartyBespokeJson]
+field code.api.v2_1_0.PostCounterpartyJSON description String
+field code.api.v2_1_0.PostCounterpartyJSON is_beneficiary Boolean
+field code.api.v2_1_0.PostCounterpartyJSON name String
+field code.api.v2_1_0.PostCounterpartyJSON other_account_routing_address String
+field code.api.v2_1_0.PostCounterpartyJSON other_account_routing_scheme String
+field code.api.v2_1_0.PostCounterpartyJSON other_account_secondary_routing_address String
+field code.api.v2_1_0.PostCounterpartyJSON other_account_secondary_routing_scheme String
+field code.api.v2_1_0.PostCounterpartyJSON other_bank_routing_address String
+field code.api.v2_1_0.PostCounterpartyJSON other_bank_routing_scheme String
+field code.api.v2_1_0.PostCounterpartyJSON other_branch_routing_address String
+field code.api.v2_1_0.PostCounterpartyJSON other_branch_routing_scheme String
+field code.api.v2_1_0.PostCustomerJsonV210 credit_limit com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_1_0.PostCustomerJsonV210 credit_rating code.api.v2_1_0.CustomerCreditRatingJSON
+field code.api.v2_1_0.PostCustomerJsonV210 customer_number String
+field code.api.v2_1_0.PostCustomerJsonV210 date_of_birth java.util.Date
+field code.api.v2_1_0.PostCustomerJsonV210 dependants Int
+field code.api.v2_1_0.PostCustomerJsonV210 dob_of_dependants List[java.util.Date]
+field code.api.v2_1_0.PostCustomerJsonV210 email String
+field code.api.v2_1_0.PostCustomerJsonV210 employment_status String
+field code.api.v2_1_0.PostCustomerJsonV210 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v2_1_0.PostCustomerJsonV210 highest_education_attained String
+field code.api.v2_1_0.PostCustomerJsonV210 kyc_status Boolean
+field code.api.v2_1_0.PostCustomerJsonV210 last_ok_date java.util.Date
+field code.api.v2_1_0.PostCustomerJsonV210 legal_name String
+field code.api.v2_1_0.PostCustomerJsonV210 mobile_phone_number String
+field code.api.v2_1_0.PostCustomerJsonV210 relationship_status String
+field code.api.v2_1_0.PostCustomerJsonV210 user_id String
+field code.api.v2_1_0.ProductJsonV210 bank_id String
+field code.api.v2_1_0.ProductJsonV210 category String
+field code.api.v2_1_0.ProductJsonV210 code String
+field code.api.v2_1_0.ProductJsonV210 description String
+field code.api.v2_1_0.ProductJsonV210 details String
+field code.api.v2_1_0.ProductJsonV210 family String
+field code.api.v2_1_0.ProductJsonV210 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v2_1_0.ProductJsonV210 more_info_url String
+field code.api.v2_1_0.ProductJsonV210 name String
+field code.api.v2_1_0.ProductJsonV210 super_family String
+field code.api.v2_1_0.ProductsJsonV210 products List[code.api.v2_1_0.ProductJsonV210]
+field code.api.v2_1_0.PutEnabledJSON enabled Boolean
+field code.api.v2_1_0.ResourceUserJSON email String
+field code.api.v2_1_0.ResourceUserJSON provider String
+field code.api.v2_1_0.ResourceUserJSON provider_id String
+field code.api.v2_1_0.ResourceUserJSON user_id String
+field code.api.v2_1_0.ResourceUserJSON username String
+field code.api.v2_1_0.TransactionRequestBodyCounterpartyJSON attributes Option[List[com.openbankproject.commons.model.TransactionRequestAttributeJsonV400]]
+field code.api.v2_1_0.TransactionRequestBodyCounterpartyJSON charge_policy String
+field code.api.v2_1_0.TransactionRequestBodyCounterpartyJSON description String
+field code.api.v2_1_0.TransactionRequestBodyCounterpartyJSON future_date Option[String]
+field code.api.v2_1_0.TransactionRequestBodyCounterpartyJSON to code.api.v2_1_0.CounterpartyIdJson
+field code.api.v2_1_0.TransactionRequestBodyCounterpartyJSON value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_1_0.TransactionRequestBodyFreeFormJSON description String
+field code.api.v2_1_0.TransactionRequestBodyFreeFormJSON value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_1_0.TransactionRequestBodySEPAJSON charge_policy String
+field code.api.v2_1_0.TransactionRequestBodySEPAJSON description String
+field code.api.v2_1_0.TransactionRequestBodySEPAJSON future_date Option[String]
+field code.api.v2_1_0.TransactionRequestBodySEPAJSON to code.api.v2_1_0.IbanJson
+field code.api.v2_1_0.TransactionRequestBodySEPAJSON value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_1_0.TransactionRequestTypeJSONV210 transaction_request_type String
+field code.api.v2_1_0.TransactionRequestTypesJSON transaction_request_types List[code.api.v2_1_0.TransactionRequestTypeJSONV210]
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 challenge code.api.v1_4_0.JSONFactory1_4_0.ChallengeJsonV140
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 charge code.api.v2_0_0.TransactionRequestChargeJsonV200
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 details com.openbankproject.commons.model.TransactionRequestBodyAllTypes
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 end_date java.util.Date
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 from code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestAccountJsonV140
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 id String
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 start_date java.util.Date
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 status String
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 transaction_ids List[String]
+field code.api.v2_1_0.TransactionRequestWithChargeJSON210 type String
+field code.api.v2_1_0.TransactionRequestWithChargeJSONs210 transaction_requests_with_charges List[code.api.v2_1_0.TransactionRequestWithChargeJSON210]
+field code.api.v2_1_0.UserJSONV210 id String
+field code.api.v2_1_0.UserJSONV210 provider String
+field code.api.v2_1_0.UserJSONV210 username String
+field code.api.v2_2_0.AkkaJSON log_level String
+field code.api.v2_2_0.AkkaJSON ports List[code.api.v2_2_0.PortJSON]
+field code.api.v2_2_0.AkkaJSON remote_data_secret_matched Option[Boolean]
+field code.api.v2_2_0.AtmJsonV220 address code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140
+field code.api.v2_2_0.AtmJsonV220 bank_id String
+field code.api.v2_2_0.AtmJsonV220 id String
+field code.api.v2_2_0.AtmJsonV220 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v2_2_0.AtmJsonV220 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v2_2_0.AtmJsonV220 name String
+field code.api.v2_2_0.BankJSONV220 bank_routing code.api.v1_2_1.BankRoutingJsonV121
+field code.api.v2_2_0.BankJSONV220 full_name String
+field code.api.v2_2_0.BankJSONV220 id String
+field code.api.v2_2_0.BankJSONV220 logo_url String
+field code.api.v2_2_0.BankJSONV220 national_identifier String
+field code.api.v2_2_0.BankJSONV220 short_name String
+field code.api.v2_2_0.BankJSONV220 swift_bic String
+field code.api.v2_2_0.BankJSONV220 website_url String
+field code.api.v2_2_0.BranchJsonV220 address code.api.v1_4_0.JSONFactory1_4_0.AddressJsonV140
+field code.api.v2_2_0.BranchJsonV220 bank_id String
+field code.api.v2_2_0.BranchJsonV220 branch_routing com.openbankproject.commons.model.BranchRoutingJsonV141
+field code.api.v2_2_0.BranchJsonV220 drive_up code.api.v1_4_0.JSONFactory1_4_0.DriveUpStringJson
+field code.api.v2_2_0.BranchJsonV220 id String
+field code.api.v2_2_0.BranchJsonV220 lobby code.api.v1_4_0.JSONFactory1_4_0.LobbyStringJson
+field code.api.v2_2_0.BranchJsonV220 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v2_2_0.BranchJsonV220 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v2_2_0.BranchJsonV220 name String
+field code.api.v2_2_0.CachedFunctionJSON function_name String
+field code.api.v2_2_0.CachedFunctionJSON ttl_in_seconds Int
+field code.api.v2_2_0.ConfigurationJSON akka code.api.v2_2_0.AkkaJSON
+field code.api.v2_2_0.ConfigurationJSON cache List[code.api.v2_2_0.CachedFunctionJSON]
+field code.api.v2_2_0.ConfigurationJSON elastic_search code.api.v2_2_0.ElasticSearchJSON
+field code.api.v2_2_0.ConfigurationJSON scopes code.api.v2_2_0.ScopesJSON
+field code.api.v2_2_0.ConnectorMetricJson connector_name String
+field code.api.v2_2_0.ConnectorMetricJson correlation_id String
+field code.api.v2_2_0.ConnectorMetricJson date java.util.Date
+field code.api.v2_2_0.ConnectorMetricJson duration Long
+field code.api.v2_2_0.ConnectorMetricJson function_name String
+field code.api.v2_2_0.ConnectorMetricsJson metrics List[code.api.v2_2_0.ConnectorMetricJson]
+field code.api.v2_2_0.CounterpartiesJsonV220 counterparties List[code.api.v2_2_0.CounterpartyJsonV220]
+field code.api.v2_2_0.CounterpartyJsonV220 bespoke List[code.api.v2_1_0.PostCounterpartyBespokeJson]
+field code.api.v2_2_0.CounterpartyJsonV220 counterparty_id String
+field code.api.v2_2_0.CounterpartyJsonV220 created_by_user_id String
+field code.api.v2_2_0.CounterpartyJsonV220 description String
+field code.api.v2_2_0.CounterpartyJsonV220 is_beneficiary Boolean
+field code.api.v2_2_0.CounterpartyJsonV220 name String
+field code.api.v2_2_0.CounterpartyJsonV220 other_account_routing_address String
+field code.api.v2_2_0.CounterpartyJsonV220 other_account_routing_scheme String
+field code.api.v2_2_0.CounterpartyJsonV220 other_account_secondary_routing_address String
+field code.api.v2_2_0.CounterpartyJsonV220 other_account_secondary_routing_scheme String
+field code.api.v2_2_0.CounterpartyJsonV220 other_bank_routing_address String
+field code.api.v2_2_0.CounterpartyJsonV220 other_bank_routing_scheme String
+field code.api.v2_2_0.CounterpartyJsonV220 other_branch_routing_address String
+field code.api.v2_2_0.CounterpartyJsonV220 other_branch_routing_scheme String
+field code.api.v2_2_0.CounterpartyJsonV220 this_account_id String
+field code.api.v2_2_0.CounterpartyJsonV220 this_bank_id String
+field code.api.v2_2_0.CounterpartyJsonV220 this_view_id String
+field code.api.v2_2_0.CounterpartyMetadataJson corporate_location code.api.v2_1_0.LocationJsonV210
+field code.api.v2_2_0.CounterpartyMetadataJson image_url String
+field code.api.v2_2_0.CounterpartyMetadataJson more_info String
+field code.api.v2_2_0.CounterpartyMetadataJson open_corporates_url String
+field code.api.v2_2_0.CounterpartyMetadataJson physical_location code.api.v2_1_0.LocationJsonV210
+field code.api.v2_2_0.CounterpartyMetadataJson private_alias String
+field code.api.v2_2_0.CounterpartyMetadataJson public_alias String
+field code.api.v2_2_0.CounterpartyMetadataJson url String
+field code.api.v2_2_0.CounterpartyWithMetadataJson bespoke List[code.api.v2_1_0.PostCounterpartyBespokeJson]
+field code.api.v2_2_0.CounterpartyWithMetadataJson counterparty_id String
+field code.api.v2_2_0.CounterpartyWithMetadataJson created_by_user_id String
+field code.api.v2_2_0.CounterpartyWithMetadataJson description String
+field code.api.v2_2_0.CounterpartyWithMetadataJson is_beneficiary Boolean
+field code.api.v2_2_0.CounterpartyWithMetadataJson metadata code.api.v2_2_0.CounterpartyMetadataJson
+field code.api.v2_2_0.CounterpartyWithMetadataJson name String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_account_routing_address String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_account_routing_scheme String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_account_secondary_routing_address String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_account_secondary_routing_scheme String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_bank_routing_address String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_bank_routing_scheme String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_branch_routing_address String
+field code.api.v2_2_0.CounterpartyWithMetadataJson other_branch_routing_scheme String
+field code.api.v2_2_0.CounterpartyWithMetadataJson this_account_id String
+field code.api.v2_2_0.CounterpartyWithMetadataJson this_bank_id String
+field code.api.v2_2_0.CounterpartyWithMetadataJson this_view_id String
+field code.api.v2_2_0.CreateAccountJSONV220 account_routing com.openbankproject.commons.model.AccountRoutingJsonV121
+field code.api.v2_2_0.CreateAccountJSONV220 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v2_2_0.CreateAccountJSONV220 branch_id String
+field code.api.v2_2_0.CreateAccountJSONV220 label String
+field code.api.v2_2_0.CreateAccountJSONV220 type String
+field code.api.v2_2_0.CreateAccountJSONV220 user_id String
+field code.api.v2_2_0.ElasticSearchJSON metrics List[code.api.v2_2_0.MetricsJsonV220]
+field code.api.v2_2_0.ElasticSearchJSON warehouse List[code.api.v2_2_0.WarehouseJSON]
+field code.api.v2_2_0.FXRateJsonV220 bank_id String
+field code.api.v2_2_0.FXRateJsonV220 conversion_value Double
+field code.api.v2_2_0.FXRateJsonV220 effective_date java.util.Date
+field code.api.v2_2_0.FXRateJsonV220 from_currency_code String
+field code.api.v2_2_0.FXRateJsonV220 inverse_conversion_value Double
+field code.api.v2_2_0.FXRateJsonV220 to_currency_code String
+field code.api.v2_2_0.JSONFactory220.AdapterImplementationJson group String
+field code.api.v2_2_0.JSONFactory220.AdapterImplementationJson suggested_order Integer
+field code.api.v2_2_0.JSONFactory220.MessageDocJson adapter_implementation code.api.v2_2_0.JSONFactory220.AdapterImplementationJson
+field code.api.v2_2_0.JSONFactory220.MessageDocJson dependent_endpoints List[code.api.util.APIUtil.EndpointInfo]
+field code.api.v2_2_0.JSONFactory220.MessageDocJson description String
+field code.api.v2_2_0.JSONFactory220.MessageDocJson example_inbound_message org.json4s.JsonAST.JValue
+field code.api.v2_2_0.JSONFactory220.MessageDocJson example_outbound_message org.json4s.JsonAST.JValue
+field code.api.v2_2_0.JSONFactory220.MessageDocJson inboundAvroSchema Option[org.json4s.JsonAST.JValue]
+field code.api.v2_2_0.JSONFactory220.MessageDocJson inbound_topic Option[String]
+field code.api.v2_2_0.JSONFactory220.MessageDocJson message_format String
+field code.api.v2_2_0.JSONFactory220.MessageDocJson outboundAvroSchema Option[org.json4s.JsonAST.JValue]
+field code.api.v2_2_0.JSONFactory220.MessageDocJson outbound_topic Option[String]
+field code.api.v2_2_0.JSONFactory220.MessageDocJson process String
+field code.api.v2_2_0.JSONFactory220.MessageDocJson requiredFieldInfo Option[com.openbankproject.commons.util.RequiredFields]
+field code.api.v2_2_0.JSONFactory220.MessageDocsJson message_docs List[code.api.v2_2_0.JSONFactory220.MessageDocJson]
+field code.api.v2_2_0.MetricsJsonV220 property String
+field code.api.v2_2_0.MetricsJsonV220 value String
+field code.api.v2_2_0.PortJSON property String
+field code.api.v2_2_0.PortJSON value String
+field code.api.v2_2_0.ProductJsonV220 bank_id String
+field code.api.v2_2_0.ProductJsonV220 category String
+field code.api.v2_2_0.ProductJsonV220 code String
+field code.api.v2_2_0.ProductJsonV220 description String
+field code.api.v2_2_0.ProductJsonV220 details String
+field code.api.v2_2_0.ProductJsonV220 family String
+field code.api.v2_2_0.ProductJsonV220 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v2_2_0.ProductJsonV220 more_info_url String
+field code.api.v2_2_0.ProductJsonV220 name String
+field code.api.v2_2_0.ProductJsonV220 super_family String
+field code.api.v2_2_0.ScopesJSON require_scopes_for_all_roles Boolean
+field code.api.v2_2_0.ScopesJSON require_scopes_for_listed_roles List[String]
+field code.api.v2_2_0.ViewJSONV220 alias String
+field code.api.v2_2_0.ViewJSONV220 can_add_comment Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_corporate_location Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_counterparty Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_image Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_image_url Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_more_info Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_open_corporates_url Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_physical_location Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_private_alias Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_public_alias Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_tag Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_url Boolean
+field code.api.v2_2_0.ViewJSONV220 can_add_where_tag Boolean
+field code.api.v2_2_0.ViewJSONV220 can_delete_comment Boolean
+field code.api.v2_2_0.ViewJSONV220 can_delete_corporate_location Boolean
+field code.api.v2_2_0.ViewJSONV220 can_delete_image Boolean
+field code.api.v2_2_0.ViewJSONV220 can_delete_physical_location Boolean
+field code.api.v2_2_0.ViewJSONV220 can_delete_tag Boolean
+field code.api.v2_2_0.ViewJSONV220 can_delete_where_tag Boolean
+field code.api.v2_2_0.ViewJSONV220 can_edit_owner_comment Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_balance Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_bank_name Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_currency Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_iban Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_label Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_national_identifier Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_number Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_owners Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_swift_bic Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_bank_account_type Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_comments Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_corporate_location Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_image_url Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_images Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_more_info Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_open_corporates_url Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_other_account_bank_name Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_other_account_iban Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_other_account_kind Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_other_account_metadata Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_other_account_national_identifier Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_other_account_number Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_other_account_swift_bic Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_owner_comment Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_physical_location Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_private_alias Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_public_alias Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_tags Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_amount Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_balance Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_currency Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_description Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_finish_date Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_metadata Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_other_bank_account Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_start_date Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_this_bank_account Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_transaction_type Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_url Boolean
+field code.api.v2_2_0.ViewJSONV220 can_see_where_tag Boolean
+field code.api.v2_2_0.ViewJSONV220 description String
+field code.api.v2_2_0.ViewJSONV220 hide_metadata_if_alias_used Boolean
+field code.api.v2_2_0.ViewJSONV220 id String
+field code.api.v2_2_0.ViewJSONV220 is_public Boolean
+field code.api.v2_2_0.ViewJSONV220 short_name String
+field code.api.v2_2_0.ViewsJSONV220 views List[code.api.v2_2_0.ViewJSONV220]
+field code.api.v2_2_0.WarehouseJSON property String
+field code.api.v2_2_0.WarehouseJSON value String
+field code.api.v3_0_0.AccountHeldJson account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_0_0.AccountHeldJson bank_id String
+field code.api.v3_0_0.AccountHeldJson id String
+field code.api.v3_0_0.AccountHeldJson label String
+field code.api.v3_0_0.AccountHeldJson number String
+field code.api.v3_0_0.AccountIdJson id String
+field code.api.v3_0_0.AccountRuleJsonV300 scheme String
+field code.api.v3_0_0.AccountRuleJsonV300 value String
+field code.api.v3_0_0.AccountsIdsJsonV300 accounts List[code.api.v3_0_0.AccountIdJson]
+field code.api.v3_0_0.AdapterInfoJsonV300 date String
+field code.api.v3_0_0.AdapterInfoJsonV300 git_commit String
+field code.api.v3_0_0.AdapterInfoJsonV300 name String
+field code.api.v3_0_0.AdapterInfoJsonV300 version String
+field code.api.v3_0_0.AddressJsonV300 city String
+field code.api.v3_0_0.AddressJsonV300 country_code String
+field code.api.v3_0_0.AddressJsonV300 county String
+field code.api.v3_0_0.AddressJsonV300 line_1 String
+field code.api.v3_0_0.AddressJsonV300 line_2 String
+field code.api.v3_0_0.AddressJsonV300 line_3 String
+field code.api.v3_0_0.AddressJsonV300 postcode String
+field code.api.v3_0_0.AddressJsonV300 state String
+field code.api.v3_0_0.AggregateMetricJSON average_response_time Double
+field code.api.v3_0_0.AggregateMetricJSON count Int
+field code.api.v3_0_0.AggregateMetricJSON maximum_response_time Double
+field code.api.v3_0_0.AggregateMetricJSON minimum_response_time Double
+field code.api.v3_0_0.AtmJsonV300 address code.api.v3_0_0.AddressJsonV300
+field code.api.v3_0_0.AtmJsonV300 bank_id String
+field code.api.v3_0_0.AtmJsonV300 friday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.AtmJsonV300 has_deposit_capability String
+field code.api.v3_0_0.AtmJsonV300 id String
+field code.api.v3_0_0.AtmJsonV300 is_accessible String
+field code.api.v3_0_0.AtmJsonV300 located_at String
+field code.api.v3_0_0.AtmJsonV300 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v3_0_0.AtmJsonV300 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v3_0_0.AtmJsonV300 monday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.AtmJsonV300 more_info String
+field code.api.v3_0_0.AtmJsonV300 name String
+field code.api.v3_0_0.AtmJsonV300 saturday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.AtmJsonV300 sunday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.AtmJsonV300 thursday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.AtmJsonV300 tuesday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.AtmJsonV300 wednesday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.BranchJsonV300 accessibleFeatures String
+field code.api.v3_0_0.BranchJsonV300 address code.api.v3_0_0.AddressJsonV300
+field code.api.v3_0_0.BranchJsonV300 bank_id String
+field code.api.v3_0_0.BranchJsonV300 branch_routing com.openbankproject.commons.model.BranchRoutingJsonV141
+field code.api.v3_0_0.BranchJsonV300 branch_type String
+field code.api.v3_0_0.BranchJsonV300 drive_up code.api.v3_0_0.DriveUpJsonV330
+field code.api.v3_0_0.BranchJsonV300 id String
+field code.api.v3_0_0.BranchJsonV300 is_accessible String
+field code.api.v3_0_0.BranchJsonV300 lobby code.api.v3_0_0.LobbyJsonV330
+field code.api.v3_0_0.BranchJsonV300 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v3_0_0.BranchJsonV300 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v3_0_0.BranchJsonV300 more_info String
+field code.api.v3_0_0.BranchJsonV300 name String
+field code.api.v3_0_0.BranchJsonV300 phone_number String
+field code.api.v3_0_0.BranchesJsonV300 branches List[code.api.v3_0_0.BranchJsonV300]
+field code.api.v3_0_0.CoreAccountJson account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_0_0.CoreAccountJson account_type String
+field code.api.v3_0_0.CoreAccountJson bank_id String
+field code.api.v3_0_0.CoreAccountJson id String
+field code.api.v3_0_0.CoreAccountJson label String
+field code.api.v3_0_0.CoreAccountJson views List[code.api.v3_0_0.ViewBasicV300]
+field code.api.v3_0_0.CoreAccountsHeldJsonV300 accounts List[code.api.v3_0_0.AccountHeldJson]
+field code.api.v3_0_0.CoreAccountsJsonV300 accounts List[code.api.v3_0_0.CoreAccountJson]
+field code.api.v3_0_0.CoreCounterpartyJsonV300 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_0_0.CoreCounterpartyJsonV300 bank_routing code.api.v1_2_1.BankRoutingJsonV121
+field code.api.v3_0_0.CoreCounterpartyJsonV300 holder code.api.v1_2_1.AccountHolderJSON
+field code.api.v3_0_0.CoreCounterpartyJsonV300 id String
+field code.api.v3_0_0.CoreTransactionJsonV300 details code.api.v2_0_0.JSONFactory200.CoreTransactionDetailsJSON
+field code.api.v3_0_0.CoreTransactionJsonV300 id String
+field code.api.v3_0_0.CoreTransactionJsonV300 other_account code.api.v3_0_0.CoreCounterpartyJsonV300
+field code.api.v3_0_0.CoreTransactionJsonV300 this_account code.api.v3_0_0.ThisAccountJsonV300
+field code.api.v3_0_0.CoreTransactionJsonV300 transaction_attributes List[code.api.v4_0_0.TransactionAttributeResponseJson]
+field code.api.v3_0_0.CoreTransactionsJsonV300 transactions List[code.api.v3_0_0.CoreTransactionJsonV300]
+field code.api.v3_0_0.CreateScopeJson bank_id String
+field code.api.v3_0_0.CreateScopeJson role_name String
+field code.api.v3_0_0.CreateViewJsonV300 allowed_actions List[String]
+field code.api.v3_0_0.CreateViewJsonV300 description String
+field code.api.v3_0_0.CreateViewJsonV300 hide_metadata_if_alias_used Boolean
+field code.api.v3_0_0.CreateViewJsonV300 is_public Boolean
+field code.api.v3_0_0.CreateViewJsonV300 metadata_view String
+field code.api.v3_0_0.CreateViewJsonV300 name String
+field code.api.v3_0_0.CreateViewJsonV300 which_alias_to_use String
+field code.api.v3_0_0.CustomerAttributeResponseJsonV300 customer_attribute_id String
+field code.api.v3_0_0.CustomerAttributeResponseJsonV300 name String
+field code.api.v3_0_0.CustomerAttributeResponseJsonV300 type String
+field code.api.v3_0_0.CustomerAttributeResponseJsonV300 value String
+field code.api.v3_0_0.CustomerJSONsV300 customers List[code.api.v3_0_0.CustomerJsonV300]
+field code.api.v3_0_0.CustomerJsonV300 bank_id String
+field code.api.v3_0_0.CustomerJsonV300 branch_id String
+field code.api.v3_0_0.CustomerJsonV300 credit_limit Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v3_0_0.CustomerJsonV300 credit_rating Option[code.api.v2_1_0.CustomerCreditRatingJSON]
+field code.api.v3_0_0.CustomerJsonV300 customer_id String
+field code.api.v3_0_0.CustomerJsonV300 customer_number String
+field code.api.v3_0_0.CustomerJsonV300 date_of_birth String
+field code.api.v3_0_0.CustomerJsonV300 dependants Integer
+field code.api.v3_0_0.CustomerJsonV300 dob_of_dependants List[String]
+field code.api.v3_0_0.CustomerJsonV300 email String
+field code.api.v3_0_0.CustomerJsonV300 employment_status String
+field code.api.v3_0_0.CustomerJsonV300 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v3_0_0.CustomerJsonV300 highest_education_attained String
+field code.api.v3_0_0.CustomerJsonV300 kyc_status Boolean
+field code.api.v3_0_0.CustomerJsonV300 last_ok_date java.util.Date
+field code.api.v3_0_0.CustomerJsonV300 legal_name String
+field code.api.v3_0_0.CustomerJsonV300 mobile_phone_number String
+field code.api.v3_0_0.CustomerJsonV300 name_suffix String
+field code.api.v3_0_0.CustomerJsonV300 relationship_status String
+field code.api.v3_0_0.CustomerJsonV300 title String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 bank_id String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 branch_id String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 credit_limit Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 credit_rating Option[code.api.v2_1_0.CustomerCreditRatingJSON]
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 customer_attributes List[code.api.v3_0_0.CustomerAttributeResponseJsonV300]
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 customer_id String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 customer_number String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 date_of_birth String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 dependants Integer
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 dob_of_dependants List[String]
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 email String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 employment_status String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 highest_education_attained String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 kyc_status Boolean
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 last_ok_date java.util.Date
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 legal_name String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 mobile_phone_number String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 name_suffix String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 relationship_status String
+field code.api.v3_0_0.CustomerWithAttributesJsonV300 title String
+field code.api.v3_0_0.CustomersWithAttributesJsonV300 customers List[code.api.v3_0_0.CustomerWithAttributesJsonV300]
+field code.api.v3_0_0.DriveUpJsonV330 friday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.DriveUpJsonV330 monday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.DriveUpJsonV330 saturday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.DriveUpJsonV330 sunday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.DriveUpJsonV330 thursday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.DriveUpJsonV330 tuesday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.DriveUpJsonV330 wednesday code.api.v3_0_0.OpeningTimesV300
+field code.api.v3_0_0.ElasticSearchJsonV300 query code.api.v3_0_0.ElasticSearchQuery
+field code.api.v3_0_0.ElasticSearchQuery match_all code.api.v3_0_0.EmptyElasticSearch
+field code.api.v3_0_0.EmptyElasticSearch none Option[String]
+field code.api.v3_0_0.EntitlementRequestJSON bank_id String
+field code.api.v3_0_0.EntitlementRequestJSON created java.util.Date
+field code.api.v3_0_0.EntitlementRequestJSON entitlement_request_id String
+field code.api.v3_0_0.EntitlementRequestJSON role_name String
+field code.api.v3_0_0.EntitlementRequestJSON user code.api.v2_0_0.JSONFactory200.UserJsonV200
+field code.api.v3_0_0.EntitlementRequestsJSON entitlement_requests List[code.api.v3_0_0.EntitlementRequestJSON]
+field code.api.v3_0_0.GlossaryDescriptionJsonV300 html String
+field code.api.v3_0_0.GlossaryDescriptionJsonV300 markdown String
+field code.api.v3_0_0.GlossaryItemJsonV300 description code.api.v3_0_0.GlossaryDescriptionJsonV300
+field code.api.v3_0_0.GlossaryItemJsonV300 title String
+field code.api.v3_0_0.GlossaryItemsJsonV300 glossary_items List[code.api.v3_0_0.GlossaryItemJsonV300]
+field code.api.v3_0_0.LobbyJsonV330 friday List[code.api.v3_0_0.OpeningTimesV300]
+field code.api.v3_0_0.LobbyJsonV330 monday List[code.api.v3_0_0.OpeningTimesV300]
+field code.api.v3_0_0.LobbyJsonV330 saturday List[code.api.v3_0_0.OpeningTimesV300]
+field code.api.v3_0_0.LobbyJsonV330 sunday List[code.api.v3_0_0.OpeningTimesV300]
+field code.api.v3_0_0.LobbyJsonV330 thursday List[code.api.v3_0_0.OpeningTimesV300]
+field code.api.v3_0_0.LobbyJsonV330 tuesday List[code.api.v3_0_0.OpeningTimesV300]
+field code.api.v3_0_0.LobbyJsonV330 wednesday List[code.api.v3_0_0.OpeningTimesV300]
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 account_attributes Option[List[code.api.v3_1_0.AccountAttributeResponseJson]]
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 account_rules List[code.api.v3_0_0.AccountRuleJsonV300]
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 bank_id String
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 id String
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 label String
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 number String
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 owners List[code.api.v1_2_1.UserJSONV121]
+field code.api.v3_0_0.ModeratedCoreAccountJsonV300 type String
+field code.api.v3_0_0.ModeratedCoreAccountsJsonV300 accounts List[code.api.v3_0_0.ModeratedCoreAccountJsonV300]
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 bank_id String
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 id String
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 label String
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 number String
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 owners List[code.api.v1_2_1.UserJSONV121]
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 type String
+field code.api.v3_0_0.NewModeratedCoreAccountJsonV300 views_basic List[code.api.v3_0_0.ViewBasicV300]
+field code.api.v3_0_0.OpeningTimesV300 closing_time String
+field code.api.v3_0_0.OpeningTimesV300 opening_time String
+field code.api.v3_0_0.OtherAccountJsonV300 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_0_0.OtherAccountJsonV300 bank_routing code.api.v1_2_1.BankRoutingJsonV121
+field code.api.v3_0_0.OtherAccountJsonV300 holder code.api.v1_2_1.AccountHolderJSON
+field code.api.v3_0_0.OtherAccountJsonV300 id String
+field code.api.v3_0_0.OtherAccountJsonV300 metadata code.api.v1_2_1.OtherAccountMetadataJSON
+field code.api.v3_0_0.OtherAccountsJsonV300 other_accounts List[code.api.v3_0_0.OtherAccountJsonV300]
+field code.api.v3_0_0.PostBranchJsonV300 accessibleFeatures String
+field code.api.v3_0_0.PostBranchJsonV300 address code.api.v3_0_0.AddressJsonV300
+field code.api.v3_0_0.PostBranchJsonV300 bank_id String
+field code.api.v3_0_0.PostBranchJsonV300 branch_routing com.openbankproject.commons.model.BranchRoutingJsonV141
+field code.api.v3_0_0.PostBranchJsonV300 branch_type String
+field code.api.v3_0_0.PostBranchJsonV300 drive_up code.api.v3_0_0.DriveUpJsonV330
+field code.api.v3_0_0.PostBranchJsonV300 is_accessible String
+field code.api.v3_0_0.PostBranchJsonV300 lobby code.api.v3_0_0.LobbyJsonV330
+field code.api.v3_0_0.PostBranchJsonV300 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v3_0_0.PostBranchJsonV300 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v3_0_0.PostBranchJsonV300 more_info String
+field code.api.v3_0_0.PostBranchJsonV300 name String
+field code.api.v3_0_0.PostBranchJsonV300 phone_number String
+field code.api.v3_0_0.ScopeJson bank_id String
+field code.api.v3_0_0.ScopeJson role_name String
+field code.api.v3_0_0.ScopeJson scope_id String
+field code.api.v3_0_0.ScopeJsons list List[code.api.v3_0_0.ScopeJson]
+field code.api.v3_0_0.ThisAccountJsonV300 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_0_0.ThisAccountJsonV300 bank_routing code.api.v1_2_1.BankRoutingJsonV121
+field code.api.v3_0_0.ThisAccountJsonV300 holders List[code.api.v1_2_1.AccountHolderJSON]
+field code.api.v3_0_0.ThisAccountJsonV300 id String
+field code.api.v3_0_0.TransactionJsonV300 details code.api.v1_2_1.TransactionDetailsJSON
+field code.api.v3_0_0.TransactionJsonV300 id String
+field code.api.v3_0_0.TransactionJsonV300 metadata code.api.v1_2_1.TransactionMetadataJSON
+field code.api.v3_0_0.TransactionJsonV300 other_account code.api.v3_0_0.OtherAccountJsonV300
+field code.api.v3_0_0.TransactionJsonV300 this_account code.api.v3_0_0.ThisAccountJsonV300
+field code.api.v3_0_0.TransactionJsonV300 transaction_attributes List[code.api.v4_0_0.TransactionAttributeResponseJson]
+field code.api.v3_0_0.TransactionsJsonV300 transactions List[code.api.v3_0_0.TransactionJsonV300]
+field code.api.v3_0_0.UpdateViewJsonV300 allowed_actions List[String]
+field code.api.v3_0_0.UpdateViewJsonV300 description String
+field code.api.v3_0_0.UpdateViewJsonV300 hide_metadata_if_alias_used Boolean
+field code.api.v3_0_0.UpdateViewJsonV300 is_firehose Option[Boolean]
+field code.api.v3_0_0.UpdateViewJsonV300 is_public Boolean
+field code.api.v3_0_0.UpdateViewJsonV300 metadata_view String
+field code.api.v3_0_0.UpdateViewJsonV300 which_alias_to_use String
+field code.api.v3_0_0.UserJsonV300 email String
+field code.api.v3_0_0.UserJsonV300 entitlements code.api.v2_0_0.EntitlementJSONs
+field code.api.v3_0_0.UserJsonV300 provider String
+field code.api.v3_0_0.UserJsonV300 provider_id String
+field code.api.v3_0_0.UserJsonV300 user_id String
+field code.api.v3_0_0.UserJsonV300 username String
+field code.api.v3_0_0.UserJsonV300 views Option[code.api.v3_0_0.ViewsJSON300]
+field code.api.v3_0_0.ViewBasicV300 description String
+field code.api.v3_0_0.ViewBasicV300 id String
+field code.api.v3_0_0.ViewBasicV300 is_public Boolean
+field code.api.v3_0_0.ViewBasicV300 short_name String
+field code.api.v3_0_0.ViewJSON300 account_id String
+field code.api.v3_0_0.ViewJSON300 bank_id String
+field code.api.v3_0_0.ViewJSON300 view_id String
+field code.api.v3_0_0.ViewJsonV300 alias String
+field code.api.v3_0_0.ViewJsonV300 can_add_comment Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_corporate_location Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_counterparty Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_image Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_image_url Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_more_info Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_open_corporates_url Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_physical_location Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_private_alias Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_public_alias Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_tag Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_transaction_request_to_any_account Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_transaction_request_to_own_account Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_url Boolean
+field code.api.v3_0_0.ViewJsonV300 can_add_where_tag Boolean
+field code.api.v3_0_0.ViewJsonV300 can_create_direct_debit Boolean
+field code.api.v3_0_0.ViewJsonV300 can_create_standing_order Boolean
+field code.api.v3_0_0.ViewJsonV300 can_delete_comment Boolean
+field code.api.v3_0_0.ViewJsonV300 can_delete_corporate_location Boolean
+field code.api.v3_0_0.ViewJsonV300 can_delete_image Boolean
+field code.api.v3_0_0.ViewJsonV300 can_delete_physical_location Boolean
+field code.api.v3_0_0.ViewJsonV300 can_delete_tag Boolean
+field code.api.v3_0_0.ViewJsonV300 can_delete_where_tag Boolean
+field code.api.v3_0_0.ViewJsonV300 can_edit_owner_comment Boolean
+field code.api.v3_0_0.ViewJsonV300 can_query_available_funds Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_balance Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_bank_name Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_credit_limit Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_currency Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_iban Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_label Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_national_identifier Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_number Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_owners Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_routing_address Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_routing_scheme Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_swift_bic Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_account_type Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_routing_address Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_bank_routing_scheme Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_comments Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_corporate_location Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_image_url Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_images Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_more_info Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_open_corporates_url Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_bank_name Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_iban Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_kind Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_metadata Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_national_identifier Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_number Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_routing_address Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_routing_scheme Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_account_swift_bic Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_bank_routing_address Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_other_bank_routing_scheme Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_owner_comment Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_physical_location Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_private_alias Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_public_alias Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_tags Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_amount Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_balance Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_currency Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_description Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_finish_date Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_metadata Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_other_bank_account Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_start_date Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_this_bank_account Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_transaction_type Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_url Boolean
+field code.api.v3_0_0.ViewJsonV300 can_see_where_tag Boolean
+field code.api.v3_0_0.ViewJsonV300 description String
+field code.api.v3_0_0.ViewJsonV300 hide_metadata_if_alias_used Boolean
+field code.api.v3_0_0.ViewJsonV300 id String
+field code.api.v3_0_0.ViewJsonV300 is_firehose Option[Boolean]
+field code.api.v3_0_0.ViewJsonV300 is_public Boolean
+field code.api.v3_0_0.ViewJsonV300 is_system Boolean
+field code.api.v3_0_0.ViewJsonV300 metadata_view String
+field code.api.v3_0_0.ViewJsonV300 short_name String
+field code.api.v3_0_0.ViewsJSON300 list List[code.api.v3_0_0.ViewJSON300]
+field code.api.v3_0_0.ViewsJsonV300 views List[code.api.v3_0_0.ViewJsonV300]
+field code.api.v3_1_0.AccountApplicationJson customer_id Option[String]
+field code.api.v3_1_0.AccountApplicationJson product_code String
+field code.api.v3_1_0.AccountApplicationJson user_id Option[String]
+field code.api.v3_1_0.AccountApplicationResponseJson account_application_id String
+field code.api.v3_1_0.AccountApplicationResponseJson customer code.api.v3_1_0.CustomerJsonV310
+field code.api.v3_1_0.AccountApplicationResponseJson date_of_application java.util.Date
+field code.api.v3_1_0.AccountApplicationResponseJson product_code String
+field code.api.v3_1_0.AccountApplicationResponseJson status String
+field code.api.v3_1_0.AccountApplicationResponseJson user code.api.v2_1_0.ResourceUserJSON
+field code.api.v3_1_0.AccountApplicationUpdateStatusJson status String
+field code.api.v3_1_0.AccountApplicationsJsonV310 account_applications List[code.api.v3_1_0.AccountApplicationResponseJson]
+field code.api.v3_1_0.AccountAttributeJson name String
+field code.api.v3_1_0.AccountAttributeJson product_instance_code Option[String]
+field code.api.v3_1_0.AccountAttributeJson type String
+field code.api.v3_1_0.AccountAttributeJson value String
+field code.api.v3_1_0.AccountAttributeResponseJson account_attribute_id String
+field code.api.v3_1_0.AccountAttributeResponseJson name String
+field code.api.v3_1_0.AccountAttributeResponseJson product_code String
+field code.api.v3_1_0.AccountAttributeResponseJson product_instance_code Option[String]
+field code.api.v3_1_0.AccountAttributeResponseJson type String
+field code.api.v3_1_0.AccountAttributeResponseJson value String
+field code.api.v3_1_0.AccountBalanceV310 account_routings List[com.openbankproject.commons.model.AccountRouting]
+field code.api.v3_1_0.AccountBalanceV310 balance com.openbankproject.commons.model.AmountOfMoney
+field code.api.v3_1_0.AccountBalanceV310 bank_id String
+field code.api.v3_1_0.AccountBalanceV310 id String
+field code.api.v3_1_0.AccountBalanceV310 label String
+field code.api.v3_1_0.AccountBasicV310 bank_id String
+field code.api.v3_1_0.AccountBasicV310 id String
+field code.api.v3_1_0.AccountBasicV310 label String
+field code.api.v3_1_0.AccountBasicV310 views_available List[com.openbankproject.commons.model.ViewBasic]
+field code.api.v3_1_0.AccountWebhookJson account_id String
+field code.api.v3_1_0.AccountWebhookJson account_webhook_id String
+field code.api.v3_1_0.AccountWebhookJson bank_id String
+field code.api.v3_1_0.AccountWebhookJson created_by_user_id String
+field code.api.v3_1_0.AccountWebhookJson http_method String
+field code.api.v3_1_0.AccountWebhookJson http_protocol String
+field code.api.v3_1_0.AccountWebhookJson is_active Boolean
+field code.api.v3_1_0.AccountWebhookJson trigger_name String
+field code.api.v3_1_0.AccountWebhookJson url String
+field code.api.v3_1_0.AccountWebhookPostJson account_id String
+field code.api.v3_1_0.AccountWebhookPostJson http_method String
+field code.api.v3_1_0.AccountWebhookPostJson http_protocol String
+field code.api.v3_1_0.AccountWebhookPostJson is_active String
+field code.api.v3_1_0.AccountWebhookPostJson trigger_name String
+field code.api.v3_1_0.AccountWebhookPostJson url String
+field code.api.v3_1_0.AccountWebhookPutJson account_webhook_id String
+field code.api.v3_1_0.AccountWebhookPutJson is_active String
+field code.api.v3_1_0.AccountWebhooksJson web_hooks List[code.api.v3_1_0.AccountWebhookJson]
+field code.api.v3_1_0.AccountsBalancesV310Json accounts List[code.api.v3_1_0.AccountBalanceV310]
+field code.api.v3_1_0.AccountsBalancesV310Json overall_balance com.openbankproject.commons.model.AmountOfMoney
+field code.api.v3_1_0.AccountsBalancesV310Json overall_balance_date java.util.Date
+field code.api.v3_1_0.BadLoginStatusJson bad_attempts_since_last_success_or_reset Int
+field code.api.v3_1_0.BadLoginStatusJson last_failure_date java.util.Date
+field code.api.v3_1_0.BadLoginStatusJson username String
+field code.api.v3_1_0.CallLimitJson current_state Option[code.api.v3_1_0.RedisCallLimitJson]
+field code.api.v3_1_0.CallLimitJson per_day_call_limit String
+field code.api.v3_1_0.CallLimitJson per_hour_call_limit String
+field code.api.v3_1_0.CallLimitJson per_minute_call_limit String
+field code.api.v3_1_0.CallLimitJson per_month_call_limit String
+field code.api.v3_1_0.CallLimitJson per_second_call_limit String
+field code.api.v3_1_0.CallLimitJson per_week_call_limit String
+field code.api.v3_1_0.CallLimitPostJson from_date java.util.Date
+field code.api.v3_1_0.CallLimitPostJson per_day_call_limit String
+field code.api.v3_1_0.CallLimitPostJson per_hour_call_limit String
+field code.api.v3_1_0.CallLimitPostJson per_minute_call_limit String
+field code.api.v3_1_0.CallLimitPostJson per_month_call_limit String
+field code.api.v3_1_0.CallLimitPostJson per_second_call_limit String
+field code.api.v3_1_0.CallLimitPostJson per_week_call_limit String
+field code.api.v3_1_0.CallLimitPostJson to_date java.util.Date
+field code.api.v3_1_0.CardAttributeJson name String
+field code.api.v3_1_0.CardAttributeJson type String
+field code.api.v3_1_0.CardAttributeJson value String
+field code.api.v3_1_0.CheckFundsAvailableJson answer String
+field code.api.v3_1_0.CheckFundsAvailableJson available_funds_request_id String
+field code.api.v3_1_0.CheckFundsAvailableJson date java.util.Date
+field code.api.v3_1_0.ConsentChallengeJsonV310 consent_id String
+field code.api.v3_1_0.ConsentChallengeJsonV310 jwt String
+field code.api.v3_1_0.ConsentChallengeJsonV310 status String
+field code.api.v3_1_0.ConsentJsonV310 consent_id String
+field code.api.v3_1_0.ConsentJsonV310 jwt String
+field code.api.v3_1_0.ConsentJsonV310 status String
+field code.api.v3_1_0.ConsentsJsonV310 consents List[code.api.v3_1_0.ConsentJsonV310]
+field code.api.v3_1_0.ConsumerJsonV310 app_name String
+field code.api.v3_1_0.ConsumerJsonV310 app_type String
+field code.api.v3_1_0.ConsumerJsonV310 consumer_id String
+field code.api.v3_1_0.ConsumerJsonV310 created java.util.Date
+field code.api.v3_1_0.ConsumerJsonV310 created_by_user code.api.v2_1_0.ResourceUserJSON
+field code.api.v3_1_0.ConsumerJsonV310 description String
+field code.api.v3_1_0.ConsumerJsonV310 developer_email String
+field code.api.v3_1_0.ConsumerJsonV310 enabled Boolean
+field code.api.v3_1_0.ConsumerJsonV310 redirect_url String
+field code.api.v3_1_0.ConsumersJsonV310 consumers List[code.api.v3_1_0.ConsumerJsonV310]
+field code.api.v3_1_0.ContactDetailsJson email_address String
+field code.api.v3_1_0.ContactDetailsJson mobile_phone String
+field code.api.v3_1_0.ContactDetailsJson name String
+field code.api.v3_1_0.CreateAccountRequestJsonV310 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_1_0.CreateAccountRequestJsonV310 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_1_0.CreateAccountRequestJsonV310 branch_id String
+field code.api.v3_1_0.CreateAccountRequestJsonV310 label String
+field code.api.v3_1_0.CreateAccountRequestJsonV310 product_code String
+field code.api.v3_1_0.CreateAccountRequestJsonV310 user_id String
+field code.api.v3_1_0.CreateAccountResponseJsonV310 account_attributes List[code.api.v3_1_0.AccountAttributeResponseJson]
+field code.api.v3_1_0.CreateAccountResponseJsonV310 account_id String
+field code.api.v3_1_0.CreateAccountResponseJsonV310 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_1_0.CreateAccountResponseJsonV310 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_1_0.CreateAccountResponseJsonV310 branch_id String
+field code.api.v3_1_0.CreateAccountResponseJsonV310 label String
+field code.api.v3_1_0.CreateAccountResponseJsonV310 product_code String
+field code.api.v3_1_0.CreateAccountResponseJsonV310 user_id String
+field code.api.v3_1_0.CreateMeetingJsonV310 creator code.api.v3_1_0.ContactDetailsJson
+field code.api.v3_1_0.CreateMeetingJsonV310 date java.util.Date
+field code.api.v3_1_0.CreateMeetingJsonV310 invitees List[code.api.v3_1_0.InviteeJson]
+field code.api.v3_1_0.CreateMeetingJsonV310 provider_id String
+field code.api.v3_1_0.CreateMeetingJsonV310 purpose_id String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 account_id String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 allows List[String]
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 card_number String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 card_type String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 collected Option[java.util.Date]
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 customer_id String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 enabled Boolean
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 expires_date java.util.Date
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 issue_number String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 name_on_card String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 networks List[String]
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 posted Option[java.util.Date]
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 replacement Option[code.api.v1_3_0.ReplacementJSON]
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 serial_number String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 technology String
+field code.api.v3_1_0.CreatePhysicalCardJsonV310 valid_from_date java.util.Date
+field code.api.v3_1_0.CreditCardOrderStatusResponseJson cards List[com.openbankproject.commons.model.CardObjectJson]
+field code.api.v3_1_0.CustomerAddressJsonV310 city String
+field code.api.v3_1_0.CustomerAddressJsonV310 country_code String
+field code.api.v3_1_0.CustomerAddressJsonV310 county String
+field code.api.v3_1_0.CustomerAddressJsonV310 customer_address_id String
+field code.api.v3_1_0.CustomerAddressJsonV310 customer_id String
+field code.api.v3_1_0.CustomerAddressJsonV310 insert_date java.util.Date
+field code.api.v3_1_0.CustomerAddressJsonV310 line_1 String
+field code.api.v3_1_0.CustomerAddressJsonV310 line_2 String
+field code.api.v3_1_0.CustomerAddressJsonV310 line_3 String
+field code.api.v3_1_0.CustomerAddressJsonV310 postcode String
+field code.api.v3_1_0.CustomerAddressJsonV310 state String
+field code.api.v3_1_0.CustomerAddressJsonV310 status String
+field code.api.v3_1_0.CustomerAddressJsonV310 tags List[String]
+field code.api.v3_1_0.CustomerAddressesJsonV310 addresses List[code.api.v3_1_0.CustomerAddressJsonV310]
+field code.api.v3_1_0.CustomerJsonV310 bank_id String
+field code.api.v3_1_0.CustomerJsonV310 branch_id String
+field code.api.v3_1_0.CustomerJsonV310 credit_limit Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v3_1_0.CustomerJsonV310 credit_rating Option[code.api.v2_1_0.CustomerCreditRatingJSON]
+field code.api.v3_1_0.CustomerJsonV310 customer_id String
+field code.api.v3_1_0.CustomerJsonV310 customer_number String
+field code.api.v3_1_0.CustomerJsonV310 date_of_birth java.util.Date
+field code.api.v3_1_0.CustomerJsonV310 dependants Integer
+field code.api.v3_1_0.CustomerJsonV310 dob_of_dependants List[java.util.Date]
+field code.api.v3_1_0.CustomerJsonV310 email String
+field code.api.v3_1_0.CustomerJsonV310 employment_status String
+field code.api.v3_1_0.CustomerJsonV310 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v3_1_0.CustomerJsonV310 highest_education_attained String
+field code.api.v3_1_0.CustomerJsonV310 kyc_status Boolean
+field code.api.v3_1_0.CustomerJsonV310 last_ok_date java.util.Date
+field code.api.v3_1_0.CustomerJsonV310 legal_name String
+field code.api.v3_1_0.CustomerJsonV310 mobile_phone_number String
+field code.api.v3_1_0.CustomerJsonV310 name_suffix String
+field code.api.v3_1_0.CustomerJsonV310 relationship_status String
+field code.api.v3_1_0.CustomerJsonV310 title String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 bank_id String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 branch_id String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 credit_limit Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 credit_rating Option[code.api.v2_1_0.CustomerCreditRatingJSON]
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 customer_attributes List[code.api.v3_0_0.CustomerAttributeResponseJsonV300]
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 customer_id String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 customer_number String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 date_of_birth java.util.Date
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 dependants Integer
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 dob_of_dependants List[java.util.Date]
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 email String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 employment_status String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 highest_education_attained String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 kyc_status Boolean
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 last_ok_date java.util.Date
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 legal_name String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 mobile_phone_number String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 name_suffix String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 relationship_status String
+field code.api.v3_1_0.CustomerWithAttributesJsonV310 title String
+field code.api.v3_1_0.EntitlementJSonsV310 list List[code.api.v3_1_0.EntitlementJsonV310]
+field code.api.v3_1_0.EntitlementJsonV310 bank_id String
+field code.api.v3_1_0.EntitlementJsonV310 entitlement_id String
+field code.api.v3_1_0.EntitlementJsonV310 role_name String
+field code.api.v3_1_0.EntitlementJsonV310 user_id String
+field code.api.v3_1_0.EntitlementJsonV310 username String
+field code.api.v3_1_0.HistoricalTransactionAccountJsonV310 account_id Option[String]
+field code.api.v3_1_0.HistoricalTransactionAccountJsonV310 bank_id Option[String]
+field code.api.v3_1_0.HistoricalTransactionAccountJsonV310 counterparty_id Option[String]
+field code.api.v3_1_0.InviteeJson contact_details code.api.v3_1_0.ContactDetailsJson
+field code.api.v3_1_0.InviteeJson status String
+field code.api.v3_1_0.MeetingJsonV310 bank_id String
+field code.api.v3_1_0.MeetingJsonV310 creator code.api.v3_1_0.ContactDetailsJson
+field code.api.v3_1_0.MeetingJsonV310 invitees List[code.api.v3_1_0.InviteeJson]
+field code.api.v3_1_0.MeetingJsonV310 keys code.api.v2_0_0.MeetingKeysJson
+field code.api.v3_1_0.MeetingJsonV310 meeting_id String
+field code.api.v3_1_0.MeetingJsonV310 present code.api.v2_0_0.MeetingPresentJson
+field code.api.v3_1_0.MeetingJsonV310 provider_id String
+field code.api.v3_1_0.MeetingJsonV310 purpose_id String
+field code.api.v3_1_0.MeetingJsonV310 when java.util.Date
+field code.api.v3_1_0.MeetingsJsonV310 meetings List[code.api.v3_1_0.MeetingJsonV310]
+field code.api.v3_1_0.ModeratedAccountJSON310 account_attributes List[code.api.v3_1_0.AccountAttributeResponseJson]
+field code.api.v3_1_0.ModeratedAccountJSON310 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_1_0.ModeratedAccountJSON310 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_1_0.ModeratedAccountJSON310 bank_id String
+field code.api.v3_1_0.ModeratedAccountJSON310 id String
+field code.api.v3_1_0.ModeratedAccountJSON310 label String
+field code.api.v3_1_0.ModeratedAccountJSON310 number String
+field code.api.v3_1_0.ModeratedAccountJSON310 owners List[code.api.v1_2_1.UserJSONV121]
+field code.api.v3_1_0.ModeratedAccountJSON310 type String
+field code.api.v3_1_0.ModeratedAccountJSON310 views_available List[code.api.v1_2_1.ViewJSONV121]
+field code.api.v3_1_0.OAuth2ServerJWKURIJson jwks_uri String
+field code.api.v3_1_0.OAuth2ServerJwksUrisJson jwks_uris List[code.api.v3_1_0.OAuth2ServerJWKURIJson]
+field code.api.v3_1_0.ObpApiLoopbackJson connector_version String
+field code.api.v3_1_0.ObpApiLoopbackJson duration_time String
+field code.api.v3_1_0.ObpApiLoopbackJson git_commit String
+field code.api.v3_1_0.PhysicalCardJsonV310 account code.api.v1_2_1.AccountJSON
+field code.api.v3_1_0.PhysicalCardJsonV310 allows List[String]
+field code.api.v3_1_0.PhysicalCardJsonV310 bank_id String
+field code.api.v3_1_0.PhysicalCardJsonV310 cancelled Boolean
+field code.api.v3_1_0.PhysicalCardJsonV310 card_id String
+field code.api.v3_1_0.PhysicalCardJsonV310 card_number String
+field code.api.v3_1_0.PhysicalCardJsonV310 card_type String
+field code.api.v3_1_0.PhysicalCardJsonV310 collected java.util.Date
+field code.api.v3_1_0.PhysicalCardJsonV310 customer_id String
+field code.api.v3_1_0.PhysicalCardJsonV310 enabled Boolean
+field code.api.v3_1_0.PhysicalCardJsonV310 expires_date java.util.Date
+field code.api.v3_1_0.PhysicalCardJsonV310 issue_number String
+field code.api.v3_1_0.PhysicalCardJsonV310 name_on_card String
+field code.api.v3_1_0.PhysicalCardJsonV310 networks List[String]
+field code.api.v3_1_0.PhysicalCardJsonV310 on_hot_list Boolean
+field code.api.v3_1_0.PhysicalCardJsonV310 pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v3_1_0.PhysicalCardJsonV310 posted java.util.Date
+field code.api.v3_1_0.PhysicalCardJsonV310 replacement code.api.v1_3_0.ReplacementJSON
+field code.api.v3_1_0.PhysicalCardJsonV310 serial_number String
+field code.api.v3_1_0.PhysicalCardJsonV310 technology String
+field code.api.v3_1_0.PhysicalCardJsonV310 valid_from_date java.util.Date
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 account code.api.v3_1_0.AccountBasicV310
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 allows List[String]
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 bank_id String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 cancelled Boolean
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 card_attributes List[com.openbankproject.commons.model.CardAttribute]
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 card_id String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 card_number String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 card_type String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 collected java.util.Date
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 customer_id String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 enabled Boolean
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 expires_date java.util.Date
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 issue_number String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 name_on_card String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 networks List[String]
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 on_hot_list Boolean
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 posted java.util.Date
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 replacement code.api.v1_3_0.ReplacementJSON
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 serial_number String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 technology String
+field code.api.v3_1_0.PhysicalCardWithAttributesJsonV310 valid_from_date java.util.Date
+field code.api.v3_1_0.PhysicalCardsJsonV310 cards List[code.api.v3_1_0.PhysicalCardJsonV310]
+field code.api.v3_1_0.PostConsentChallengeJsonV310 answer String
+field code.api.v3_1_0.PostConsentEmailJsonV310 consumer_id Option[String]
+field code.api.v3_1_0.PostConsentEmailJsonV310 email String
+field code.api.v3_1_0.PostConsentEmailJsonV310 entitlements List[code.api.v3_1_0.PostConsentEntitlementJsonV310]
+field code.api.v3_1_0.PostConsentEmailJsonV310 everything Boolean
+field code.api.v3_1_0.PostConsentEmailJsonV310 time_to_live Option[Long]
+field code.api.v3_1_0.PostConsentEmailJsonV310 valid_from Option[java.util.Date]
+field code.api.v3_1_0.PostConsentEmailJsonV310 views List[code.api.v3_1_0.PostConsentViewJsonV310]
+field code.api.v3_1_0.PostConsentEntitlementJsonV310 bank_id String
+field code.api.v3_1_0.PostConsentEntitlementJsonV310 role_name String
+field code.api.v3_1_0.PostConsentImplicitJsonV310 consumer_id Option[String]
+field code.api.v3_1_0.PostConsentImplicitJsonV310 entitlements List[code.api.v3_1_0.PostConsentEntitlementJsonV310]
+field code.api.v3_1_0.PostConsentImplicitJsonV310 everything Boolean
+field code.api.v3_1_0.PostConsentImplicitJsonV310 time_to_live Option[Long]
+field code.api.v3_1_0.PostConsentImplicitJsonV310 valid_from Option[java.util.Date]
+field code.api.v3_1_0.PostConsentImplicitJsonV310 views List[code.api.v3_1_0.PostConsentViewJsonV310]
+field code.api.v3_1_0.PostConsentPhoneJsonV310 consumer_id Option[String]
+field code.api.v3_1_0.PostConsentPhoneJsonV310 entitlements List[code.api.v3_1_0.PostConsentEntitlementJsonV310]
+field code.api.v3_1_0.PostConsentPhoneJsonV310 everything Boolean
+field code.api.v3_1_0.PostConsentPhoneJsonV310 phone_number String
+field code.api.v3_1_0.PostConsentPhoneJsonV310 time_to_live Option[Long]
+field code.api.v3_1_0.PostConsentPhoneJsonV310 valid_from Option[java.util.Date]
+field code.api.v3_1_0.PostConsentPhoneJsonV310 views List[code.api.v3_1_0.PostConsentViewJsonV310]
+field code.api.v3_1_0.PostConsentViewJsonV310 account_id String
+field code.api.v3_1_0.PostConsentViewJsonV310 bank_id String
+field code.api.v3_1_0.PostConsentViewJsonV310 view_id String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 city String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 country_code String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 county String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 line_1 String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 line_2 String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 line_3 String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 postcode String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 state String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 status String
+field code.api.v3_1_0.PostCustomerAddressJsonV310 tags List[String]
+field code.api.v3_1_0.PostCustomerJsonV310 branch_id String
+field code.api.v3_1_0.PostCustomerJsonV310 credit_limit com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_1_0.PostCustomerJsonV310 credit_rating code.api.v2_1_0.CustomerCreditRatingJSON
+field code.api.v3_1_0.PostCustomerJsonV310 date_of_birth java.util.Date
+field code.api.v3_1_0.PostCustomerJsonV310 dependants Int
+field code.api.v3_1_0.PostCustomerJsonV310 dob_of_dependants List[java.util.Date]
+field code.api.v3_1_0.PostCustomerJsonV310 email String
+field code.api.v3_1_0.PostCustomerJsonV310 employment_status String
+field code.api.v3_1_0.PostCustomerJsonV310 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v3_1_0.PostCustomerJsonV310 highest_education_attained String
+field code.api.v3_1_0.PostCustomerJsonV310 kyc_status Boolean
+field code.api.v3_1_0.PostCustomerJsonV310 last_ok_date java.util.Date
+field code.api.v3_1_0.PostCustomerJsonV310 legal_name String
+field code.api.v3_1_0.PostCustomerJsonV310 mobile_phone_number String
+field code.api.v3_1_0.PostCustomerJsonV310 name_suffix String
+field code.api.v3_1_0.PostCustomerJsonV310 relationship_status String
+field code.api.v3_1_0.PostCustomerJsonV310 title String
+field code.api.v3_1_0.PostCustomerNumberJsonV310 customer_number String
+field code.api.v3_1_0.PostHistoricalTransactionJson charge_policy String
+field code.api.v3_1_0.PostHistoricalTransactionJson completed String
+field code.api.v3_1_0.PostHistoricalTransactionJson description String
+field code.api.v3_1_0.PostHistoricalTransactionJson from code.api.v3_1_0.HistoricalTransactionAccountJsonV310
+field code.api.v3_1_0.PostHistoricalTransactionJson posted String
+field code.api.v3_1_0.PostHistoricalTransactionJson to code.api.v3_1_0.HistoricalTransactionAccountJsonV310
+field code.api.v3_1_0.PostHistoricalTransactionJson type String
+field code.api.v3_1_0.PostHistoricalTransactionJson value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson charge_policy String
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson completed java.util.Date
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson description String
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson from code.api.v3_1_0.HistoricalTransactionAccountJsonV310
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson posted java.util.Date
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson to code.api.v3_1_0.HistoricalTransactionAccountJsonV310
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson transaction_id String
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson transaction_request_type String
+field code.api.v3_1_0.PostHistoricalTransactionResponseJson value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v3_1_0.PostPutProductJsonV310 category String
+field code.api.v3_1_0.PostPutProductJsonV310 description String
+field code.api.v3_1_0.PostPutProductJsonV310 details String
+field code.api.v3_1_0.PostPutProductJsonV310 family String
+field code.api.v3_1_0.PostPutProductJsonV310 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v3_1_0.PostPutProductJsonV310 more_info_url String
+field code.api.v3_1_0.PostPutProductJsonV310 name String
+field code.api.v3_1_0.PostPutProductJsonV310 parent_product_code String
+field code.api.v3_1_0.PostPutProductJsonV310 super_family String
+field code.api.v3_1_0.PostTaxResidenceJsonV310 domain String
+field code.api.v3_1_0.PostTaxResidenceJsonV310 tax_number String
+field code.api.v3_1_0.PostUserAuthContextJson key String
+field code.api.v3_1_0.PostUserAuthContextJson value String
+field code.api.v3_1_0.PostUserAuthContextUpdateJsonV310 answer String
+field code.api.v3_1_0.ProductAttributeJson name String
+field code.api.v3_1_0.ProductAttributeJson type String
+field code.api.v3_1_0.ProductAttributeJson value String
+field code.api.v3_1_0.ProductAttributeResponseWithoutBankIdJson name String
+field code.api.v3_1_0.ProductAttributeResponseWithoutBankIdJson product_attribute_id String
+field code.api.v3_1_0.ProductAttributeResponseWithoutBankIdJson product_code String
+field code.api.v3_1_0.ProductAttributeResponseWithoutBankIdJson type String
+field code.api.v3_1_0.ProductAttributeResponseWithoutBankIdJson value String
+field code.api.v3_1_0.ProductCollectionItemJsonV310 member_product_code String
+field code.api.v3_1_0.ProductCollectionJsonTreeV310 collection_code String
+field code.api.v3_1_0.ProductCollectionJsonTreeV310 products List[code.api.v3_1_0.ProductJsonV310]
+field code.api.v3_1_0.ProductCollectionJsonV310 collection_code String
+field code.api.v3_1_0.ProductCollectionJsonV310 items List[code.api.v3_1_0.ProductCollectionItemJsonV310]
+field code.api.v3_1_0.ProductCollectionJsonV310 product_code String
+field code.api.v3_1_0.ProductCollectionsJsonV310 product_collection List[code.api.v3_1_0.ProductCollectionJsonV310]
+field code.api.v3_1_0.ProductJsonV310 bank_id String
+field code.api.v3_1_0.ProductJsonV310 category String
+field code.api.v3_1_0.ProductJsonV310 code String
+field code.api.v3_1_0.ProductJsonV310 description String
+field code.api.v3_1_0.ProductJsonV310 details String
+field code.api.v3_1_0.ProductJsonV310 family String
+field code.api.v3_1_0.ProductJsonV310 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v3_1_0.ProductJsonV310 more_info_url String
+field code.api.v3_1_0.ProductJsonV310 name String
+field code.api.v3_1_0.ProductJsonV310 parent_product_code String
+field code.api.v3_1_0.ProductJsonV310 product_attributes Option[List[code.api.v3_1_0.ProductAttributeResponseWithoutBankIdJson]]
+field code.api.v3_1_0.ProductJsonV310 super_family String
+field code.api.v3_1_0.ProductTreeJsonV310 bank_id String
+field code.api.v3_1_0.ProductTreeJsonV310 category String
+field code.api.v3_1_0.ProductTreeJsonV310 code String
+field code.api.v3_1_0.ProductTreeJsonV310 description String
+field code.api.v3_1_0.ProductTreeJsonV310 details String
+field code.api.v3_1_0.ProductTreeJsonV310 family String
+field code.api.v3_1_0.ProductTreeJsonV310 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v3_1_0.ProductTreeJsonV310 more_info_url String
+field code.api.v3_1_0.ProductTreeJsonV310 name String
+field code.api.v3_1_0.ProductTreeJsonV310 parent_product Option[code.api.v3_1_0.ProductTreeJsonV310]
+field code.api.v3_1_0.ProductTreeJsonV310 super_family String
+field code.api.v3_1_0.ProductsJsonV310 products List[code.api.v3_1_0.ProductJsonV310]
+field code.api.v3_1_0.PutProductCollectionsV310 children_product_codes List[String]
+field code.api.v3_1_0.PutProductCollectionsV310 parent_product_code String
+field code.api.v3_1_0.PutUpdateCustomerBranchJsonV310 branch_id String
+field code.api.v3_1_0.PutUpdateCustomerCreditLimitJsonV310 credit_limit com.openbankproject.commons.model.AmountOfMoney
+field code.api.v3_1_0.PutUpdateCustomerCreditRatingAndSourceJsonV310 credit_rating String
+field code.api.v3_1_0.PutUpdateCustomerCreditRatingAndSourceJsonV310 credit_source String
+field code.api.v3_1_0.PutUpdateCustomerDataJsonV310 dependants Int
+field code.api.v3_1_0.PutUpdateCustomerDataJsonV310 employment_status String
+field code.api.v3_1_0.PutUpdateCustomerDataJsonV310 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v3_1_0.PutUpdateCustomerDataJsonV310 highest_education_attained String
+field code.api.v3_1_0.PutUpdateCustomerDataJsonV310 relationship_status String
+field code.api.v3_1_0.PutUpdateCustomerEmailJsonV310 email String
+field code.api.v3_1_0.PutUpdateCustomerIdentityJsonV310 date_of_birth java.util.Date
+field code.api.v3_1_0.PutUpdateCustomerIdentityJsonV310 legal_name String
+field code.api.v3_1_0.PutUpdateCustomerIdentityJsonV310 name_suffix String
+field code.api.v3_1_0.PutUpdateCustomerIdentityJsonV310 title String
+field code.api.v3_1_0.PutUpdateCustomerMobilePhoneNumberJsonV310 mobile_phone_number String
+field code.api.v3_1_0.PutUpdateCustomerNumberJsonV310 customer_number String
+field code.api.v3_1_0.RateLimit calls_made Option[Long]
+field code.api.v3_1_0.RateLimit reset_in_seconds Option[Long]
+field code.api.v3_1_0.RateLimitingInfoV310 enabled Boolean
+field code.api.v3_1_0.RateLimitingInfoV310 is_active Boolean
+field code.api.v3_1_0.RateLimitingInfoV310 service_available Boolean
+field code.api.v3_1_0.RateLimitingInfoV310 technology String
+field code.api.v3_1_0.RedisCallLimitJson per_day Option[code.api.v3_1_0.RateLimit]
+field code.api.v3_1_0.RedisCallLimitJson per_hour Option[code.api.v3_1_0.RateLimit]
+field code.api.v3_1_0.RedisCallLimitJson per_minute Option[code.api.v3_1_0.RateLimit]
+field code.api.v3_1_0.RedisCallLimitJson per_month Option[code.api.v3_1_0.RateLimit]
+field code.api.v3_1_0.RedisCallLimitJson per_second Option[code.api.v3_1_0.RateLimit]
+field code.api.v3_1_0.RedisCallLimitJson per_week Option[code.api.v3_1_0.RateLimit]
+field code.api.v3_1_0.RefreshUserJson duration_time String
+field code.api.v3_1_0.TaxResidenceJsonV310 tax_residence List[code.api.v3_1_0.TaxResidenceV310]
+field code.api.v3_1_0.TaxResidenceV310 domain String
+field code.api.v3_1_0.TaxResidenceV310 tax_number String
+field code.api.v3_1_0.TaxResidenceV310 tax_residence_id String
+field code.api.v3_1_0.TopApiJson Implemented_by_partial_function String
+field code.api.v3_1_0.TopApiJson count Int
+field code.api.v3_1_0.TopApiJson implemented_in_version String
+field code.api.v3_1_0.TopApisJson top_apis List[code.api.v3_1_0.TopApiJson]
+field code.api.v3_1_0.TopConsumerJson app_name String
+field code.api.v3_1_0.TopConsumerJson consumer_id String
+field code.api.v3_1_0.TopConsumerJson count Int
+field code.api.v3_1_0.TopConsumerJson developer_email String
+field code.api.v3_1_0.TopConsumersJson top_consumers List[code.api.v3_1_0.TopConsumerJson]
+field code.api.v3_1_0.UpdateAccountRequestJsonV310 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_1_0.UpdateAccountRequestJsonV310 branch_id String
+field code.api.v3_1_0.UpdateAccountRequestJsonV310 label String
+field code.api.v3_1_0.UpdateAccountRequestJsonV310 type String
+field code.api.v3_1_0.UpdateAccountResponseJsonV310 account_id String
+field code.api.v3_1_0.UpdateAccountResponseJsonV310 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v3_1_0.UpdateAccountResponseJsonV310 bank_id String
+field code.api.v3_1_0.UpdateAccountResponseJsonV310 branch_id String
+field code.api.v3_1_0.UpdateAccountResponseJsonV310 label String
+field code.api.v3_1_0.UpdateAccountResponseJsonV310 type String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 account_id String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 allows List[String]
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 card_type String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 collected java.util.Date
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 customer_id String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 enabled Boolean
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 expires_date java.util.Date
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 issue_number String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 name_on_card String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 networks List[String]
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 posted java.util.Date
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 replacement code.api.v1_3_0.ReplacementJSON
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 serial_number String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 technology String
+field code.api.v3_1_0.UpdatePhysicalCardJsonV310 valid_from_date java.util.Date
+field code.api.v3_1_0.UserAuthContextJson key String
+field code.api.v3_1_0.UserAuthContextJson time_stamp java.util.Date
+field code.api.v3_1_0.UserAuthContextJson user_auth_context_id String
+field code.api.v3_1_0.UserAuthContextJson user_id String
+field code.api.v3_1_0.UserAuthContextJson value String
+field code.api.v3_1_0.UserAuthContextUpdateJson key String
+field code.api.v3_1_0.UserAuthContextUpdateJson status String
+field code.api.v3_1_0.UserAuthContextUpdateJson user_auth_context_update_id String
+field code.api.v3_1_0.UserAuthContextUpdateJson user_id String
+field code.api.v3_1_0.UserAuthContextUpdateJson value String
+field code.api.v3_1_0.UserAuthContextsJson user_auth_contexts List[code.api.v3_1_0.UserAuthContextJson]
+field code.api.v4_0_0.APIInfoJson400 connector String
+field code.api.v4_0_0.APIInfoJson400 energy_source code.api.v4_0_0.EnergySource400
+field code.api.v4_0_0.APIInfoJson400 git_commit String
+field code.api.v4_0_0.APIInfoJson400 hosted_at code.api.v4_0_0.HostedAt400
+field code.api.v4_0_0.APIInfoJson400 hosted_by code.api.v4_0_0.HostedBy400
+field code.api.v4_0_0.APIInfoJson400 hostname String
+field code.api.v4_0_0.APIInfoJson400 local_identity_provider String
+field code.api.v4_0_0.APIInfoJson400 resource_docs_requires_role Boolean
+field code.api.v4_0_0.APIInfoJson400 version String
+field code.api.v4_0_0.APIInfoJson400 version_status String
+field code.api.v4_0_0.AccessibilityFeaturesJson accessibility_features List[String]
+field code.api.v4_0_0.AccountBalanceJsonV400 account_id String
+field code.api.v4_0_0.AccountBalanceJsonV400 account_routings List[com.openbankproject.commons.model.AccountRouting]
+field code.api.v4_0_0.AccountBalanceJsonV400 balances List[code.api.v4_0_0.BalanceJsonV400]
+field code.api.v4_0_0.AccountBalanceJsonV400 bank_id String
+field code.api.v4_0_0.AccountBalanceJsonV400 label String
+field code.api.v4_0_0.AccountMinimalJson400 account_id String
+field code.api.v4_0_0.AccountMinimalJson400 bank_id String
+field code.api.v4_0_0.AccountMinimalJson400 view_id String
+field code.api.v4_0_0.AccountNotificationWebhookPostJson http_method String
+field code.api.v4_0_0.AccountNotificationWebhookPostJson http_protocol String
+field code.api.v4_0_0.AccountNotificationWebhookPostJson url String
+field code.api.v4_0_0.AccountTagJSON date java.util.Date
+field code.api.v4_0_0.AccountTagJSON id String
+field code.api.v4_0_0.AccountTagJSON user code.api.v1_2_1.UserJSONV121
+field code.api.v4_0_0.AccountTagJSON value String
+field code.api.v4_0_0.AccountTagsJSON tags List[code.api.v4_0_0.AccountTagJSON]
+field code.api.v4_0_0.AccountsBalancesJsonV400 accounts List[code.api.v4_0_0.AccountBalanceJsonV400]
+field code.api.v4_0_0.AccountsMinimalJson400 accounts List[code.api.v4_0_0.AccountMinimalJson400]
+field code.api.v4_0_0.AgentCashWithdrawalJson agent_number String
+field code.api.v4_0_0.AgentCashWithdrawalJson bank_id String
+field code.api.v4_0_0.ApiCollectionEndpointJson400 api_collection_endpoint_id String
+field code.api.v4_0_0.ApiCollectionEndpointJson400 api_collection_id String
+field code.api.v4_0_0.ApiCollectionEndpointJson400 operation_id String
+field code.api.v4_0_0.ApiCollectionEndpointsJson400 api_collection_endpoints List[code.api.v4_0_0.ApiCollectionEndpointJson400]
+field code.api.v4_0_0.ApiCollectionJson400 api_collection_id String
+field code.api.v4_0_0.ApiCollectionJson400 api_collection_name String
+field code.api.v4_0_0.ApiCollectionJson400 description String
+field code.api.v4_0_0.ApiCollectionJson400 is_sharable Boolean
+field code.api.v4_0_0.ApiCollectionJson400 user_id String
+field code.api.v4_0_0.ApiCollectionsJson400 api_collections List[code.api.v4_0_0.ApiCollectionJson400]
+field code.api.v4_0_0.AtmAccessibilityFeaturesJson accessibility_features List[String]
+field code.api.v4_0_0.AtmAccessibilityFeaturesJson atm_id String
+field code.api.v4_0_0.AtmJsonV400 accessibility_features List[String]
+field code.api.v4_0_0.AtmJsonV400 address code.api.v3_0_0.AddressJsonV300
+field code.api.v4_0_0.AtmJsonV400 balance_inquiry_fee String
+field code.api.v4_0_0.AtmJsonV400 bank_id String
+field code.api.v4_0_0.AtmJsonV400 branch_identification String
+field code.api.v4_0_0.AtmJsonV400 cash_withdrawal_international_fee String
+field code.api.v4_0_0.AtmJsonV400 cash_withdrawal_national_fee String
+field code.api.v4_0_0.AtmJsonV400 friday code.api.v3_0_0.OpeningTimesV300
+field code.api.v4_0_0.AtmJsonV400 has_deposit_capability String
+field code.api.v4_0_0.AtmJsonV400 id Option[String]
+field code.api.v4_0_0.AtmJsonV400 is_accessible String
+field code.api.v4_0_0.AtmJsonV400 located_at String
+field code.api.v4_0_0.AtmJsonV400 location code.api.v1_4_0.JSONFactory1_4_0.LocationJsonV140
+field code.api.v4_0_0.AtmJsonV400 location_categories List[String]
+field code.api.v4_0_0.AtmJsonV400 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v4_0_0.AtmJsonV400 minimum_withdrawal String
+field code.api.v4_0_0.AtmJsonV400 monday code.api.v3_0_0.OpeningTimesV300
+field code.api.v4_0_0.AtmJsonV400 more_info String
+field code.api.v4_0_0.AtmJsonV400 name String
+field code.api.v4_0_0.AtmJsonV400 notes List[String]
+field code.api.v4_0_0.AtmJsonV400 saturday code.api.v3_0_0.OpeningTimesV300
+field code.api.v4_0_0.AtmJsonV400 services List[String]
+field code.api.v4_0_0.AtmJsonV400 site_identification String
+field code.api.v4_0_0.AtmJsonV400 site_name String
+field code.api.v4_0_0.AtmJsonV400 sunday code.api.v3_0_0.OpeningTimesV300
+field code.api.v4_0_0.AtmJsonV400 supported_currencies List[String]
+field code.api.v4_0_0.AtmJsonV400 supported_languages List[String]
+field code.api.v4_0_0.AtmJsonV400 thursday code.api.v3_0_0.OpeningTimesV300
+field code.api.v4_0_0.AtmJsonV400 tuesday code.api.v3_0_0.OpeningTimesV300
+field code.api.v4_0_0.AtmJsonV400 wednesday code.api.v3_0_0.OpeningTimesV300
+field code.api.v4_0_0.AtmLocationCategoriesJsonV400 location_categories List[String]
+field code.api.v4_0_0.AtmLocationCategoriesResponseJsonV400 atm_id String
+field code.api.v4_0_0.AtmLocationCategoriesResponseJsonV400 location_categories List[String]
+field code.api.v4_0_0.AtmNotesJsonV400 notes List[String]
+field code.api.v4_0_0.AtmNotesResponseJsonV400 atm_id String
+field code.api.v4_0_0.AtmNotesResponseJsonV400 notes List[String]
+field code.api.v4_0_0.AtmServicesJsonV400 services List[String]
+field code.api.v4_0_0.AtmServicesResponseJsonV400 atm_id String
+field code.api.v4_0_0.AtmServicesResponseJsonV400 services List[String]
+field code.api.v4_0_0.AtmSupportedCurrenciesJson atm_id String
+field code.api.v4_0_0.AtmSupportedCurrenciesJson supported_currencies List[String]
+field code.api.v4_0_0.AtmSupportedLanguagesJson atm_id String
+field code.api.v4_0_0.AtmSupportedLanguagesJson supported_languages List[String]
+field code.api.v4_0_0.AtmsJsonV400 atms List[code.api.v4_0_0.AtmJsonV400]
+field code.api.v4_0_0.AttributeDefinitionJsonV400 alias String
+field code.api.v4_0_0.AttributeDefinitionJsonV400 can_be_seen_on_views List[String]
+field code.api.v4_0_0.AttributeDefinitionJsonV400 category String
+field code.api.v4_0_0.AttributeDefinitionJsonV400 description String
+field code.api.v4_0_0.AttributeDefinitionJsonV400 is_active Boolean
+field code.api.v4_0_0.AttributeDefinitionJsonV400 name String
+field code.api.v4_0_0.AttributeDefinitionJsonV400 type String
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 alias String
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 attribute_definition_id String
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 bank_id String
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 can_be_seen_on_views List[String]
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 category String
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 description String
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 is_active Boolean
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 name String
+field code.api.v4_0_0.AttributeDefinitionResponseJsonV400 type String
+field code.api.v4_0_0.AttributeDefinitionsResponseJsonV400 attributes List[code.api.v4_0_0.AttributeDefinitionResponseJsonV400]
+field code.api.v4_0_0.AttributeJsonV400 name String
+field code.api.v4_0_0.AttributeJsonV400 value String
+field code.api.v4_0_0.BalanceJsonV400 amount String
+field code.api.v4_0_0.BalanceJsonV400 currency String
+field code.api.v4_0_0.BalanceJsonV400 type String
+field code.api.v4_0_0.BankAccountNotificationWebhookJson bank_id String
+field code.api.v4_0_0.BankAccountNotificationWebhookJson created_by_user_id String
+field code.api.v4_0_0.BankAccountNotificationWebhookJson http_method String
+field code.api.v4_0_0.BankAccountNotificationWebhookJson http_protocol String
+field code.api.v4_0_0.BankAccountNotificationWebhookJson trigger_name String
+field code.api.v4_0_0.BankAccountNotificationWebhookJson url String
+field code.api.v4_0_0.BankAccountNotificationWebhookJson webhook_id String
+field code.api.v4_0_0.BankAccountRoutingJson account_routing com.openbankproject.commons.model.AccountRoutingJsonV121
+field code.api.v4_0_0.BankAccountRoutingJson bank_id Option[String]
+field code.api.v4_0_0.BankAttributeBankResponseJsonV400 name String
+field code.api.v4_0_0.BankAttributeBankResponseJsonV400 value String
+field code.api.v4_0_0.BankAttributeJsonV400 is_active Option[Boolean]
+field code.api.v4_0_0.BankAttributeJsonV400 name String
+field code.api.v4_0_0.BankAttributeJsonV400 type String
+field code.api.v4_0_0.BankAttributeJsonV400 value String
+field code.api.v4_0_0.BankAttributeResponseJsonV400 bank_attribute_id String
+field code.api.v4_0_0.BankAttributeResponseJsonV400 bank_id String
+field code.api.v4_0_0.BankAttributeResponseJsonV400 is_active Option[Boolean]
+field code.api.v4_0_0.BankAttributeResponseJsonV400 name String
+field code.api.v4_0_0.BankAttributeResponseJsonV400 type String
+field code.api.v4_0_0.BankAttributeResponseJsonV400 value String
+field code.api.v4_0_0.BankAttributesResponseJsonV400 bank_attributes List[code.api.v4_0_0.BankAttributeResponseJsonV400]
+field code.api.v4_0_0.BankJson400 attributes Option[List[code.api.v4_0_0.BankAttributeBankResponseJsonV400]]
+field code.api.v4_0_0.BankJson400 bank_routings List[code.api.v1_2_1.BankRoutingJsonV121]
+field code.api.v4_0_0.BankJson400 full_name String
+field code.api.v4_0_0.BankJson400 id String
+field code.api.v4_0_0.BankJson400 logo String
+field code.api.v4_0_0.BankJson400 short_name String
+field code.api.v4_0_0.BankJson400 website String
+field code.api.v4_0_0.BankLevelEndpointTagResponseJson400 bank_id String
+field code.api.v4_0_0.BankLevelEndpointTagResponseJson400 endpoint_tag_id String
+field code.api.v4_0_0.BankLevelEndpointTagResponseJson400 operation_id String
+field code.api.v4_0_0.BankLevelEndpointTagResponseJson400 tag_name String
+field code.api.v4_0_0.BanksJson400 banks List[code.api.v4_0_0.BankJson400]
+field code.api.v4_0_0.CallLimitPostJsonV400 api_name Option[String]
+field code.api.v4_0_0.CallLimitPostJsonV400 api_version Option[String]
+field code.api.v4_0_0.CallLimitPostJsonV400 bank_id Option[String]
+field code.api.v4_0_0.CallLimitPostJsonV400 from_date java.util.Date
+field code.api.v4_0_0.CallLimitPostJsonV400 per_day_call_limit String
+field code.api.v4_0_0.CallLimitPostJsonV400 per_hour_call_limit String
+field code.api.v4_0_0.CallLimitPostJsonV400 per_minute_call_limit String
+field code.api.v4_0_0.CallLimitPostJsonV400 per_month_call_limit String
+field code.api.v4_0_0.CallLimitPostJsonV400 per_second_call_limit String
+field code.api.v4_0_0.CallLimitPostJsonV400 per_week_call_limit String
+field code.api.v4_0_0.CallLimitPostJsonV400 to_date java.util.Date
+field code.api.v4_0_0.CardJsonV400 brand String
+field code.api.v4_0_0.CardJsonV400 card_number String
+field code.api.v4_0_0.CardJsonV400 card_type String
+field code.api.v4_0_0.CardJsonV400 cvv String
+field code.api.v4_0_0.CardJsonV400 expiry_month String
+field code.api.v4_0_0.CardJsonV400 expiry_year String
+field code.api.v4_0_0.CardJsonV400 name_on_card String
+field code.api.v4_0_0.ChallengeAnswerJson400 additional_information Option[String]
+field code.api.v4_0_0.ChallengeAnswerJson400 answer String
+field code.api.v4_0_0.ChallengeAnswerJson400 id String
+field code.api.v4_0_0.ChallengeAnswerJson400 reason_code Option[String]
+field code.api.v4_0_0.ChallengeJsonV400 allowed_attempts Int
+field code.api.v4_0_0.ChallengeJsonV400 challenge_type String
+field code.api.v4_0_0.ChallengeJsonV400 id String
+field code.api.v4_0_0.ChallengeJsonV400 link String
+field code.api.v4_0_0.ChallengeJsonV400 user_id String
+field code.api.v4_0_0.ConsentInfoJsonV400 api_standard String
+field code.api.v4_0_0.ConsentInfoJsonV400 api_version String
+field code.api.v4_0_0.ConsentInfoJsonV400 consent_id String
+field code.api.v4_0_0.ConsentInfoJsonV400 consumer_id String
+field code.api.v4_0_0.ConsentInfoJsonV400 created_by_user_id String
+field code.api.v4_0_0.ConsentInfoJsonV400 last_action_date String
+field code.api.v4_0_0.ConsentInfoJsonV400 last_usage_date String
+field code.api.v4_0_0.ConsentInfoJsonV400 status String
+field code.api.v4_0_0.ConsentInfosJsonV400 consents List[code.api.v4_0_0.ConsentInfoJsonV400]
+field code.api.v4_0_0.ConsentJsonV400 api_standard String
+field code.api.v4_0_0.ConsentJsonV400 api_version String
+field code.api.v4_0_0.ConsentJsonV400 consent_id String
+field code.api.v4_0_0.ConsentJsonV400 jwt String
+field code.api.v4_0_0.ConsentJsonV400 status String
+field code.api.v4_0_0.ConsentsJsonV400 consents List[code.api.v4_0_0.ConsentJsonV400]
+field code.api.v4_0_0.ConsumerJson app_name String
+field code.api.v4_0_0.ConsumerJson app_type String
+field code.api.v4_0_0.ConsumerJson client_certificate String
+field code.api.v4_0_0.ConsumerJson consumer_id String
+field code.api.v4_0_0.ConsumerJson created java.util.Date
+field code.api.v4_0_0.ConsumerJson created_by_user code.api.v2_1_0.ResourceUserJSON
+field code.api.v4_0_0.ConsumerJson created_by_user_id String
+field code.api.v4_0_0.ConsumerJson description String
+field code.api.v4_0_0.ConsumerJson developer_email String
+field code.api.v4_0_0.ConsumerJson enabled Boolean
+field code.api.v4_0_0.ConsumerJson key String
+field code.api.v4_0_0.ConsumerJson redirect_url String
+field code.api.v4_0_0.ConsumerJson secret String
+field code.api.v4_0_0.CorrelatedEntities correlated_entities List[code.api.v4_0_0.CustomerAndUsersWithAttributesResponseJson]
+field code.api.v4_0_0.CounterpartiesJson400 counterparties List[code.api.v4_0_0.CounterpartyJson400]
+field code.api.v4_0_0.CounterpartyJson400 bespoke List[code.api.v2_1_0.PostCounterpartyBespokeJson]
+field code.api.v4_0_0.CounterpartyJson400 counterparty_id String
+field code.api.v4_0_0.CounterpartyJson400 created_by_user_id String
+field code.api.v4_0_0.CounterpartyJson400 currency String
+field code.api.v4_0_0.CounterpartyJson400 description String
+field code.api.v4_0_0.CounterpartyJson400 is_beneficiary Boolean
+field code.api.v4_0_0.CounterpartyJson400 name String
+field code.api.v4_0_0.CounterpartyJson400 other_account_routing_address String
+field code.api.v4_0_0.CounterpartyJson400 other_account_routing_scheme String
+field code.api.v4_0_0.CounterpartyJson400 other_account_secondary_routing_address String
+field code.api.v4_0_0.CounterpartyJson400 other_account_secondary_routing_scheme String
+field code.api.v4_0_0.CounterpartyJson400 other_bank_routing_address String
+field code.api.v4_0_0.CounterpartyJson400 other_bank_routing_scheme String
+field code.api.v4_0_0.CounterpartyJson400 other_branch_routing_address String
+field code.api.v4_0_0.CounterpartyJson400 other_branch_routing_scheme String
+field code.api.v4_0_0.CounterpartyJson400 this_account_id String
+field code.api.v4_0_0.CounterpartyJson400 this_bank_id String
+field code.api.v4_0_0.CounterpartyJson400 this_view_id String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 bespoke List[code.api.v2_1_0.PostCounterpartyBespokeJson]
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 counterparty_id String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 created_by_user_id String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 currency String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 description String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 is_beneficiary Boolean
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 metadata code.api.v2_2_0.CounterpartyMetadataJson
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 name String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_account_routing_address String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_account_routing_scheme String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_account_secondary_routing_address String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_account_secondary_routing_scheme String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_bank_routing_address String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_bank_routing_scheme String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_branch_routing_address String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 other_branch_routing_scheme String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 this_account_id String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 this_bank_id String
+field code.api.v4_0_0.CounterpartyWithMetadataJson400 this_view_id String
+field code.api.v4_0_0.CreateMessageJsonV400 from_department String
+field code.api.v4_0_0.CreateMessageJsonV400 from_person String
+field code.api.v4_0_0.CreateMessageJsonV400 message String
+field code.api.v4_0_0.CreateMessageJsonV400 transport String
+field code.api.v4_0_0.CustomerAndUsersWithAttributesResponseJson customer code.api.v3_1_0.CustomerJsonV310
+field code.api.v4_0_0.CustomerAndUsersWithAttributesResponseJson users List[code.api.v4_0_0.UserWithAttributesResponseJson]
+field code.api.v4_0_0.CustomerAttributeJsonV400 name String
+field code.api.v4_0_0.CustomerAttributeJsonV400 type String
+field code.api.v4_0_0.CustomerAttributeJsonV400 value String
+field code.api.v4_0_0.CustomerAttributesResponseJson customer_attributes List[code.api.v3_0_0.CustomerAttributeResponseJsonV300]
+field code.api.v4_0_0.CustomerMessageJsonV400 date java.util.Date
+field code.api.v4_0_0.CustomerMessageJsonV400 from_department String
+field code.api.v4_0_0.CustomerMessageJsonV400 from_person String
+field code.api.v4_0_0.CustomerMessageJsonV400 id String
+field code.api.v4_0_0.CustomerMessageJsonV400 message String
+field code.api.v4_0_0.CustomerMessageJsonV400 transport String
+field code.api.v4_0_0.CustomerMessagesJsonV400 messages List[code.api.v4_0_0.CustomerMessageJsonV400]
+field code.api.v4_0_0.CustomerMinimalJsonV400 bank_id String
+field code.api.v4_0_0.CustomerMinimalJsonV400 customer_id String
+field code.api.v4_0_0.CustomersMinimalJsonV400 customers List[code.api.v4_0_0.CustomerMinimalJsonV400]
+field code.api.v4_0_0.DirectDebitJsonV400 account_id String
+field code.api.v4_0_0.DirectDebitJsonV400 active Boolean
+field code.api.v4_0_0.DirectDebitJsonV400 bank_id String
+field code.api.v4_0_0.DirectDebitJsonV400 counterparty_id String
+field code.api.v4_0_0.DirectDebitJsonV400 customer_id String
+field code.api.v4_0_0.DirectDebitJsonV400 date_cancelled java.util.Date
+field code.api.v4_0_0.DirectDebitJsonV400 date_expires java.util.Date
+field code.api.v4_0_0.DirectDebitJsonV400 date_signed java.util.Date
+field code.api.v4_0_0.DirectDebitJsonV400 date_starts java.util.Date
+field code.api.v4_0_0.DirectDebitJsonV400 direct_debit_id String
+field code.api.v4_0_0.DirectDebitJsonV400 user_id String
+field code.api.v4_0_0.DoubleEntryTransactionJson credit_transaction code.api.v4_0_0.TransactionBankAccountJson
+field code.api.v4_0_0.DoubleEntryTransactionJson debit_transaction code.api.v4_0_0.TransactionBankAccountJson
+field code.api.v4_0_0.DoubleEntryTransactionJson transaction_request code.api.v4_0_0.TransactionRequestBankAccountJson
+field code.api.v4_0_0.DynamicEndpointHostJson400 host String
+field code.api.v4_0_0.EndpointTagJson400 tag_name String
+field code.api.v4_0_0.EnergySource400 organisation String
+field code.api.v4_0_0.EnergySource400 organisation_website String
+field code.api.v4_0_0.EntitlementJsonV400 bank_id String
+field code.api.v4_0_0.EntitlementJsonV400 entitlement_id String
+field code.api.v4_0_0.EntitlementJsonV400 role_name String
+field code.api.v4_0_0.EntitlementJsonV400 user_id String
+field code.api.v4_0_0.EntitlementsJsonV400 list List[code.api.v4_0_0.EntitlementJsonV400]
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 account_attributes List[com.openbankproject.commons.model.FastFirehoseAttributes]
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 account_routings List[com.openbankproject.commons.model.FastFirehoseRoutings]
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 bank_id String
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 id String
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 label String
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 number String
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 owners List[com.openbankproject.commons.model.FastFirehoseOwners]
+field code.api.v4_0_0.FastFirehoseAccountJsonV400 product_code String
+field code.api.v4_0_0.FastFirehoseAccountsJsonV400 accounts List[code.api.v4_0_0.FastFirehoseAccountJsonV400]
+field code.api.v4_0_0.HostedAt400 organisation String
+field code.api.v4_0_0.HostedAt400 organisation_website String
+field code.api.v4_0_0.HostedBy400 email String
+field code.api.v4_0_0.HostedBy400 organisation String
+field code.api.v4_0_0.HostedBy400 organisation_website String
+field code.api.v4_0_0.HostedBy400 phone String
+field code.api.v4_0_0.IbanCheckerJsonV400 details Option[code.api.v4_0_0.IbanDetailsJsonV400]
+field code.api.v4_0_0.IbanCheckerJsonV400 is_valid Boolean
+field code.api.v4_0_0.IbanDetailsJsonV400 address String
+field code.api.v4_0_0.IbanDetailsJsonV400 attributes List[code.api.v4_0_0.AttributeJsonV400]
+field code.api.v4_0_0.IbanDetailsJsonV400 bank String
+field code.api.v4_0_0.IbanDetailsJsonV400 bank_routings List[code.api.v1_2_1.BankRoutingJsonV121]
+field code.api.v4_0_0.IbanDetailsJsonV400 branch String
+field code.api.v4_0_0.IbanDetailsJsonV400 city String
+field code.api.v4_0_0.IbanDetailsJsonV400 country String
+field code.api.v4_0_0.IbanDetailsJsonV400 phone String
+field code.api.v4_0_0.IbanDetailsJsonV400 postcode String
+field code.api.v4_0_0.JsonCodeTemplateJson code String
+field code.api.v4_0_0.JsonSchemaV400 $schema String
+field code.api.v4_0_0.JsonSchemaV400 additionalProperties Boolean
+field code.api.v4_0_0.JsonSchemaV400 description String
+field code.api.v4_0_0.JsonSchemaV400 properties code.api.v4_0_0.Properties
+field code.api.v4_0_0.JsonSchemaV400 required List[String]
+field code.api.v4_0_0.JsonSchemaV400 title String
+field code.api.v4_0_0.JsonSchemaV400 type String
+field code.api.v4_0_0.JsonValidationV400 json_schema code.api.v4_0_0.JsonSchemaV400
+field code.api.v4_0_0.JsonValidationV400 operation_id String
+field code.api.v4_0_0.LogoutLinkJson link String
+field code.api.v4_0_0.ModeratedAccountJSON400 account_attributes List[code.api.v3_1_0.AccountAttributeResponseJson]
+field code.api.v4_0_0.ModeratedAccountJSON400 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v4_0_0.ModeratedAccountJSON400 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.ModeratedAccountJSON400 bank_id String
+field code.api.v4_0_0.ModeratedAccountJSON400 id String
+field code.api.v4_0_0.ModeratedAccountJSON400 label String
+field code.api.v4_0_0.ModeratedAccountJSON400 number String
+field code.api.v4_0_0.ModeratedAccountJSON400 owners List[code.api.v1_2_1.UserJSONV121]
+field code.api.v4_0_0.ModeratedAccountJSON400 product_code String
+field code.api.v4_0_0.ModeratedAccountJSON400 tags List[code.api.v4_0_0.AccountTagJSON]
+field code.api.v4_0_0.ModeratedAccountJSON400 views_available List[code.api.v1_2_1.ViewJSONV121]
+field code.api.v4_0_0.ModeratedAccountsJSON400 accounts List[code.api.v4_0_0.ModeratedAccountJSON400]
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 bank_id String
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 id String
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 label String
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 number String
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 product_code String
+field code.api.v4_0_0.ModeratedCoreAccountJsonV400 views_basic List[String]
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 account_attributes Option[List[code.api.v3_1_0.AccountAttributeResponseJson]]
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 account_rules List[code.api.v3_0_0.AccountRuleJsonV300]
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 bank_id String
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 id String
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 label String
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 number String
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 owners List[code.api.v1_2_1.UserJSONV121]
+field code.api.v4_0_0.ModeratedFirehoseAccountJsonV400 product_code String
+field code.api.v4_0_0.ModeratedFirehoseAccountsJsonV400 accounts List[code.api.v4_0_0.ModeratedFirehoseAccountJsonV400]
+field code.api.v4_0_0.MySpaces bank_ids List[String]
+field code.api.v4_0_0.PostAccountAccessJsonV400 user_id String
+field code.api.v4_0_0.PostAccountAccessJsonV400 view code.api.v4_0_0.PostViewJsonV400
+field code.api.v4_0_0.PostAccountTagJSON value String
+field code.api.v4_0_0.PostApiCollectionEndpointJson400 operation_id String
+field code.api.v4_0_0.PostApiCollectionJson400 api_collection_name String
+field code.api.v4_0_0.PostApiCollectionJson400 description Option[String]
+field code.api.v4_0_0.PostApiCollectionJson400 is_sharable Boolean
+field code.api.v4_0_0.PostBankJson400 bank_routings List[code.api.v1_2_1.BankRoutingJsonV121]
+field code.api.v4_0_0.PostBankJson400 full_name String
+field code.api.v4_0_0.PostBankJson400 id String
+field code.api.v4_0_0.PostBankJson400 logo String
+field code.api.v4_0_0.PostBankJson400 short_name String
+field code.api.v4_0_0.PostBankJson400 website String
+field code.api.v4_0_0.PostCounterpartyJson400 bespoke List[code.api.v2_1_0.PostCounterpartyBespokeJson]
+field code.api.v4_0_0.PostCounterpartyJson400 currency String
+field code.api.v4_0_0.PostCounterpartyJson400 description String
+field code.api.v4_0_0.PostCounterpartyJson400 is_beneficiary Boolean
+field code.api.v4_0_0.PostCounterpartyJson400 name String
+field code.api.v4_0_0.PostCounterpartyJson400 other_account_routing_address String
+field code.api.v4_0_0.PostCounterpartyJson400 other_account_routing_scheme String
+field code.api.v4_0_0.PostCounterpartyJson400 other_account_secondary_routing_address String
+field code.api.v4_0_0.PostCounterpartyJson400 other_account_secondary_routing_scheme String
+field code.api.v4_0_0.PostCounterpartyJson400 other_bank_routing_address String
+field code.api.v4_0_0.PostCounterpartyJson400 other_bank_routing_scheme String
+field code.api.v4_0_0.PostCounterpartyJson400 other_branch_routing_address String
+field code.api.v4_0_0.PostCounterpartyJson400 other_branch_routing_scheme String
+field code.api.v4_0_0.PostCreateUserAccountAccessJsonV400 provider String
+field code.api.v4_0_0.PostCreateUserAccountAccessJsonV400 username String
+field code.api.v4_0_0.PostCreateUserAccountAccessJsonV400 views List[code.api.v4_0_0.PostViewJsonV400]
+field code.api.v4_0_0.PostCreateUserWithRolesJsonV400 provider String
+field code.api.v4_0_0.PostCreateUserWithRolesJsonV400 roles List[code.api.v2_0_0.CreateEntitlementJSON]
+field code.api.v4_0_0.PostCreateUserWithRolesJsonV400 username String
+field code.api.v4_0_0.PostCustomerPhoneNumberJsonV400 mobile_phone_number String
+field code.api.v4_0_0.PostDirectDebitJsonV400 counterparty_id String
+field code.api.v4_0_0.PostDirectDebitJsonV400 customer_id String
+field code.api.v4_0_0.PostDirectDebitJsonV400 date_expires Option[java.util.Date]
+field code.api.v4_0_0.PostDirectDebitJsonV400 date_signed Option[java.util.Date]
+field code.api.v4_0_0.PostDirectDebitJsonV400 date_starts java.util.Date
+field code.api.v4_0_0.PostDirectDebitJsonV400 user_id String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson charge_policy String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson completed String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson description String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson from_account_id String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson posted String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson to_account_id String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson type String
+field code.api.v4_0_0.PostHistoricalTransactionAtBankJson value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.PostResetPasswordUrlJsonV400 email String
+field code.api.v4_0_0.PostResetPasswordUrlJsonV400 user_id String
+field code.api.v4_0_0.PostResetPasswordUrlJsonV400 username String
+field code.api.v4_0_0.PostRevokeGrantAccountAccessJsonV400 views List[String]
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 description String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 name String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_account_routing_address String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_account_routing_scheme String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_account_secondary_routing_address String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_account_secondary_routing_scheme String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_bank_routing_address String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_bank_routing_scheme String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_branch_routing_address String
+field code.api.v4_0_0.PostSimpleCounterpartyJson400 other_branch_routing_scheme String
+field code.api.v4_0_0.PostStandingOrderJsonV400 amount com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.PostStandingOrderJsonV400 counterparty_id String
+field code.api.v4_0_0.PostStandingOrderJsonV400 customer_id String
+field code.api.v4_0_0.PostStandingOrderJsonV400 date_expires Option[java.util.Date]
+field code.api.v4_0_0.PostStandingOrderJsonV400 date_signed Option[java.util.Date]
+field code.api.v4_0_0.PostStandingOrderJsonV400 date_starts java.util.Date
+field code.api.v4_0_0.PostStandingOrderJsonV400 user_id String
+field code.api.v4_0_0.PostStandingOrderJsonV400 when code.api.v4_0_0.When
+field code.api.v4_0_0.PostUserInvitationAnonymousJsonV400 secret_key Long
+field code.api.v4_0_0.PostUserInvitationJsonV400 company String
+field code.api.v4_0_0.PostUserInvitationJsonV400 country String
+field code.api.v4_0_0.PostUserInvitationJsonV400 email String
+field code.api.v4_0_0.PostUserInvitationJsonV400 first_name String
+field code.api.v4_0_0.PostUserInvitationJsonV400 last_name String
+field code.api.v4_0_0.PostUserInvitationJsonV400 purpose String
+field code.api.v4_0_0.PostViewJsonV400 is_system Boolean
+field code.api.v4_0_0.PostViewJsonV400 view_id String
+field code.api.v4_0_0.ProductAttributeJsonV400 is_active Option[Boolean]
+field code.api.v4_0_0.ProductAttributeJsonV400 name String
+field code.api.v4_0_0.ProductAttributeJsonV400 type String
+field code.api.v4_0_0.ProductAttributeJsonV400 value String
+field code.api.v4_0_0.ProductAttributeResponseJsonV400 bank_id String
+field code.api.v4_0_0.ProductAttributeResponseJsonV400 is_active Option[Boolean]
+field code.api.v4_0_0.ProductAttributeResponseJsonV400 name String
+field code.api.v4_0_0.ProductAttributeResponseJsonV400 product_attribute_id String
+field code.api.v4_0_0.ProductAttributeResponseJsonV400 product_code String
+field code.api.v4_0_0.ProductAttributeResponseJsonV400 type String
+field code.api.v4_0_0.ProductAttributeResponseJsonV400 value String
+field code.api.v4_0_0.ProductFeeJsonV400 is_active Boolean
+field code.api.v4_0_0.ProductFeeJsonV400 more_info String
+field code.api.v4_0_0.ProductFeeJsonV400 name String
+field code.api.v4_0_0.ProductFeeJsonV400 product_fee_id Option[String]
+field code.api.v4_0_0.ProductFeeJsonV400 value code.api.v4_0_0.ProductFeeValueJsonV400
+field code.api.v4_0_0.ProductFeeResponseJsonV400 bank_id String
+field code.api.v4_0_0.ProductFeeResponseJsonV400 is_active Boolean
+field code.api.v4_0_0.ProductFeeResponseJsonV400 more_info String
+field code.api.v4_0_0.ProductFeeResponseJsonV400 name String
+field code.api.v4_0_0.ProductFeeResponseJsonV400 product_code String
+field code.api.v4_0_0.ProductFeeResponseJsonV400 product_fee_id String
+field code.api.v4_0_0.ProductFeeResponseJsonV400 value code.api.v4_0_0.ProductFeeValueJsonV400
+field code.api.v4_0_0.ProductFeeValueJsonV400 amount BigDecimal
+field code.api.v4_0_0.ProductFeeValueJsonV400 currency String
+field code.api.v4_0_0.ProductFeeValueJsonV400 frequency String
+field code.api.v4_0_0.ProductFeeValueJsonV400 type String
+field code.api.v4_0_0.ProductFeesResponseJsonV400 product_fees List[code.api.v4_0_0.ProductFeeResponseJsonV400]
+field code.api.v4_0_0.ProductJsonV400 attributes Option[List[code.api.v3_1_0.ProductAttributeResponseWithoutBankIdJson]]
+field code.api.v4_0_0.ProductJsonV400 bank_id String
+field code.api.v4_0_0.ProductJsonV400 description String
+field code.api.v4_0_0.ProductJsonV400 fees Option[List[code.api.v4_0_0.ProductFeeJsonV400]]
+field code.api.v4_0_0.ProductJsonV400 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v4_0_0.ProductJsonV400 more_info_url String
+field code.api.v4_0_0.ProductJsonV400 name String
+field code.api.v4_0_0.ProductJsonV400 parent_product_code String
+field code.api.v4_0_0.ProductJsonV400 product_code String
+field code.api.v4_0_0.ProductJsonV400 terms_and_conditions_url String
+field code.api.v4_0_0.ProductsJsonV400 products List[code.api.v4_0_0.ProductJsonV400]
+field code.api.v4_0_0.Properties xxx_id code.api.v4_0_0.XxxId
+field code.api.v4_0_0.PutConsentStatusJsonV400 status String
+field code.api.v4_0_0.PutConsentUserJsonV400 user_id String
+field code.api.v4_0_0.PutProductJsonV400 description String
+field code.api.v4_0_0.PutProductJsonV400 meta code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140
+field code.api.v4_0_0.PutProductJsonV400 more_info_url String
+field code.api.v4_0_0.PutProductJsonV400 name String
+field code.api.v4_0_0.PutProductJsonV400 parent_product_code String
+field code.api.v4_0_0.PutProductJsonV400 terms_and_conditions_url String
+field code.api.v4_0_0.RefundJson reason_code String
+field code.api.v4_0_0.RefundJson transaction_id String
+field code.api.v4_0_0.ResetPasswordUrlJsonV400 reset_password_url String
+field code.api.v4_0_0.ResourceDocFragment exampleRequestBody Option[org.json4s.JValue]
+field code.api.v4_0_0.ResourceDocFragment requestUrl String
+field code.api.v4_0_0.ResourceDocFragment requestVerb String
+field code.api.v4_0_0.ResourceDocFragment successResponseBody Option[org.json4s.JValue]
+field code.api.v4_0_0.RevokedJsonV400 revoked Boolean
+field code.api.v4_0_0.SettlementAccountJson account_attributes List[code.api.v3_1_0.AccountAttributeResponseJson]
+field code.api.v4_0_0.SettlementAccountJson account_id String
+field code.api.v4_0_0.SettlementAccountJson account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v4_0_0.SettlementAccountJson balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.SettlementAccountJson branch_id String
+field code.api.v4_0_0.SettlementAccountJson label String
+field code.api.v4_0_0.SettlementAccountJson payment_system String
+field code.api.v4_0_0.SettlementAccountRequestJson account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v4_0_0.SettlementAccountRequestJson balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.SettlementAccountRequestJson branch_id String
+field code.api.v4_0_0.SettlementAccountRequestJson label String
+field code.api.v4_0_0.SettlementAccountRequestJson payment_system String
+field code.api.v4_0_0.SettlementAccountRequestJson user_id String
+field code.api.v4_0_0.SettlementAccountResponseJson account_attributes List[code.api.v3_1_0.AccountAttributeResponseJson]
+field code.api.v4_0_0.SettlementAccountResponseJson account_id String
+field code.api.v4_0_0.SettlementAccountResponseJson account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v4_0_0.SettlementAccountResponseJson balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.SettlementAccountResponseJson branch_id String
+field code.api.v4_0_0.SettlementAccountResponseJson label String
+field code.api.v4_0_0.SettlementAccountResponseJson payment_system String
+field code.api.v4_0_0.SettlementAccountResponseJson user_id String
+field code.api.v4_0_0.SettlementAccountsJson settlement_accounts List[code.api.v4_0_0.SettlementAccountJson]
+field code.api.v4_0_0.StandingOrderJsonV400 account_id String
+field code.api.v4_0_0.StandingOrderJsonV400 active Boolean
+field code.api.v4_0_0.StandingOrderJsonV400 amount com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.StandingOrderJsonV400 bank_id String
+field code.api.v4_0_0.StandingOrderJsonV400 counterparty_id String
+field code.api.v4_0_0.StandingOrderJsonV400 customer_id String
+field code.api.v4_0_0.StandingOrderJsonV400 date_cancelled java.util.Date
+field code.api.v4_0_0.StandingOrderJsonV400 date_expires java.util.Date
+field code.api.v4_0_0.StandingOrderJsonV400 date_signed java.util.Date
+field code.api.v4_0_0.StandingOrderJsonV400 date_starts java.util.Date
+field code.api.v4_0_0.StandingOrderJsonV400 standing_order_id String
+field code.api.v4_0_0.StandingOrderJsonV400 user_id String
+field code.api.v4_0_0.StandingOrderJsonV400 when code.api.v4_0_0.When
+field code.api.v4_0_0.SupportedCurrenciesJson supported_currencies List[String]
+field code.api.v4_0_0.SupportedLanguagesJson supported_languages List[String]
+field code.api.v4_0_0.SystemAccountNotificationWebhookJson created_by_user_id String
+field code.api.v4_0_0.SystemAccountNotificationWebhookJson http_method String
+field code.api.v4_0_0.SystemAccountNotificationWebhookJson http_protocol String
+field code.api.v4_0_0.SystemAccountNotificationWebhookJson trigger_name String
+field code.api.v4_0_0.SystemAccountNotificationWebhookJson url String
+field code.api.v4_0_0.SystemAccountNotificationWebhookJson webhook_id String
+field code.api.v4_0_0.TransactionAttributeJsonV400 name String
+field code.api.v4_0_0.TransactionAttributeJsonV400 type String
+field code.api.v4_0_0.TransactionAttributeJsonV400 value String
+field code.api.v4_0_0.TransactionAttributeResponseJson name String
+field code.api.v4_0_0.TransactionAttributeResponseJson transaction_attribute_id String
+field code.api.v4_0_0.TransactionAttributeResponseJson type String
+field code.api.v4_0_0.TransactionAttributeResponseJson value String
+field code.api.v4_0_0.TransactionAttributesResponseJson transaction_attributes List[code.api.v4_0_0.TransactionAttributeResponseJson]
+field code.api.v4_0_0.TransactionBankAccountJson account_id String
+field code.api.v4_0_0.TransactionBankAccountJson bank_id String
+field code.api.v4_0_0.TransactionBankAccountJson transaction_id String
+field code.api.v4_0_0.TransactionRequestAttributeResponseJson name String
+field code.api.v4_0_0.TransactionRequestAttributeResponseJson transaction_request_attribute_id String
+field code.api.v4_0_0.TransactionRequestAttributeResponseJson type String
+field code.api.v4_0_0.TransactionRequestAttributeResponseJson value String
+field code.api.v4_0_0.TransactionRequestAttributesResponseJson transaction_request_attributes List[code.api.v4_0_0.TransactionRequestAttributeResponseJson]
+field code.api.v4_0_0.TransactionRequestBankAccountJson account_id String
+field code.api.v4_0_0.TransactionRequestBankAccountJson bank_id String
+field code.api.v4_0_0.TransactionRequestBankAccountJson transaction_request_id String
+field code.api.v4_0_0.TransactionRequestBodyAgentJsonV400 charge_policy String
+field code.api.v4_0_0.TransactionRequestBodyAgentJsonV400 description String
+field code.api.v4_0_0.TransactionRequestBodyAgentJsonV400 future_date Option[String]
+field code.api.v4_0_0.TransactionRequestBodyAgentJsonV400 to code.api.v4_0_0.AgentCashWithdrawalJson
+field code.api.v4_0_0.TransactionRequestBodyAgentJsonV400 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.TransactionRequestBodyCardJsonV400 card code.api.v4_0_0.CardJsonV400
+field code.api.v4_0_0.TransactionRequestBodyCardJsonV400 description String
+field code.api.v4_0_0.TransactionRequestBodyCardJsonV400 to code.api.v2_1_0.CounterpartyIdJson
+field code.api.v4_0_0.TransactionRequestBodyCardJsonV400 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.TransactionRequestBodyRefundJsonV400 description String
+field code.api.v4_0_0.TransactionRequestBodyRefundJsonV400 from Option[code.api.v4_0_0.TransactionRequestRefundFrom]
+field code.api.v4_0_0.TransactionRequestBodyRefundJsonV400 refund code.api.v4_0_0.RefundJson
+field code.api.v4_0_0.TransactionRequestBodyRefundJsonV400 to Option[code.api.v4_0_0.TransactionRequestRefundTo]
+field code.api.v4_0_0.TransactionRequestBodyRefundJsonV400 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.TransactionRequestBodySEPAJsonV400 charge_policy String
+field code.api.v4_0_0.TransactionRequestBodySEPAJsonV400 description String
+field code.api.v4_0_0.TransactionRequestBodySEPAJsonV400 future_date Option[String]
+field code.api.v4_0_0.TransactionRequestBodySEPAJsonV400 reasons Option[List[code.api.v4_0_0.TransactionRequestReasonJsonV400]]
+field code.api.v4_0_0.TransactionRequestBodySEPAJsonV400 to code.api.v2_1_0.IbanJson
+field code.api.v4_0_0.TransactionRequestBodySEPAJsonV400 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.TransactionRequestBodySimpleJsonV400 charge_policy String
+field code.api.v4_0_0.TransactionRequestBodySimpleJsonV400 description String
+field code.api.v4_0_0.TransactionRequestBodySimpleJsonV400 future_date Option[String]
+field code.api.v4_0_0.TransactionRequestBodySimpleJsonV400 to code.api.v4_0_0.PostSimpleCounterpartyJson400
+field code.api.v4_0_0.TransactionRequestBodySimpleJsonV400 value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v4_0_0.TransactionRequestReasonJsonV400 amount Option[String]
+field code.api.v4_0_0.TransactionRequestReasonJsonV400 code String
+field code.api.v4_0_0.TransactionRequestReasonJsonV400 currency Option[String]
+field code.api.v4_0_0.TransactionRequestReasonJsonV400 description Option[String]
+field code.api.v4_0_0.TransactionRequestReasonJsonV400 document_number Option[String]
+field code.api.v4_0_0.TransactionRequestRefundFrom counterparty_id String
+field code.api.v4_0_0.TransactionRequestRefundTo account_id Option[String]
+field code.api.v4_0_0.TransactionRequestRefundTo bank_id Option[String]
+field code.api.v4_0_0.TransactionRequestRefundTo counterparty_id Option[String]
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 attributes Option[List[code.api.v4_0_0.BankAttributeBankResponseJsonV400]]
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 challenges List[code.api.v4_0_0.ChallengeJsonV400]
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 charge code.api.v2_0_0.TransactionRequestChargeJsonV200
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 details com.openbankproject.commons.model.TransactionRequestBodyAllTypes
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 end_date java.util.Date
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 from code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestAccountJsonV140
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 id String
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 start_date java.util.Date
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 status String
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 transaction_ids List[String]
+field code.api.v4_0_0.TransactionRequestWithChargeJSON400 type String
+field code.api.v4_0_0.UpdateAccountJsonV400 label String
+field code.api.v4_0_0.UserAgreementJson text String
+field code.api.v4_0_0.UserAgreementJson type String
+field code.api.v4_0_0.UserAttributeJsonV400 name String
+field code.api.v4_0_0.UserAttributeJsonV400 type String
+field code.api.v4_0_0.UserAttributeJsonV400 value String
+field code.api.v4_0_0.UserAttributeResponseJsonV400 insert_date java.util.Date
+field code.api.v4_0_0.UserAttributeResponseJsonV400 name String
+field code.api.v4_0_0.UserAttributeResponseJsonV400 type String
+field code.api.v4_0_0.UserAttributeResponseJsonV400 user_attribute_id String
+field code.api.v4_0_0.UserAttributeResponseJsonV400 value String
+field code.api.v4_0_0.UserAttributesResponseJson user_attributes List[code.api.v4_0_0.UserAttributeResponseJsonV400]
+field code.api.v4_0_0.UserIdJsonV400 user_id String
+field code.api.v4_0_0.UserInvitationJsonV400 company String
+field code.api.v4_0_0.UserInvitationJsonV400 country String
+field code.api.v4_0_0.UserInvitationJsonV400 email String
+field code.api.v4_0_0.UserInvitationJsonV400 first_name String
+field code.api.v4_0_0.UserInvitationJsonV400 last_name String
+field code.api.v4_0_0.UserInvitationJsonV400 purpose String
+field code.api.v4_0_0.UserInvitationJsonV400 status String
+field code.api.v4_0_0.UserJsonV400 agreements Option[List[code.api.v4_0_0.UserAgreementJson]]
+field code.api.v4_0_0.UserJsonV400 email String
+field code.api.v4_0_0.UserJsonV400 entitlements code.api.v2_0_0.EntitlementJSONs
+field code.api.v4_0_0.UserJsonV400 is_deleted Boolean
+field code.api.v4_0_0.UserJsonV400 is_locked Boolean
+field code.api.v4_0_0.UserJsonV400 last_marketing_agreement_signed_date Option[java.util.Date]
+field code.api.v4_0_0.UserJsonV400 provider String
+field code.api.v4_0_0.UserJsonV400 provider_id String
+field code.api.v4_0_0.UserJsonV400 user_id String
+field code.api.v4_0_0.UserJsonV400 username String
+field code.api.v4_0_0.UserJsonV400 views Option[code.api.v3_0_0.ViewsJSON300]
+field code.api.v4_0_0.UserLockStatusJson last_lock_date java.util.Date
+field code.api.v4_0_0.UserLockStatusJson type_of_lock String
+field code.api.v4_0_0.UserLockStatusJson user_id String
+field code.api.v4_0_0.UserWithAttributesResponseJson email String
+field code.api.v4_0_0.UserWithAttributesResponseJson provider String
+field code.api.v4_0_0.UserWithAttributesResponseJson provider_id String
+field code.api.v4_0_0.UserWithAttributesResponseJson user_attributes List[code.api.v4_0_0.UserAttributeResponseJsonV400]
+field code.api.v4_0_0.UserWithAttributesResponseJson user_id String
+field code.api.v4_0_0.UserWithAttributesResponseJson username String
+field code.api.v4_0_0.UsersJsonV400 users List[code.api.v4_0_0.UserJsonV400]
+field code.api.v4_0_0.When detail String
+field code.api.v4_0_0.When frequency String
+field code.api.v4_0_0.XxxId examples List[String]
+field code.api.v4_0_0.XxxId maxLength Int
+field code.api.v4_0_0.XxxId minLength Int
+field code.api.v4_0_0.XxxId type String
+field code.api.v5_0_0.AccountAccessV500 account_routing com.openbankproject.commons.model.AccountRoutingJsonV121
+field code.api.v5_0_0.AccountAccessV500 view_id String
+field code.api.v5_0_0.AccountAttributeResponseJson500 account_attribute_id String
+field code.api.v5_0_0.AccountAttributeResponseJson500 contract_code Option[String]
+field code.api.v5_0_0.AccountAttributeResponseJson500 name String
+field code.api.v5_0_0.AccountAttributeResponseJson500 product_code String
+field code.api.v5_0_0.AccountAttributeResponseJson500 type String
+field code.api.v5_0_0.AccountAttributeResponseJson500 value String
+field code.api.v5_0_0.AccountResponseJson500 account_attributes List[code.api.v5_0_0.AccountAttributeResponseJson500]
+field code.api.v5_0_0.AccountResponseJson500 account_id String
+field code.api.v5_0_0.AccountResponseJson500 account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field code.api.v5_0_0.AccountResponseJson500 balance com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field code.api.v5_0_0.AccountResponseJson500 branch_id String
+field code.api.v5_0_0.AccountResponseJson500 contracts Option[List[code.api.v5_0_0.ContractJsonV500]]
+field code.api.v5_0_0.AccountResponseJson500 label String
+field code.api.v5_0_0.AccountResponseJson500 product_code String
+field code.api.v5_0_0.AdapterInfoJsonV500 backend_messages List[com.openbankproject.commons.model.InboundStatusMessage]
+field code.api.v5_0_0.AdapterInfoJsonV500 date String
+field code.api.v5_0_0.AdapterInfoJsonV500 git_commit String
+field code.api.v5_0_0.AdapterInfoJsonV500 name String
+field code.api.v5_0_0.AdapterInfoJsonV500 total_duration BigDecimal
+field code.api.v5_0_0.AdapterInfoJsonV500 version String
+field code.api.v5_0_0.BankJson500 attributes Option[List[code.api.v4_0_0.BankAttributeBankResponseJsonV400]]
+field code.api.v5_0_0.BankJson500 bank_code String
+field code.api.v5_0_0.BankJson500 bank_routings List[code.api.v1_2_1.BankRoutingJsonV121]
+field code.api.v5_0_0.BankJson500 full_name String
+field code.api.v5_0_0.BankJson500 id String
+field code.api.v5_0_0.BankJson500 logo String
+field code.api.v5_0_0.BankJson500 website String
+field code.api.v5_0_0.ConsentAccountAccessJson account_id String
+field code.api.v5_0_0.ConsentAccountAccessJson bank_id String
+field code.api.v5_0_0.ConsentAccountAccessJson helper_info Option[code.api.v5_0_0.HelperInfoJson]
+field code.api.v5_0_0.ConsentAccountAccessJson view_id String
+field code.api.v5_0_0.ConsentJsonV500 account_access Option[code.api.v5_0_0.ConsentAccountAccessJson]
+field code.api.v5_0_0.ConsentJsonV500 consent_id String
+field code.api.v5_0_0.ConsentJsonV500 consent_request_id Option[String]
+field code.api.v5_0_0.ConsentJsonV500 jwt String
+field code.api.v5_0_0.ConsentJsonV500 status String
+field code.api.v5_0_0.ConsentRequestResponseJson consent_request_id String
+field code.api.v5_0_0.ConsentRequestResponseJson consumer_id String
+field code.api.v5_0_0.ConsentRequestResponseJson payload org.json4s.JsonAST.JValue
+field code.api.v5_0_0.ContractJsonV500 branch_code Option[String]
+field code.api.v5_0_0.ContractJsonV500 cancellation_date Option[String]
+field code.api.v5_0_0.ContractJsonV500 contract_code String
+field code.api.v5_0_0.ContractJsonV500 form_of_payment Option[String]
+field code.api.v5_0_0.ContractJsonV500 instrument_status_code Option[String]
+field code.api.v5_0_0.ContractJsonV500 instrument_status_definition Option[String]
+field code.api.v5_0_0.ContractJsonV500 interest_amount Option[String]
+field code.api.v5_0_0.ContractJsonV500 interest_rate Option[String]
+field code.api.v5_0_0.ContractJsonV500 is_substituted Option[String]
+field code.api.v5_0_0.ContractJsonV500 issuance_amount Option[String]
+field code.api.v5_0_0.ContractJsonV500 maturity_date Option[String]
+field code.api.v5_0_0.ContractJsonV500 opening_date Option[String]
+field code.api.v5_0_0.ContractJsonV500 payment_method Option[String]
+field code.api.v5_0_0.ContractJsonV500 product_code String
+field code.api.v5_0_0.ContractJsonV500 product_description Option[String]
+field code.api.v5_0_0.ContractJsonV500 renewal_date Option[String]
+field code.api.v5_0_0.ContractJsonV500 term Option[String]
+field code.api.v5_0_0.CreateAccountRequestJsonV500 account_routings Option[List[com.openbankproject.commons.model.AccountRoutingJsonV121]]
+field code.api.v5_0_0.CreateAccountRequestJsonV500 balance Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v5_0_0.CreateAccountRequestJsonV500 branch_id Option[String]
+field code.api.v5_0_0.CreateAccountRequestJsonV500 label String
+field code.api.v5_0_0.CreateAccountRequestJsonV500 product_code String
+field code.api.v5_0_0.CreateAccountRequestJsonV500 user_id Option[String]
+field code.api.v5_0_0.CreateCustomerAccountLinkJson account_id String
+field code.api.v5_0_0.CreateCustomerAccountLinkJson bank_id String
+field code.api.v5_0_0.CreateCustomerAccountLinkJson customer_id String
+field code.api.v5_0_0.CreateCustomerAccountLinkJson relationship_type String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 account_id String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 allows List[String]
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 brand String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 card_number String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 card_type String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 collected Option[java.util.Date]
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 customer_id String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 enabled Boolean
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 expires_date java.util.Date
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 issue_number String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 name_on_card String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 networks List[String]
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 posted Option[java.util.Date]
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 replacement Option[code.api.v1_3_0.ReplacementJSON]
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 serial_number String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 technology String
+field code.api.v5_0_0.CreatePhysicalCardJsonV500 valid_from_date java.util.Date
+field code.api.v5_0_0.CreateViewJsonV500 allowed_actions List[String]
+field code.api.v5_0_0.CreateViewJsonV500 can_grant_access_to_views Option[List[String]]
+field code.api.v5_0_0.CreateViewJsonV500 can_revoke_access_to_views Option[List[String]]
+field code.api.v5_0_0.CreateViewJsonV500 description String
+field code.api.v5_0_0.CreateViewJsonV500 hide_metadata_if_alias_used Boolean
+field code.api.v5_0_0.CreateViewJsonV500 is_public Boolean
+field code.api.v5_0_0.CreateViewJsonV500 metadata_view String
+field code.api.v5_0_0.CreateViewJsonV500 name String
+field code.api.v5_0_0.CreateViewJsonV500 which_alias_to_use String
+field code.api.v5_0_0.CustomerAccountLinkJson account_id String
+field code.api.v5_0_0.CustomerAccountLinkJson bank_id String
+field code.api.v5_0_0.CustomerAccountLinkJson customer_account_link_id String
+field code.api.v5_0_0.CustomerAccountLinkJson customer_id String
+field code.api.v5_0_0.CustomerAccountLinkJson relationship_type String
+field code.api.v5_0_0.CustomerAccountLinksJson links List[code.api.v5_0_0.CustomerAccountLinkJson]
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 accounts List[code.api.v5_0_0.AccountResponseJson500]
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 bank_id String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 branch_id String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 customer_attributes List[code.api.v3_0_0.CustomerAttributeResponseJsonV300]
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 customer_id String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 customer_number String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 date_of_birth java.util.Date
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 email String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 legal_name String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 mobile_phone_number String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 name_suffix String
+field code.api.v5_0_0.CustomerOverviewFlatJsonV500 title String
+field code.api.v5_0_0.CustomerOverviewJsonV500 accounts List[code.api.v5_0_0.AccountResponseJson500]
+field code.api.v5_0_0.CustomerOverviewJsonV500 bank_id String
+field code.api.v5_0_0.CustomerOverviewJsonV500 branch_id String
+field code.api.v5_0_0.CustomerOverviewJsonV500 credit_limit Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v5_0_0.CustomerOverviewJsonV500 credit_rating Option[code.api.v2_1_0.CustomerCreditRatingJSON]
+field code.api.v5_0_0.CustomerOverviewJsonV500 customer_attributes List[code.api.v3_0_0.CustomerAttributeResponseJsonV300]
+field code.api.v5_0_0.CustomerOverviewJsonV500 customer_id String
+field code.api.v5_0_0.CustomerOverviewJsonV500 customer_number String
+field code.api.v5_0_0.CustomerOverviewJsonV500 date_of_birth java.util.Date
+field code.api.v5_0_0.CustomerOverviewJsonV500 dependants Integer
+field code.api.v5_0_0.CustomerOverviewJsonV500 dob_of_dependants List[java.util.Date]
+field code.api.v5_0_0.CustomerOverviewJsonV500 email String
+field code.api.v5_0_0.CustomerOverviewJsonV500 employment_status String
+field code.api.v5_0_0.CustomerOverviewJsonV500 face_image code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson
+field code.api.v5_0_0.CustomerOverviewJsonV500 highest_education_attained String
+field code.api.v5_0_0.CustomerOverviewJsonV500 kyc_status Boolean
+field code.api.v5_0_0.CustomerOverviewJsonV500 last_ok_date java.util.Date
+field code.api.v5_0_0.CustomerOverviewJsonV500 legal_name String
+field code.api.v5_0_0.CustomerOverviewJsonV500 mobile_phone_number String
+field code.api.v5_0_0.CustomerOverviewJsonV500 name_suffix String
+field code.api.v5_0_0.CustomerOverviewJsonV500 relationship_status String
+field code.api.v5_0_0.CustomerOverviewJsonV500 title String
+field code.api.v5_0_0.HelperInfoJson counterparty_ids List[String]
+field code.api.v5_0_0.PhysicalCardJsonV500 account code.api.v1_2_1.AccountJSON
+field code.api.v5_0_0.PhysicalCardJsonV500 allows List[String]
+field code.api.v5_0_0.PhysicalCardJsonV500 bank_id String
+field code.api.v5_0_0.PhysicalCardJsonV500 brand String
+field code.api.v5_0_0.PhysicalCardJsonV500 cancelled Boolean
+field code.api.v5_0_0.PhysicalCardJsonV500 card_id String
+field code.api.v5_0_0.PhysicalCardJsonV500 card_number String
+field code.api.v5_0_0.PhysicalCardJsonV500 card_type String
+field code.api.v5_0_0.PhysicalCardJsonV500 collected java.util.Date
+field code.api.v5_0_0.PhysicalCardJsonV500 customer_id String
+field code.api.v5_0_0.PhysicalCardJsonV500 cvv String
+field code.api.v5_0_0.PhysicalCardJsonV500 enabled Boolean
+field code.api.v5_0_0.PhysicalCardJsonV500 expires_date java.util.Date
+field code.api.v5_0_0.PhysicalCardJsonV500 issue_number String
+field code.api.v5_0_0.PhysicalCardJsonV500 name_on_card String
+field code.api.v5_0_0.PhysicalCardJsonV500 networks List[String]
+field code.api.v5_0_0.PhysicalCardJsonV500 on_hot_list Boolean
+field code.api.v5_0_0.PhysicalCardJsonV500 pin_reset List[code.api.v1_3_0.PinResetJSON]
+field code.api.v5_0_0.PhysicalCardJsonV500 posted java.util.Date
+field code.api.v5_0_0.PhysicalCardJsonV500 replacement code.api.v1_3_0.ReplacementJSON
+field code.api.v5_0_0.PhysicalCardJsonV500 serial_number String
+field code.api.v5_0_0.PhysicalCardJsonV500 technology String
+field code.api.v5_0_0.PhysicalCardJsonV500 valid_from_date java.util.Date
+field code.api.v5_0_0.PostBankJson500 bank_code String
+field code.api.v5_0_0.PostBankJson500 bank_routings Option[List[code.api.v1_2_1.BankRoutingJsonV121]]
+field code.api.v5_0_0.PostBankJson500 full_name Option[String]
+field code.api.v5_0_0.PostBankJson500 id Option[String]
+field code.api.v5_0_0.PostBankJson500 logo Option[String]
+field code.api.v5_0_0.PostBankJson500 website Option[String]
+field code.api.v5_0_0.PostConsentRequestJsonV500 account_access List[code.api.v5_0_0.AccountAccessV500]
+field code.api.v5_0_0.PostConsentRequestJsonV500 bank_id Option[String]
+field code.api.v5_0_0.PostConsentRequestJsonV500 consumer_id Option[String]
+field code.api.v5_0_0.PostConsentRequestJsonV500 email Option[String]
+field code.api.v5_0_0.PostConsentRequestJsonV500 entitlements Option[List[code.api.v3_1_0.PostConsentEntitlementJsonV310]]
+field code.api.v5_0_0.PostConsentRequestJsonV500 everything Boolean
+field code.api.v5_0_0.PostConsentRequestJsonV500 phone_number Option[String]
+field code.api.v5_0_0.PostConsentRequestJsonV500 time_to_live Option[Long]
+field code.api.v5_0_0.PostConsentRequestJsonV500 valid_from Option[java.util.Date]
+field code.api.v5_0_0.PostCustomerJsonV500 branch_id Option[String]
+field code.api.v5_0_0.PostCustomerJsonV500 credit_limit Option[com.openbankproject.commons.model.AmountOfMoneyJsonV121]
+field code.api.v5_0_0.PostCustomerJsonV500 credit_rating Option[code.api.v2_1_0.CustomerCreditRatingJSON]
+field code.api.v5_0_0.PostCustomerJsonV500 customer_number Option[String]
+field code.api.v5_0_0.PostCustomerJsonV500 date_of_birth Option[java.util.Date]
+field code.api.v5_0_0.PostCustomerJsonV500 dependants Option[Int]
+field code.api.v5_0_0.PostCustomerJsonV500 dob_of_dependants Option[List[java.util.Date]]
+field code.api.v5_0_0.PostCustomerJsonV500 email Option[String]
+field code.api.v5_0_0.PostCustomerJsonV500 employment_status Option[String]
+field code.api.v5_0_0.PostCustomerJsonV500 face_image Option[code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson]
+field code.api.v5_0_0.PostCustomerJsonV500 highest_education_attained Option[String]
+field code.api.v5_0_0.PostCustomerJsonV500 kyc_status Option[Boolean]
+field code.api.v5_0_0.PostCustomerJsonV500 last_ok_date Option[java.util.Date]
+field code.api.v5_0_0.PostCustomerJsonV500 legal_name String
+field code.api.v5_0_0.PostCustomerJsonV500 mobile_phone_number String
+field code.api.v5_0_0.PostCustomerJsonV500 name_suffix Option[String]
+field code.api.v5_0_0.PostCustomerJsonV500 relationship_status Option[String]
+field code.api.v5_0_0.PostCustomerJsonV500 title Option[String]
+field code.api.v5_0_0.PostCustomerOverviewJsonV500 customer_number String
+field code.api.v5_0_0.PutProductJsonV500 description Option[String]
+field code.api.v5_0_0.PutProductJsonV500 meta Option[code.api.v1_4_0.JSONFactory1_4_0.MetaJsonV140]
+field code.api.v5_0_0.PutProductJsonV500 more_info_url Option[String]
+field code.api.v5_0_0.PutProductJsonV500 name String
+field code.api.v5_0_0.PutProductJsonV500 parent_product_code String
+field code.api.v5_0_0.PutProductJsonV500 terms_and_conditions_url Option[String]
+field code.api.v5_0_0.UpdateCustomerAccountLinkJson relationship_type String
+field code.api.v5_0_0.UpdateViewJsonV500 allowed_actions List[String]
+field code.api.v5_0_0.UpdateViewJsonV500 can_grant_access_to_views Option[List[String]]
+field code.api.v5_0_0.UpdateViewJsonV500 can_revoke_access_to_views Option[List[String]]
+field code.api.v5_0_0.UpdateViewJsonV500 description String
+field code.api.v5_0_0.UpdateViewJsonV500 hide_metadata_if_alias_used Boolean
+field code.api.v5_0_0.UpdateViewJsonV500 is_firehose Option[Boolean]
+field code.api.v5_0_0.UpdateViewJsonV500 is_public Boolean
+field code.api.v5_0_0.UpdateViewJsonV500 metadata_view String
+field code.api.v5_0_0.UpdateViewJsonV500 which_alias_to_use String
+field code.api.v5_0_0.UserAuthContextJsonV500 consumer_id String
+field code.api.v5_0_0.UserAuthContextJsonV500 key String
+field code.api.v5_0_0.UserAuthContextJsonV500 time_stamp java.util.Date
+field code.api.v5_0_0.UserAuthContextJsonV500 user_auth_context_id String
+field code.api.v5_0_0.UserAuthContextJsonV500 user_id String
+field code.api.v5_0_0.UserAuthContextJsonV500 value String
+field code.api.v5_0_0.UserAuthContextUpdateJsonV500 consumer_id String
+field code.api.v5_0_0.UserAuthContextUpdateJsonV500 key String
+field code.api.v5_0_0.UserAuthContextUpdateJsonV500 status String
+field code.api.v5_0_0.UserAuthContextUpdateJsonV500 user_auth_context_update_id String
+field code.api.v5_0_0.UserAuthContextUpdateJsonV500 user_id String
+field code.api.v5_0_0.UserAuthContextUpdateJsonV500 value String
+field code.api.v5_0_0.ViewIdJsonV500 id String
+field code.api.v5_0_0.ViewJsonV500 alias String
+field code.api.v5_0_0.ViewJsonV500 can_add_comment Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_corporate_location Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_counterparty Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_image Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_image_url Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_more_info Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_open_corporates_url Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_physical_location Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_private_alias Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_public_alias Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_tag Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_transaction_request_to_any_account Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_transaction_request_to_own_account Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_url Boolean
+field code.api.v5_0_0.ViewJsonV500 can_add_where_tag Boolean
+field code.api.v5_0_0.ViewJsonV500 can_create_direct_debit Boolean
+field code.api.v5_0_0.ViewJsonV500 can_create_standing_order Boolean
+field code.api.v5_0_0.ViewJsonV500 can_delete_comment Boolean
+field code.api.v5_0_0.ViewJsonV500 can_delete_corporate_location Boolean
+field code.api.v5_0_0.ViewJsonV500 can_delete_image Boolean
+field code.api.v5_0_0.ViewJsonV500 can_delete_physical_location Boolean
+field code.api.v5_0_0.ViewJsonV500 can_delete_tag Boolean
+field code.api.v5_0_0.ViewJsonV500 can_delete_where_tag Boolean
+field code.api.v5_0_0.ViewJsonV500 can_edit_owner_comment Boolean
+field code.api.v5_0_0.ViewJsonV500 can_grant_access_to_views List[String]
+field code.api.v5_0_0.ViewJsonV500 can_query_available_funds Boolean
+field code.api.v5_0_0.ViewJsonV500 can_revoke_access_to_views List[String]
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_balance Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_bank_name Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_credit_limit Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_currency Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_iban Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_label Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_national_identifier Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_number Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_owners Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_routing_address Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_routing_scheme Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_swift_bic Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_account_type Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_routing_address Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_bank_routing_scheme Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_comments Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_corporate_location Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_image_url Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_images Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_more_info Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_open_corporates_url Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_bank_name Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_iban Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_kind Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_metadata Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_national_identifier Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_number Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_routing_address Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_routing_scheme Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_account_swift_bic Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_bank_routing_address Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_other_bank_routing_scheme Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_owner_comment Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_physical_location Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_private_alias Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_public_alias Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_tags Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_amount Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_balance Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_currency Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_description Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_finish_date Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_metadata Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_other_bank_account Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_start_date Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_this_bank_account Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_transaction_type Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_url Boolean
+field code.api.v5_0_0.ViewJsonV500 can_see_where_tag Boolean
+field code.api.v5_0_0.ViewJsonV500 description String
+field code.api.v5_0_0.ViewJsonV500 hide_metadata_if_alias_used Boolean
+field code.api.v5_0_0.ViewJsonV500 id String
+field code.api.v5_0_0.ViewJsonV500 is_firehose Option[Boolean]
+field code.api.v5_0_0.ViewJsonV500 is_public Boolean
+field code.api.v5_0_0.ViewJsonV500 is_system Boolean
+field code.api.v5_0_0.ViewJsonV500 metadata_view String
+field code.api.v5_0_0.ViewJsonV500 short_name String
+field code.api.v5_0_0.ViewsIdsJsonV500 views List[code.api.v5_0_0.ViewIdJsonV500]
+field code.api.v5_0_0.ViewsJsonV500 views List[code.api.v5_0_0.ViewJsonV500]
+field code.authtypevalidation.JsonAuthTypeValidation authTypes List[code.api.util.AuthenticationType]
+field code.authtypevalidation.JsonAuthTypeValidation operationId String
+field code.connectormethod.JsonConnectorMethod connectorMethodId Option[String]
+field code.connectormethod.JsonConnectorMethod methodBody String
+field code.connectormethod.JsonConnectorMethod methodName String
+field code.connectormethod.JsonConnectorMethod programmingLang String
+field code.connectormethod.JsonConnectorMethodMethodBody methodBody String
+field code.connectormethod.JsonConnectorMethodMethodBody programmingLang String
+field code.dynamicEntity.DynamicEntityDefinition description String
+field code.dynamicEntity.DynamicEntityDefinition properties code.dynamicEntity.DynamicEntityFullBarFields
+field code.dynamicEntity.DynamicEntityDefinition required List[String]
+field code.dynamicEntity.DynamicEntityFooBar FooBar code.dynamicEntity.DynamicEntityDefinition
+field code.dynamicEntity.DynamicEntityFooBar bankId Option[String]
+field code.dynamicEntity.DynamicEntityFooBar dynamicEntityId Option[String]
+field code.dynamicEntity.DynamicEntityFooBar hasPersonalEntity Boolean
+field code.dynamicEntity.DynamicEntityFooBar userId Option[String]
+field code.dynamicEntity.DynamicEntityFullBarFields name code.dynamicEntity.DynamicEntityStringTypeExample
+field code.dynamicEntity.DynamicEntityFullBarFields number code.dynamicEntity.DynamicEntityIntTypeExample
+field code.dynamicEntity.DynamicEntityIntTypeExample description String
+field code.dynamicEntity.DynamicEntityIntTypeExample example Int
+field code.dynamicEntity.DynamicEntityIntTypeExample type com.openbankproject.commons.model.enums.DynamicEntityFieldType
+field code.dynamicEntity.DynamicEntityStringTypeExample description String
+field code.dynamicEntity.DynamicEntityStringTypeExample example String
+field code.dynamicEntity.DynamicEntityStringTypeExample maxLength Int
+field code.dynamicEntity.DynamicEntityStringTypeExample minLength Int
+field code.dynamicEntity.DynamicEntityStringTypeExample type com.openbankproject.commons.model.enums.DynamicEntityFieldType
+field code.dynamicMessageDoc.JsonDynamicMessageDoc adapterImplementation String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc bankId Option[String]
+field code.dynamicMessageDoc.JsonDynamicMessageDoc description String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc dynamicMessageDocId Option[String]
+field code.dynamicMessageDoc.JsonDynamicMessageDoc exampleInboundMessage org.json4s.JsonAST.JValue
+field code.dynamicMessageDoc.JsonDynamicMessageDoc exampleOutboundMessage org.json4s.JsonAST.JValue
+field code.dynamicMessageDoc.JsonDynamicMessageDoc inboundAvroSchema String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc inboundTopic String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc messageFormat String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc methodBody String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc outboundAvroSchema String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc outboundTopic String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc process String
+field code.dynamicMessageDoc.JsonDynamicMessageDoc programmingLang String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc bankId Option[String]
+field code.dynamicResourceDoc.JsonDynamicResourceDoc description String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc dynamicResourceDocId Option[String]
+field code.dynamicResourceDoc.JsonDynamicResourceDoc errorResponseBodies String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc exampleRequestBody Option[org.json4s.JValue]
+field code.dynamicResourceDoc.JsonDynamicResourceDoc methodBody String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc partialFunctionName String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc requestUrl String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc requestVerb String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc roles String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc successResponseBody Option[org.json4s.JValue]
+field code.dynamicResourceDoc.JsonDynamicResourceDoc summary String
+field code.dynamicResourceDoc.JsonDynamicResourceDoc tags String
+field code.methodrouting.MethodRoutingCommons bankIdPattern Option[String]
+field code.methodrouting.MethodRoutingCommons connectorName String
+field code.methodrouting.MethodRoutingCommons isBankIdExactMatch Boolean
+field code.methodrouting.MethodRoutingCommons methodName String
+field code.methodrouting.MethodRoutingCommons methodRoutingId Option[String]
+field code.methodrouting.MethodRoutingCommons parameters List[code.methodrouting.MethodRoutingParam]
+field code.methodrouting.MethodRoutingParam key String
+field code.methodrouting.MethodRoutingParam value String
+field code.sandbox.SandboxAccountDetailsImport completed String
+field code.sandbox.SandboxAccountDetailsImport description String
+field code.sandbox.SandboxAccountDetailsImport new_balance String
+field code.sandbox.SandboxAccountDetailsImport posted String
+field code.sandbox.SandboxAccountDetailsImport type String
+field code.sandbox.SandboxAccountDetailsImport value String
+field code.sandbox.SandboxAccountIdImport bank String
+field code.sandbox.SandboxAccountIdImport id String
+field code.sandbox.SandboxAccountImport IBAN String
+field code.sandbox.SandboxAccountImport balance code.sandbox.SandboxBalanceImport
+field code.sandbox.SandboxAccountImport bank String
+field code.sandbox.SandboxAccountImport generate_accountants_view Boolean
+field code.sandbox.SandboxAccountImport generate_auditors_view Boolean
+field code.sandbox.SandboxAccountImport generate_public_view Boolean
+field code.sandbox.SandboxAccountImport id String
+field code.sandbox.SandboxAccountImport label String
+field code.sandbox.SandboxAccountImport number String
+field code.sandbox.SandboxAccountImport owners List[String]
+field code.sandbox.SandboxAccountImport type String
+field code.sandbox.SandboxAddressImport city String
+field code.sandbox.SandboxAddressImport country_code String
+field code.sandbox.SandboxAddressImport county String
+field code.sandbox.SandboxAddressImport line_1 String
+field code.sandbox.SandboxAddressImport line_2 String
+field code.sandbox.SandboxAddressImport line_3 String
+field code.sandbox.SandboxAddressImport post_code String
+field code.sandbox.SandboxAddressImport state String
+field code.sandbox.SandboxAtmImport address code.sandbox.SandboxAddressImport
+field code.sandbox.SandboxAtmImport bank_id String
+field code.sandbox.SandboxAtmImport id String
+field code.sandbox.SandboxAtmImport location code.sandbox.SandboxLocationImport
+field code.sandbox.SandboxAtmImport meta code.sandbox.SandboxMetaImport
+field code.sandbox.SandboxAtmImport name String
+field code.sandbox.SandboxBalanceImport amount String
+field code.sandbox.SandboxBalanceImport currency String
+field code.sandbox.SandboxBankImport full_name String
+field code.sandbox.SandboxBankImport id String
+field code.sandbox.SandboxBankImport logo String
+field code.sandbox.SandboxBankImport short_name String
+field code.sandbox.SandboxBankImport website String
+field code.sandbox.SandboxBranchImport address code.sandbox.SandboxAddressImport
+field code.sandbox.SandboxBranchImport bank_id String
+field code.sandbox.SandboxBranchImport driveUp Option[code.sandbox.SandboxDriveUpImport]
+field code.sandbox.SandboxBranchImport id String
+field code.sandbox.SandboxBranchImport lobby Option[code.sandbox.SandboxLobbyImport]
+field code.sandbox.SandboxBranchImport location code.sandbox.SandboxLocationImport
+field code.sandbox.SandboxBranchImport meta code.sandbox.SandboxMetaImport
+field code.sandbox.SandboxBranchImport name String
+field code.sandbox.SandboxCrmEventImport actual_date String
+field code.sandbox.SandboxCrmEventImport bank_id String
+field code.sandbox.SandboxCrmEventImport category String
+field code.sandbox.SandboxCrmEventImport channel String
+field code.sandbox.SandboxCrmEventImport customer code.sandbox.SandboxCustomerImport
+field code.sandbox.SandboxCrmEventImport detail String
+field code.sandbox.SandboxCrmEventImport id String
+field code.sandbox.SandboxCustomerImport name String
+field code.sandbox.SandboxCustomerImport number String
+field code.sandbox.SandboxDataImport accounts List[code.sandbox.SandboxAccountImport]
+field code.sandbox.SandboxDataImport atms List[code.sandbox.SandboxAtmImport]
+field code.sandbox.SandboxDataImport banks List[code.sandbox.SandboxBankImport]
+field code.sandbox.SandboxDataImport branches List[code.sandbox.SandboxBranchImport]
+field code.sandbox.SandboxDataImport crm_events List[code.sandbox.SandboxCrmEventImport]
+field code.sandbox.SandboxDataImport products List[code.sandbox.SandboxProductImport]
+field code.sandbox.SandboxDataImport transactions List[code.sandbox.SandboxTransactionImport]
+field code.sandbox.SandboxDataImport users List[code.sandbox.SandboxUserImport]
+field code.sandbox.SandboxDriveUpImport hours String
+field code.sandbox.SandboxLicenseImport id String
+field code.sandbox.SandboxLicenseImport name String
+field code.sandbox.SandboxLobbyImport hours String
+field code.sandbox.SandboxLocationImport latitude Double
+field code.sandbox.SandboxLocationImport longitude Double
+field code.sandbox.SandboxMetaImport license code.sandbox.SandboxLicenseImport
+field code.sandbox.SandboxProductImport bank_id String
+field code.sandbox.SandboxProductImport category String
+field code.sandbox.SandboxProductImport code String
+field code.sandbox.SandboxProductImport family String
+field code.sandbox.SandboxProductImport meta code.sandbox.SandboxMetaImport
+field code.sandbox.SandboxProductImport more_info_url String
+field code.sandbox.SandboxProductImport name String
+field code.sandbox.SandboxProductImport super_family String
+field code.sandbox.SandboxTransactionCounterparty account_number Option[String]
+field code.sandbox.SandboxTransactionCounterparty name Option[String]
+field code.sandbox.SandboxTransactionImport counterparty Option[code.sandbox.SandboxTransactionCounterparty]
+field code.sandbox.SandboxTransactionImport details code.sandbox.SandboxAccountDetailsImport
+field code.sandbox.SandboxTransactionImport id String
+field code.sandbox.SandboxTransactionImport this_account code.sandbox.SandboxAccountIdImport
+field code.sandbox.SandboxUserImport email String
+field code.sandbox.SandboxUserImport password String
+field code.sandbox.SandboxUserImport user_name String
+field code.webuiprops.WebUiPropsCommons name String
+field code.webuiprops.WebUiPropsCommons source Option[String]
+field code.webuiprops.WebUiPropsCommons value String
+field code.webuiprops.WebUiPropsCommons webUiPropsId Option[String]
+field com.openbankproject.commons.model.AccountRouting address String
+field com.openbankproject.commons.model.AccountRouting scheme String
+field com.openbankproject.commons.model.AccountRoutingJsonV121 address String
+field com.openbankproject.commons.model.AccountRoutingJsonV121 scheme String
+field com.openbankproject.commons.model.AccountV310Json account_id String
+field com.openbankproject.commons.model.AccountV310Json account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field com.openbankproject.commons.model.AccountV310Json account_type String
+field com.openbankproject.commons.model.AccountV310Json bank_id String
+field com.openbankproject.commons.model.AccountV310Json branch_routings List[com.openbankproject.commons.model.BranchRoutingJsonV141]
+field com.openbankproject.commons.model.AmountOfMoney amount String
+field com.openbankproject.commons.model.AmountOfMoney currency String
+field com.openbankproject.commons.model.AmountOfMoneyJsonV121 amount String
+field com.openbankproject.commons.model.AmountOfMoneyJsonV121 currency String
+field com.openbankproject.commons.model.BankId value String
+field com.openbankproject.commons.model.BranchRoutingJsonV141 address String
+field com.openbankproject.commons.model.BranchRoutingJsonV141 scheme String
+field com.openbankproject.commons.model.CardAttributeCommons attributeType com.openbankproject.commons.model.enums.CardAttributeType.Value
+field com.openbankproject.commons.model.CardAttributeCommons bankId Option[com.openbankproject.commons.model.BankId]
+field com.openbankproject.commons.model.CardAttributeCommons cardAttributeId Option[String]
+field com.openbankproject.commons.model.CardAttributeCommons cardId Option[String]
+field com.openbankproject.commons.model.CardAttributeCommons name String
+field com.openbankproject.commons.model.CardAttributeCommons value String
+field com.openbankproject.commons.model.CardObjectJson card_description String
+field com.openbankproject.commons.model.CardObjectJson card_type String
+field com.openbankproject.commons.model.CardObjectJson use_type String
+field com.openbankproject.commons.model.CheckbookOrdersJson account com.openbankproject.commons.model.AccountV310Json
+field com.openbankproject.commons.model.CheckbookOrdersJson orders List[com.openbankproject.commons.model.OrderJson]
+field com.openbankproject.commons.model.FastFirehoseAttributes code String
+field com.openbankproject.commons.model.FastFirehoseAttributes type String
+field com.openbankproject.commons.model.FastFirehoseAttributes value String
+field com.openbankproject.commons.model.FastFirehoseOwners provider String
+field com.openbankproject.commons.model.FastFirehoseOwners user_id String
+field com.openbankproject.commons.model.FastFirehoseOwners user_name String
+field com.openbankproject.commons.model.FastFirehoseRoutings account_id String
+field com.openbankproject.commons.model.FastFirehoseRoutings bank_id String
+field com.openbankproject.commons.model.FromAccountTransfer mobile_phone_number String
+field com.openbankproject.commons.model.FromAccountTransfer nickname String
+field com.openbankproject.commons.model.IbanAddress address String
+field com.openbankproject.commons.model.InboundStatusMessage duration Option[scala.math.BigDecimal]
+field com.openbankproject.commons.model.InboundStatusMessage errorCode String
+field com.openbankproject.commons.model.InboundStatusMessage source String
+field com.openbankproject.commons.model.InboundStatusMessage status String
+field com.openbankproject.commons.model.InboundStatusMessage text String
+field com.openbankproject.commons.model.ListResult name String
+field com.openbankproject.commons.model.ListResult results T
+field com.openbankproject.commons.model.OrderJson order com.openbankproject.commons.model.OrderObjectJson
+field com.openbankproject.commons.model.OrderObjectJson distribution_channel String
+field com.openbankproject.commons.model.OrderObjectJson first_check_number String
+field com.openbankproject.commons.model.OrderObjectJson number_of_checkbooks String
+field com.openbankproject.commons.model.OrderObjectJson order_date String
+field com.openbankproject.commons.model.OrderObjectJson order_id String
+field com.openbankproject.commons.model.OrderObjectJson shipping_code String
+field com.openbankproject.commons.model.OrderObjectJson status String
+field com.openbankproject.commons.model.PaymentAccount iban String
+field com.openbankproject.commons.model.SepaCreditTransfers creditorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.SepaCreditTransfers creditorName String
+field com.openbankproject.commons.model.SepaCreditTransfers debtorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.SepaCreditTransfers instructedAmount com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.ToAccountTransferToAccount account com.openbankproject.commons.model.ToAccountTransferToAccountAccount
+field com.openbankproject.commons.model.ToAccountTransferToAccount bank_code String
+field com.openbankproject.commons.model.ToAccountTransferToAccount branch_number String
+field com.openbankproject.commons.model.ToAccountTransferToAccount name String
+field com.openbankproject.commons.model.ToAccountTransferToAccountAccount iban String
+field com.openbankproject.commons.model.ToAccountTransferToAccountAccount number String
+field com.openbankproject.commons.model.ToAccountTransferToAtm date_of_birth String
+field com.openbankproject.commons.model.ToAccountTransferToAtm kyc_document com.openbankproject.commons.model.ToAccountTransferToAtmKycDocument
+field com.openbankproject.commons.model.ToAccountTransferToAtm legal_name String
+field com.openbankproject.commons.model.ToAccountTransferToAtm mobile_phone_number String
+field com.openbankproject.commons.model.ToAccountTransferToAtmKycDocument number String
+field com.openbankproject.commons.model.ToAccountTransferToAtmKycDocument type String
+field com.openbankproject.commons.model.ToAccountTransferToPhone mobile_phone_number String
+field com.openbankproject.commons.model.TransactionRequestAccount account_id String
+field com.openbankproject.commons.model.TransactionRequestAccount bank_id String
+field com.openbankproject.commons.model.TransactionRequestAgentCashWithdrawal agent_number String
+field com.openbankproject.commons.model.TransactionRequestAgentCashWithdrawal bank_id String
+field com.openbankproject.commons.model.TransactionRequestAttributeJsonV400 attribute_type String
+field com.openbankproject.commons.model.TransactionRequestAttributeJsonV400 name String
+field com.openbankproject.commons.model.TransactionRequestAttributeJsonV400 value String
+field com.openbankproject.commons.model.TransactionRequestBody description String
+field com.openbankproject.commons.model.TransactionRequestBody to com.openbankproject.commons.model.TransactionRequestAccount
+field com.openbankproject.commons.model.TransactionRequestBody value com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes description String
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_agent Option[com.openbankproject.commons.model.TransactionRequestAgentCashWithdrawal]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_counterparty Option[com.openbankproject.commons.model.TransactionRequestCounterpartyId]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_sandbox_tan Option[com.openbankproject.commons.model.TransactionRequestAccount]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_sepa Option[com.openbankproject.commons.model.TransactionRequestIban]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_sepa_credit_transfers Option[com.openbankproject.commons.model.SepaCreditTransfers]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_simple Option[com.openbankproject.commons.model.TransactionRequestSimple]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_transfer_to_account Option[com.openbankproject.commons.model.TransactionRequestTransferToAccount]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_transfer_to_atm Option[com.openbankproject.commons.model.TransactionRequestTransferToAtm]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_transfer_to_phone Option[com.openbankproject.commons.model.TransactionRequestTransferToPhone]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes value com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.TransactionRequestCounterpartyId counterparty_id String
+field com.openbankproject.commons.model.TransactionRequestIban iban String
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountSecondaryRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountSecondaryRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBankRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBankRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBranchRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBranchRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount description String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount future_date String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount to com.openbankproject.commons.model.ToAccountTransferToAccount
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount transfer_type String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm description String
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm from com.openbankproject.commons.model.FromAccountTransfer
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm message String
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm to com.openbankproject.commons.model.ToAccountTransferToAtm
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone description String
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone from com.openbankproject.commons.model.FromAccountTransfer
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone message String
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone to com.openbankproject.commons.model.ToAccountTransferToPhone
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.TransactionTypeId value String
+field com.openbankproject.commons.model.ViewBasic description String
+field com.openbankproject.commons.model.ViewBasic id String
+field com.openbankproject.commons.model.ViewBasic name String
diff --git a/obp-api/src/test/scala/code/api/OAuth2AudienceValidationTest.scala b/obp-api/src/test/scala/code/api/OAuth2AudienceValidationTest.scala
index 752cae989b..0f4c1673e2 100644
--- a/obp-api/src/test/scala/code/api/OAuth2AudienceValidationTest.scala
+++ b/obp-api/src/test/scala/code/api/OAuth2AudienceValidationTest.scala
@@ -9,7 +9,7 @@ import net.liftweb.common.{Failure, Full}
import org.scalatest.{FeatureSpec, GivenWhenThen, Matchers}
import java.net.URI
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
class OAuth2AudienceValidationTest extends FeatureSpec with Matchers with GivenWhenThen with PropsReset {
diff --git a/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/OpenAPI31FactoryTest.scala b/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/OpenAPI31FactoryTest.scala
new file mode 100644
index 0000000000..abec05bd65
--- /dev/null
+++ b/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/OpenAPI31FactoryTest.scala
@@ -0,0 +1,98 @@
+package code.api.ResourceDocs1_4_0
+
+import code.api.v1_4_0.JSONFactory1_4_0
+import org.json4s.JsonAST.{JNothing, JValue}
+import org.json4s.native.JsonMethods.parse
+import org.scalatest.{FlatSpec, Matchers}
+
+/**
+ * Covers OpenAPI31JSONFactory, which had no test of any kind.
+ *
+ * It serves a public endpoint - GET /obp/vX/resource-docs/API_VERSION/openapi - and its input is
+ * the typed_success_response_body that ResourceDocJson carries. This branch changed that field for
+ * 62 (version, endpoint) pairs while correcting how collections are described, so the one consumer
+ * that reads those schemas structurally was being handed new shapes with nothing asserting what it
+ * did with them. It turned out to handle them correctly; that is now pinned rather than assumed.
+ *
+ * These are unit tests over the factory, not the endpoint: no server, no resource-docs fetch.
+ */
+class OpenAPI31FactoryTest extends FlatSpec with Matchers {
+
+ private def doc(operationId: String, typedBody: JValue): JSONFactory1_4_0.ResourceDocJson =
+ JSONFactory1_4_0.ResourceDocJson(
+ operation_id = operationId,
+ implemented_by = JSONFactory1_4_0.ImplementedByJson("4.0.0", operationId),
+ request_verb = "GET",
+ request_url = "/test",
+ summary = "Test",
+ description = "Test desc",
+ description_markdown = "Test desc",
+ example_request_body = null,
+ success_response_body = null,
+ error_response_bodies = List("OBP-10000"),
+ tags = List("Test"),
+ typed_request_body = JNothing,
+ typed_success_response_body = typedBody,
+ roles = Some(List()),
+ is_featured = false,
+ special_instructions = "",
+ specified_url = "/obp/v4.0.0/test",
+ connector_methods = List(),
+ created_by_bank_id = None
+ )
+
+ // DefaultFormats, not CustomJsonFormats: the latter reaches APIUtil, whose static initialiser
+ // wants props that a unit test has not set up, and the suite dies before its first assertion.
+ private implicit val formats: org.json4s.Formats = org.json4s.DefaultFormats
+
+ private def responseSchema(typedBody: JValue): JValue = {
+ val openApi = OpenAPI31JSONFactory.createOpenAPI31Json(List(doc("testOp", typedBody)), "v4.0.0", "http://localhost:8080")
+ val rendered = parse(org.json4s.native.Serialization.write(openApi))
+ // The one and only path, found rather than spelled: createOpenAPI31Json runs the url through
+ // convertPathToOpenAPI, and hard-coding the result would test that transform rather than the
+ // schema conversion this suite is about.
+ val paths = (rendered \ "paths") match {
+ case org.json4s.JObject(fields) => fields
+ case other => fail(s"paths was not an object: $other")
+ }
+ withClue(s"expected exactly one path, got ${paths.map(_._1)}: ") { paths.size should equal(1) }
+ (paths.head._2 \ "get" \ "responses" \ "200" \ "content" \ "application/json" \ "schema")
+ }
+
+ "an object typed body" should "become an object schema carrying its properties" in {
+ val schema = responseSchema(parse("""{"type":"object","properties":{"bank_id":{"type":"string"}}}"""))
+
+ (schema \ "type") should equal(org.json4s.JString("object"))
+ (schema \ "properties" \ "bank_id" \ "type") should equal(org.json4s.JString("string"))
+ }
+
+ // The shape this branch introduced for a bare-List response. It reaches the factory as a root
+ // array, which is the one case the object-shaped conversion path could have dropped.
+ "an array typed body" should "become an array schema that keeps its items" in {
+ val schema = responseSchema(parse(
+ """{"type":"array","items":{"type":"object","properties":{"tag_name":{"type":"string"}}}}"""))
+
+ (schema \ "type") should equal(org.json4s.JString("array"))
+ (schema \ "items" \ "type") should equal(org.json4s.JString("object"))
+ (schema \ "items" \ "properties" \ "tag_name" \ "type") should equal(org.json4s.JString("string"))
+ }
+
+ "a nested array field" should "keep its items through the conversion" in {
+ val schema = responseSchema(parse(
+ """{"type":"object","properties":{"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"}}}}}}"""))
+
+ (schema \ "properties" \ "views" \ "type") should equal(org.json4s.JString("array"))
+ (schema \ "properties" \ "views" \ "items" \ "properties" \ "id" \ "type") should equal(org.json4s.JString("string"))
+ }
+
+ "the document" should "declare the OpenAPI version it claims to be" in {
+ val openApi = OpenAPI31JSONFactory.createOpenAPI31Json(List(doc("testOp", JNothing)), "v4.0.0", "http://localhost:8080")
+
+ openApi.openapi should equal("3.1.0")
+ }
+
+ it should "survive a typed body that is absent" in {
+ noException should be thrownBy
+ OpenAPI31JSONFactory.createOpenAPI31Json(List(doc("testOp", JNothing)), "v4.0.0", "http://localhost:8080")
+ }
+}
diff --git a/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/SwaggerOptionFieldTypeTest.scala b/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/SwaggerOptionFieldTypeTest.scala
new file mode 100644
index 0000000000..5814eda966
--- /dev/null
+++ b/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/SwaggerOptionFieldTypeTest.scala
@@ -0,0 +1,135 @@
+package code.api.ResourceDocs1_4_0
+
+import java.util.Date
+
+import org.json4s.JsonAST.{JNothing, JString, JValue}
+import org.json4s.native.JsonMethods.parse
+import org.scalatest.{FlatSpec, Matchers}
+
+/**
+ * An Option field must be documented as the thing it holds, not as an array of it.
+ *
+ * SwaggerJSONFactory dispatches on the field's type through a chain of `isTypeOf[...]` tests, and
+ * the collection cases go through `type Coll[T]`. That alias was GenTraversableLike on 2.12 and is
+ * IterableOnce here - which 2.13's Option implements and 2.12's did not. So every `Coll[X]` test
+ * now also answers true for `Option[X]`, and wherever a Coll case is reached before the matching
+ * Option case, a scalar field is published as an array.
+ *
+ * Two places reach it first. The String block tests Coll[String] before Option[String] - String is
+ * the one scalar whose Option case sits below its Coll case - and the generic List-or-Array
+ * fallback at the end of the chain catches every Option the earlier cases did not name: an Option
+ * of a case class, of a JValue. The other scalar blocks are safe only because their Option case
+ * happens to be written above their Coll case.
+ *
+ * These are checks on the published contract, not on internals: the swagger definitions are what
+ * clients generate code from, and a string that claims to be an array of strings breaks them.
+ */
+class SwaggerOptionFieldTypeTest extends FlatSpec with Matchers {
+
+ case class Inner(x: String)
+ case class OptionalScalars(
+ optString: Option[String],
+ optInner: Option[Inner],
+ plainString: String
+ )
+ object Colour extends Enumeration { type Colour = Value; val Red, Green = Value }
+
+ case class Enums(
+ oneEnum: Colour.Value,
+ listOfEnum: List[Colour.Value],
+ optListOfEnum: Option[List[Colour.Value]],
+ optEnum: Option[Colour.Value]
+ )
+
+ case class RealCollections(
+ listOfString: List[String],
+ optListOfString: Option[List[String]],
+ optListOfDate: Option[List[Date]]
+ )
+
+ /**
+ * The field's schema, parsed. Asserted on structurally rather than by substring: the factory
+ * emits both `"type":"array"` and `"type": "array"` depending on which case produced it, so a
+ * substring check answers the wrong question and fails on spacing.
+ */
+ private def schemaOf(entity: Any, field: String): JValue = {
+ // translateEntity returns a definitions *fragment* - `"EntityName":{...}` - not a document,
+ // so it has to be wrapped before it will parse.
+ val json = SwaggerJSONFactory.translateEntity(entity)
+ val parsed = parse(s"{$json}")
+ val schema = (parsed \\ field) match {
+ case JNothing => fail(s"$field is absent from the generated schema:\n$json")
+ case found => found
+ }
+ schema
+ }
+
+ private def typeOf(schema: JValue): Option[String] = (schema \ "type").toOption.collect {
+ case JString(t) => t
+ }
+
+ "an Option[String] field" should "be documented as a string, not an array of strings" in {
+ val schema = schemaOf(OptionalScalars(Some("a"), Some(Inner("b")), "c"), "optString")
+
+ withClue(s"optString schema was ${org.json4s.native.JsonMethods.compact(org.json4s.native.JsonMethods.render(schema))}: ") {
+ typeOf(schema) should equal(Some("string"))
+ }
+ }
+
+ "an Option of a case class" should "be documented as a reference, not an array of references" in {
+ val schema = schemaOf(OptionalScalars(Some("a"), Some(Inner("b")), "c"), "optInner")
+
+ withClue(s"optInner schema was ${org.json4s.native.JsonMethods.compact(org.json4s.native.JsonMethods.render(schema))}: ") {
+ typeOf(schema) should not equal Some("array")
+ (schema \\ "$ref") should not equal JNothing
+ }
+ }
+
+ "a plain String field" should "still be documented as a string" in {
+ typeOf(schemaOf(OptionalScalars(Some("a"), Some(Inner("b")), "c"), "plainString")) should equal(Some("string"))
+ }
+
+ // The other half of the contract: what is genuinely a collection must stay an array. A fix that
+ // suppressed Option everywhere would break these, and the mixed Date case - written as
+ // isOneOfType[Coll[Date], Option[Coll[Date]]] - is the one a blanket rule breaks first.
+ private val collections = RealCollections(List("a"), Some(List("b")), Some(List(new Date())))
+
+ "a List field" should "still be documented as an array" in {
+ typeOf(schemaOf(collections, "listOfString")) should equal(Some("array"))
+ }
+
+ "an Option[List[String]] field" should "still be documented as an array" in {
+ typeOf(schemaOf(collections, "optListOfString")) should equal(Some("array"))
+ }
+
+ "an Option[List[Date]] field" should "still be documented as an array" in {
+ typeOf(schemaOf(collections, "optListOfDate")) should equal(Some("array"))
+ }
+
+ // The String block's cases carry two independent clauses: a type test and an isNestEnumeration
+ // test. Moving the Option case above the Coll case moved both, and the enumeration clauses were
+ // ordered among themselves - isNestEnumeration digs to the innermost type argument, so
+ // Option[List[Colour]] satisfies isNestEnumeration[Option[_]] just as much as
+ // isNestEnumeration[Option[List[_]]]. Whichever is tested first wins, and only one of them is
+ // right. These pin all four shapes so the two orderings cannot be conflated again.
+ private val enums = Enums(Colour.Red, List(Colour.Red), Some(List(Colour.Red)), Some(Colour.Red))
+
+ "an enumeration field" should "be documented as a string" in {
+ typeOf(schemaOf(enums, "oneEnum")) should equal(Some("string"))
+ }
+
+ "a List of enumerations" should "be documented as an array" in {
+ typeOf(schemaOf(enums, "listOfEnum")) should equal(Some("array"))
+ }
+
+ "an Option[List[enumeration]]" should "be documented as an array, not a string" in {
+ withClue("isNestEnumeration digs to the innermost type arg, so an Option case tested before " +
+ "the Option[List[...]] case claims this one too: ") {
+ typeOf(schemaOf(enums, "optListOfEnum")) should equal(Some("array"))
+ }
+ }
+
+ "an Option[enumeration]" should "be documented as a string" in {
+ typeOf(schemaOf(enums, "optEnum")) should equal(Some("string"))
+ }
+}
diff --git a/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/SwaggerPathOrderAndArrayBodyTest.scala b/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/SwaggerPathOrderAndArrayBodyTest.scala
new file mode 100644
index 0000000000..c436e6b162
--- /dev/null
+++ b/obp-api/src/test/scala/code/api/ResourceDocs1_4_0/SwaggerPathOrderAndArrayBodyTest.scala
@@ -0,0 +1,73 @@
+package code.api.ResourceDocs1_4_0
+
+import code.api.util.APIUtil
+import code.api.v1_4_0.JSONFactory1_4_0
+import code.api.v4_0_0.OBPAPI4_0_0
+import com.openbankproject.commons.util.ApiVersion
+import org.scalatest.{FlatSpec, Matchers}
+
+/**
+ * Two claims the Scala 2.13 migration made about generated documentation, neither of which any
+ * existing test could confirm.
+ *
+ * The first is ordering. createSwaggerResourceDoc used to build its paths map with breakOut,
+ * consuming an already-sorted sequence directly; it now collects the pairs and hands them to
+ * ListMap, and the comment left behind asserts the order is unaffected. ListMap has a history of
+ * iterating in reverse insertion order, the paths map goes into a published artifact, and
+ * SwaggerDocsTest only checks status codes and extraction - so the claim was never tested.
+ *
+ * The second is the array-shaped bodies. Six ResourceDocs passed a bare List, which was a Product
+ * on 2.12, so getAllFields walked it with productIterator and documented `head` and `tl` as if they
+ * were fields of the entity. What replaced it is the root-collection branch in getAllFields, which
+ * documents what the collection holds instead of the collection itself. (A jArrayBodyOf helper was
+ * tried first and reverted - it described json4s internals rather than the entity - so it is not
+ * the fix, and the name survives nowhere else.) The question here is not whether the old leak is
+ * gone - it is - but whether anything still describes what the array contains.
+ */
+class SwaggerPathOrderAndArrayBodyTest extends FlatSpec with Matchers {
+
+ /** Real docs rather than synthetic ones: the ordering only matters for what actually ships. */
+ private lazy val swagger: SwaggerJSONFactory.SwaggerResourceDoc = {
+ val docs = JSONFactory1_4_0
+ .createResourceDocsJson(OBPAPI4_0_0.allResourceDocs.toList, isVersion4OrHigher = true, None)
+ .resource_docs
+ SwaggerJSONFactory.createSwaggerResourceDoc(docs, ApiVersion.v4_0_0)
+ }
+
+ "createSwaggerResourceDoc" should "emit paths in ascending url order" in {
+ val urls = swagger.paths.keys.toList
+
+ urls should not be empty
+ urls should equal(urls.sorted)
+ }
+
+ it should "emit one entry per distinct url" in {
+ val urls = swagger.paths.keys.toList
+
+ urls.distinct.size should equal(urls.size)
+ }
+
+ "a list used as a response body" should "not leak a List's product elements as API fields" in {
+ // The defect this replaced: head and tl documented as if they belonged to the entity.
+ val body = List(SwaggerDefinitionsJSON.bankLevelEndpointTagResponseJson400)
+
+ val fieldNames = JSONFactory1_4_0.getAllFields(body).map(_.getName)
+
+ fieldNames should not contain "tl"
+ fieldNames should not contain "head"
+ }
+
+ it should "still describe the element type's own fields" in {
+ // The claim under test. An array-shaped body whose field table is empty documents nothing about
+ // what the array holds, which is the whole point of the field table.
+ val entity = SwaggerDefinitionsJSON.bankLevelEndpointTagResponseJson400
+ val entityFields = JSONFactory1_4_0.getAllFields(entity).map(_.getName)
+ entityFields should not be empty
+
+ val bodyFields = JSONFactory1_4_0.getAllFields(List(entity)).map(_.getName)
+
+ withClue(s"entity declares $entityFields but the array body describes $bodyFields: ") {
+ entityFields.foreach(name => bodyFields should contain(name))
+ }
+ }
+}
diff --git a/obp-api/src/test/scala/code/api/cache/InMemoryCachingTest.scala b/obp-api/src/test/scala/code/api/cache/InMemoryCachingTest.scala
new file mode 100644
index 0000000000..91c26d33e8
--- /dev/null
+++ b/obp-api/src/test/scala/code/api/cache/InMemoryCachingTest.scala
@@ -0,0 +1,105 @@
+package code.api.cache
+
+import org.scalatest.{FlatSpec, Matchers}
+
+import scala.concurrent.Await
+import scala.concurrent.duration._
+
+/**
+ * Covers the Guava-backed half of the cache.
+ *
+ * Redis has RedisDeserializeMissTest and MethodRoutingCacheInvalidationTest; the in-memory backend
+ * had nothing, despite six business call sites going through Caching.memoizeSyncWithImMemory -
+ * resource docs, web UI props, dynamic resource docs, and two reflection lookups in APIUtil. So the
+ * one thing a cache has to do, and the conditions under which it must not do it, were unasserted.
+ *
+ * The key-shape scenarios matter as much as the hit/miss ones. scalacache derives the cache key
+ * from the enclosing method and its non-excluded arguments, which is why the caller-supplied string
+ * ends up inside it, and why NewStyle's deleteKeysByPattern("*getMethodRoutings*") works at all.
+ * Anything that changes how keys are derived breaks that pattern matching silently: the cache still
+ * caches, the invalidation just stops finding anything. Pinning the shape here makes such a change
+ * show up as a test failure rather than as a stale entry in production.
+ */
+class InMemoryCachingTest extends FlatSpec with Matchers {
+
+ private val ttl = 10.seconds
+
+ /** A distinct key per scenario - the Guava cache is a shared object across this suite. */
+ private def freshKey(name: String): String = s"InMemoryCachingTest-$name-${System.nanoTime()}"
+
+ "memoizeSyncWithImMemory" should "compute once and serve the cached value afterwards" in {
+ val key = freshKey("hit")
+ var computations = 0
+ def call(): String = Caching.memoizeSyncWithImMemory(Some(key))(ttl) {
+ computations += 1
+ s"value-$computations"
+ }
+
+ call() should equal("value-1")
+ call() should equal("value-1")
+ call() should equal("value-1")
+ computations should equal(1)
+ }
+
+ it should "keep entries for different keys apart" in {
+ val keyA = freshKey("distinct-a")
+ val keyB = freshKey("distinct-b")
+ def call(key: String, value: String): String =
+ Caching.memoizeSyncWithImMemory(Some(key))(ttl)(value)
+
+ call(keyA, "a") should equal("a")
+ call(keyB, "b") should equal("b")
+ // If the two shared a key, the second would have served the first one's value.
+ call(keyA, "ignored") should equal("a")
+ call(keyB, "ignored") should equal("b")
+ }
+
+ it should "not cache when the ttl is zero" in {
+ val key = freshKey("zero-ttl")
+ var computations = 0
+ def call(): Int = Caching.memoizeSyncWithImMemory(Some(key))(Duration.Zero) {
+ computations += 1
+ computations
+ }
+
+ call(); call()
+ computations should equal(2)
+ }
+
+ it should "not cache when no key is given" in {
+ var computations = 0
+ def call(): Int = Caching.memoizeSyncWithImMemory(None)(ttl) {
+ computations += 1
+ computations
+ }
+
+ call(); call()
+ computations should equal(2)
+ }
+
+ it should "put the caller's key inside the derived cache key" in {
+ // This is the contract deleteKeysByPattern relies on. It is asserted through countKeys, which
+ // matches against the keys actually stored in the Guava cache.
+ val key = freshKey("shape")
+ Caching.memoizeSyncWithImMemory(Some(key))(ttl)("stored")
+
+ InMemory.countKeys(s"*$key*") should equal(1)
+ InMemory.countKeys(s"*$key-no-such-suffix*") should equal(0)
+ }
+
+ "memoizeWithImMemory" should "compute once for a Future-returning block" in {
+ val key = freshKey("future-hit")
+ var computations = 0
+ def call(): String = Await.result(
+ Caching.memoizeWithImMemory(Some(key))(ttl) {
+ computations += 1
+ scala.concurrent.Future.successful(s"value-$computations")
+ },
+ 10.seconds
+ )
+
+ call() should equal("value-1")
+ call() should equal("value-1")
+ computations should equal(1)
+ }
+}
diff --git a/obp-api/src/test/scala/code/api/cache/RedisDeserializeMissTest.scala b/obp-api/src/test/scala/code/api/cache/RedisDeserializeMissTest.scala
index c44b3f1ec4..0cc4fb1160 100644
--- a/obp-api/src/test/scala/code/api/cache/RedisDeserializeMissTest.scala
+++ b/obp-api/src/test/scala/code/api/cache/RedisDeserializeMissTest.scala
@@ -5,11 +5,16 @@ import org.scalatest.{FlatSpec, Matchers}
/**
* Guards the cache self-healing contract of Redis.deserialize.
*
- * The Kryo codec used for Redis-backed memoization must THROW when the cached
- * bytes cannot be decoded (corrupt entry, class-shape change across a redeploy,
- * Kryo registration drift). scalacache treats a throwing cache read as a MISS:
- * it recomputes the value from the source block and repopulates the key, so the
- * cache self-heals on the next call.
+ * The Kryo codec used for Redis-backed memoization must REPORT A FAILURE when the cached bytes
+ * cannot be decoded (corrupt entry, class-shape change across a redeploy, Kryo registration
+ * drift), and scalacache must turn that into a MISS: recompute from the source block, repopulate
+ * the key, self-heal on the next call.
+ *
+ * How the failure is reported changed with scalacache 0.28. The codec used to throw from
+ * deserialize; it now returns Left(FailedToDecode) from decode. The contract is unchanged, but the
+ * machinery moved: RedisCacheBase.doGet raises the Left, and AbstractCache._caching - the path
+ * memoize goes through - wraps the read in handleNonFatal and substitutes None. Reading only doGet
+ * suggests the error reaches the caller; it does not.
*
* The old behaviour returned the sentinel "NONE".asInstanceOf[T] instead, which
* scalacache treated as a valid HIT — every caller expecting the real type got a
@@ -20,21 +25,24 @@ class RedisDeserializeMissTest extends FlatSpec with Matchers {
private def codec[T](implicit m: Manifest[T]) = Redis.anyToByte[T]
- "Redis codec deserialize" should "throw on undecodable bytes instead of returning a sentinel value" in {
+ "Redis codec decode" should "report a failure on undecodable bytes instead of returning a sentinel value" in {
val garbage: Array[Byte] = Array[Byte](0x7f, 0x00, 0x33, -1, 42, 9, 88, 0x11)
- an[Exception] should be thrownBy codec[List[String]].deserialize(garbage)
+ codec[List[String]].decode(garbage).isLeft shouldBe true
}
it should "never yield the legacy \"NONE\" sentinel for corrupt bytes" in {
val garbage: Array[Byte] = Array[Byte](-128, -1, -2, -3, 0, 1, 2, 3)
- val outcome = scala.util.Try(codec[String].deserialize(garbage))
- outcome.isFailure shouldBe true
- outcome.toOption should not be Some("NONE")
+ val outcome = codec[String].decode(garbage)
+ outcome.isLeft shouldBe true
+ // Named explicitly, and asserted on the Either rather than through a projection: after the
+ // line above, `outcome.right.toOption` is None whatever decode did, so that form held for
+ // every possible implementation - including the sentinel this suite exists to rule out.
+ outcome should not be Right("NONE")
}
- it should "round-trip a value serialized by the same codec" in {
+ it should "round-trip a value encoded by the same codec" in {
val value = List("mapped", "rest_vMar2019", "rabbitmq_vOct2024")
- val bytes = codec[List[String]].serialize(value)
- codec[List[String]].deserialize(bytes) shouldBe value
+ val bytes = codec[List[String]].encode(value)
+ codec[List[String]].decode(bytes) shouldBe Right(value)
}
}
diff --git a/obp-api/src/test/scala/code/api/dynamic/entity/query/JoinQuerySpec.scala b/obp-api/src/test/scala/code/api/dynamic/entity/query/JoinQuerySpec.scala
index de91eb3ff3..7730572ea6 100644
--- a/obp-api/src/test/scala/code/api/dynamic/entity/query/JoinQuerySpec.scala
+++ b/obp-api/src/test/scala/code/api/dynamic/entity/query/JoinQuerySpec.scala
@@ -85,7 +85,7 @@ class JoinQuerySpec extends FlatSpec with Matchers {
"QueryPlanner join resolution" should "infer the only reference edge (child -> parent)" in {
val plan = planJoin(RawJoin(Quantifier.Exists, "Contract", None, Nil), contractSingleEdge)
plan.isRight shouldBe true
- plan.right.get.joins shouldBe List(JoinClause(Quantifier.Exists, "Contract", "partner_id", onChild = true, Nil))
+ plan.toOption.get.joins shouldBe List(JoinClause(Quantifier.Exists, "Contract", "partner_id", onChild = true, Nil))
}
it should "reject an ambiguous join when two edges exist and no via is given" in {
@@ -94,7 +94,7 @@ class JoinQuerySpec extends FlatSpec with Matchers {
it should "resolve the edge when via picks one of several candidates" in {
val plan = planJoin(RawJoin(Quantifier.Exists, "Contract", Some("seller_id"), Nil), contractTwoEdges)
- plan.right.get.joins.head.linkField shouldBe "seller_id"
+ plan.toOption.get.joins.head.linkField shouldBe "seller_id"
}
it should "reject a via that is not a real reference edge" in {
@@ -115,7 +115,7 @@ class JoinQuerySpec extends FlatSpec with Matchers {
val plan = QueryPlanner.plan(Nil, List(RawJoin(Quantifier.NotExists, "Contract", None, Nil)), Nil, Page.empty,
"Partner", partnerIndexed, Map("favourite_contract" -> "Contract"),
childInfoOf(Map("Contract" -> JoinTargetInfo(Map.empty, Map.empty))))
- plan.right.get.joins shouldBe List(JoinClause(Quantifier.NotExists, "Contract", "favourite_contract", onChild = false, Nil))
+ plan.toOption.get.joins shouldBe List(JoinClause(Quantifier.NotExists, "Contract", "favourite_contract", onChild = false, Nil))
}
// ----- planner: nested predicate validation against the CHILD -----
diff --git a/obp-api/src/test/scala/code/api/dynamic/entity/query/QuerySpec.scala b/obp-api/src/test/scala/code/api/dynamic/entity/query/QuerySpec.scala
index ccea41de63..5694860404 100644
--- a/obp-api/src/test/scala/code/api/dynamic/entity/query/QuerySpec.scala
+++ b/obp-api/src/test/scala/code/api/dynamic/entity/query/QuerySpec.scala
@@ -22,7 +22,7 @@ class QuerySpec extends FlatSpec with Matchers {
"active" -> FieldSpec(DynamicEntityFieldType.boolean, "scalar"),
"geom" -> FieldSpec(DynamicEntityFieldType.json, "spatial")
)
- private val fieldTypes = indexed.mapValues(_.fieldType).toMap
+ private val fieldTypes = indexed.map { case (name, field) => name -> field.fieldType }
// ----- QueryParamParser -----
diff --git a/obp-api/src/test/scala/code/api/http4sbridge/Http4sServerIntegrationTest.scala b/obp-api/src/test/scala/code/api/http4sbridge/Http4sServerIntegrationTest.scala
index 7ed98ce8a3..2b2f8b04f7 100644
--- a/obp-api/src/test/scala/code/api/http4sbridge/Http4sServerIntegrationTest.scala
+++ b/obp-api/src/test/scala/code/api/http4sbridge/Http4sServerIntegrationTest.scala
@@ -9,7 +9,7 @@ import org.json4s.JsonAST.JObject
import com.openbankproject.commons.util.JsonAliases.parse
import org.scalatest.Tag
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.concurrent.{ExecutionContext, Future, Await}
import scala.concurrent.duration._
diff --git a/obp-api/src/test/scala/code/api/util/DateFormatConcurrencyTest.scala b/obp-api/src/test/scala/code/api/util/DateFormatConcurrencyTest.scala
index 6d95889810..b299ecb948 100644
--- a/obp-api/src/test/scala/code/api/util/DateFormatConcurrencyTest.scala
+++ b/obp-api/src/test/scala/code/api/util/DateFormatConcurrencyTest.scala
@@ -6,7 +6,7 @@ import java.util.concurrent.{CountDownLatch, Executors, TimeUnit}
import net.liftweb.common.Full
import org.scalatest.{FlatSpec, Matchers}
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
/**
* SimpleDateFormat is not thread-safe: parse and format both mutate the internal Calendar,
diff --git a/obp-api/src/test/scala/code/api/util/JavaWebSignatureTest.scala b/obp-api/src/test/scala/code/api/util/JavaWebSignatureTest.scala
index 2444d640dd..7eadd0a5c8 100644
--- a/obp-api/src/test/scala/code/api/util/JavaWebSignatureTest.scala
+++ b/obp-api/src/test/scala/code/api/util/JavaWebSignatureTest.scala
@@ -24,11 +24,11 @@ class JavaWebSignatureTest extends V400ServerSetup {
object Function1 extends Tag("signRequest")
object Function2 extends Tag("verifyJws")
object ApiEndpoint1 extends Tag(nameOf(Implementations4_0_0.verifyRequestSignResponse))
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v1_2_1/API1_2_1Test.scala b/obp-api/src/test/scala/code/api/v1_2_1/API1_2_1Test.scala
index a54337e39a..12e51ef796 100644
--- a/obp-api/src/test/scala/code/api/v1_2_1/API1_2_1Test.scala
+++ b/obp-api/src/test/scala/code/api/v1_2_1/API1_2_1Test.scala
@@ -36,7 +36,11 @@ import code.api.util.ErrorMessages._
import code.bankconnectors.Connector
import code.setup.{APIResponse, DefaultUsers, PrivateUser2AccountsAndSetUpWithTestData, ServerSetupWithTestData}
import code.views.Views
-import com.openbankproject.commons.model._
+// ErrorMessage is excluded: this file is in package code.api.v1_2_1, which defines its
+// own ErrorMessage, and that one shadows the wildcard-imported commons class. Both are
+// case class ErrorMessage(code: Int, message: String), so resolution never changed the
+// behaviour here - the exclusion just states which one the extract calls below mean.
+import com.openbankproject.commons.model.{ErrorMessage => _, _}
import org.json4s._
import com.openbankproject.commons.util.JsonAliases._
import net.liftweb.util.Helpers._
@@ -1791,7 +1795,7 @@ class API1_2_1Test extends ServerSetupWithTestData with DefaultUsers with Privat
reply.code should equal (200)
val permissions = reply.body.extract[PermissionsJSON]
- def stringNotEmpty(s : String) {
+ def stringNotEmpty(s : String): Unit = {
s should not equal null
s should not equal ""
}
diff --git a/obp-api/src/test/scala/code/api/v1_3_0/PhysicalCardsTest.scala b/obp-api/src/test/scala/code/api/v1_3_0/PhysicalCardsTest.scala
index 4e54ad7bec..9741f36492 100644
--- a/obp-api/src/test/scala/code/api/v1_3_0/PhysicalCardsTest.scala
+++ b/obp-api/src/test/scala/code/api/v1_3_0/PhysicalCardsTest.scala
@@ -22,13 +22,13 @@ class PhysicalCardsTest extends ServerSetup with DefaultUsers with DefaultConnec
lazy val accountCurrency = "EUR"
lazy val account = createAccount(bank.bankId, AccountId(accId), accountCurrency)
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
//use the mock connector
Connector.connector.default.set(MockedCardConnector)
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
//reset the default connector
Connector.connector.default.set(Connector.buildOne)
diff --git a/obp-api/src/test/scala/code/api/v1_4_0/AtmsTest.scala b/obp-api/src/test/scala/code/api/v1_4_0/AtmsTest.scala
index 5d23f3acd5..ed9d63ddd0 100644
--- a/obp-api/src/test/scala/code/api/v1_4_0/AtmsTest.scala
+++ b/obp-api/src/test/scala/code/api/v1_4_0/AtmsTest.scala
@@ -197,13 +197,13 @@ class AtmsTest extends V140ServerSetup with DefaultUsers {
/*
So we can test the API layer, rather than the connector, use a mock connector.
*/
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
//use the mock connector
Atms.atmsProvider.default.set(mockConnector)
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
//reset the default connector
Atms.atmsProvider.default.set(Atms.buildOne)
diff --git a/obp-api/src/test/scala/code/api/v1_4_0/BranchesTest.scala b/obp-api/src/test/scala/code/api/v1_4_0/BranchesTest.scala
index e9d6239ca1..f379e80ab2 100644
--- a/obp-api/src/test/scala/code/api/v1_4_0/BranchesTest.scala
+++ b/obp-api/src/test/scala/code/api/v1_4_0/BranchesTest.scala
@@ -252,13 +252,13 @@ class BranchesTest extends V140ServerSetup with DefaultUsers {
/*
So we can test the API layer, rather than the connector, use a mock connector.
*/
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
//use the mock connector
Branches.branchesProvider.default.set(mockConnector)
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
//reset the default connector
Branches.branchesProvider.default.set(Branches.buildOne)
diff --git a/obp-api/src/test/scala/code/api/v1_4_0/CustomerTest.scala b/obp-api/src/test/scala/code/api/v1_4_0/CustomerTest.scala
index 8fc956b9d0..00ed6e2484 100644
--- a/obp-api/src/test/scala/code/api/v1_4_0/CustomerTest.scala
+++ b/obp-api/src/test/scala/code/api/v1_4_0/CustomerTest.scala
@@ -37,11 +37,11 @@ class CustomerTest extends V200ServerSetup with DefaultUsers {
}
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
CustomerX.customerProvider.vend.bulkDeleteCustomers()
UserCustomerLink.userCustomerLink.vend.bulkDeleteUserCustomerLinks()
diff --git a/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0RootEnumListTest.scala b/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0RootEnumListTest.scala
new file mode 100644
index 0000000000..ebc7eeed56
--- /dev/null
+++ b/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0RootEnumListTest.scala
@@ -0,0 +1,71 @@
+package code.api.v1_4_0
+
+import code.api.util.AuthenticationType
+import org.json4s.JsonAST.{JNothing, JString, JValue}
+import org.json4s.native.JsonMethods.parse
+import org.scalatest.{FlatSpec, Matchers}
+
+/**
+ * A bare list of enumeration values must publish the enumeration, not an anonymous object.
+ *
+ * The scalar vocabulary in translateEntity - string, integer, boolean, and the EnumValue case that
+ * emits `{"type":"string","enum":[...]}` - lives in the per-field loop, keyed by field name. It is
+ * not reachable from translateEntity(value) itself, which only knows how to describe an object by
+ * reflecting over its constructor arguments.
+ *
+ * That matters for a body that IS a bare list. Describing it as an array of its head means
+ * describing the head, and if the head is an enumeration value, reflection finds no constructor
+ * arguments and answers `{"properties":{},"type":"object"}` - the enumeration's members are lost.
+ *
+ * 2.12 kept them by accident: it reflected over the cons cell, so `head` was a *field*, and a field
+ * whose value is an EnumValue goes through the case that emits the enum. The published body was
+ * `{"head":{"type":"string","enum":[...]},"tl":{...}}` - wrong shape, right members.
+ *
+ * Twelve published request bodies have this shape today, across createAuthenticationTypeValidation
+ * and updateAuthenticationTypeValidation in five API versions. Nothing had compared them: the
+ * contract suite records typed_request_body in its baseline but only ever diffs the response side.
+ */
+class JSONFactory1_4_0RootEnumListTest extends FlatSpec with Matchers {
+
+ private def schema(entity: Any): JValue = parse(JSONFactory1_4_0.translateEntity(entity, false))
+
+ private def typeOf(v: JValue): Option[String] = (v \ "type").toOption.collect { case JString(t) => t }
+
+ "a bare list of enumeration values" should "be described as an array" in {
+ typeOf(schema(List(AuthenticationType.DirectLogin))) should equal(Some("array"))
+ }
+
+ it should "carry the enumeration's members under items" in {
+ val items = schema(List(AuthenticationType.DirectLogin)) \ "items"
+
+ withClue(s"items was ${org.json4s.native.JsonMethods.compact(org.json4s.native.JsonMethods.render(items))}: ") {
+ typeOf(items) should equal(Some("string"))
+ (items \ "enum") should not equal JNothing
+ org.json4s.native.JsonMethods.compact(
+ org.json4s.native.JsonMethods.render(items \ "enum")) should include("DirectLogin")
+ }
+ }
+
+ // The scalar vocabulary has to reach the element for every kind it covers, not only enums.
+ "a bare list of strings" should "have string items" in {
+ typeOf(schema(List("a")) \ "items") should equal(Some("string"))
+ }
+
+ "a bare list of integers" should "have integer items" in {
+ typeOf(schema(List(1)) \ "items") should equal(Some("integer"))
+ }
+
+ "a bare list of booleans" should "have boolean items" in {
+ typeOf(schema(List(true)) \ "items") should equal(Some("boolean"))
+ }
+
+ // And an object element must still be described by reflecting over it, as before.
+ case class Tag(tag_id: String)
+
+ "a bare list of objects" should "still describe the object's fields" in {
+ val items = schema(List(Tag("x"))) \ "items"
+
+ typeOf(items) should equal(Some("object"))
+ (items \\ "tag_id") should not equal JNothing
+ }
+}
diff --git a/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0RootListTest.scala b/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0RootListTest.scala
new file mode 100644
index 0000000000..3055079473
--- /dev/null
+++ b/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0RootListTest.scala
@@ -0,0 +1,67 @@
+package code.api.v1_4_0
+
+import org.json4s.JsonAST.{JNothing, JString, JValue}
+import org.json4s.native.JsonMethods.parse
+import org.scalatest.{FlatSpec, Matchers}
+
+/**
+ * A response body that is a bare Scala collection must be described as an array of its element.
+ *
+ * translateEntity returns early for a JArray, emitting `{"type":"array","items":{…}}` from the
+ * first element. A Scala List reaching it has no such branch: it falls through to the field map,
+ * where it is answered with no fields at all, and the endpoint publishes `"properties": {}`.
+ *
+ * That case exists for a reason - reflecting over a List yields head and tail rather than API
+ * fields, and on 2.13 it does not even terminate, since Nil carries a static EmptyUnzip whose
+ * elements are Nil, so following it returns to Nil for ever. Answering with nothing avoids the
+ * recursion but throws away the element, which is the only thing worth publishing. Under 2.12 the
+ * same endpoints leaked head and tl and at least carried the element's real schema under head.
+ *
+ * Three endpoints return this shape today - getSystemLevelEndpointTags, getBankLevelEndpointTags,
+ * createUserWithAccountAccessById - across five API versions each.
+ */
+class JSONFactory1_4_0RootListTest extends FlatSpec with Matchers {
+
+ case class Tag(tag_id: String, tag_name: String)
+
+ private def schema(entity: Any): JValue = parse(JSONFactory1_4_0.translateEntity(entity, false))
+
+ private def typeOf(v: JValue): Option[String] = (v \ "type").toOption.collect { case JString(t) => t }
+
+ "a bare List response" should "be described as an array" in {
+ typeOf(schema(List(Tag("a", "b")))) should equal(Some("array"))
+ }
+
+ it should "describe the element's fields under items" in {
+ val items = schema(List(Tag("a", "b"))) \ "items"
+
+ withClue(s"items was ${org.json4s.native.JsonMethods.compact(org.json4s.native.JsonMethods.render(items))}: ") {
+ (items \\ "tag_id") should not equal JNothing
+ (items \\ "tag_name") should not equal JNothing
+ }
+ }
+
+ it should "not leak the cons cell's own members" in {
+ val rendered = JSONFactory1_4_0.translateEntity(List(Tag("a", "b")), false)
+
+ rendered should not include "\"tl\""
+ rendered should not include "\"next\""
+ rendered should not include "\"head\""
+ }
+
+ // The empty case is what makes the recursion impossible: nothing is reflected over, so Nil's
+ // EmptyUnzip is never followed.
+ "an empty List response" should "be described as an array without items" in {
+ typeOf(schema(List.empty[Tag])) should equal(Some("array"))
+ }
+
+ it should "terminate rather than recurse through Nil" in {
+ noException should be thrownBy JSONFactory1_4_0.translateEntity(Nil, false)
+ }
+
+ // A Map is an Iterable too, and is not a JSON array - it must keep whatever it did before rather
+ // than be reinterpreted as an array of its first entry.
+ "a Map" should "not be described as an array" in {
+ typeOf(schema(Map("a" -> 1))) should not equal Some("array")
+ }
+}
diff --git a/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0_LightTest.scala b/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0_LightTest.scala
index 5ae2e0b554..d5bcb8ce6f 100644
--- a/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0_LightTest.scala
+++ b/obp-api/src/test/scala/code/api/v1_4_0/JSONFactory1_4_0_LightTest.scala
@@ -57,56 +57,63 @@ class JSONFactory1_4_0_LightTest extends FeatureSpec
scenario("getJValueAndAllFields -input is the oneObject, basic no nested, no List inside") {
val listFields: List[Field] = JSONFactory1_4_0.getAllFields(oneObject)
-
- val expectedListFieldsString = "List(private final java.lang.String code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.string1, " +
- "private final code.api.v1_4_0.JSONFactory1_4_0_LightTest code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.$outer)"
- listFields.toString shouldBe (expectedListFieldsString)
-// println(listFields)
+ // By name, like the scenarios below. This one used to assert the whole rendering, which
+ // named $outer - the capture of the enclosing test instance that declaring ClassOne inside
+ // a scenario produces - and fixed the order two fields come back in, even though
+ // getAllFields builds its result through toSet and only keeps insertion order while the set
+ // is small. Neither is this method's contract.
+ listFields.map(_.getName) should contain("string1")
}
scenario("getJValueAndAllFields -input it the nestedClass") {
val listFields: List[Field] = JSONFactory1_4_0.getAllFields(nestedClass)
- val expectedListFieldsString = "List(" +
- "public static final long scala.collection.immutable.Nil$.serialVersionUID, public static scala.collection.immutable.Nil$ scala.collection.immutable.Nil$.MODULE$, " +
- "private final code.api.v1_4_0.JSONFactory1_4_0_LightTest code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.$outer, " +
- "private final code.api.v1_4_0.JSONFactory1_4_0_LightTest code.api.v1_4_0.JSONFactory1_4_0_LightTest$NestedClass$1.$outer, " +
- "private final java.lang.String code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.string1, " +
- "private final scala.collection.immutable.List code.api.v1_4_0.JSONFactory1_4_0_LightTest$NestedClass$1.classes)"
- listFields.toString shouldBe (expectedListFieldsString)
-// println(listFields)
+
+ // Asserted by the names the entity declares, not by an exact rendering of the whole list.
+ // The old assertion pinned the entire toString, ordering included, and with it the
+ // compiler and library internals that reflection also returns - $outer, Nil$.MODULE$,
+ // Nil$.serialVersionUID. None of that is what getAllFields is for, and all of it moves
+ // between Scala versions: 2.13's Nil adds an EmptyUnzip field and orders members
+ // differently, so the string could not survive the upgrade no matter what the method did.
+ val fieldNames = listFields.map(_.getName)
+ fieldNames should contain("classes")
+ fieldNames should contain("string1")
}
- scenario("getJValueAndAllFields - input is the List[nestedClass]") {
- val listFields: List[Field] = JSONFactory1_4_0.getAllFields(List(oneObject))
-// it should return all the fields in the List
- val expectedListFieldsString = "List(private final java.lang.String code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.string1, " +
- "private final code.api.v1_4_0.JSONFactory1_4_0_LightTest code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.$outer, " +
- "public static scala.collection.immutable.Nil$ scala.collection.immutable.Nil$.MODULE$, " +
- "public static final long scala.collection.immutable.Nil$.serialVersionUID)"
- listFields.toString shouldBe (expectedListFieldsString)
-// println(listFields)
+ scenario("getJValueAndAllFields -input is a List of entities") {
+ // Restored. It was removed on the theory that a List documented `head` and `tl` - which was
+ // wrong: getAllFields has always had a branch for a root-level collection, and a non-empty
+ // List is a `::`, a case class, so it is a Product at run time even though 2.13 drops
+ // List <: Product at the type level. What the old expected value did pin was the reflection
+ // noise around it, Nil$.MODULE$ and Nil$.serialVersionUID, so it comes back asserting the
+ // entity's own field names instead of a rendering.
+ val listFields: List[Field] = JSONFactory1_4_0.getAllFields(List(oneObject, oneObject))
+ val fieldNames = listFields.map(_.getName)
+
+ fieldNames should contain ("string1")
+ fieldNames should not contain "tl"
+ fieldNames should not contain "MODULE$"
}
+
scenario("getJValueAndAllFields -input it the complexNestedClass") {
val listFields: List[Field] = JSONFactory1_4_0.getAllFields(complexNestedClass)
+ val fieldNames = listFields.map(_.getName)
+
+ // The assertions that named library and JDK internals - Nil$.MODULE$, None$, Some.value,
+ // $outer, java.lang.String.hash and its serialVersionUID - are gone. They pinned reflection
+ // output that is not this method's contract and that moves between Scala and JDK versions;
+ // one of them even asserted that String.hash appears immediately before the entity's own
+ // field. What remains checks the fields the entities actually declare.
- listFields.toString contains ("private final java.lang.String code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.complexNestedClassString, ") shouldBe (true)
- listFields.toString contains ("private final int code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.complexNestedClassInt, ") shouldBe (true)
- listFields.toString contains ("private final code.api.v1_4_0.JSONFactory1_4_0_LightTest code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.$outer,") shouldBe (true)
- listFields.toString contains ("public static final long scala.collection.immutable.Nil$.serialVersionUID, ") shouldBe (true)
- listFields.toString contains ("private final scala.collection.immutable.List code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.classes2, ") shouldBe (true)
- listFields.toString contains ("private final java.lang.String code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassTwo$1.string2, ") shouldBe (true)
- listFields.toString contains ("public static scala.collection.immutable.Nil$ scala.collection.immutable.Nil$.MODULE$, public static final long scala.None$.serialVersionUID, ") shouldBe (true)
- listFields.toString contains ("private final code.api.v1_4_0.JSONFactory1_4_0_LightTest code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.$outer, ") shouldBe (true)
- listFields.toString contains ("private final scala.Option code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.complexNestedClassOptionSomeInt") shouldBe (true)
- listFields.toString contains ("public static scala.None$ scala.None$.MODULE$, private final java.lang.Object scala.Some.value, private final scala.collection.immutable.List code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.classes1, ") shouldBe (true)
- listFields.toString contains ("private final java.util.Date code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.complexNestedClassDate, ") shouldBe (true)
- listFields.toString contains ("private final scala.collection.immutable.List code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassTwo$1.strings2, ") shouldBe (true)
- listFields.toString contains ("private int java.lang.String.hash, private final java.lang.String code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassOne$1.string1, ") shouldBe (true)
- listFields.toString contains ("private static final long java.lang.String.serialVersionUID,") shouldBe (true)
- listFields.toString contains ("private final code.api.v1_4_0.JSONFactory1_4_0_LightTest code.api.v1_4_0.JSONFactory1_4_0_LightTest$ClassTwo$1.$outer, ") shouldBe (true)
- listFields.toString contains ("private final scala.Option code.api.v1_4_0.JSONFactory1_4_0_LightTest$ComplexNestedClass$1.complexNestedClassOptionNoneIn") shouldBe (true)
+ fieldNames should contain ("complexNestedClassString")
+ fieldNames should contain ("complexNestedClassInt")
+ fieldNames should contain ("classes2")
+ fieldNames should contain ("string2")
+ fieldNames should contain ("complexNestedClassOptionSomeInt")
+ fieldNames should contain ("complexNestedClassDate")
+ fieldNames should contain ("strings2")
+ fieldNames should contain ("complexNestedClassOptionNoneInt")
// println(listFields)
}
diff --git a/obp-api/src/test/scala/code/api/v1_4_0/ProductsTest.scala b/obp-api/src/test/scala/code/api/v1_4_0/ProductsTest.scala
index 88f6a2995f..972ee69da0 100644
--- a/obp-api/src/test/scala/code/api/v1_4_0/ProductsTest.scala
+++ b/obp-api/src/test/scala/code/api/v1_4_0/ProductsTest.scala
@@ -86,13 +86,13 @@ class ProductsTest extends ServerSetup with DefaultUsers with V140ServerSetup {
/*
So we can test the API layer, rather than the connector, use a mock connector.
*/
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
//use the mock connector
Products.productsProvider.default.set(mockConnector)
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
//reset the default connector
Products.productsProvider.default.set(Products.buildOne)
diff --git a/obp-api/src/test/scala/code/api/v2_0_0/EntitlementTests.scala b/obp-api/src/test/scala/code/api/v2_0_0/EntitlementTests.scala
index 5ebf3faf93..206afc7b44 100644
--- a/obp-api/src/test/scala/code/api/v2_0_0/EntitlementTests.scala
+++ b/obp-api/src/test/scala/code/api/v2_0_0/EntitlementTests.scala
@@ -14,11 +14,11 @@ import org.json4s.native.Serialization.write
class EntitlementTests extends V200ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v2_1_0/CreateBranchTest.scala b/obp-api/src/test/scala/code/api/v2_1_0/CreateBranchTest.scala
index 460d8a7e25..884ec5532c 100644
--- a/obp-api/src/test/scala/code/api/v2_1_0/CreateBranchTest.scala
+++ b/obp-api/src/test/scala/code/api/v2_1_0/CreateBranchTest.scala
@@ -12,11 +12,11 @@ import org.json4s.native.Serialization.write
class CreateBranchTest extends V210ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v2_1_0/CreateTransactionTypeTest.scala b/obp-api/src/test/scala/code/api/v2_1_0/CreateTransactionTypeTest.scala
index bac6305cc2..3b9b9057c7 100644
--- a/obp-api/src/test/scala/code/api/v2_1_0/CreateTransactionTypeTest.scala
+++ b/obp-api/src/test/scala/code/api/v2_1_0/CreateTransactionTypeTest.scala
@@ -33,11 +33,11 @@ class CreateTransactionTypeTest extends V210ServerSetup with DefaultUsers {
"Many data here", //description,
AmountOfMoneyJsonV121("EUR", "0"))
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
MappedTransactionType.bulkDelete_!!()
}
diff --git a/obp-api/src/test/scala/code/api/v2_1_0/SandboxDataLoadingTest.scala b/obp-api/src/test/scala/code/api/v2_1_0/SandboxDataLoadingTest.scala
index aecef931bd..646fdb18de 100644
--- a/obp-api/src/test/scala/code/api/v2_1_0/SandboxDataLoadingTest.scala
+++ b/obp-api/src/test/scala/code/api/v2_1_0/SandboxDataLoadingTest.scala
@@ -80,7 +80,7 @@ class SandboxDataLoadingTest extends FlatSpec with SendServerRequests with Match
val SUCCESS: Int = 201
val FAILED: Int = 400
- implicit val formats = Serialization.formats(NoTypeHints)
+ implicit val formats: Formats = Serialization.formats(NoTypeHints)
//tests running on the actual sandbox?
val server = TestServer
diff --git a/obp-api/src/test/scala/code/api/v2_1_0/UpdateConsumerRedirectUrlTest.scala b/obp-api/src/test/scala/code/api/v2_1_0/UpdateConsumerRedirectUrlTest.scala
index b3b839c0b6..6b97670fba 100644
--- a/obp-api/src/test/scala/code/api/v2_1_0/UpdateConsumerRedirectUrlTest.scala
+++ b/obp-api/src/test/scala/code/api/v2_1_0/UpdateConsumerRedirectUrlTest.scala
@@ -11,11 +11,11 @@ import org.json4s.native.Serialization.write
class UpdateConsumerRedirectUrlTest extends V210ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v2_2_0/CreateCounterpartyTest.scala b/obp-api/src/test/scala/code/api/v2_2_0/CreateCounterpartyTest.scala
index b9f4e56b00..ca2b1bb262 100644
--- a/obp-api/src/test/scala/code/api/v2_2_0/CreateCounterpartyTest.scala
+++ b/obp-api/src/test/scala/code/api/v2_2_0/CreateCounterpartyTest.scala
@@ -13,11 +13,11 @@ import org.json4s.native.Serialization.write
class CreateCounterpartyTest extends V220ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v3_0_0/BranchesTest.scala b/obp-api/src/test/scala/code/api/v3_0_0/BranchesTest.scala
index 579b8e4d8d..d060cff17f 100644
--- a/obp-api/src/test/scala/code/api/v3_0_0/BranchesTest.scala
+++ b/obp-api/src/test/scala/code/api/v3_0_0/BranchesTest.scala
@@ -304,13 +304,13 @@ class BranchesTest extends V300ServerSetup with DefaultUsers {
/*
So we can test the API layer, rather than the connector, use a mock connector.
*/
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
//use the mock connector
Branches.branchesProvider.default.set(mockConnector)
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
//reset the default connector
Branches.branchesProvider.default.set(Branches.buildOne)
@@ -319,9 +319,9 @@ class BranchesTest extends V300ServerSetup with DefaultUsers {
override def beforeEach(): Unit = {
super.beforeEach()
Connector.connector.vend.createOrUpdateBank(bankId, "exists bank", "bank", "string", "string", "string", "string", "string", "string", None)
- Await.result(Connector.connector.vend.createOrUpdateBranch(deletedBranch, None),10 seconds)
- Await.result(Connector.connector.vend.createOrUpdateBranch(existsBranch1, None),10 seconds)
- Await.result(Connector.connector.vend.createOrUpdateBranch(existsBranch2, None),10 seconds)
+ Await.result(Connector.connector.vend.createOrUpdateBranch(deletedBranch, None),10.seconds)
+ Await.result(Connector.connector.vend.createOrUpdateBranch(existsBranch1, None),10.seconds)
+ Await.result(Connector.connector.vend.createOrUpdateBranch(existsBranch2, None),10.seconds)
}
override def afterEach(): Unit = super.afterEach()
diff --git a/obp-api/src/test/scala/code/api/v3_1_0/ConsentTest.scala b/obp-api/src/test/scala/code/api/v3_1_0/ConsentTest.scala
index 5d83a8e264..177f7af24e 100644
--- a/obp-api/src/test/scala/code/api/v3_1_0/ConsentTest.scala
+++ b/obp-api/src/test/scala/code/api/v3_1_0/ConsentTest.scala
@@ -46,11 +46,11 @@ import java.util.Date
class ConsentTest extends V310ServerSetup {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v4_0_0/AccountTagTest.scala b/obp-api/src/test/scala/code/api/v4_0_0/AccountTagTest.scala
index f0973a451b..c50d8ad507 100644
--- a/obp-api/src/test/scala/code/api/v4_0_0/AccountTagTest.scala
+++ b/obp-api/src/test/scala/code/api/v4_0_0/AccountTagTest.scala
@@ -77,7 +77,7 @@ class AccountTagTest extends V400ServerSetup {
val responseGet = makeGetRequest(requestGet)
responseGet.code should equal(200)
val tags = responseGet.body.extract[AccountTagsJSON].tags
- tags.exists(_.value == accountTag.value) equals true
+ tags.exists(_.value == accountTag.value) should equal(true)
val tagId = tags.map(_.id).headOption.getOrElse("")
val requestDelete = (v4_0_0_Request / "banks" / bankId / "accounts" / bankAccount.id / view / "metadata" / "tags" / tagId).DELETE <@ (user1)
diff --git a/obp-api/src/test/scala/code/api/v4_0_0/AccountTest.scala b/obp-api/src/test/scala/code/api/v4_0_0/AccountTest.scala
index 5b42238a0d..16f6ceb2a5 100644
--- a/obp-api/src/test/scala/code/api/v4_0_0/AccountTest.scala
+++ b/obp-api/src/test/scala/code/api/v4_0_0/AccountTest.scala
@@ -330,7 +330,7 @@ class AccountTest extends V400ServerSetup {
When("We make a request v4.0.0")
val request400 = (v4_0_0_Request / "management" / "accounts" / "account-routing-regex-query").POST
val postBody = getAccountByRoutingJson.copy(account_routing = AccountRoutingJsonV121("AccountNumber", "123456789-[A-Z]{3}"))
- val response400 = makePostRequest(request400, write())
+ val response400 = makePostRequest(request400, write(postBody))
Then("We should get a 401")
response400.code should equal(401)
And("error should be " + AuthenticatedUserIsRequired)
diff --git a/obp-api/src/test/scala/code/api/v4_0_0/BankAttributeTests.scala b/obp-api/src/test/scala/code/api/v4_0_0/BankAttributeTests.scala
index 695518aa30..f74fea4715 100644
--- a/obp-api/src/test/scala/code/api/v4_0_0/BankAttributeTests.scala
+++ b/obp-api/src/test/scala/code/api/v4_0_0/BankAttributeTests.scala
@@ -17,11 +17,11 @@ import org.scalatest.Tag
class BankAttributeTests extends V400ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v4_0_0/BankTests.scala b/obp-api/src/test/scala/code/api/v4_0_0/BankTests.scala
index 8d277273c8..ce5f907bae 100644
--- a/obp-api/src/test/scala/code/api/v4_0_0/BankTests.scala
+++ b/obp-api/src/test/scala/code/api/v4_0_0/BankTests.scala
@@ -21,11 +21,11 @@ import scala.concurrent.duration._
class BankTests extends V400ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v4_0_0/ConsentTests.scala b/obp-api/src/test/scala/code/api/v4_0_0/ConsentTests.scala
index c596c5118c..4c38fb7dee 100644
--- a/obp-api/src/test/scala/code/api/v4_0_0/ConsentTests.scala
+++ b/obp-api/src/test/scala/code/api/v4_0_0/ConsentTests.scala
@@ -11,11 +11,11 @@ import org.scalatest.Tag
class ConsentTests extends V400ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v4_0_0/EntitlementTests.scala b/obp-api/src/test/scala/code/api/v4_0_0/EntitlementTests.scala
index c5a6d18944..e25efe7c70 100644
--- a/obp-api/src/test/scala/code/api/v4_0_0/EntitlementTests.scala
+++ b/obp-api/src/test/scala/code/api/v4_0_0/EntitlementTests.scala
@@ -19,11 +19,11 @@ import org.scalatest.Tag
class EntitlementTests extends V400ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v4_0_0/GetScannedApiVersionsTest.scala b/obp-api/src/test/scala/code/api/v4_0_0/GetScannedApiVersionsTest.scala
index a51216e164..98eb9c05fd 100644
--- a/obp-api/src/test/scala/code/api/v4_0_0/GetScannedApiVersionsTest.scala
+++ b/obp-api/src/test/scala/code/api/v4_0_0/GetScannedApiVersionsTest.scala
@@ -35,7 +35,7 @@ import com.openbankproject.commons.model.ListResult
import com.openbankproject.commons.util.{ApiVersion, ScannedApiVersion}
import org.scalatest.Tag
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
class GetScannedApiVersionsTest extends V400ServerSetup with PropsReset {
/**
diff --git a/obp-api/src/test/scala/code/api/v5_0_0/BankTests.scala b/obp-api/src/test/scala/code/api/v5_0_0/BankTests.scala
index e33e291835..d49f7cd0f9 100644
--- a/obp-api/src/test/scala/code/api/v5_0_0/BankTests.scala
+++ b/obp-api/src/test/scala/code/api/v5_0_0/BankTests.scala
@@ -21,11 +21,11 @@ import scala.concurrent.duration._
class BankTests extends V500ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v5_1_0/AtmAttributeTest.scala b/obp-api/src/test/scala/code/api/v5_1_0/AtmAttributeTest.scala
index 8e168a5ef7..18ada11e3e 100644
--- a/obp-api/src/test/scala/code/api/v5_1_0/AtmAttributeTest.scala
+++ b/obp-api/src/test/scala/code/api/v5_1_0/AtmAttributeTest.scala
@@ -17,11 +17,11 @@ import org.scalatest.Tag
class AtmAttributeTest extends V510ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v5_1_0/AtmTest.scala b/obp-api/src/test/scala/code/api/v5_1_0/AtmTest.scala
index 87362e3a8e..50534663ca 100644
--- a/obp-api/src/test/scala/code/api/v5_1_0/AtmTest.scala
+++ b/obp-api/src/test/scala/code/api/v5_1_0/AtmTest.scala
@@ -19,11 +19,11 @@ import org.scalatest.Tag
class AtmTest extends V510ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v5_1_0/ResponseHeadersTest.scala b/obp-api/src/test/scala/code/api/v5_1_0/ResponseHeadersTest.scala
index a5fd12e7b2..ebc1ab362a 100644
--- a/obp-api/src/test/scala/code/api/v5_1_0/ResponseHeadersTest.scala
+++ b/obp-api/src/test/scala/code/api/v5_1_0/ResponseHeadersTest.scala
@@ -17,11 +17,11 @@ import org.scalatest.Tag
class ResponseHeadersTest extends V510ServerSetup with DefaultUsers {
- override def beforeAll() {
+ override def beforeAll(): Unit = {
super.beforeAll()
}
- override def afterAll() {
+ override def afterAll(): Unit = {
super.afterAll()
}
diff --git a/obp-api/src/test/scala/code/api/v7_0_0/Http4s700TransactionTest.scala b/obp-api/src/test/scala/code/api/v7_0_0/Http4s700TransactionTest.scala
index 86ebea072c..3c88fa69a3 100644
--- a/obp-api/src/test/scala/code/api/v7_0_0/Http4s700TransactionTest.scala
+++ b/obp-api/src/test/scala/code/api/v7_0_0/Http4s700TransactionTest.scala
@@ -9,7 +9,7 @@ import org.json4s.JsonAST.{JObject, JString}
import com.openbankproject.commons.util.JsonAliases.parse
import org.json4s.JValue
import org.scalatest.Tag
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
/**
* Integration tests for the v7 request-scoped transaction feature.
diff --git a/obp-api/src/test/scala/code/api/v7_0_0/V7ResourceDocsAggregationTest.scala b/obp-api/src/test/scala/code/api/v7_0_0/V7ResourceDocsAggregationTest.scala
index fed8f398e6..e5ce7f27b4 100644
--- a/obp-api/src/test/scala/code/api/v7_0_0/V7ResourceDocsAggregationTest.scala
+++ b/obp-api/src/test/scala/code/api/v7_0_0/V7ResourceDocsAggregationTest.scala
@@ -8,7 +8,7 @@ import org.json4s.JsonAST.{JArray, JObject, JString}
import com.openbankproject.commons.util.JsonAliases.parse
import org.scalatest.Tag
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import com.openbankproject.commons.util.JsonAliases.RichJField
/**
diff --git a/obp-api/src/test/scala/code/bankconnectors/ConnectorProxyObjectMethodsTest.scala b/obp-api/src/test/scala/code/bankconnectors/ConnectorProxyObjectMethodsTest.scala
new file mode 100644
index 0000000000..71c43610bc
--- /dev/null
+++ b/obp-api/src/test/scala/code/bankconnectors/ConnectorProxyObjectMethodsTest.scala
@@ -0,0 +1,146 @@
+package code.bankconnectors
+
+import code.setup.ServerSetupWithTestData
+import org.scalatest.Tag
+
+/**
+ * Reproduces the Object-method hole in ConnectorProxy.
+ *
+ * ConnectorProxy intercepts with ElementMatchers.any(), which covers the methods inherited from
+ * Object as well as the Connector ones. Whether that is safe depends entirely on what each handler
+ * does with a name it does not recognise, and InternalConnector's sends it to getFunction, which
+ * ends in openOrThrowException. So calling toString on that proxy - which anything that logs or
+ * interpolates it does - throws.
+ *
+ * Nothing in the suite stringifies a connector, which is why this went unnoticed. These scenarios
+ * do it deliberately.
+ */
+class ConnectorProxyObjectMethodsTest extends ServerSetupWithTestData {
+
+ object ProxyObjectMethods extends Tag("ConnectorProxyObjectMethods")
+
+ feature("A generated Connector proxy survives the methods every object has") {
+
+ scenario("toString on the internal connector does not throw", ProxyObjectMethods) {
+ // The internal connector is the sharp case: its handler treats an unknown method name as a
+ // dynamic connector method to look up and compile.
+ noException should be thrownBy InternalConnector.instance.toString
+ }
+
+ scenario("hashCode and equals on the internal connector do not throw", ProxyObjectMethods) {
+ noException should be thrownBy InternalConnector.instance.hashCode()
+ noException should be thrownBy InternalConnector.instance.equals(InternalConnector.instance)
+ }
+
+ scenario("a proxy can be used as a map key and printed", ProxyObjectMethods) {
+ // Both go through Object methods on the proxy, and both are things ordinary code does.
+ val connector = InternalConnector.instance
+ noException should be thrownBy Map(connector -> "internal").get(connector)
+ noException should be thrownBy s"connector is $connector"
+ }
+
+ scenario("the proxy connector answers Object methods too", ProxyObjectMethods) {
+ val proxy = ConnectorUtils.proxyConnector
+ noException should be thrownBy proxy.toString
+ noException should be thrownBy proxy.hashCode()
+ }
+
+ scenario("the members Connector inherits from MdcLoggable are answered, not compiled", ProxyObjectMethods) {
+ // Connector extends Helper.MdcLoggable, which contributes public abstract interface methods -
+ // logger(), clazzName(), the two _setter_ bridges - and a default initiate(). They are
+ // declared by MdcLoggable, not by Object, so excluding Object's methods does not cover them:
+ // they still reach the handler, and InternalConnector's reads any unrecognised name as a
+ // dynamic connector method to look up and compile.
+ //
+ // They cannot simply be left unintercepted either. Being abstract, something has to implement
+ // them or the generated class cannot be instantiated - which is why the fix belongs in the
+ // handler rather than in the element matcher.
+ val loggerMethod = classOf[Connector].getMethod("logger")
+
+ noException should be thrownBy loggerMethod.invoke(InternalConnector.instance)
+ noException should be thrownBy loggerMethod.invoke(ConnectorUtils.proxyConnector)
+ }
+
+ scenario("every method Connector inherits from outside its own API is answerable", ProxyObjectMethods) {
+ // A shape check rather than a list: anything on the interface that InternalConnector does not
+ // recognise as a connector method must still return rather than throw.
+ val allMethods = classOf[Connector].getMethods.toList
+
+ // The check invokes what it collects, so anything collected with side effects runs. One
+ // member qualifies: MdcLoggable's initiate(), a lifecycle hook - `protected def initiate()`,
+ // which a trait compiles to a public interface method, so getMethods returns it. Connector
+ // leaves it as the inherited no-op (Boot is the only overrider in the codebase), and that is
+ // what makes invoking it below safe. Pinned rather than assumed: give Connector a real
+ // initiate() and this fails here, before the loop runs it out of band.
+ withClue("Connector overrides initiate(); invoking it below would run a real lifecycle hook") {
+ allMethods.filter(_.getName == "initiate").map(_.getDeclaringClass) should
+ not contain classOf[Connector]
+ }
+
+ val inherited = allMethods
+ .filter(m => m.getParameterCount == 0)
+ .filter(m => m.getDeclaringClass != classOf[Connector])
+ .filter(m => m.getDeclaringClass != classOf[Object])
+ .filterNot(_.getName.contains("$default$"))
+
+ inherited should not be empty
+
+ val failures = inherited.flatMap { m =>
+ try { m.invoke(InternalConnector.instance); None }
+ catch { case e: java.lang.reflect.InvocationTargetException => Some(m.getName -> e.getCause.toString) }
+ }
+
+ withClue(s"methods that threw: $failures") { failures shouldBe empty }
+ }
+
+ scenario("a public val on Connector is answered rather than compiled", ProxyObjectMethods) {
+ // messageDocs is `val messageDocs = ArrayBuffer[MessageDoc]()` on the Connector trait. The map
+ // that decides what dynamic code may implement is built from decls filtered by
+ // `!t.isVal && !t.isVar`, so a val is absent from it and lands on the stub path with the
+ // MdcLoggable members. Pinning that it answers at all - it used to throw - and that what it
+ // answers is the stub's own buffer, which is worth knowing before someone writes to it.
+ noException should be thrownBy InternalConnector.instance.messageDocs
+
+ InternalConnector.instance.messageDocs should be theSameInstanceAs
+ InternalConnector.instance.messageDocs
+ }
+
+ scenario("StarConnector answers inherited members without routing them", ProxyObjectMethods) {
+ // The same shape check, against the third proxy. Its handler recognises $default$ accessors
+ // and sends everything else into MethodRouting resolution and invokeMethod - so logger and
+ // clazzName, which Connector inherits from MdcLoggable and no connector implements, are
+ // looked up as if they were connector calls, and counted as one in the outbound metrics.
+ val allMethods = classOf[Connector].getMethods.toList
+
+ // Same guard as the scenario above: the loop invokes what it collects, and initiate() is a
+ // lifecycle hook that Connector currently leaves as MdcLoggable's no-op.
+ withClue("Connector overrides initiate(); invoking it below would run a real lifecycle hook") {
+ allMethods.filter(_.getName == "initiate").map(_.getDeclaringClass) should
+ not contain classOf[Connector]
+ }
+
+ val inherited = allMethods
+ .filter(m => m.getParameterCount == 0)
+ .filter(m => m.getDeclaringClass != classOf[Connector])
+ .filter(m => m.getDeclaringClass != classOf[Object])
+ .filterNot(_.getName.contains("$default$"))
+
+ val failures = inherited.flatMap { m =>
+ try { m.invoke(StarConnector); None }
+ catch { case e: java.lang.reflect.InvocationTargetException => Some(m.getName -> e.getCause.toString) }
+ }
+
+ withClue(s"methods that threw: $failures") { failures shouldBe empty }
+ }
+
+ scenario("equality is still reference equality for a proxy", ProxyObjectMethods) {
+ // Worth pinning: if Object methods are ever routed to a delegate rather than handled by the
+ // proxy itself, two distinct proxies over the same delegate would start comparing equal.
+ val internal = InternalConnector.instance
+ val proxy = ConnectorUtils.proxyConnector
+
+ internal should equal(internal)
+ internal should not equal proxy
+ }
+ }
+}
diff --git a/obp-api/src/test/scala/code/bankconnectors/ProxyConnectorTest.scala b/obp-api/src/test/scala/code/bankconnectors/ProxyConnectorTest.scala
new file mode 100644
index 0000000000..3bcca36adb
--- /dev/null
+++ b/obp-api/src/test/scala/code/bankconnectors/ProxyConnectorTest.scala
@@ -0,0 +1,72 @@
+package code.bankconnectors
+
+import code.setup.ServerSetupWithTestData
+import com.openbankproject.commons.model.Bank
+import net.liftweb.common.{Box, Full}
+import org.scalatest.Tag
+
+import scala.concurrent.Await
+import scala.concurrent.duration._
+
+/**
+ * Covers `ConnectorUtils.proxyConnector`, registered as the "proxy" connector.
+ *
+ * Its own comment says it exists for unit tests, yet nothing referenced it: neither the string
+ * "proxy" nor `proxyConnector` appeared anywhere under src/test, and no props file selects it. It
+ * is a generated proxy over the `Connector` trait, so a change of proxy library rewrites it
+ * wholesale with nothing to catch a mistake. These scenarios pin the four behaviours that a
+ * rewrite can silently get wrong.
+ *
+ * The no-argument scenarios matter because of how the argument array arrives. cglib passed an
+ * empty array for a method that declares no parameters; byte-buddy's InvocationHandlerAdapter
+ * passes null, following `java.lang.reflect.Proxy`. This interceptor forwards with
+ * `method.invoke(LocalMappedConnector, args: _*)`, which survives that - it compiles to Java
+ * varargs and Method.invoke reads a null array as no arguments - so what these scenarios pin is
+ * that the forwarding keeps working, not that the array is non-null. A handler that instead treats
+ * `args` as a collection does not survive it; see ConnectorProxy for the one that did not.
+ */
+class ProxyConnectorTest extends ServerSetupWithTestData {
+
+ object ProxyConnectorTag extends Tag("ProxyConnector")
+
+ private lazy val proxy: Connector = Connector.getConnectorInstance("proxy")
+
+ private def bankIdsOf(result: Box[(List[Bank], Option[code.api.util.CallContext])]): List[String] =
+ result.map(_._1.map(_.bankId.value).sorted).getOrElse(Nil)
+
+ feature("The proxy connector delegates to LocalMappedConnector") {
+
+ scenario("it is registered under the name proxy and is a distinct instance", ProxyConnectorTag) {
+ proxy shouldBe a[Connector]
+ // A proxy, not the delegate handed back under another name.
+ proxy should not be theSameInstanceAs(LocalMappedConnector)
+ }
+
+ scenario("a method that takes no arguments reaches the delegate", ProxyConnectorTag) {
+ // callableMethods has an empty parameter list, so this is the call that receives null args.
+ proxy.callableMethods should equal(LocalMappedConnector.callableMethods)
+ }
+
+ scenario("a $default$ accessor returns the delegate's default value", ProxyConnectorTag) {
+ // Synthetic default-argument accessors are also no-argument methods, and the interceptor
+ // gives them a branch of their own: their results must be passed through untouched rather
+ // than run through the InBound field stripping.
+ val accessor = classOf[Connector].getMethod("checkBankAccountExists$default$3")
+ accessor.invoke(proxy) should equal(None)
+ }
+
+ scenario("a method whose result has an InBound DTO is delegated and its payload survives", ProxyConnectorTag) {
+ // getBanks returns Future[Box[(List[Bank], Option[CallContext])]], so this walks the whole
+ // result-unwrapping chain in deleteIgnoreFieldValue: Future, then Full of a tuple. An
+ // InBoundGetBanks class exists, so the stripping branch runs rather than the pass-through.
+ val viaProxy = Await.result(proxy.getBanks(None), 30.seconds)
+ val direct = Await.result(LocalMappedConnector.getBanks(None), 30.seconds)
+
+ viaProxy shouldBe a[Full[_]]
+ // The point of the proxy is to drop fields the InBound DTO marks as ignored, so the two
+ // results are not required to be equal - but the banks themselves must all still be there.
+ bankIdsOf(viaProxy) should equal(bankIdsOf(direct))
+ bankIdsOf(viaProxy) should not be empty
+ }
+ }
+}
diff --git a/obp-api/src/test/scala/code/connector/InternalConnectorTest.scala b/obp-api/src/test/scala/code/connector/InternalConnectorTest.scala
index a663cf7079..7a7a11c4af 100644
--- a/obp-api/src/test/scala/code/connector/InternalConnectorTest.scala
+++ b/obp-api/src/test/scala/code/connector/InternalConnectorTest.scala
@@ -112,7 +112,7 @@ class InternalConnectorTest extends FlatSpec with Matchers {
val getBankResult = DynamicUtil.executeFunction("getBank", resultScala, Array(BankId("1"), Some(CallContext()))).asInstanceOf[Future[Box[(Bank, Option[CallContext])]]]
- val result: Box[(Bank, Option[CallContext])] = scala.concurrent.Await.result(getBankResult, 5 minutes)
+ val result: Box[(Bank, Option[CallContext])] = scala.concurrent.Await.result(getBankResult, 5.minutes)
result.map(_._1.bankId.value) equals Full("Hello bank id")
@@ -120,7 +120,7 @@ class InternalConnectorTest extends FlatSpec with Matchers {
{
val getBankResult = DynamicUtil.executeFunction("getBank", resultJava, Array(BankId("1"), Some(CallContext()))).asInstanceOf[Future[Box[(Bank, Option[CallContext])]]]
- val result: Box[(Bank, Option[CallContext])] = scala.concurrent.Await.result(getBankResult, 5 minutes)
+ val result: Box[(Bank, Option[CallContext])] = scala.concurrent.Await.result(getBankResult, 5.minutes)
result.map(_._1.fullName) equals Full("The Js Bank of Scotland")
@@ -128,7 +128,7 @@ class InternalConnectorTest extends FlatSpec with Matchers {
{
val getBankResult = DynamicUtil.executeFunction("getBank", resultJs, Array(BankId("1"), Some(CallContext()))).asInstanceOf[Future[Box[(Bank, Option[CallContext])]]]
- val result: Box[(Bank, Option[CallContext])] = scala.concurrent.Await.result(getBankResult, 5 minutes)
+ val result: Box[(Bank, Option[CallContext])] = scala.concurrent.Await.result(getBankResult, 5.minutes)
result.map(_._1.shortName) equals Full("The Java Bank of Scotland")
}
diff --git a/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_FrozenTest.scala b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_FrozenTest.scala
index e9e5c3177f..37853bf1b5 100644
--- a/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_FrozenTest.scala
+++ b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_FrozenTest.scala
@@ -61,7 +61,7 @@ class RestConnector_vMar2019_FrozenTest extends FlatSpec with Matchers with Befo
"RestConnector_vMar2019 method frozen types structure" should "not be changed" taggedAs RestConnector_vMar2019Tag in {
// current related types those also exist in persisted metadata.
val typesToDoCompare: List[(String, Map[String, String])] = typeNameToFieldsInfo
- .filterKeys(typeNameToFieldsInfoPersisted.contains(_))
+ .filter { case (typeName, _) => typeNameToFieldsInfoPersisted.contains(typeName) }
.toList
// Normalize type names so that reflection aliases produce equal strings:
@@ -135,7 +135,7 @@ object RestConnector_vMar2019_FrozenUtil {
.map(it => ReflectUtils.getDeepGenericType(it).head)
.toSet
.filter(ReflectUtils.isObpType)
- .filterNot(tp ==) // avoid infinite recursive
+ .filterNot(tp == _) // avoid infinite recursive
match {
case set if(set.size > 0) => set.flatMap(getNestedOBPType) + tp
case _ => Set(tp)
diff --git a/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data
index cfa2daeb33..f799c95e97 100644
Binary files a/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data and b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data differ
diff --git a/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data.txt b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data.txt
new file mode 100644
index 0000000000..7f050f868d
--- /dev/null
+++ b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data.txt
@@ -0,0 +1,2012 @@
+method cancelPaymentV400
+method checkBankAccountExists
+method checkCustomerNumberAvailable
+method createAccountApplication
+method createAccountAttributes
+method createBankAccount
+method createChallenge
+method createChallenges
+method createChallengesC2
+method createChallengesC3
+method createCounterparty
+method createCustomer
+method createCustomerAddress
+method createDirectDebit
+method createMeeting
+method createMessage
+method createOrUpdateAccountAttribute
+method createOrUpdateCardAttribute
+method createOrUpdateCustomerAttribute
+method createOrUpdateKycCheck
+method createOrUpdateKycDocument
+method createOrUpdateKycMedia
+method createOrUpdateKycStatus
+method createOrUpdateProductAttribute
+method createOrUpdateTransactionAttribute
+method createPhysicalCard
+method createTaxResidence
+method createTransactionAfterChallengeV210
+method createTransactionAfterChallengev300
+method createTransactionRequestPeriodicSepaCreditTransfersBGV1
+method createTransactionRequestSepaCreditTransfersBGV1
+method createTransactionRequestv210
+method createTransactionRequestv300
+method createTransactionRequestv400
+method createUserAuthContext
+method createUserAuthContextUpdate
+method deleteCustomerAddress
+method deleteCustomerAttribute
+method deletePhysicalCardForBank
+method deleteProductAttribute
+method deleteTaxResidence
+method deleteUserAuthContextById
+method deleteUserAuthContexts
+method dynamicEntityProcess
+method getAccountApplicationById
+method getAccountAttributeById
+method getAccountAttributesByAccount
+method getAdapterInfo
+method getAllAccountApplication
+method getAtm
+method getAtms
+method getBank
+method getBankAccountBalances
+method getBankAccountByIban
+method getBankAccountByRouting
+method getBankAccounts
+method getBankAccountsBalances
+method getBankAccountsForUser
+method getBankAccountsHeld
+method getBanks
+method getBranch
+method getBranches
+method getCardAttributeById
+method getCardAttributesFromProvider
+method getChallenge
+method getChallengeThreshold
+method getChallengesByBasketId
+method getChallengesByConsentId
+method getChallengesByTransactionRequestId
+method getChargeLevel
+method getChargeLevelC2
+method getChargeValue
+method getCheckbookOrders
+method getCoreBankAccounts
+method getCounterparties
+method getCounterpartyByCounterpartyId
+method getCounterpartyByIban
+method getCounterpartyByIbanAndBankAccountId
+method getCounterpartyTrait
+method getCustomerAddress
+method getCustomerAttributeById
+method getCustomerAttributes
+method getCustomerAttributesForCustomers
+method getCustomerByCustomerId
+method getCustomerByCustomerNumber
+method getCustomerIdsByAttributeNameValues
+method getCustomers
+method getCustomersByCustomerPhoneNumber
+method getCustomersByUserId
+method getKycChecks
+method getKycDocuments
+method getKycMedias
+method getKycStatuses
+method getMeeting
+method getMeetings
+method getOrCreateProductCollection
+method getOrCreateProductCollectionItem
+method getPhysicalCardForBank
+method getPhysicalCardsForBank
+method getPhysicalCardsForUser
+method getProduct
+method getProductAttributeById
+method getProductAttributesByBankAndCode
+method getProductCollection
+method getProductCollectionItem
+method getProductCollectionItemsTree
+method getProducts
+method getStatusOfCreditCardOrder
+method getTaxResidence
+method getTransaction
+method getTransactionAttributeById
+method getTransactionAttributes
+method getTransactionIdsByAttributeNameValues
+method getTransactionRequestImpl
+method getTransactionRequestTypeCharges
+method getTransactionRequestTypes
+method getTransactionRequests210
+method getTransactions
+method getTransactionsCore
+method getUserAuthContexts
+method makeHistoricalPayment
+method makePaymentV400
+method makePaymentv210
+method makePaymentv300
+method saveTransactionRequestChallenge
+method saveTransactionRequestStatusImpl
+method saveTransactionRequestTransaction
+method updateAccountApplicationStatus
+method updateAccountLabel
+method updateBankAccount
+method updateCustomerAddress
+method updateCustomerCreditData
+method updateCustomerGeneralData
+method updateCustomerScaData
+method updatePhysicalCard
+method validateAndCheckIbanNumber
+method validateChallengeAnswer
+method validateChallengeAnswerC2
+method validateChallengeAnswerC3
+method validateChallengeAnswerC4
+method validateChallengeAnswerC5
+method validateChallengeAnswerV2
+field com.openbankproject.commons.dto.CustomerAndAttribute attributes List[com.openbankproject.commons.model.CustomerAttribute]
+field com.openbankproject.commons.dto.CustomerAndAttribute customer com.openbankproject.commons.model.Customer
+field com.openbankproject.commons.dto.GetProductsParam name String
+field com.openbankproject.commons.dto.GetProductsParam value List[String]
+field com.openbankproject.commons.dto.InBoundCancelPaymentV400 data com.openbankproject.commons.model.CancelPayment
+field com.openbankproject.commons.dto.InBoundCancelPaymentV400 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCancelPaymentV400 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCheckBankAccountExists data com.openbankproject.commons.model.BankAccountCommons
+field com.openbankproject.commons.dto.InBoundCheckBankAccountExists inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCheckBankAccountExists status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCheckCustomerNumberAvailable data Boolean
+field com.openbankproject.commons.dto.InBoundCheckCustomerNumberAvailable inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCheckCustomerNumberAvailable status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateAccountApplication data com.openbankproject.commons.model.AccountApplicationCommons
+field com.openbankproject.commons.dto.InBoundCreateAccountApplication inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateAccountApplication status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateAccountAttributes data List[com.openbankproject.commons.model.AccountAttributeCommons]
+field com.openbankproject.commons.dto.InBoundCreateAccountAttributes inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateAccountAttributes status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateBankAccount data com.openbankproject.commons.model.BankAccountCommons
+field com.openbankproject.commons.dto.InBoundCreateBankAccount inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateBankAccount status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateChallenge data String
+field com.openbankproject.commons.dto.InBoundCreateChallenge inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateChallenge status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateChallenges data List[String]
+field com.openbankproject.commons.dto.InBoundCreateChallenges inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateChallenges status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateChallengesC2 data List[com.openbankproject.commons.model.ChallengeCommons]
+field com.openbankproject.commons.dto.InBoundCreateChallengesC2 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateChallengesC2 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateChallengesC3 data List[com.openbankproject.commons.model.ChallengeCommons]
+field com.openbankproject.commons.dto.InBoundCreateChallengesC3 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateChallengesC3 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateCounterparty data com.openbankproject.commons.model.CounterpartyTraitCommons
+field com.openbankproject.commons.dto.InBoundCreateCounterparty inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateCounterparty status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateCustomer data com.openbankproject.commons.model.CustomerCommons
+field com.openbankproject.commons.dto.InBoundCreateCustomer inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateCustomer status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateCustomerAddress data com.openbankproject.commons.model.CustomerAddressCommons
+field com.openbankproject.commons.dto.InBoundCreateCustomerAddress inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateCustomerAddress status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateDirectDebit data com.openbankproject.commons.model.DirectDebitTraitCommons
+field com.openbankproject.commons.dto.InBoundCreateDirectDebit inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateDirectDebit status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateMeeting data com.openbankproject.commons.model.MeetingCommons
+field com.openbankproject.commons.dto.InBoundCreateMeeting inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateMeeting status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateMessage data com.openbankproject.commons.model.CustomerMessageCommons
+field com.openbankproject.commons.dto.InBoundCreateMessage inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateMessage status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateAccountAttribute data com.openbankproject.commons.model.AccountAttributeCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateAccountAttribute inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateAccountAttribute status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateCardAttribute data com.openbankproject.commons.model.CardAttributeCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateCardAttribute inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateCardAttribute status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateCustomerAttribute data com.openbankproject.commons.model.CustomerAttributeCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateCustomerAttribute inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateCustomerAttribute status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycCheck data com.openbankproject.commons.model.KycCheckCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycCheck inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycCheck status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycDocument data com.openbankproject.commons.model.KycDocument
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycDocument inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycDocument status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycMedia data com.openbankproject.commons.model.KycMediaCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycMedia inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycMedia status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycStatus data com.openbankproject.commons.model.KycStatusCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycStatus inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateKycStatus status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateProductAttribute data com.openbankproject.commons.model.ProductAttributeCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateProductAttribute inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateProductAttribute status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateTransactionAttribute data com.openbankproject.commons.model.TransactionAttributeCommons
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateTransactionAttribute inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateOrUpdateTransactionAttribute status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreatePhysicalCard data com.openbankproject.commons.model.PhysicalCard
+field com.openbankproject.commons.dto.InBoundCreatePhysicalCard inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreatePhysicalCard status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTaxResidence data com.openbankproject.commons.model.TaxResidenceCommons
+field com.openbankproject.commons.dto.InBoundCreateTaxResidence inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTaxResidence status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTransactionAfterChallengeV210 data com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.InBoundCreateTransactionAfterChallengeV210 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTransactionAfterChallengeV210 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTransactionAfterChallengev300 data com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.InBoundCreateTransactionAfterChallengev300 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTransactionAfterChallengev300 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 data com.openbankproject.commons.model.TransactionRequestBGV1
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestSepaCreditTransfersBGV1 data com.openbankproject.commons.model.TransactionRequestBGV1
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestSepaCreditTransfersBGV1 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestSepaCreditTransfersBGV1 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv210 data com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv210 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv210 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv300 data com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv300 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv300 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv400 data com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv400 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateTransactionRequestv400 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateUserAuthContext data com.openbankproject.commons.model.UserAuthContextCommons
+field com.openbankproject.commons.dto.InBoundCreateUserAuthContext inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateUserAuthContext status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundCreateUserAuthContextUpdate data com.openbankproject.commons.model.UserAuthContextUpdateCommons
+field com.openbankproject.commons.dto.InBoundCreateUserAuthContextUpdate inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundCreateUserAuthContextUpdate status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDeleteCustomerAddress data Boolean
+field com.openbankproject.commons.dto.InBoundDeleteCustomerAddress inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDeleteCustomerAddress status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDeleteCustomerAttribute data Boolean
+field com.openbankproject.commons.dto.InBoundDeleteCustomerAttribute inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDeleteCustomerAttribute status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDeletePhysicalCardForBank data Boolean
+field com.openbankproject.commons.dto.InBoundDeletePhysicalCardForBank inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDeletePhysicalCardForBank status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDeleteProductAttribute data Boolean
+field com.openbankproject.commons.dto.InBoundDeleteProductAttribute inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDeleteProductAttribute status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDeleteTaxResidence data Boolean
+field com.openbankproject.commons.dto.InBoundDeleteTaxResidence inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDeleteTaxResidence status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDeleteUserAuthContextById data Boolean
+field com.openbankproject.commons.dto.InBoundDeleteUserAuthContextById inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDeleteUserAuthContextById status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDeleteUserAuthContexts data Boolean
+field com.openbankproject.commons.dto.InBoundDeleteUserAuthContexts inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDeleteUserAuthContexts status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundDynamicEntityProcess data org.json4s.JValue
+field com.openbankproject.commons.dto.InBoundDynamicEntityProcess inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundDynamicEntityProcess status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetAccountApplicationById data com.openbankproject.commons.model.AccountApplicationCommons
+field com.openbankproject.commons.dto.InBoundGetAccountApplicationById inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetAccountApplicationById status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetAccountAttributeById data com.openbankproject.commons.model.AccountAttributeCommons
+field com.openbankproject.commons.dto.InBoundGetAccountAttributeById inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetAccountAttributeById status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetAccountAttributesByAccount data List[com.openbankproject.commons.model.AccountAttributeCommons]
+field com.openbankproject.commons.dto.InBoundGetAccountAttributesByAccount inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetAccountAttributesByAccount status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetAdapterInfo data com.openbankproject.commons.model.InboundAdapterInfoInternal
+field com.openbankproject.commons.dto.InBoundGetAdapterInfo inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetAdapterInfo status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetAllAccountApplication data List[com.openbankproject.commons.model.AccountApplicationCommons]
+field com.openbankproject.commons.dto.InBoundGetAllAccountApplication inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetAllAccountApplication status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetAtm data com.openbankproject.commons.model.AtmTCommons
+field com.openbankproject.commons.dto.InBoundGetAtm inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetAtm status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetAtms data List[com.openbankproject.commons.model.AtmTCommons]
+field com.openbankproject.commons.dto.InBoundGetAtms inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetAtms status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBank data com.openbankproject.commons.model.BankCommons
+field com.openbankproject.commons.dto.InBoundGetBank inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBank status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBankAccountBalances data com.openbankproject.commons.model.AccountBalances
+field com.openbankproject.commons.dto.InBoundGetBankAccountBalances inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBankAccountBalances status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBankAccountByIban data com.openbankproject.commons.model.BankAccountCommons
+field com.openbankproject.commons.dto.InBoundGetBankAccountByIban inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBankAccountByIban status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBankAccountByRouting data com.openbankproject.commons.model.BankAccountCommons
+field com.openbankproject.commons.dto.InBoundGetBankAccountByRouting inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBankAccountByRouting status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBankAccounts data List[com.openbankproject.commons.model.BankAccountCommons]
+field com.openbankproject.commons.dto.InBoundGetBankAccounts inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBankAccounts status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBankAccountsBalances data com.openbankproject.commons.model.AccountsBalances
+field com.openbankproject.commons.dto.InBoundGetBankAccountsBalances inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBankAccountsBalances status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBankAccountsForUser data List[com.openbankproject.commons.model.InboundAccountCommons]
+field com.openbankproject.commons.dto.InBoundGetBankAccountsForUser inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBankAccountsForUser status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBankAccountsHeld data List[com.openbankproject.commons.model.AccountHeld]
+field com.openbankproject.commons.dto.InBoundGetBankAccountsHeld inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBankAccountsHeld status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBanks data List[com.openbankproject.commons.model.BankCommons]
+field com.openbankproject.commons.dto.InBoundGetBanks inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBanks status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBranch data com.openbankproject.commons.model.BranchTCommons
+field com.openbankproject.commons.dto.InBoundGetBranch inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBranch status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetBranches data List[com.openbankproject.commons.model.BranchTCommons]
+field com.openbankproject.commons.dto.InBoundGetBranches inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetBranches status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCardAttributeById data com.openbankproject.commons.model.CardAttributeCommons
+field com.openbankproject.commons.dto.InBoundGetCardAttributeById inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCardAttributeById status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCardAttributesFromProvider data List[com.openbankproject.commons.model.CardAttributeCommons]
+field com.openbankproject.commons.dto.InBoundGetCardAttributesFromProvider inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCardAttributesFromProvider status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChallenge data com.openbankproject.commons.model.ChallengeCommons
+field com.openbankproject.commons.dto.InBoundGetChallenge inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChallenge status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChallengeThreshold data com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.dto.InBoundGetChallengeThreshold inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChallengeThreshold status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChallengesByBasketId data List[com.openbankproject.commons.model.ChallengeCommons]
+field com.openbankproject.commons.dto.InBoundGetChallengesByBasketId inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChallengesByBasketId status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChallengesByConsentId data List[com.openbankproject.commons.model.ChallengeCommons]
+field com.openbankproject.commons.dto.InBoundGetChallengesByConsentId inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChallengesByConsentId status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChallengesByTransactionRequestId data List[com.openbankproject.commons.model.ChallengeCommons]
+field com.openbankproject.commons.dto.InBoundGetChallengesByTransactionRequestId inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChallengesByTransactionRequestId status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChargeLevel data com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.dto.InBoundGetChargeLevel inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChargeLevel status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChargeLevelC2 data com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.dto.InBoundGetChargeLevelC2 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChargeLevelC2 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetChargeValue data String
+field com.openbankproject.commons.dto.InBoundGetChargeValue inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetChargeValue status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCheckbookOrders data com.openbankproject.commons.model.CheckbookOrdersJson
+field com.openbankproject.commons.dto.InBoundGetCheckbookOrders inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCheckbookOrders status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCoreBankAccounts data List[com.openbankproject.commons.model.CoreAccount]
+field com.openbankproject.commons.dto.InBoundGetCoreBankAccounts inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCoreBankAccounts status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCounterparties data List[com.openbankproject.commons.model.CounterpartyTraitCommons]
+field com.openbankproject.commons.dto.InBoundGetCounterparties inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCounterparties status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByCounterpartyId data com.openbankproject.commons.model.CounterpartyTraitCommons
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByCounterpartyId inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByCounterpartyId status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByIban data com.openbankproject.commons.model.CounterpartyTraitCommons
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByIban inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByIban status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByIbanAndBankAccountId data com.openbankproject.commons.model.CounterpartyTraitCommons
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByIbanAndBankAccountId inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCounterpartyByIbanAndBankAccountId status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCounterpartyTrait data com.openbankproject.commons.model.CounterpartyTraitCommons
+field com.openbankproject.commons.dto.InBoundGetCounterpartyTrait inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCounterpartyTrait status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomerAddress data List[com.openbankproject.commons.model.CustomerAddressCommons]
+field com.openbankproject.commons.dto.InBoundGetCustomerAddress inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomerAddress status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributeById data com.openbankproject.commons.model.CustomerAttributeCommons
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributeById inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributeById status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributes data List[com.openbankproject.commons.model.CustomerAttributeCommons]
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributes inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributes status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributesForCustomers data List[com.openbankproject.commons.dto.CustomerAndAttribute]
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributesForCustomers inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomerAttributesForCustomers status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomerByCustomerId data com.openbankproject.commons.model.CustomerCommons
+field com.openbankproject.commons.dto.InBoundGetCustomerByCustomerId inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomerByCustomerId status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomerByCustomerNumber data com.openbankproject.commons.model.CustomerCommons
+field com.openbankproject.commons.dto.InBoundGetCustomerByCustomerNumber inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomerByCustomerNumber status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomerIdsByAttributeNameValues data List[String]
+field com.openbankproject.commons.dto.InBoundGetCustomerIdsByAttributeNameValues inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomerIdsByAttributeNameValues status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomers data List[com.openbankproject.commons.model.CustomerCommons]
+field com.openbankproject.commons.dto.InBoundGetCustomers inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomers status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomersByCustomerPhoneNumber data List[com.openbankproject.commons.model.CustomerCommons]
+field com.openbankproject.commons.dto.InBoundGetCustomersByCustomerPhoneNumber inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomersByCustomerPhoneNumber status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetCustomersByUserId data List[com.openbankproject.commons.model.CustomerCommons]
+field com.openbankproject.commons.dto.InBoundGetCustomersByUserId inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetCustomersByUserId status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetKycChecks data List[com.openbankproject.commons.model.KycCheckCommons]
+field com.openbankproject.commons.dto.InBoundGetKycChecks inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetKycChecks status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetKycDocuments data List[com.openbankproject.commons.model.KycDocumentCommons]
+field com.openbankproject.commons.dto.InBoundGetKycDocuments inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetKycDocuments status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetKycMedias data List[com.openbankproject.commons.model.KycMediaCommons]
+field com.openbankproject.commons.dto.InBoundGetKycMedias inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetKycMedias status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetKycStatuses data List[com.openbankproject.commons.model.KycStatusCommons]
+field com.openbankproject.commons.dto.InBoundGetKycStatuses inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetKycStatuses status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetMeeting data com.openbankproject.commons.model.MeetingCommons
+field com.openbankproject.commons.dto.InBoundGetMeeting inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetMeeting status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetMeetings data List[com.openbankproject.commons.model.MeetingCommons]
+field com.openbankproject.commons.dto.InBoundGetMeetings inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetMeetings status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetOrCreateProductCollection data List[com.openbankproject.commons.model.ProductCollectionCommons]
+field com.openbankproject.commons.dto.InBoundGetOrCreateProductCollection inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetOrCreateProductCollection status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetOrCreateProductCollectionItem data List[com.openbankproject.commons.model.ProductCollectionItemCommons]
+field com.openbankproject.commons.dto.InBoundGetOrCreateProductCollectionItem inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetOrCreateProductCollectionItem status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardForBank data com.openbankproject.commons.model.PhysicalCard
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardForBank inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardForBank status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardsForBank data List[com.openbankproject.commons.model.PhysicalCard]
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardsForBank inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardsForBank status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardsForUser data List[com.openbankproject.commons.model.PhysicalCard]
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardsForUser inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetPhysicalCardsForUser status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetProduct data com.openbankproject.commons.model.ProductCommons
+field com.openbankproject.commons.dto.InBoundGetProduct inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetProduct status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetProductAttributeById data com.openbankproject.commons.model.ProductAttributeCommons
+field com.openbankproject.commons.dto.InBoundGetProductAttributeById inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetProductAttributeById status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetProductAttributesByBankAndCode data List[com.openbankproject.commons.model.ProductAttributeCommons]
+field com.openbankproject.commons.dto.InBoundGetProductAttributesByBankAndCode inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetProductAttributesByBankAndCode status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetProductCollection data List[com.openbankproject.commons.model.ProductCollectionCommons]
+field com.openbankproject.commons.dto.InBoundGetProductCollection inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetProductCollection status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetProductCollectionItem data List[com.openbankproject.commons.model.ProductCollectionItemCommons]
+field com.openbankproject.commons.dto.InBoundGetProductCollectionItem inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetProductCollectionItem status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetProductCollectionItemsTree data List[com.openbankproject.commons.dto.ProductCollectionItemsTree]
+field com.openbankproject.commons.dto.InBoundGetProductCollectionItemsTree inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetProductCollectionItemsTree status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetProducts data List[com.openbankproject.commons.model.ProductCommons]
+field com.openbankproject.commons.dto.InBoundGetProducts inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetProducts status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetStatusOfCreditCardOrder data List[com.openbankproject.commons.model.CardObjectJson]
+field com.openbankproject.commons.dto.InBoundGetStatusOfCreditCardOrder inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetStatusOfCreditCardOrder status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTaxResidence data List[com.openbankproject.commons.model.TaxResidenceCommons]
+field com.openbankproject.commons.dto.InBoundGetTaxResidence inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTaxResidence status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransaction data com.openbankproject.commons.model.Transaction
+field com.openbankproject.commons.dto.InBoundGetTransaction inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransaction status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionAttributeById data com.openbankproject.commons.model.TransactionAttributeCommons
+field com.openbankproject.commons.dto.InBoundGetTransactionAttributeById inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionAttributeById status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionAttributes data List[com.openbankproject.commons.model.TransactionAttributeCommons]
+field com.openbankproject.commons.dto.InBoundGetTransactionAttributes inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionAttributes status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionIdsByAttributeNameValues data List[String]
+field com.openbankproject.commons.dto.InBoundGetTransactionIdsByAttributeNameValues inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionIdsByAttributeNameValues status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestImpl data com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestImpl inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestImpl status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestTypeCharges data List[com.openbankproject.commons.model.TransactionRequestTypeChargeCommons]
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestTypeCharges inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestTypeCharges status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestTypes data List[com.openbankproject.commons.model.TransactionRequestType]
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestTypes inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionRequestTypes status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionRequests210 data List[com.openbankproject.commons.model.TransactionRequest]
+field com.openbankproject.commons.dto.InBoundGetTransactionRequests210 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionRequests210 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactions data List[com.openbankproject.commons.model.Transaction]
+field com.openbankproject.commons.dto.InBoundGetTransactions inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactions status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetTransactionsCore data List[com.openbankproject.commons.model.TransactionCore]
+field com.openbankproject.commons.dto.InBoundGetTransactionsCore inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetTransactionsCore status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundGetUserAuthContexts data List[com.openbankproject.commons.model.UserAuthContextCommons]
+field com.openbankproject.commons.dto.InBoundGetUserAuthContexts inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundGetUserAuthContexts status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundMakeHistoricalPayment data com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.InBoundMakeHistoricalPayment inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundMakeHistoricalPayment status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundMakePaymentV400 data com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.InBoundMakePaymentV400 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundMakePaymentV400 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundMakePaymentv210 data com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.InBoundMakePaymentv210 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundMakePaymentv210 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundMakePaymentv300 data com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.InBoundMakePaymentv300 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundMakePaymentv300 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestChallenge data Boolean
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestChallenge inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestChallenge status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestStatusImpl data Boolean
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestStatusImpl inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestStatusImpl status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestTransaction data Boolean
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestTransaction inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundSaveTransactionRequestTransaction status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdateAccountApplicationStatus data com.openbankproject.commons.model.AccountApplicationCommons
+field com.openbankproject.commons.dto.InBoundUpdateAccountApplicationStatus inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdateAccountApplicationStatus status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdateAccountLabel data Boolean
+field com.openbankproject.commons.dto.InBoundUpdateAccountLabel inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdateAccountLabel status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdateBankAccount data com.openbankproject.commons.model.BankAccountCommons
+field com.openbankproject.commons.dto.InBoundUpdateBankAccount inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdateBankAccount status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdateCustomerAddress data com.openbankproject.commons.model.CustomerAddressCommons
+field com.openbankproject.commons.dto.InBoundUpdateCustomerAddress inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdateCustomerAddress status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdateCustomerCreditData data com.openbankproject.commons.model.CustomerCommons
+field com.openbankproject.commons.dto.InBoundUpdateCustomerCreditData inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdateCustomerCreditData status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdateCustomerGeneralData data com.openbankproject.commons.model.CustomerCommons
+field com.openbankproject.commons.dto.InBoundUpdateCustomerGeneralData inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdateCustomerGeneralData status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdateCustomerScaData data com.openbankproject.commons.model.CustomerCommons
+field com.openbankproject.commons.dto.InBoundUpdateCustomerScaData inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdateCustomerScaData status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundUpdatePhysicalCard data com.openbankproject.commons.model.PhysicalCard
+field com.openbankproject.commons.dto.InBoundUpdatePhysicalCard inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundUpdatePhysicalCard status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundValidateAndCheckIbanNumber data com.openbankproject.commons.model.IbanChecker
+field com.openbankproject.commons.dto.InBoundValidateAndCheckIbanNumber inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundValidateAndCheckIbanNumber status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswer data Boolean
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswer inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswer status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC2 data com.openbankproject.commons.model.ChallengeCommons
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC2 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC2 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC3 data com.openbankproject.commons.model.ChallengeCommons
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC3 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC3 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC4 data com.openbankproject.commons.model.ChallengeCommons
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC4 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC4 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC5 data com.openbankproject.commons.model.ChallengeCommons
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC5 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerC5 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerV2 data Boolean
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerV2 inboundAdapterCallContext com.openbankproject.commons.model.InboundAdapterCallContext
+field com.openbankproject.commons.dto.InBoundValidateChallengeAnswerV2 status com.openbankproject.commons.model.Status
+field com.openbankproject.commons.dto.OutBoundCancelPaymentV400 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCancelPaymentV400 transactionId com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.OutBoundCheckBankAccountExists accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundCheckBankAccountExists bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCheckBankAccountExists outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCheckCustomerNumberAvailable bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCheckCustomerNumberAvailable customerNumber String
+field com.openbankproject.commons.dto.OutBoundCheckCustomerNumberAvailable outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateAccountApplication customerId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateAccountApplication outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateAccountApplication productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.dto.OutBoundCreateAccountApplication userId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateAccountAttributes accountAttributes List[com.openbankproject.commons.model.ProductAttribute]
+field com.openbankproject.commons.dto.OutBoundCreateAccountAttributes accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundCreateAccountAttributes bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateAccountAttributes outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateAccountAttributes productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.dto.OutBoundCreateAccountAttributes productInstanceCode Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount accountHolderName String
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount accountLabel String
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount accountType String
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount branchId String
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount currency String
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount initialBalance BigDecimal
+field com.openbankproject.commons.dto.OutBoundCreateBankAccount outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateChallenge accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundCreateChallenge bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateChallenge outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateChallenge scaMethod Option[com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA]
+field com.openbankproject.commons.dto.OutBoundCreateChallenge transactionRequestId String
+field com.openbankproject.commons.dto.OutBoundCreateChallenge transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundCreateChallenge userId String
+field com.openbankproject.commons.dto.OutBoundCreateChallenges accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundCreateChallenges bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateChallenges outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateChallenges scaMethod Option[com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA]
+field com.openbankproject.commons.dto.OutBoundCreateChallenges transactionRequestId String
+field com.openbankproject.commons.dto.OutBoundCreateChallenges transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundCreateChallenges userIds List[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 authenticationMethodId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 challengeType com.openbankproject.commons.model.enums.ChallengeType.Value
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 consentId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 scaMethod Option[com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 scaStatus Option[com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.SCAStatus]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 transactionRequestId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC2 userIds List[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 authenticationMethodId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 basketId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 challengeType com.openbankproject.commons.model.enums.ChallengeType.Value
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 consentId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 scaMethod Option[com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 scaStatus Option[com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.SCAStatus]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 transactionRequestId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateChallengesC3 userIds List[String]
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty bespoke List[com.openbankproject.commons.model.CounterpartyBespoke]
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty createdByUserId String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty currency String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty description String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty isBeneficiary Boolean
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty name String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherAccountRoutingAddress String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherAccountRoutingScheme String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherAccountSecondaryRoutingAddress String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherAccountSecondaryRoutingScheme String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherBankRoutingAddress String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherBankRoutingScheme String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherBranchRoutingAddress String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty otherBranchRoutingScheme String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty thisAccountId String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty thisBankId String
+field com.openbankproject.commons.dto.OutBoundCreateCounterparty thisViewId String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateCustomer branchId String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer creditLimit Option[com.openbankproject.commons.model.AmountOfMoneyTrait]
+field com.openbankproject.commons.dto.OutBoundCreateCustomer creditRating Option[com.openbankproject.commons.model.CreditRatingTrait]
+field com.openbankproject.commons.dto.OutBoundCreateCustomer dateOfBirth java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateCustomer dependents Int
+field com.openbankproject.commons.dto.OutBoundCreateCustomer dobOfDependents List[java.util.Date]
+field com.openbankproject.commons.dto.OutBoundCreateCustomer email String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer employmentStatus String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer faceImage com.openbankproject.commons.model.CustomerFaceImageTrait
+field com.openbankproject.commons.dto.OutBoundCreateCustomer highestEducationAttained String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer kycStatus Boolean
+field com.openbankproject.commons.dto.OutBoundCreateCustomer lastOkDate java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateCustomer legalName String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer mobileNumber String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer nameSuffix String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateCustomer relationshipStatus String
+field com.openbankproject.commons.dto.OutBoundCreateCustomer title String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress city String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress countryCode String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress county String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress customerId String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress line1 String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress line2 String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress line3 String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress postcode String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress state String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress status String
+field com.openbankproject.commons.dto.OutBoundCreateCustomerAddress tags String
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit accountId String
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit bankId String
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit counterpartyId String
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit customerId String
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit dateExpires Option[java.util.Date]
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit dateSigned java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit dateStarts java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateDirectDebit userId String
+field com.openbankproject.commons.dto.OutBoundCreateMeeting bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateMeeting creator com.openbankproject.commons.model.ContactDetails
+field com.openbankproject.commons.dto.OutBoundCreateMeeting customerToken String
+field com.openbankproject.commons.dto.OutBoundCreateMeeting customerUser com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundCreateMeeting invitees List[com.openbankproject.commons.model.Invitee]
+field com.openbankproject.commons.dto.OutBoundCreateMeeting outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateMeeting providerId String
+field com.openbankproject.commons.dto.OutBoundCreateMeeting purposeId String
+field com.openbankproject.commons.dto.OutBoundCreateMeeting sessionId String
+field com.openbankproject.commons.dto.OutBoundCreateMeeting staffToken String
+field com.openbankproject.commons.dto.OutBoundCreateMeeting staffUser com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundCreateMeeting when java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateMessage bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateMessage fromDepartment String
+field com.openbankproject.commons.dto.OutBoundCreateMessage fromPerson String
+field com.openbankproject.commons.dto.OutBoundCreateMessage message String
+field com.openbankproject.commons.dto.OutBoundCreateMessage outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateMessage user com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute accountAttributeType com.openbankproject.commons.model.enums.AccountAttributeType.Value
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute name String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute productAttributeId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute productInstanceCode Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateAccountAttribute value String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCardAttribute bankId Option[com.openbankproject.commons.model.BankId]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCardAttribute cardAttributeId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCardAttribute cardAttributeType com.openbankproject.commons.model.enums.CardAttributeType
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCardAttribute cardId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCardAttribute name String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCardAttribute outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCardAttribute value String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCustomerAttribute attributeType com.openbankproject.commons.model.enums.CustomerAttributeType.Value
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCustomerAttribute bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCustomerAttribute customerAttributeId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCustomerAttribute customerId com.openbankproject.commons.model.CustomerId
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCustomerAttribute name String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCustomerAttribute outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateCustomerAttribute value String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck bankId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck comments String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck customerId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck customerNumber String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck date java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck how String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck id String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck mSatisfied Boolean
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck mStaffName String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycCheck staffUserId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument bankId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument customerId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument customerNumber String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument expiryDate java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument id String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument issueDate java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument issuePlace String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument number String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycDocument type String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia bankId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia customerId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia customerNumber String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia date java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia id String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia relatesToKycCheckId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia relatesToKycDocumentId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia type String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycMedia url String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycStatus bankId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycStatus customerId String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycStatus customerNumber String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycStatus date java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycStatus ok Boolean
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateKycStatus outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute isActive Option[Boolean]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute name String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute productAttributeId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute productAttributeType com.openbankproject.commons.model.enums.ProductAttributeType.Value
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateProductAttribute value String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateTransactionAttribute attributeType com.openbankproject.commons.model.enums.TransactionAttributeType.Value
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateTransactionAttribute bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateTransactionAttribute name String
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateTransactionAttribute outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateTransactionAttribute transactionAttributeId Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateTransactionAttribute transactionId com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.OutBoundCreateOrUpdateTransactionAttribute value String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard accountId String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard allows List[String]
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard bankCardNumber String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard bankId String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard brand String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard cancelled Boolean
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard cardType String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard collected Option[com.openbankproject.commons.model.CardCollectionInfo]
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard customerId String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard cvv String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard enabled Boolean
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard expires java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard issueNumber String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard nameOnCard String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard networks List[String]
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard onHotList Boolean
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard pinResets List[com.openbankproject.commons.model.PinResetInfo]
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard posted Option[com.openbankproject.commons.model.CardPostedInfo]
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard replacement Option[com.openbankproject.commons.model.CardReplacementInfo]
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard serialNumber String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard technology String
+field com.openbankproject.commons.dto.OutBoundCreatePhysicalCard validFrom java.util.Date
+field com.openbankproject.commons.dto.OutBoundCreateTaxResidence customerId String
+field com.openbankproject.commons.dto.OutBoundCreateTaxResidence domain String
+field com.openbankproject.commons.dto.OutBoundCreateTaxResidence outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTaxResidence taxNumber String
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengeV210 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengeV210 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengeV210 transactionRequest com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengev300 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengev300 initiator com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengev300 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengev300 transReqId com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.dto.OutBoundCreateTransactionAfterChallengev300 transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 initiator Option[com.openbankproject.commons.model.User]
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 paymentServiceType com.openbankproject.commons.model.enums.PaymentServiceTypes.Value
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 transactionRequestBody com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestPeriodicSepaCreditTransfersBGV1 transactionRequestType com.openbankproject.commons.model.enums.TransactionRequestTypes.Value
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestSepaCreditTransfersBGV1 initiator Option[com.openbankproject.commons.model.User]
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestSepaCreditTransfersBGV1 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestSepaCreditTransfersBGV1 paymentServiceType com.openbankproject.commons.model.enums.PaymentServiceTypes.Value
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestSepaCreditTransfersBGV1 transactionRequestBody com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestSepaCreditTransfersBGV1 transactionRequestType com.openbankproject.commons.model.enums.TransactionRequestTypes.Value
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 challengeType Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 chargePolicy String
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 detailsPlain String
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 initiator com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 scaMethod Option[com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA]
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 toAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 transactionRequestCommonBody com.openbankproject.commons.model.TransactionRequestCommonBodyJSON
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv210 viewId com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 chargePolicy String
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 detailsPlain String
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 initiator com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 toAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 toCounterparty com.openbankproject.commons.model.CounterpartyTrait
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 transactionRequestCommonBody com.openbankproject.commons.model.TransactionRequestCommonBodyJSON
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv300 viewId com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 challengeType Option[String]
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 chargePolicy String
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 detailsPlain String
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 initiator com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 reasons Option[List[com.openbankproject.commons.model.TransactionRequestReason]]
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 scaMethod Option[com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA]
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 toAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 transactionRequestCommonBody com.openbankproject.commons.model.TransactionRequestCommonBodyJSON
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundCreateTransactionRequestv400 viewId com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContext key String
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContext outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContext userId String
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContext value String
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContextUpdate key String
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContextUpdate outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContextUpdate userId String
+field com.openbankproject.commons.dto.OutBoundCreateUserAuthContextUpdate value String
+field com.openbankproject.commons.dto.OutBoundDeleteCustomerAddress customerAddressId String
+field com.openbankproject.commons.dto.OutBoundDeleteCustomerAddress outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDeleteCustomerAttribute customerAttributeId String
+field com.openbankproject.commons.dto.OutBoundDeleteCustomerAttribute outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDeletePhysicalCardForBank bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundDeletePhysicalCardForBank cardId String
+field com.openbankproject.commons.dto.OutBoundDeletePhysicalCardForBank outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDeleteProductAttribute outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDeleteProductAttribute productAttributeId String
+field com.openbankproject.commons.dto.OutBoundDeleteTaxResidence outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDeleteTaxResidence taxResourceId String
+field com.openbankproject.commons.dto.OutBoundDeleteUserAuthContextById outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDeleteUserAuthContextById userAuthContextId String
+field com.openbankproject.commons.dto.OutBoundDeleteUserAuthContexts outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDeleteUserAuthContexts userId String
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess bankId Option[String]
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess entityId Option[String]
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess entityName String
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess isPersonalEntity Boolean
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess operation com.openbankproject.commons.model.enums.DynamicEntityOperation
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess queryParameters Option[Map[String,List[String]]]
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess requestBody Option[org.json4s.JObject]
+field com.openbankproject.commons.dto.OutBoundDynamicEntityProcess userId Option[String]
+field com.openbankproject.commons.dto.OutBoundGetAccountApplicationById accountApplicationId String
+field com.openbankproject.commons.dto.OutBoundGetAccountApplicationById outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetAccountAttributeById accountAttributeId String
+field com.openbankproject.commons.dto.OutBoundGetAccountAttributeById outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetAccountAttributesByAccount accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetAccountAttributesByAccount bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetAccountAttributesByAccount outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetAdapterInfo outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetAllAccountApplication outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetAtm atmId com.openbankproject.commons.model.AtmId
+field com.openbankproject.commons.dto.OutBoundGetAtm bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetAtm outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetAtms bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetAtms fromDate String
+field com.openbankproject.commons.dto.OutBoundGetAtms limit Int
+field com.openbankproject.commons.dto.OutBoundGetAtms offset Int
+field com.openbankproject.commons.dto.OutBoundGetAtms outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetAtms toDate String
+field com.openbankproject.commons.dto.OutBoundGetBank bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetBank outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBankAccountBalances bankIdAccountId com.openbankproject.commons.model.BankIdAccountId
+field com.openbankproject.commons.dto.OutBoundGetBankAccountBalances outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBankAccountByIban iban String
+field com.openbankproject.commons.dto.OutBoundGetBankAccountByIban outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBankAccountByRouting address String
+field com.openbankproject.commons.dto.OutBoundGetBankAccountByRouting bankId Option[com.openbankproject.commons.model.BankId]
+field com.openbankproject.commons.dto.OutBoundGetBankAccountByRouting outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBankAccountByRouting scheme String
+field com.openbankproject.commons.dto.OutBoundGetBankAccounts bankIdAccountIds List[com.openbankproject.commons.model.BankIdAccountId]
+field com.openbankproject.commons.dto.OutBoundGetBankAccounts outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBankAccountsBalances bankIdAccountIds List[com.openbankproject.commons.model.BankIdAccountId]
+field com.openbankproject.commons.dto.OutBoundGetBankAccountsBalances outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBankAccountsForUser outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBankAccountsForUser provider String
+field com.openbankproject.commons.dto.OutBoundGetBankAccountsForUser username String
+field com.openbankproject.commons.dto.OutBoundGetBankAccountsHeld bankIdAccountIds List[com.openbankproject.commons.model.BankIdAccountId]
+field com.openbankproject.commons.dto.OutBoundGetBankAccountsHeld outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBanks outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBranch bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetBranch branchId com.openbankproject.commons.model.BranchId
+field com.openbankproject.commons.dto.OutBoundGetBranch outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBranches bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetBranches fromDate String
+field com.openbankproject.commons.dto.OutBoundGetBranches limit Int
+field com.openbankproject.commons.dto.OutBoundGetBranches offset Int
+field com.openbankproject.commons.dto.OutBoundGetBranches outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetBranches toDate String
+field com.openbankproject.commons.dto.OutBoundGetCardAttributeById cardAttributeId String
+field com.openbankproject.commons.dto.OutBoundGetCardAttributeById outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCardAttributesFromProvider cardId String
+field com.openbankproject.commons.dto.OutBoundGetCardAttributesFromProvider outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChallenge challengeId String
+field com.openbankproject.commons.dto.OutBoundGetChallenge outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold accountId String
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold bankId String
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold currency String
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold transactionRequestType String
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold userId String
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold username String
+field com.openbankproject.commons.dto.OutBoundGetChallengeThreshold viewId String
+field com.openbankproject.commons.dto.OutBoundGetChallengesByBasketId basketId String
+field com.openbankproject.commons.dto.OutBoundGetChallengesByBasketId outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChallengesByConsentId consentId String
+field com.openbankproject.commons.dto.OutBoundGetChallengesByConsentId outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChallengesByTransactionRequestId outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChallengesByTransactionRequestId transactionRequestId String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel currency String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel transactionRequestType String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel userId String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel username String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevel viewId com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 amount String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 currency String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 customAttributes List[com.openbankproject.commons.model.CustomAttribute]
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 toAccountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 transactionRequestType String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 userId String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 username String
+field com.openbankproject.commons.dto.OutBoundGetChargeLevelC2 viewId com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.dto.OutBoundGetChargeValue chargeLevelAmount BigDecimal
+field com.openbankproject.commons.dto.OutBoundGetChargeValue outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetChargeValue transactionRequestCommonBodyAmount BigDecimal
+field com.openbankproject.commons.dto.OutBoundGetCheckbookOrders accountId String
+field com.openbankproject.commons.dto.OutBoundGetCheckbookOrders bankId String
+field com.openbankproject.commons.dto.OutBoundGetCheckbookOrders outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCoreBankAccounts bankIdAccountIds List[com.openbankproject.commons.model.BankIdAccountId]
+field com.openbankproject.commons.dto.OutBoundGetCoreBankAccounts outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCounterparties outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCounterparties thisAccountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetCounterparties thisBankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCounterparties viewId com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByCounterpartyId counterpartyId com.openbankproject.commons.model.CounterpartyId
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByCounterpartyId outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByIban iban String
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByIban outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByIbanAndBankAccountId accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByIbanAndBankAccountId bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByIbanAndBankAccountId iban String
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyByIbanAndBankAccountId outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyTrait accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyTrait bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyTrait couterpartyId String
+field com.openbankproject.commons.dto.OutBoundGetCounterpartyTrait outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomerAddress customerId String
+field com.openbankproject.commons.dto.OutBoundGetCustomerAddress outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomerAttributeById customerAttributeId String
+field com.openbankproject.commons.dto.OutBoundGetCustomerAttributeById outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomerAttributes bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCustomerAttributes customerId com.openbankproject.commons.model.CustomerId
+field com.openbankproject.commons.dto.OutBoundGetCustomerAttributes outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomerAttributesForCustomers customers List[com.openbankproject.commons.model.Customer]
+field com.openbankproject.commons.dto.OutBoundGetCustomerAttributesForCustomers outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomerByCustomerId customerId String
+field com.openbankproject.commons.dto.OutBoundGetCustomerByCustomerId outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomerByCustomerNumber bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCustomerByCustomerNumber customerNumber String
+field com.openbankproject.commons.dto.OutBoundGetCustomerByCustomerNumber outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomerIdsByAttributeNameValues bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCustomerIdsByAttributeNameValues nameValues Map[String,List[String]]
+field com.openbankproject.commons.dto.OutBoundGetCustomerIdsByAttributeNameValues outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomers bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCustomers fromDate String
+field com.openbankproject.commons.dto.OutBoundGetCustomers limit Int
+field com.openbankproject.commons.dto.OutBoundGetCustomers offset Int
+field com.openbankproject.commons.dto.OutBoundGetCustomers outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomers toDate String
+field com.openbankproject.commons.dto.OutBoundGetCustomersByCustomerPhoneNumber bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetCustomersByCustomerPhoneNumber outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomersByCustomerPhoneNumber phoneNumber String
+field com.openbankproject.commons.dto.OutBoundGetCustomersByUserId outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetCustomersByUserId userId String
+field com.openbankproject.commons.dto.OutBoundGetKycChecks customerId String
+field com.openbankproject.commons.dto.OutBoundGetKycChecks outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetKycDocuments customerId String
+field com.openbankproject.commons.dto.OutBoundGetKycDocuments outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetKycMedias customerId String
+field com.openbankproject.commons.dto.OutBoundGetKycMedias outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetKycStatuses customerId String
+field com.openbankproject.commons.dto.OutBoundGetKycStatuses outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetMeeting bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetMeeting meetingId String
+field com.openbankproject.commons.dto.OutBoundGetMeeting outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetMeeting user com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundGetMeetings bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetMeetings outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetMeetings user com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundGetOrCreateProductCollection collectionCode String
+field com.openbankproject.commons.dto.OutBoundGetOrCreateProductCollection outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetOrCreateProductCollection productCodes List[String]
+field com.openbankproject.commons.dto.OutBoundGetOrCreateProductCollectionItem collectionCode String
+field com.openbankproject.commons.dto.OutBoundGetOrCreateProductCollectionItem memberProductCodes List[String]
+field com.openbankproject.commons.dto.OutBoundGetOrCreateProductCollectionItem outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardForBank bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardForBank cardId String
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardForBank outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForBank bank com.openbankproject.commons.model.Bank
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForBank fromDate String
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForBank limit Int
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForBank offset Int
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForBank outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForBank toDate String
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForBank user com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForUser outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetPhysicalCardsForUser user com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundGetProduct bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetProduct outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetProduct productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.dto.OutBoundGetProductAttributeById outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetProductAttributeById productAttributeId String
+field com.openbankproject.commons.dto.OutBoundGetProductAttributesByBankAndCode bank com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetProductAttributesByBankAndCode outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetProductAttributesByBankAndCode productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.dto.OutBoundGetProductCollection collectionCode String
+field com.openbankproject.commons.dto.OutBoundGetProductCollection outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetProductCollectionItem collectionCode String
+field com.openbankproject.commons.dto.OutBoundGetProductCollectionItem outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetProductCollectionItemsTree bankId String
+field com.openbankproject.commons.dto.OutBoundGetProductCollectionItemsTree collectionCode String
+field com.openbankproject.commons.dto.OutBoundGetProductCollectionItemsTree outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetProducts bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetProducts outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetProducts params List[com.openbankproject.commons.dto.GetProductsParam]
+field com.openbankproject.commons.dto.OutBoundGetStatusOfCreditCardOrder accountId String
+field com.openbankproject.commons.dto.OutBoundGetStatusOfCreditCardOrder bankId String
+field com.openbankproject.commons.dto.OutBoundGetStatusOfCreditCardOrder outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTaxResidence customerId String
+field com.openbankproject.commons.dto.OutBoundGetTaxResidence outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransaction accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetTransaction bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetTransaction outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransaction transactionId com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.OutBoundGetTransactionAttributeById outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactionAttributeById transactionAttributeId String
+field com.openbankproject.commons.dto.OutBoundGetTransactionAttributes bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetTransactionAttributes outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactionAttributes transactionId com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.OutBoundGetTransactionIdsByAttributeNameValues bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetTransactionIdsByAttributeNameValues nameValues Map[String,List[String]]
+field com.openbankproject.commons.dto.OutBoundGetTransactionIdsByAttributeNameValues outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestImpl outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestImpl transactionRequestId com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypeCharges accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypeCharges bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypeCharges outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypeCharges transactionRequestTypes List[com.openbankproject.commons.model.TransactionRequestType]
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypeCharges viewId com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypes fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypes initiator com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequestTypes outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequests210 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequests210 initiator com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundGetTransactionRequests210 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactions accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetTransactions bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetTransactions fromDate String
+field com.openbankproject.commons.dto.OutBoundGetTransactions limit Int
+field com.openbankproject.commons.dto.OutBoundGetTransactions offset Int
+field com.openbankproject.commons.dto.OutBoundGetTransactions outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactions toDate String
+field com.openbankproject.commons.dto.OutBoundGetTransactionsCore accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundGetTransactionsCore bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundGetTransactionsCore fromDate String
+field com.openbankproject.commons.dto.OutBoundGetTransactionsCore limit Int
+field com.openbankproject.commons.dto.OutBoundGetTransactionsCore offset Int
+field com.openbankproject.commons.dto.OutBoundGetTransactionsCore outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetTransactionsCore toDate String
+field com.openbankproject.commons.dto.OutBoundGetUserAuthContexts outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundGetUserAuthContexts userId String
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment amount BigDecimal
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment chargePolicy String
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment completed java.util.Date
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment currency String
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment description String
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment posted java.util.Date
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment toAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundMakeHistoricalPayment transactionRequestType String
+field com.openbankproject.commons.dto.OutBoundMakePaymentV400 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundMakePaymentV400 reasons Option[List[com.openbankproject.commons.model.TransactionRequestReason]]
+field com.openbankproject.commons.dto.OutBoundMakePaymentV400 transactionRequest com.openbankproject.commons.model.TransactionRequest
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 amount BigDecimal
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 chargePolicy String
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 description String
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 toAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 transactionRequestCommonBody com.openbankproject.commons.model.TransactionRequestCommonBodyJSON
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 transactionRequestId com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.dto.OutBoundMakePaymentv210 transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 chargePolicy String
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 fromAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 initiator com.openbankproject.commons.model.User
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 toAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 toCounterparty com.openbankproject.commons.model.CounterpartyTrait
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 transactionRequestCommonBody com.openbankproject.commons.model.TransactionRequestCommonBodyJSON
+field com.openbankproject.commons.dto.OutBoundMakePaymentv300 transactionRequestType com.openbankproject.commons.model.TransactionRequestType
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestChallenge challenge com.openbankproject.commons.model.TransactionRequestChallenge
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestChallenge outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestChallenge transactionRequestId com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestStatusImpl outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestStatusImpl status String
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestStatusImpl transactionRequestId com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestTransaction outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestTransaction transactionId com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.dto.OutBoundSaveTransactionRequestTransaction transactionRequestId com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.dto.OutBoundUpdateAccountApplicationStatus accountApplicationId String
+field com.openbankproject.commons.dto.OutBoundUpdateAccountApplicationStatus outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdateAccountApplicationStatus status String
+field com.openbankproject.commons.dto.OutBoundUpdateAccountLabel accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundUpdateAccountLabel bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundUpdateAccountLabel label String
+field com.openbankproject.commons.dto.OutBoundUpdateAccountLabel outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdateBankAccount accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.dto.OutBoundUpdateBankAccount accountLabel String
+field com.openbankproject.commons.dto.OutBoundUpdateBankAccount accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.dto.OutBoundUpdateBankAccount accountType String
+field com.openbankproject.commons.dto.OutBoundUpdateBankAccount bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.dto.OutBoundUpdateBankAccount branchId String
+field com.openbankproject.commons.dto.OutBoundUpdateBankAccount outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress city String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress countryCode String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress county String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress customerAddressId String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress line1 String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress line2 String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress line3 String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress postcode String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress state String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress status String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerAddress tags String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerCreditData creditLimit Option[com.openbankproject.commons.model.AmountOfMoney]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerCreditData creditRating Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerCreditData creditSource Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerCreditData customerId String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerCreditData outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData branchId Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData customerId String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData customerType Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData dateOfBirth Option[java.util.Date]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData dependents Option[Int]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData employmentStatus Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData faceImage Option[com.openbankproject.commons.model.CustomerFaceImageTrait]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData highestEducationAttained Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData legalName Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData nameSuffix Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData parentCustomerId Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData relationshipStatus Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerGeneralData title Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerScaData customerId String
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerScaData customerNumber Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerScaData email Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerScaData mobileNumber Option[String]
+field com.openbankproject.commons.dto.OutBoundUpdateCustomerScaData outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard accountId String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard allows List[String]
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard bankCardNumber String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard bankId String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard cancelled Boolean
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard cardId String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard cardType String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard collected Option[com.openbankproject.commons.model.CardCollectionInfo]
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard customerId String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard enabled Boolean
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard expires java.util.Date
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard issueNumber String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard nameOnCard String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard networks List[String]
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard onHotList Boolean
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard pinResets List[com.openbankproject.commons.model.PinResetInfo]
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard posted Option[com.openbankproject.commons.model.CardPostedInfo]
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard replacement Option[com.openbankproject.commons.model.CardReplacementInfo]
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard serialNumber String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard technology String
+field com.openbankproject.commons.dto.OutBoundUpdatePhysicalCard validFrom java.util.Date
+field com.openbankproject.commons.dto.OutBoundValidateAndCheckIbanNumber iban String
+field com.openbankproject.commons.dto.OutBoundValidateAndCheckIbanNumber outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswer challengeId String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswer hashOfSuppliedAnswer String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswer outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC2 challengeId String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC2 consentId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC2 hashOfSuppliedAnswer String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC2 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC2 transactionRequestId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC3 basketId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC3 challengeId String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC3 consentId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC3 hashOfSuppliedAnswer String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC3 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC3 transactionRequestId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC4 challengeId String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC4 consentId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC4 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC4 suppliedAnswer String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC4 suppliedAnswerType com.openbankproject.commons.model.enums.SuppliedAnswerType
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC4 transactionRequestId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC5 basketId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC5 challengeId String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC5 consentId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC5 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC5 suppliedAnswer String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC5 suppliedAnswerType com.openbankproject.commons.model.enums.SuppliedAnswerType
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerC5 transactionRequestId Option[String]
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerV2 challengeId String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerV2 outboundAdapterCallContext com.openbankproject.commons.model.OutboundAdapterCallContext
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerV2 suppliedAnswer String
+field com.openbankproject.commons.dto.OutBoundValidateChallengeAnswerV2 suppliedAnswerType com.openbankproject.commons.model.enums.SuppliedAnswerType
+field com.openbankproject.commons.dto.ProductCollectionItemsTree attributes List[com.openbankproject.commons.model.ProductAttributeCommons]
+field com.openbankproject.commons.dto.ProductCollectionItemsTree product com.openbankproject.commons.model.ProductCommons
+field com.openbankproject.commons.dto.ProductCollectionItemsTree productCollectionItem com.openbankproject.commons.model.ProductCollectionItemCommons
+field com.openbankproject.commons.model.AccountApplicationCommons accountApplicationId String
+field com.openbankproject.commons.model.AccountApplicationCommons customerId String
+field com.openbankproject.commons.model.AccountApplicationCommons dateOfApplication java.util.Date
+field com.openbankproject.commons.model.AccountApplicationCommons productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.model.AccountApplicationCommons status String
+field com.openbankproject.commons.model.AccountApplicationCommons userId String
+field com.openbankproject.commons.model.AccountAttributeCommons accountAttributeId String
+field com.openbankproject.commons.model.AccountAttributeCommons accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.model.AccountAttributeCommons attributeType com.openbankproject.commons.model.enums.AccountAttributeType.Value
+field com.openbankproject.commons.model.AccountAttributeCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.AccountAttributeCommons name String
+field com.openbankproject.commons.model.AccountAttributeCommons productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.model.AccountAttributeCommons productInstanceCode Option[String]
+field com.openbankproject.commons.model.AccountAttributeCommons value String
+field com.openbankproject.commons.model.AccountBalance accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.model.AccountBalance balance com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.AccountBalance bankId String
+field com.openbankproject.commons.model.AccountBalance id String
+field com.openbankproject.commons.model.AccountBalance label String
+field com.openbankproject.commons.model.AccountBalances accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.model.AccountBalances balances List[com.openbankproject.commons.model.BankAccountBalance]
+field com.openbankproject.commons.model.AccountBalances bankId String
+field com.openbankproject.commons.model.AccountBalances id String
+field com.openbankproject.commons.model.AccountBalances label String
+field com.openbankproject.commons.model.AccountBalances overallBalance com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.AccountBalances overallBalanceDate java.util.Date
+field com.openbankproject.commons.model.AccountBasic accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.model.AccountBasic customerOwners List[com.openbankproject.commons.model.InternalBasicCustomer]
+field com.openbankproject.commons.model.AccountBasic id String
+field com.openbankproject.commons.model.AccountBasic userOwners List[com.openbankproject.commons.model.InternalBasicUser]
+field com.openbankproject.commons.model.AccountHeld accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.model.AccountHeld bankId String
+field com.openbankproject.commons.model.AccountHeld id String
+field com.openbankproject.commons.model.AccountHeld label String
+field com.openbankproject.commons.model.AccountHeld number String
+field com.openbankproject.commons.model.AccountId value String
+field com.openbankproject.commons.model.AccountRouting address String
+field com.openbankproject.commons.model.AccountRouting scheme String
+field com.openbankproject.commons.model.AccountRoutingJsonV121 address String
+field com.openbankproject.commons.model.AccountRoutingJsonV121 scheme String
+field com.openbankproject.commons.model.AccountRule scheme String
+field com.openbankproject.commons.model.AccountRule value String
+field com.openbankproject.commons.model.AccountV310Json account_id String
+field com.openbankproject.commons.model.AccountV310Json account_routings List[com.openbankproject.commons.model.AccountRoutingJsonV121]
+field com.openbankproject.commons.model.AccountV310Json account_type String
+field com.openbankproject.commons.model.AccountV310Json bank_id String
+field com.openbankproject.commons.model.AccountV310Json branch_routings List[com.openbankproject.commons.model.BranchRoutingJsonV141]
+field com.openbankproject.commons.model.AccountsBalances accounts List[com.openbankproject.commons.model.AccountBalance]
+field com.openbankproject.commons.model.AccountsBalances overallBalance com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.AccountsBalances overallBalanceDate java.util.Date
+field com.openbankproject.commons.model.Address city String
+field com.openbankproject.commons.model.Address countryCode String
+field com.openbankproject.commons.model.Address county Option[String]
+field com.openbankproject.commons.model.Address line1 String
+field com.openbankproject.commons.model.Address line2 String
+field com.openbankproject.commons.model.Address line3 String
+field com.openbankproject.commons.model.Address postCode String
+field com.openbankproject.commons.model.Address state String
+field com.openbankproject.commons.model.AmountOfMoney amount String
+field com.openbankproject.commons.model.AmountOfMoney currency String
+field com.openbankproject.commons.model.AmountOfMoneyJsonV121 amount String
+field com.openbankproject.commons.model.AmountOfMoneyJsonV121 currency String
+field com.openbankproject.commons.model.AtmId value String
+field com.openbankproject.commons.model.AtmTCommons ClosingTimeOnFriday Option[String]
+field com.openbankproject.commons.model.AtmTCommons ClosingTimeOnMonday Option[String]
+field com.openbankproject.commons.model.AtmTCommons ClosingTimeOnSaturday Option[String]
+field com.openbankproject.commons.model.AtmTCommons ClosingTimeOnSunday Option[String]
+field com.openbankproject.commons.model.AtmTCommons ClosingTimeOnThursday Option[String]
+field com.openbankproject.commons.model.AtmTCommons ClosingTimeOnTuesday Option[String]
+field com.openbankproject.commons.model.AtmTCommons ClosingTimeOnWednesday Option[String]
+field com.openbankproject.commons.model.AtmTCommons OpeningTimeOnFriday Option[String]
+field com.openbankproject.commons.model.AtmTCommons OpeningTimeOnMonday Option[String]
+field com.openbankproject.commons.model.AtmTCommons OpeningTimeOnSaturday Option[String]
+field com.openbankproject.commons.model.AtmTCommons OpeningTimeOnSunday Option[String]
+field com.openbankproject.commons.model.AtmTCommons OpeningTimeOnThursday Option[String]
+field com.openbankproject.commons.model.AtmTCommons OpeningTimeOnTuesday Option[String]
+field com.openbankproject.commons.model.AtmTCommons OpeningTimeOnWednesday Option[String]
+field com.openbankproject.commons.model.AtmTCommons accessibilityFeatures Option[List[String]]
+field com.openbankproject.commons.model.AtmTCommons address com.openbankproject.commons.model.Address
+field com.openbankproject.commons.model.AtmTCommons atmId com.openbankproject.commons.model.AtmId
+field com.openbankproject.commons.model.AtmTCommons atmType Option[String]
+field com.openbankproject.commons.model.AtmTCommons balanceInquiryFee Option[String]
+field com.openbankproject.commons.model.AtmTCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.AtmTCommons branchIdentification Option[String]
+field com.openbankproject.commons.model.AtmTCommons cashWithdrawalInternationalFee Option[String]
+field com.openbankproject.commons.model.AtmTCommons cashWithdrawalNationalFee Option[String]
+field com.openbankproject.commons.model.AtmTCommons hasDepositCapability Option[Boolean]
+field com.openbankproject.commons.model.AtmTCommons isAccessible Option[Boolean]
+field com.openbankproject.commons.model.AtmTCommons locatedAt Option[String]
+field com.openbankproject.commons.model.AtmTCommons location com.openbankproject.commons.model.Location
+field com.openbankproject.commons.model.AtmTCommons locationCategories Option[List[String]]
+field com.openbankproject.commons.model.AtmTCommons meta com.openbankproject.commons.model.Meta
+field com.openbankproject.commons.model.AtmTCommons minimumWithdrawal Option[String]
+field com.openbankproject.commons.model.AtmTCommons moreInfo Option[String]
+field com.openbankproject.commons.model.AtmTCommons name String
+field com.openbankproject.commons.model.AtmTCommons notes Option[List[String]]
+field com.openbankproject.commons.model.AtmTCommons phone Option[String]
+field com.openbankproject.commons.model.AtmTCommons services Option[List[String]]
+field com.openbankproject.commons.model.AtmTCommons siteIdentification Option[String]
+field com.openbankproject.commons.model.AtmTCommons siteName Option[String]
+field com.openbankproject.commons.model.AtmTCommons supportedCurrencies Option[List[String]]
+field com.openbankproject.commons.model.AtmTCommons supportedLanguages Option[List[String]]
+field com.openbankproject.commons.model.Attribute name String
+field com.openbankproject.commons.model.Attribute type String
+field com.openbankproject.commons.model.Attribute value String
+field com.openbankproject.commons.model.AuthView account com.openbankproject.commons.model.AccountBasic
+field com.openbankproject.commons.model.AuthView view com.openbankproject.commons.model.ViewBasic
+field com.openbankproject.commons.model.BankAccountBalance balance com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.BankAccountBalance balanceType String
+field com.openbankproject.commons.model.BankAccountCommons accountHolder String
+field com.openbankproject.commons.model.BankAccountCommons accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.model.BankAccountCommons accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.model.BankAccountCommons accountRules List[com.openbankproject.commons.model.AccountRule]
+field com.openbankproject.commons.model.BankAccountCommons accountType String
+field com.openbankproject.commons.model.BankAccountCommons attributes Option[List[com.openbankproject.commons.model.Attribute]]
+field com.openbankproject.commons.model.BankAccountCommons balance BigDecimal
+field com.openbankproject.commons.model.BankAccountCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.BankAccountCommons branchId String
+field com.openbankproject.commons.model.BankAccountCommons currency String
+field com.openbankproject.commons.model.BankAccountCommons label String
+field com.openbankproject.commons.model.BankAccountCommons lastUpdate java.util.Date
+field com.openbankproject.commons.model.BankAccountCommons name String
+field com.openbankproject.commons.model.BankAccountCommons number String
+field com.openbankproject.commons.model.BankCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.BankCommons bankRoutingAddress String
+field com.openbankproject.commons.model.BankCommons bankRoutingScheme String
+field com.openbankproject.commons.model.BankCommons fullName String
+field com.openbankproject.commons.model.BankCommons logoUrl String
+field com.openbankproject.commons.model.BankCommons nationalIdentifier String
+field com.openbankproject.commons.model.BankCommons shortName String
+field com.openbankproject.commons.model.BankCommons swiftBic String
+field com.openbankproject.commons.model.BankCommons websiteUrl String
+field com.openbankproject.commons.model.BankId value String
+field com.openbankproject.commons.model.BankIdAccountId accountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.model.BankIdAccountId bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.BasicGeneralContext key String
+field com.openbankproject.commons.model.BasicGeneralContext value String
+field com.openbankproject.commons.model.BasicLinkedCustomer customerId String
+field com.openbankproject.commons.model.BasicLinkedCustomer customerNumber String
+field com.openbankproject.commons.model.BasicLinkedCustomer legalName String
+field com.openbankproject.commons.model.BasicResourceUser provider String
+field com.openbankproject.commons.model.BasicResourceUser userId String
+field com.openbankproject.commons.model.BasicResourceUser username String
+field com.openbankproject.commons.model.BasicUserAuthContext key String
+field com.openbankproject.commons.model.BasicUserAuthContext value String
+field com.openbankproject.commons.model.BranchId value String
+field com.openbankproject.commons.model.BranchRoutingJsonV141 address String
+field com.openbankproject.commons.model.BranchRoutingJsonV141 scheme String
+field com.openbankproject.commons.model.BranchTCommons accessibleFeatures Option[String]
+field com.openbankproject.commons.model.BranchTCommons address com.openbankproject.commons.model.Address
+field com.openbankproject.commons.model.BranchTCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.BranchTCommons branchId com.openbankproject.commons.model.BranchId
+field com.openbankproject.commons.model.BranchTCommons branchRouting Option[com.openbankproject.commons.model.Routing]
+field com.openbankproject.commons.model.BranchTCommons branchType Option[String]
+field com.openbankproject.commons.model.BranchTCommons driveUp Option[com.openbankproject.commons.model.DriveUp]
+field com.openbankproject.commons.model.BranchTCommons driveUpString Option[com.openbankproject.commons.model.DriveUpString]
+field com.openbankproject.commons.model.BranchTCommons isAccessible Option[Boolean]
+field com.openbankproject.commons.model.BranchTCommons isDeleted Option[Boolean]
+field com.openbankproject.commons.model.BranchTCommons lobby Option[com.openbankproject.commons.model.Lobby]
+field com.openbankproject.commons.model.BranchTCommons lobbyString Option[com.openbankproject.commons.model.LobbyString]
+field com.openbankproject.commons.model.BranchTCommons location com.openbankproject.commons.model.Location
+field com.openbankproject.commons.model.BranchTCommons meta com.openbankproject.commons.model.Meta
+field com.openbankproject.commons.model.BranchTCommons moreInfo Option[String]
+field com.openbankproject.commons.model.BranchTCommons name String
+field com.openbankproject.commons.model.BranchTCommons phoneNumber Option[String]
+field com.openbankproject.commons.model.CancelPayment canBeCancelled Boolean
+field com.openbankproject.commons.model.CancelPayment startSca Option[Boolean]
+field com.openbankproject.commons.model.CardAttributeCommons attributeType com.openbankproject.commons.model.enums.CardAttributeType.Value
+field com.openbankproject.commons.model.CardAttributeCommons bankId Option[com.openbankproject.commons.model.BankId]
+field com.openbankproject.commons.model.CardAttributeCommons cardAttributeId Option[String]
+field com.openbankproject.commons.model.CardAttributeCommons cardId Option[String]
+field com.openbankproject.commons.model.CardAttributeCommons name String
+field com.openbankproject.commons.model.CardAttributeCommons value String
+field com.openbankproject.commons.model.CardCollectionInfo date java.util.Date
+field com.openbankproject.commons.model.CardObjectJson card_description String
+field com.openbankproject.commons.model.CardObjectJson card_type String
+field com.openbankproject.commons.model.CardObjectJson use_type String
+field com.openbankproject.commons.model.CardPostedInfo date java.util.Date
+field com.openbankproject.commons.model.CardReplacementInfo reasonRequested com.openbankproject.commons.model.CardReplacementReason
+field com.openbankproject.commons.model.CardReplacementInfo requestedDate java.util.Date
+field com.openbankproject.commons.model.ChallengeCommons attemptCounter Int
+field com.openbankproject.commons.model.ChallengeCommons authenticationMethodId Option[String]
+field com.openbankproject.commons.model.ChallengeCommons basketId Option[String]
+field com.openbankproject.commons.model.ChallengeCommons challengeContextHash Option[String]
+field com.openbankproject.commons.model.ChallengeCommons challengeContextStructure Option[String]
+field com.openbankproject.commons.model.ChallengeCommons challengeId String
+field com.openbankproject.commons.model.ChallengeCommons challengePurpose Option[String]
+field com.openbankproject.commons.model.ChallengeCommons challengeType String
+field com.openbankproject.commons.model.ChallengeCommons consentId Option[String]
+field com.openbankproject.commons.model.ChallengeCommons expectedAnswer String
+field com.openbankproject.commons.model.ChallengeCommons expectedUserId String
+field com.openbankproject.commons.model.ChallengeCommons salt String
+field com.openbankproject.commons.model.ChallengeCommons scaMethod Option[com.openbankproject.commons.model.enums.StrongCustomerAuthentication.SCA]
+field com.openbankproject.commons.model.ChallengeCommons scaStatus Option[com.openbankproject.commons.model.enums.StrongCustomerAuthenticationStatus.SCAStatus]
+field com.openbankproject.commons.model.ChallengeCommons successful Boolean
+field com.openbankproject.commons.model.ChallengeCommons transactionRequestId String
+field com.openbankproject.commons.model.CheckbookOrdersJson account com.openbankproject.commons.model.AccountV310Json
+field com.openbankproject.commons.model.CheckbookOrdersJson orders List[com.openbankproject.commons.model.OrderJson]
+field com.openbankproject.commons.model.ContactDetails email String
+field com.openbankproject.commons.model.ContactDetails name String
+field com.openbankproject.commons.model.ContactDetails phone String
+field com.openbankproject.commons.model.CoreAccount accountRoutings List[com.openbankproject.commons.model.AccountRouting]
+field com.openbankproject.commons.model.CoreAccount accountType String
+field com.openbankproject.commons.model.CoreAccount bankId String
+field com.openbankproject.commons.model.CoreAccount id String
+field com.openbankproject.commons.model.CoreAccount label String
+field com.openbankproject.commons.model.Counterparty counterpartyId String
+field com.openbankproject.commons.model.Counterparty counterpartyName String
+field com.openbankproject.commons.model.Counterparty isBeneficiary Boolean
+field com.openbankproject.commons.model.Counterparty kind String
+field com.openbankproject.commons.model.Counterparty nationalIdentifier String
+field com.openbankproject.commons.model.Counterparty otherAccountProvider String
+field com.openbankproject.commons.model.Counterparty otherAccountRoutingAddress Option[String]
+field com.openbankproject.commons.model.Counterparty otherAccountRoutingScheme String
+field com.openbankproject.commons.model.Counterparty otherBankRoutingAddress Option[String]
+field com.openbankproject.commons.model.Counterparty otherBankRoutingScheme String
+field com.openbankproject.commons.model.Counterparty thisAccountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.model.Counterparty thisBankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.CounterpartyBespoke key String
+field com.openbankproject.commons.model.CounterpartyBespoke value String
+field com.openbankproject.commons.model.CounterpartyCore counterpartyId String
+field com.openbankproject.commons.model.CounterpartyCore counterpartyName String
+field com.openbankproject.commons.model.CounterpartyCore isBeneficiary Boolean
+field com.openbankproject.commons.model.CounterpartyCore kind String
+field com.openbankproject.commons.model.CounterpartyCore otherAccountProvider String
+field com.openbankproject.commons.model.CounterpartyCore otherAccountRoutingAddress Option[String]
+field com.openbankproject.commons.model.CounterpartyCore otherAccountRoutingScheme String
+field com.openbankproject.commons.model.CounterpartyCore otherBankRoutingAddress Option[String]
+field com.openbankproject.commons.model.CounterpartyCore otherBankRoutingScheme String
+field com.openbankproject.commons.model.CounterpartyCore thisAccountId com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.model.CounterpartyCore thisBankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.CounterpartyId value String
+field com.openbankproject.commons.model.CounterpartyTraitCommons bespoke List[com.openbankproject.commons.model.CounterpartyBespoke]
+field com.openbankproject.commons.model.CounterpartyTraitCommons counterpartyId String
+field com.openbankproject.commons.model.CounterpartyTraitCommons createdByUserId String
+field com.openbankproject.commons.model.CounterpartyTraitCommons currency String
+field com.openbankproject.commons.model.CounterpartyTraitCommons description String
+field com.openbankproject.commons.model.CounterpartyTraitCommons isBeneficiary Boolean
+field com.openbankproject.commons.model.CounterpartyTraitCommons name String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherAccountRoutingAddress String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherAccountRoutingScheme String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherAccountSecondaryRoutingAddress String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherAccountSecondaryRoutingScheme String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherBankRoutingAddress String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherBankRoutingScheme String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherBranchRoutingAddress String
+field com.openbankproject.commons.model.CounterpartyTraitCommons otherBranchRoutingScheme String
+field com.openbankproject.commons.model.CounterpartyTraitCommons thisAccountId String
+field com.openbankproject.commons.model.CounterpartyTraitCommons thisBankId String
+field com.openbankproject.commons.model.CounterpartyTraitCommons thisViewId String
+field com.openbankproject.commons.model.CreditLimit amount String
+field com.openbankproject.commons.model.CreditLimit currency String
+field com.openbankproject.commons.model.CreditRating rating String
+field com.openbankproject.commons.model.CreditRating source String
+field com.openbankproject.commons.model.CustomAttribute attributeType com.openbankproject.commons.model.enums.AttributeType.Value
+field com.openbankproject.commons.model.CustomAttribute name String
+field com.openbankproject.commons.model.CustomAttribute value String
+field com.openbankproject.commons.model.CustomerAddressCommons city String
+field com.openbankproject.commons.model.CustomerAddressCommons countryCode String
+field com.openbankproject.commons.model.CustomerAddressCommons county String
+field com.openbankproject.commons.model.CustomerAddressCommons customerAddressId String
+field com.openbankproject.commons.model.CustomerAddressCommons customerId String
+field com.openbankproject.commons.model.CustomerAddressCommons insertDate java.util.Date
+field com.openbankproject.commons.model.CustomerAddressCommons line1 String
+field com.openbankproject.commons.model.CustomerAddressCommons line2 String
+field com.openbankproject.commons.model.CustomerAddressCommons line3 String
+field com.openbankproject.commons.model.CustomerAddressCommons postcode String
+field com.openbankproject.commons.model.CustomerAddressCommons state String
+field com.openbankproject.commons.model.CustomerAddressCommons status String
+field com.openbankproject.commons.model.CustomerAddressCommons tags String
+field com.openbankproject.commons.model.CustomerAttributeCommons attributeType com.openbankproject.commons.model.enums.CustomerAttributeType.Value
+field com.openbankproject.commons.model.CustomerAttributeCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.CustomerAttributeCommons customerAttributeId String
+field com.openbankproject.commons.model.CustomerAttributeCommons customerId com.openbankproject.commons.model.CustomerId
+field com.openbankproject.commons.model.CustomerAttributeCommons name String
+field com.openbankproject.commons.model.CustomerAttributeCommons value String
+field com.openbankproject.commons.model.CustomerCommons bankId String
+field com.openbankproject.commons.model.CustomerCommons branchId String
+field com.openbankproject.commons.model.CustomerCommons creditLimit com.openbankproject.commons.model.CreditLimit
+field com.openbankproject.commons.model.CustomerCommons creditRating com.openbankproject.commons.model.CreditRating
+field com.openbankproject.commons.model.CustomerCommons customerId String
+field com.openbankproject.commons.model.CustomerCommons customerType Option[String]
+field com.openbankproject.commons.model.CustomerCommons dateOfBirth java.util.Date
+field com.openbankproject.commons.model.CustomerCommons dependents Integer
+field com.openbankproject.commons.model.CustomerCommons dobOfDependents List[java.util.Date]
+field com.openbankproject.commons.model.CustomerCommons email String
+field com.openbankproject.commons.model.CustomerCommons employmentStatus String
+field com.openbankproject.commons.model.CustomerCommons faceImage com.openbankproject.commons.model.CustomerFaceImage
+field com.openbankproject.commons.model.CustomerCommons highestEducationAttained String
+field com.openbankproject.commons.model.CustomerCommons kycStatus Boolean
+field com.openbankproject.commons.model.CustomerCommons lastOkDate java.util.Date
+field com.openbankproject.commons.model.CustomerCommons legalName String
+field com.openbankproject.commons.model.CustomerCommons mobileNumber String
+field com.openbankproject.commons.model.CustomerCommons nameSuffix String
+field com.openbankproject.commons.model.CustomerCommons number String
+field com.openbankproject.commons.model.CustomerCommons parentCustomerId Option[String]
+field com.openbankproject.commons.model.CustomerCommons relationshipStatus String
+field com.openbankproject.commons.model.CustomerCommons title String
+field com.openbankproject.commons.model.CustomerFaceImage date java.util.Date
+field com.openbankproject.commons.model.CustomerFaceImage url String
+field com.openbankproject.commons.model.CustomerId value String
+field com.openbankproject.commons.model.CustomerMessageCommons date java.util.Date
+field com.openbankproject.commons.model.CustomerMessageCommons fromDepartment String
+field com.openbankproject.commons.model.CustomerMessageCommons fromPerson String
+field com.openbankproject.commons.model.CustomerMessageCommons message String
+field com.openbankproject.commons.model.CustomerMessageCommons messageId String
+field com.openbankproject.commons.model.CustomerMessageCommons transport Option[String]
+field com.openbankproject.commons.model.DirectDebitTraitCommons accountId String
+field com.openbankproject.commons.model.DirectDebitTraitCommons active Boolean
+field com.openbankproject.commons.model.DirectDebitTraitCommons bankId String
+field com.openbankproject.commons.model.DirectDebitTraitCommons counterpartyId String
+field com.openbankproject.commons.model.DirectDebitTraitCommons customerId String
+field com.openbankproject.commons.model.DirectDebitTraitCommons dateCancelled java.util.Date
+field com.openbankproject.commons.model.DirectDebitTraitCommons dateExpires java.util.Date
+field com.openbankproject.commons.model.DirectDebitTraitCommons dateSigned java.util.Date
+field com.openbankproject.commons.model.DirectDebitTraitCommons dateStarts java.util.Date
+field com.openbankproject.commons.model.DirectDebitTraitCommons directDebitId String
+field com.openbankproject.commons.model.DirectDebitTraitCommons userId String
+field com.openbankproject.commons.model.DriveUp friday com.openbankproject.commons.model.OpeningTimes
+field com.openbankproject.commons.model.DriveUp monday com.openbankproject.commons.model.OpeningTimes
+field com.openbankproject.commons.model.DriveUp saturday com.openbankproject.commons.model.OpeningTimes
+field com.openbankproject.commons.model.DriveUp sunday com.openbankproject.commons.model.OpeningTimes
+field com.openbankproject.commons.model.DriveUp thursday com.openbankproject.commons.model.OpeningTimes
+field com.openbankproject.commons.model.DriveUp tuesday com.openbankproject.commons.model.OpeningTimes
+field com.openbankproject.commons.model.DriveUp wednesday com.openbankproject.commons.model.OpeningTimes
+field com.openbankproject.commons.model.DriveUpString hours String
+field com.openbankproject.commons.model.FromAccountTransfer mobile_phone_number String
+field com.openbankproject.commons.model.FromAccountTransfer nickname String
+field com.openbankproject.commons.model.IbanChecker details Option[com.openbankproject.commons.model.IbanDetails]
+field com.openbankproject.commons.model.IbanChecker isValid Boolean
+field com.openbankproject.commons.model.IbanDetails address String
+field com.openbankproject.commons.model.IbanDetails bank String
+field com.openbankproject.commons.model.IbanDetails bic String
+field com.openbankproject.commons.model.IbanDetails branch String
+field com.openbankproject.commons.model.IbanDetails city String
+field com.openbankproject.commons.model.IbanDetails country String
+field com.openbankproject.commons.model.IbanDetails countryIso String
+field com.openbankproject.commons.model.IbanDetails phone String
+field com.openbankproject.commons.model.IbanDetails sepaB2b String
+field com.openbankproject.commons.model.IbanDetails sepaCardClearing String
+field com.openbankproject.commons.model.IbanDetails sepaCreditTransfer String
+field com.openbankproject.commons.model.IbanDetails sepaDirectDebit String
+field com.openbankproject.commons.model.IbanDetails sepaSddCore String
+field com.openbankproject.commons.model.IbanDetails zip String
+field com.openbankproject.commons.model.InboundAccountCommons accountId String
+field com.openbankproject.commons.model.InboundAccountCommons accountNumber String
+field com.openbankproject.commons.model.InboundAccountCommons accountRoutingAddress String
+field com.openbankproject.commons.model.InboundAccountCommons accountRoutingScheme String
+field com.openbankproject.commons.model.InboundAccountCommons accountType String
+field com.openbankproject.commons.model.InboundAccountCommons balanceAmount String
+field com.openbankproject.commons.model.InboundAccountCommons balanceCurrency String
+field com.openbankproject.commons.model.InboundAccountCommons bankId String
+field com.openbankproject.commons.model.InboundAccountCommons bankRoutingAddress String
+field com.openbankproject.commons.model.InboundAccountCommons bankRoutingScheme String
+field com.openbankproject.commons.model.InboundAccountCommons branchId String
+field com.openbankproject.commons.model.InboundAccountCommons branchRoutingAddress String
+field com.openbankproject.commons.model.InboundAccountCommons branchRoutingScheme String
+field com.openbankproject.commons.model.InboundAccountCommons owners List[String]
+field com.openbankproject.commons.model.InboundAccountCommons viewsToGenerate List[String]
+field com.openbankproject.commons.model.InboundAdapterCallContext correlationId String
+field com.openbankproject.commons.model.InboundAdapterCallContext generalContext Option[List[com.openbankproject.commons.model.BasicGeneralContext]]
+field com.openbankproject.commons.model.InboundAdapterCallContext sessionId Option[String]
+field com.openbankproject.commons.model.InboundAdapterInfoInternal backendMessages List[com.openbankproject.commons.model.InboundStatusMessage]
+field com.openbankproject.commons.model.InboundAdapterInfoInternal date String
+field com.openbankproject.commons.model.InboundAdapterInfoInternal errorCode String
+field com.openbankproject.commons.model.InboundAdapterInfoInternal git_commit String
+field com.openbankproject.commons.model.InboundAdapterInfoInternal name String
+field com.openbankproject.commons.model.InboundAdapterInfoInternal version String
+field com.openbankproject.commons.model.InboundStatusMessage duration Option[scala.math.BigDecimal]
+field com.openbankproject.commons.model.InboundStatusMessage errorCode String
+field com.openbankproject.commons.model.InboundStatusMessage source String
+field com.openbankproject.commons.model.InboundStatusMessage status String
+field com.openbankproject.commons.model.InboundStatusMessage text String
+field com.openbankproject.commons.model.InternalBasicCustomer bankId String
+field com.openbankproject.commons.model.InternalBasicCustomer customerId String
+field com.openbankproject.commons.model.InternalBasicCustomer customerNumber String
+field com.openbankproject.commons.model.InternalBasicCustomer dateOfBirth java.util.Date
+field com.openbankproject.commons.model.InternalBasicCustomer legalName String
+field com.openbankproject.commons.model.InternalBasicUser emailAddress String
+field com.openbankproject.commons.model.InternalBasicUser name String
+field com.openbankproject.commons.model.InternalBasicUser userId String
+field com.openbankproject.commons.model.Invitee contactDetails com.openbankproject.commons.model.ContactDetails
+field com.openbankproject.commons.model.Invitee status String
+field com.openbankproject.commons.model.KycCheckCommons bankId String
+field com.openbankproject.commons.model.KycCheckCommons comments String
+field com.openbankproject.commons.model.KycCheckCommons customerId String
+field com.openbankproject.commons.model.KycCheckCommons customerNumber String
+field com.openbankproject.commons.model.KycCheckCommons date java.util.Date
+field com.openbankproject.commons.model.KycCheckCommons how String
+field com.openbankproject.commons.model.KycCheckCommons idKycCheck String
+field com.openbankproject.commons.model.KycCheckCommons satisfied Boolean
+field com.openbankproject.commons.model.KycCheckCommons staffName String
+field com.openbankproject.commons.model.KycCheckCommons staffUserId String
+field com.openbankproject.commons.model.KycDocumentCommons bankId String
+field com.openbankproject.commons.model.KycDocumentCommons customerId String
+field com.openbankproject.commons.model.KycDocumentCommons customerNumber String
+field com.openbankproject.commons.model.KycDocumentCommons expiryDate java.util.Date
+field com.openbankproject.commons.model.KycDocumentCommons idKycDocument String
+field com.openbankproject.commons.model.KycDocumentCommons issueDate java.util.Date
+field com.openbankproject.commons.model.KycDocumentCommons issuePlace String
+field com.openbankproject.commons.model.KycDocumentCommons number String
+field com.openbankproject.commons.model.KycDocumentCommons type String
+field com.openbankproject.commons.model.KycMediaCommons bankId String
+field com.openbankproject.commons.model.KycMediaCommons customerId String
+field com.openbankproject.commons.model.KycMediaCommons customerNumber String
+field com.openbankproject.commons.model.KycMediaCommons date java.util.Date
+field com.openbankproject.commons.model.KycMediaCommons idKycMedia String
+field com.openbankproject.commons.model.KycMediaCommons relatesToKycCheckId String
+field com.openbankproject.commons.model.KycMediaCommons relatesToKycDocumentId String
+field com.openbankproject.commons.model.KycMediaCommons type String
+field com.openbankproject.commons.model.KycMediaCommons url String
+field com.openbankproject.commons.model.KycStatusCommons bankId String
+field com.openbankproject.commons.model.KycStatusCommons customerId String
+field com.openbankproject.commons.model.KycStatusCommons customerNumber String
+field com.openbankproject.commons.model.KycStatusCommons date java.util.Date
+field com.openbankproject.commons.model.KycStatusCommons ok Boolean
+field com.openbankproject.commons.model.License id String
+field com.openbankproject.commons.model.License name String
+field com.openbankproject.commons.model.Lobby friday List[com.openbankproject.commons.model.OpeningTimes]
+field com.openbankproject.commons.model.Lobby monday List[com.openbankproject.commons.model.OpeningTimes]
+field com.openbankproject.commons.model.Lobby saturday List[com.openbankproject.commons.model.OpeningTimes]
+field com.openbankproject.commons.model.Lobby sunday List[com.openbankproject.commons.model.OpeningTimes]
+field com.openbankproject.commons.model.Lobby thursday List[com.openbankproject.commons.model.OpeningTimes]
+field com.openbankproject.commons.model.Lobby tuesday List[com.openbankproject.commons.model.OpeningTimes]
+field com.openbankproject.commons.model.Lobby wednesday List[com.openbankproject.commons.model.OpeningTimes]
+field com.openbankproject.commons.model.LobbyString hours String
+field com.openbankproject.commons.model.Location date Option[java.util.Date]
+field com.openbankproject.commons.model.Location latitude Double
+field com.openbankproject.commons.model.Location longitude Double
+field com.openbankproject.commons.model.Location user Option[com.openbankproject.commons.model.BasicResourceUser]
+field com.openbankproject.commons.model.MeetingCommons bankId String
+field com.openbankproject.commons.model.MeetingCommons creator com.openbankproject.commons.model.ContactDetails
+field com.openbankproject.commons.model.MeetingCommons invitees List[com.openbankproject.commons.model.Invitee]
+field com.openbankproject.commons.model.MeetingCommons keys com.openbankproject.commons.model.MeetingKeys
+field com.openbankproject.commons.model.MeetingCommons meetingId String
+field com.openbankproject.commons.model.MeetingCommons present com.openbankproject.commons.model.MeetingPresent
+field com.openbankproject.commons.model.MeetingCommons providerId String
+field com.openbankproject.commons.model.MeetingCommons purposeId String
+field com.openbankproject.commons.model.MeetingCommons when java.util.Date
+field com.openbankproject.commons.model.MeetingKeys customerToken String
+field com.openbankproject.commons.model.MeetingKeys sessionId String
+field com.openbankproject.commons.model.MeetingKeys staffToken String
+field com.openbankproject.commons.model.MeetingPresent customerUserId String
+field com.openbankproject.commons.model.MeetingPresent staffUserId String
+field com.openbankproject.commons.model.Meta license com.openbankproject.commons.model.License
+field com.openbankproject.commons.model.OpeningTimes closingTime String
+field com.openbankproject.commons.model.OpeningTimes openingTime String
+field com.openbankproject.commons.model.OrderJson order com.openbankproject.commons.model.OrderObjectJson
+field com.openbankproject.commons.model.OrderObjectJson distribution_channel String
+field com.openbankproject.commons.model.OrderObjectJson first_check_number String
+field com.openbankproject.commons.model.OrderObjectJson number_of_checkbooks String
+field com.openbankproject.commons.model.OrderObjectJson order_date String
+field com.openbankproject.commons.model.OrderObjectJson order_id String
+field com.openbankproject.commons.model.OrderObjectJson shipping_code String
+field com.openbankproject.commons.model.OrderObjectJson status String
+field com.openbankproject.commons.model.OutboundAdapterAuthInfo authViews Option[List[com.openbankproject.commons.model.AuthView]]
+field com.openbankproject.commons.model.OutboundAdapterAuthInfo linkedCustomers Option[List[com.openbankproject.commons.model.BasicLinkedCustomer]]
+field com.openbankproject.commons.model.OutboundAdapterAuthInfo userAuthContext Option[List[com.openbankproject.commons.model.BasicUserAuthContext]]
+field com.openbankproject.commons.model.OutboundAdapterAuthInfo userId Option[String]
+field com.openbankproject.commons.model.OutboundAdapterAuthInfo username Option[String]
+field com.openbankproject.commons.model.OutboundAdapterCallContext consumerId Option[String]
+field com.openbankproject.commons.model.OutboundAdapterCallContext correlationId String
+field com.openbankproject.commons.model.OutboundAdapterCallContext generalContext Option[List[com.openbankproject.commons.model.BasicGeneralContext]]
+field com.openbankproject.commons.model.OutboundAdapterCallContext outboundAdapterAuthInfo Option[com.openbankproject.commons.model.OutboundAdapterAuthInfo]
+field com.openbankproject.commons.model.OutboundAdapterCallContext outboundAdapterConsenterInfo Option[com.openbankproject.commons.model.OutboundAdapterAuthInfo]
+field com.openbankproject.commons.model.OutboundAdapterCallContext sessionId Option[String]
+field com.openbankproject.commons.model.PaymentAccount iban String
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 chargeBearer Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 creditorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 creditorAddress Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 creditorAgent Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 creditorAgentName Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 creditorId Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 creditorName String
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 creditorNameAndAddress Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 currencyOfTransfer Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 dayOfExecution Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 debtorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 debtorId Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 debtorName Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 endDate Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 endToEndIdentification Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 exchangeRateInformation Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 executionRule Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 frequency String
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 instructedAmount com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 instructionIdentification Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 purposeCode Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 remittanceInformationStructured Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 remittanceInformationStructuredArray Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 remittanceInformationUnstructured Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 remittanceInformationUnstructuredArray Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 requestedExecutionDate Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 requestedExecutionTime Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 serviceLevel Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 startDate String
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 ultimateCreditor Option[String]
+field com.openbankproject.commons.model.PeriodicSepaCreditTransfersBerlinGroupV13 ultimateDebtor Option[String]
+field com.openbankproject.commons.model.PhysicalCard account com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.model.PhysicalCard allows List[com.openbankproject.commons.model.CardAction]
+field com.openbankproject.commons.model.PhysicalCard bankCardNumber String
+field com.openbankproject.commons.model.PhysicalCard bankId String
+field com.openbankproject.commons.model.PhysicalCard brand Option[String]
+field com.openbankproject.commons.model.PhysicalCard cancelled Boolean
+field com.openbankproject.commons.model.PhysicalCard cardId String
+field com.openbankproject.commons.model.PhysicalCard cardType String
+field com.openbankproject.commons.model.PhysicalCard collected Option[com.openbankproject.commons.model.CardCollectionInfo]
+field com.openbankproject.commons.model.PhysicalCard customerId String
+field com.openbankproject.commons.model.PhysicalCard cvv Option[String]
+field com.openbankproject.commons.model.PhysicalCard enabled Boolean
+field com.openbankproject.commons.model.PhysicalCard expires java.util.Date
+field com.openbankproject.commons.model.PhysicalCard issueNumber String
+field com.openbankproject.commons.model.PhysicalCard nameOnCard String
+field com.openbankproject.commons.model.PhysicalCard networks List[String]
+field com.openbankproject.commons.model.PhysicalCard onHotList Boolean
+field com.openbankproject.commons.model.PhysicalCard pinResets List[com.openbankproject.commons.model.PinResetInfo]
+field com.openbankproject.commons.model.PhysicalCard posted Option[com.openbankproject.commons.model.CardPostedInfo]
+field com.openbankproject.commons.model.PhysicalCard replacement Option[com.openbankproject.commons.model.CardReplacementInfo]
+field com.openbankproject.commons.model.PhysicalCard serialNumber String
+field com.openbankproject.commons.model.PhysicalCard technology String
+field com.openbankproject.commons.model.PhysicalCard validFrom java.util.Date
+field com.openbankproject.commons.model.PinResetInfo reasonRequested com.openbankproject.commons.model.PinResetReason
+field com.openbankproject.commons.model.PinResetInfo requestedDate java.util.Date
+field com.openbankproject.commons.model.ProductAttributeCommons attributeType com.openbankproject.commons.model.enums.ProductAttributeType.Value
+field com.openbankproject.commons.model.ProductAttributeCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.ProductAttributeCommons isActive Option[Boolean]
+field com.openbankproject.commons.model.ProductAttributeCommons name String
+field com.openbankproject.commons.model.ProductAttributeCommons productAttributeId String
+field com.openbankproject.commons.model.ProductAttributeCommons productCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.model.ProductAttributeCommons value String
+field com.openbankproject.commons.model.ProductCode value String
+field com.openbankproject.commons.model.ProductCollectionCommons collectionCode String
+field com.openbankproject.commons.model.ProductCollectionCommons productCode String
+field com.openbankproject.commons.model.ProductCollectionItemCommons collectionCode String
+field com.openbankproject.commons.model.ProductCollectionItemCommons memberProductCode String
+field com.openbankproject.commons.model.ProductCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.ProductCommons category String
+field com.openbankproject.commons.model.ProductCommons code com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.model.ProductCommons description String
+field com.openbankproject.commons.model.ProductCommons details String
+field com.openbankproject.commons.model.ProductCommons family String
+field com.openbankproject.commons.model.ProductCommons meta com.openbankproject.commons.model.Meta
+field com.openbankproject.commons.model.ProductCommons moreInfoUrl String
+field com.openbankproject.commons.model.ProductCommons name String
+field com.openbankproject.commons.model.ProductCommons parentProductCode com.openbankproject.commons.model.ProductCode
+field com.openbankproject.commons.model.ProductCommons superFamily String
+field com.openbankproject.commons.model.ProductCommons termsAndConditionsUrl String
+field com.openbankproject.commons.model.Routing address String
+field com.openbankproject.commons.model.Routing scheme String
+field com.openbankproject.commons.model.SepaCreditTransfers creditorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.SepaCreditTransfers creditorName String
+field com.openbankproject.commons.model.SepaCreditTransfers debtorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.SepaCreditTransfers instructedAmount com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 chargeBearer Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 creditorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 creditorAddress Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 creditorAgent Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 creditorAgentName Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 creditorId Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 creditorName String
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 creditorNameAndAddress Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 currencyOfTransfer Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 debtorAccount com.openbankproject.commons.model.PaymentAccount
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 debtorId Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 debtorName Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 endToEndIdentification Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 exchangeRateInformation Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 instructedAmount com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 instructionIdentification Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 purposeCode Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 remittanceInformationStructured Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 remittanceInformationStructuredArray Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 remittanceInformationUnstructured Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 remittanceInformationUnstructuredArray Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 requestedExecutionDate Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 requestedExecutionTime Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 serviceLevel Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 ultimateCreditor Option[String]
+field com.openbankproject.commons.model.SepaCreditTransfersBerlinGroupV13 ultimateDebtor Option[String]
+field com.openbankproject.commons.model.Status backendMessages List[com.openbankproject.commons.model.InboundStatusMessage]
+field com.openbankproject.commons.model.Status errorCode String
+field com.openbankproject.commons.model.TaxResidenceCommons customerId String
+field com.openbankproject.commons.model.TaxResidenceCommons domain String
+field com.openbankproject.commons.model.TaxResidenceCommons taxNumber String
+field com.openbankproject.commons.model.TaxResidenceCommons taxResidenceId String
+field com.openbankproject.commons.model.ToAccountTransferToAccount account com.openbankproject.commons.model.ToAccountTransferToAccountAccount
+field com.openbankproject.commons.model.ToAccountTransferToAccount bank_code String
+field com.openbankproject.commons.model.ToAccountTransferToAccount branch_number String
+field com.openbankproject.commons.model.ToAccountTransferToAccount name String
+field com.openbankproject.commons.model.ToAccountTransferToAccountAccount iban String
+field com.openbankproject.commons.model.ToAccountTransferToAccountAccount number String
+field com.openbankproject.commons.model.ToAccountTransferToAtm date_of_birth String
+field com.openbankproject.commons.model.ToAccountTransferToAtm kyc_document com.openbankproject.commons.model.ToAccountTransferToAtmKycDocument
+field com.openbankproject.commons.model.ToAccountTransferToAtm legal_name String
+field com.openbankproject.commons.model.ToAccountTransferToAtm mobile_phone_number String
+field com.openbankproject.commons.model.ToAccountTransferToAtmKycDocument number String
+field com.openbankproject.commons.model.ToAccountTransferToAtmKycDocument type String
+field com.openbankproject.commons.model.ToAccountTransferToPhone mobile_phone_number String
+field com.openbankproject.commons.model.Transaction amount BigDecimal
+field com.openbankproject.commons.model.Transaction balance BigDecimal
+field com.openbankproject.commons.model.Transaction currency String
+field com.openbankproject.commons.model.Transaction description Option[String]
+field com.openbankproject.commons.model.Transaction finishDate Option[java.util.Date]
+field com.openbankproject.commons.model.Transaction id com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.model.Transaction otherAccount com.openbankproject.commons.model.Counterparty
+field com.openbankproject.commons.model.Transaction startDate java.util.Date
+field com.openbankproject.commons.model.Transaction status Option[String]
+field com.openbankproject.commons.model.Transaction thisAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.model.Transaction transactionType String
+field com.openbankproject.commons.model.Transaction uuid String
+field com.openbankproject.commons.model.TransactionAttributeCommons attributeType com.openbankproject.commons.model.enums.TransactionAttributeType.Value
+field com.openbankproject.commons.model.TransactionAttributeCommons bankId com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.TransactionAttributeCommons name String
+field com.openbankproject.commons.model.TransactionAttributeCommons transactionAttributeId String
+field com.openbankproject.commons.model.TransactionAttributeCommons transactionId com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.model.TransactionAttributeCommons value String
+field com.openbankproject.commons.model.TransactionCore amount BigDecimal
+field com.openbankproject.commons.model.TransactionCore balance BigDecimal
+field com.openbankproject.commons.model.TransactionCore currency String
+field com.openbankproject.commons.model.TransactionCore description Option[String]
+field com.openbankproject.commons.model.TransactionCore finishDate java.util.Date
+field com.openbankproject.commons.model.TransactionCore id com.openbankproject.commons.model.TransactionId
+field com.openbankproject.commons.model.TransactionCore otherAccount com.openbankproject.commons.model.CounterpartyCore
+field com.openbankproject.commons.model.TransactionCore startDate java.util.Date
+field com.openbankproject.commons.model.TransactionCore thisAccount com.openbankproject.commons.model.BankAccount
+field com.openbankproject.commons.model.TransactionCore transactionType String
+field com.openbankproject.commons.model.TransactionId value String
+field com.openbankproject.commons.model.TransactionRequest body com.openbankproject.commons.model.TransactionRequestBodyAllTypes
+field com.openbankproject.commons.model.TransactionRequest challenge com.openbankproject.commons.model.TransactionRequestChallenge
+field com.openbankproject.commons.model.TransactionRequest charge com.openbankproject.commons.model.TransactionRequestCharge
+field com.openbankproject.commons.model.TransactionRequest charge_policy String
+field com.openbankproject.commons.model.TransactionRequest counterparty_id com.openbankproject.commons.model.CounterpartyId
+field com.openbankproject.commons.model.TransactionRequest end_date java.util.Date
+field com.openbankproject.commons.model.TransactionRequest from com.openbankproject.commons.model.TransactionRequestAccount
+field com.openbankproject.commons.model.TransactionRequest future_date Option[String]
+field com.openbankproject.commons.model.TransactionRequest id com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.model.TransactionRequest is_beneficiary Boolean
+field com.openbankproject.commons.model.TransactionRequest name String
+field com.openbankproject.commons.model.TransactionRequest on_behalf_of_user_id Option[String]
+field com.openbankproject.commons.model.TransactionRequest originator Option[com.openbankproject.commons.model.TransactionRequestOriginator]
+field com.openbankproject.commons.model.TransactionRequest other_account_routing_address String
+field com.openbankproject.commons.model.TransactionRequest other_account_routing_scheme String
+field com.openbankproject.commons.model.TransactionRequest other_bank_routing_address String
+field com.openbankproject.commons.model.TransactionRequest other_bank_routing_scheme String
+field com.openbankproject.commons.model.TransactionRequest payment_day_of_execution Option[String]
+field com.openbankproject.commons.model.TransactionRequest payment_end_date Option[java.util.Date]
+field com.openbankproject.commons.model.TransactionRequest payment_execution_Rule Option[String]
+field com.openbankproject.commons.model.TransactionRequest payment_frequency Option[String]
+field com.openbankproject.commons.model.TransactionRequest payment_start_date Option[java.util.Date]
+field com.openbankproject.commons.model.TransactionRequest start_date java.util.Date
+field com.openbankproject.commons.model.TransactionRequest status String
+field com.openbankproject.commons.model.TransactionRequest this_account_id com.openbankproject.commons.model.AccountId
+field com.openbankproject.commons.model.TransactionRequest this_bank_id com.openbankproject.commons.model.BankId
+field com.openbankproject.commons.model.TransactionRequest this_view_id com.openbankproject.commons.model.ViewId
+field com.openbankproject.commons.model.TransactionRequest transaction_ids String
+field com.openbankproject.commons.model.TransactionRequest type String
+field com.openbankproject.commons.model.TransactionRequest user_id Option[String]
+field com.openbankproject.commons.model.TransactionRequestAccount account_id String
+field com.openbankproject.commons.model.TransactionRequestAccount bank_id String
+field com.openbankproject.commons.model.TransactionRequestAgentCashWithdrawal agent_number String
+field com.openbankproject.commons.model.TransactionRequestAgentCashWithdrawal bank_id String
+field com.openbankproject.commons.model.TransactionRequestBGV1 id com.openbankproject.commons.model.TransactionRequestId
+field com.openbankproject.commons.model.TransactionRequestBGV1 status String
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes description String
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_agent Option[com.openbankproject.commons.model.TransactionRequestAgentCashWithdrawal]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_counterparty Option[com.openbankproject.commons.model.TransactionRequestCounterpartyId]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_sandbox_tan Option[com.openbankproject.commons.model.TransactionRequestAccount]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_sepa Option[com.openbankproject.commons.model.TransactionRequestIban]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_sepa_credit_transfers Option[com.openbankproject.commons.model.SepaCreditTransfers]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_simple Option[com.openbankproject.commons.model.TransactionRequestSimple]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_transfer_to_account Option[com.openbankproject.commons.model.TransactionRequestTransferToAccount]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_transfer_to_atm Option[com.openbankproject.commons.model.TransactionRequestTransferToAtm]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes to_transfer_to_phone Option[com.openbankproject.commons.model.TransactionRequestTransferToPhone]
+field com.openbankproject.commons.model.TransactionRequestBodyAllTypes value com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.TransactionRequestChallenge allowed_attempts Int
+field com.openbankproject.commons.model.TransactionRequestChallenge challenge_type String
+field com.openbankproject.commons.model.TransactionRequestChallenge id String
+field com.openbankproject.commons.model.TransactionRequestCharge summary String
+field com.openbankproject.commons.model.TransactionRequestCharge value com.openbankproject.commons.model.AmountOfMoney
+field com.openbankproject.commons.model.TransactionRequestCounterpartyId counterparty_id String
+field com.openbankproject.commons.model.TransactionRequestIban iban String
+field com.openbankproject.commons.model.TransactionRequestId value String
+field com.openbankproject.commons.model.TransactionRequestOriginator account_routing com.openbankproject.commons.model.TransactionRequestOriginatorAccountRouting
+field com.openbankproject.commons.model.TransactionRequestOriginator address String
+field com.openbankproject.commons.model.TransactionRequestOriginator name String
+field com.openbankproject.commons.model.TransactionRequestOriginatorAccountRouting address String
+field com.openbankproject.commons.model.TransactionRequestOriginatorAccountRouting scheme String
+field com.openbankproject.commons.model.TransactionRequestReason amount Option[String]
+field com.openbankproject.commons.model.TransactionRequestReason code String
+field com.openbankproject.commons.model.TransactionRequestReason currency Option[String]
+field com.openbankproject.commons.model.TransactionRequestReason description Option[String]
+field com.openbankproject.commons.model.TransactionRequestReason documentNumber Option[String]
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountSecondaryRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherAccountSecondaryRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBankRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBankRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBranchRoutingAddress String
+field com.openbankproject.commons.model.TransactionRequestSimple otherBranchRoutingScheme String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount description String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount future_date String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount to com.openbankproject.commons.model.ToAccountTransferToAccount
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount transfer_type String
+field com.openbankproject.commons.model.TransactionRequestTransferToAccount value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm description String
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm from com.openbankproject.commons.model.FromAccountTransfer
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm message String
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm to com.openbankproject.commons.model.ToAccountTransferToAtm
+field com.openbankproject.commons.model.TransactionRequestTransferToAtm value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone description String
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone from com.openbankproject.commons.model.FromAccountTransfer
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone message String
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone to com.openbankproject.commons.model.ToAccountTransferToPhone
+field com.openbankproject.commons.model.TransactionRequestTransferToPhone value com.openbankproject.commons.model.AmountOfMoneyJsonV121
+field com.openbankproject.commons.model.TransactionRequestType value String
+field com.openbankproject.commons.model.TransactionRequestTypeChargeCommons bankId String
+field com.openbankproject.commons.model.TransactionRequestTypeChargeCommons chargeAmount String
+field com.openbankproject.commons.model.TransactionRequestTypeChargeCommons chargeCurrency String
+field com.openbankproject.commons.model.TransactionRequestTypeChargeCommons chargeSummary String
+field com.openbankproject.commons.model.TransactionRequestTypeChargeCommons transactionRequestTypeId String
+field com.openbankproject.commons.model.UserAuthContextCommons consumerId String
+field com.openbankproject.commons.model.UserAuthContextCommons key String
+field com.openbankproject.commons.model.UserAuthContextCommons timeStamp java.util.Date
+field com.openbankproject.commons.model.UserAuthContextCommons userAuthContextId String
+field com.openbankproject.commons.model.UserAuthContextCommons userId String
+field com.openbankproject.commons.model.UserAuthContextCommons value String
+field com.openbankproject.commons.model.UserAuthContextUpdateCommons challenge String
+field com.openbankproject.commons.model.UserAuthContextUpdateCommons consumerId String
+field com.openbankproject.commons.model.UserAuthContextUpdateCommons key String
+field com.openbankproject.commons.model.UserAuthContextUpdateCommons status String
+field com.openbankproject.commons.model.UserAuthContextUpdateCommons userAuthContextUpdateId String
+field com.openbankproject.commons.model.UserAuthContextUpdateCommons userId String
+field com.openbankproject.commons.model.UserAuthContextUpdateCommons value String
+field com.openbankproject.commons.model.ViewBasic description String
+field com.openbankproject.commons.model.ViewBasic id String
+field com.openbankproject.commons.model.ViewBasic name String
+field com.openbankproject.commons.model.ViewId value String
diff --git a/obp-api/src/test/scala/code/entitlement/MappedEntitlementTest.scala b/obp-api/src/test/scala/code/entitlement/MappedEntitlementTest.scala
index 5723d27979..3b18dbe2c5 100644
--- a/obp-api/src/test/scala/code/entitlement/MappedEntitlementTest.scala
+++ b/obp-api/src/test/scala/code/entitlement/MappedEntitlementTest.scala
@@ -15,7 +15,7 @@ class MappedEntitlementTest extends ServerSetup {
def createEntitlement(bankId: String, userId: String, roleName: String) = Entitlement.entitlement.vend.addEntitlement(bankId, userId, roleName)
- private def delete() {
+ private def delete(): Unit = {
val found = Entitlement.entitlement.vend.getEntitlements.openOr(List())
found.foreach {
d => {
diff --git a/obp-api/src/test/scala/code/obp/grpc/ObpGrpcServerSmokeTest.scala b/obp-api/src/test/scala/code/obp/grpc/ObpGrpcServerSmokeTest.scala
new file mode 100644
index 0000000000..74da4a7c9d
--- /dev/null
+++ b/obp-api/src/test/scala/code/obp/grpc/ObpGrpcServerSmokeTest.scala
@@ -0,0 +1,140 @@
+package code.obp.grpc
+
+import code.bankconnectors.Connector
+import code.chat.ChatEventBus
+import code.obp.grpc.api.ObpServiceGrpc
+import code.setup.ServerSetupWithTestData
+import com.google.protobuf.empty.Empty
+import io.grpc.stub.MetadataUtils
+import io.grpc.{ManagedChannel, ManagedChannelBuilder, Metadata, StatusRuntimeException}
+import org.scalatest.Tag
+
+import scala.concurrent.Await
+import scala.concurrent.duration._
+
+/**
+ * A connectivity smoke test for the gRPC server.
+ *
+ * Nothing under src/test referenced grpc at all before this, and no shard's test_filter names the
+ * package, so a running production path had no coverage whatsoever. That matters on its own, and it
+ * matters specifically for the scalapb upgrade: everything under code/obp/grpc/api is generated code
+ * checked into the repository, and regenerating it against a new scalapb needs to be verifiable by
+ * something other than "it still compiles".
+ *
+ * One authenticated request over a real socket covers that. It exercises the server build, the
+ * service binding, the auth interceptor, the generated stub, protobuf serialisation on the way out
+ * and deserialisation on the way back.
+ *
+ * The package is not in any shard's test_filter, so this is picked up by the catch-all (shard 8 in
+ * CI, shard 4 locally). Confirm with the "Catch-all extras" line in that shard's log if you need to
+ * know it actually ran.
+ */
+class ObpGrpcServerSmokeTest extends ServerSetupWithTestData {
+
+ object GrpcSmoke extends Tag("GrpcSmoke")
+
+ private var grpcServer: ObpGrpcServer = _
+ private var channel: ManagedChannel = _
+ private var grpcPort: Int = _
+
+ /**
+ * Port 0, and the bound port read back afterwards. Shards run as parallel JVMs, and two of them
+ * starting this server on the same port aborts one of the runs with a BindException - which is
+ * what happens with the configured default, and why every other server-starting suite here takes
+ * its port from the shard rather than from a global.
+ *
+ * Not "open a socket on 0, read the port, close it, then bind": between the close and the bind
+ * another process can take it, which is the flaw of that idiom rather than a fix for it.
+ */
+ override def beforeAll(): Unit = {
+ super.beforeAll()
+ grpcServer = new ObpGrpcServer(scala.concurrent.ExecutionContext.global, port = 0)
+ grpcServer.start()
+ grpcPort = grpcServer.boundPort
+ channel = ManagedChannelBuilder
+ .forAddress("localhost", grpcPort)
+ .usePlaintext()
+ .asInstanceOf[ManagedChannelBuilder[_]]
+ .build()
+ }
+
+ override def afterAll(): Unit = {
+ if (channel != null) channel.shutdownNow()
+ if (grpcServer != null) grpcServer.stop()
+ super.afterAll()
+ }
+
+ /** The interceptor reads the same Authorization header the REST endpoints take. */
+ private def authenticatedStub: ObpServiceGrpc.ObpServiceBlockingStub = {
+ val token = user1.map(_._2.value).getOrElse(fail("no DirectLogin token for user1"))
+ val metadata = new Metadata()
+ metadata.put(
+ Metadata.Key.of("authorization", Metadata.ASCII_STRING_MARSHALLER),
+ s"""DirectLogin token="$token""""
+ )
+ ObpServiceGrpc.blockingStub(channel)
+ .withInterceptors(MetadataUtils.newAttachHeadersInterceptor(metadata))
+ }
+
+ feature("The gRPC server answers over a real connection") {
+
+ scenario("getBanks returns the banks the connector returns", GrpcSmoke) {
+ val viaGrpc = authenticatedStub.getBanks(Empty.defaultInstance)
+
+ val viaConnector = Await.result(Connector.connector.vend.getBanks(None), 30.seconds)
+ .map(_._1.map(_.bankId.value))
+ .getOrElse(Nil)
+
+ viaGrpc.banks.map(_.id).sorted should equal(viaConnector.sorted)
+ viaGrpc.banks should not be empty
+ // A field other than the key, so the check covers more than the message arriving at all.
+ viaGrpc.banks.map(_.fullName).exists(_.nonEmpty) should equal(true)
+ }
+
+ scenario("the bound port is still reportable after the server stops", GrpcSmoke) {
+ // boundPort read server.getPort and fell back to the constructor argument once stop() nulled
+ // the field - which is 0 for a server given an ephemeral port, so teardown logging and any
+ // reconnect would see 0 rather than where it had been listening.
+ //
+ // try/finally, because a failure of the first assertion would otherwise leave this server
+ // bound for the life of the JVM - beforeAll's server is the only one afterAll knows about.
+ val server = new ObpGrpcServer(scala.concurrent.ExecutionContext.global, port = 0)
+ server.start()
+ try {
+ val whileRunning = server.boundPort
+ whileRunning should not equal 0
+
+ server.stop()
+ server.boundPort should equal(whileRunning)
+ } finally {
+ server.stop()
+ }
+ }
+
+ scenario("stopping one server leaves another server's event buses alone", GrpcSmoke) {
+ // start() starts ChatEventBus and, when enabled, the log-cache and metrics buses. All three
+ // are objects holding one subscriber connection for the process, and start() is a no-op once
+ // one is running - but stop() was not: it punsubscribed and closed that shared connection
+ // whoever called it. So a second server's stop() silently cut the pub/sub out from under the
+ // server this suite started in beforeAll, which is still serving.
+ ChatEventBus.isRunning should equal(true)
+
+ val second = new ObpGrpcServer(scala.concurrent.ExecutionContext.global, port = 0)
+ second.start()
+ second.stop()
+
+ withClue("the second server stopped a bus it had joined rather than started: ") {
+ ChatEventBus.isRunning should equal(true)
+ }
+ }
+
+ scenario("a call with no credentials is rejected", GrpcSmoke) {
+ // AuthInterceptor had no coverage either, and this is the branch that decides whether the
+ // server is open to the world.
+ val thrown = intercept[StatusRuntimeException] {
+ ObpServiceGrpc.blockingStub(channel).getBanks(Empty.defaultInstance)
+ }
+ thrown.getStatus.getCode should equal(io.grpc.Status.Code.UNAUTHENTICATED)
+ }
+ }
+}
diff --git a/obp-api/src/test/scala/code/setup/PrivateUser2AccountsAndSetUpWithTestData.scala b/obp-api/src/test/scala/code/setup/PrivateUser2AccountsAndSetUpWithTestData.scala
index f3e67a8ee8..940a0364bf 100644
--- a/obp-api/src/test/scala/code/setup/PrivateUser2AccountsAndSetUpWithTestData.scala
+++ b/obp-api/src/test/scala/code/setup/PrivateUser2AccountsAndSetUpWithTestData.scala
@@ -17,7 +17,7 @@ trait PrivateUser2AccountsAndSetUpWithTestData {
*
* Also adds some private accounts for user1 that are not public
*/
- def accountTestsSpecificDBSetup() {
+ def accountTestsSpecificDBSetup(): Unit = {
val banks = Connector.connector.vend.getBanksLegacy(None).map(_._1).openOrThrowException(attemptedToOpenAnEmptyBox)
diff --git a/obp-api/src/test/scala/code/setup/SendServerRequests.scala b/obp-api/src/test/scala/code/setup/SendServerRequests.scala
index 35b8b64b24..b8afd8066f 100644
--- a/obp-api/src/test/scala/code/setup/SendServerRequests.scala
+++ b/obp-api/src/test/scala/code/setup/SendServerRequests.scala
@@ -37,7 +37,7 @@ import org.json4s.JsonAST.JValue
import org.json4s._
import com.openbankproject.commons.util.JsonAliases._
-import scala.collection.JavaConverters._
+import scala.jdk.CollectionConverters._
import scala.concurrent.{ExecutionContext, Future}
case class APIResponse(code: Int, body: JValue, headers: Option[OkHeaders])
diff --git a/obp-api/src/test/scala/code/usercustomerlinks/MappedUserCustomerLinkProviderTest.scala b/obp-api/src/test/scala/code/usercustomerlinks/MappedUserCustomerLinkProviderTest.scala
index 21206d2fc0..b59ed8e9b0 100644
--- a/obp-api/src/test/scala/code/usercustomerlinks/MappedUserCustomerLinkProviderTest.scala
+++ b/obp-api/src/test/scala/code/usercustomerlinks/MappedUserCustomerLinkProviderTest.scala
@@ -14,7 +14,7 @@ class MappedUserCustomerLinkProviderTest extends ServerSetup {
def userCustomerLink(userId: String, customerId: String) = UserCustomerLink.userCustomerLink.vend.createUserCustomerLink(userId, customerId, new Date(12340000), true)
- private def delete() {
+ private def delete(): Unit = {
UserCustomerLink.userCustomerLink.vend.bulkDeleteUserCustomerLinks()
}
diff --git a/obp-api/src/test/scala/code/util/DynamicUtilTest.scala b/obp-api/src/test/scala/code/util/DynamicUtilTest.scala
index c8123087eb..c1bfd22e2b 100644
--- a/obp-api/src/test/scala/code/util/DynamicUtilTest.scala
+++ b/obp-api/src/test/scala/code/util/DynamicUtilTest.scala
@@ -76,9 +76,6 @@ class DynamicUtilTest extends FlatSpec with Matchers {
"""[new java.net.NetPermission("specifyStreamHandler"),
|new java.lang.reflect.ReflectPermission("suppressAccessChecks"),
|new java.lang.RuntimePermission("getenv.*"),
- |new java.util.PropertyPermission("cglib.useCache", "read"),
- |new java.util.PropertyPermission("net.sf.cglib.test.stressHashCodes", "read"),
- |new java.util.PropertyPermission("cglib.debugLocation", "read"),
|new java.lang.RuntimePermission("accessDeclaredMembers"),
|new java.lang.RuntimePermission("getClassLoader")]""".stripMargin
@@ -92,7 +89,7 @@ class DynamicUtilTest extends FlatSpec with Matchers {
val dependenciesBox: Box[Map[String, Set[String]]] = DynamicUtil.compileScalaCode(s"${DynamicUtil.importStatements}"+"""
|
- |Map(
+ |Map[String, String](
| // companion objects methods
| NewStyle.function.getClass.getTypeName -> "*",
| CompiledObjects.getClass.getTypeName -> "sandbox",
@@ -112,13 +109,13 @@ class DynamicUtilTest extends FlatSpec with Matchers {
| // allow any method of PractiseEndpoint for test
| PractiseEndpoint.getClass.getTypeName + "*" -> "*",
|
- | ).mapValues(v => StringUtils.split(v, ',').map(_.trim).toSet)""".stripMargin)
+ | ).mapValues(v => StringUtils.split(v, ',').map(_.trim).toSet).toMap""".stripMargin)
val dependencies = dependenciesBox.openOrThrowException("Can not compile the string to Map")
dependencies.toString contains ("code.api.util.NewStyle") shouldBe (true)
val dependenciesString = """[NewStyle.function.getClass.getTypeName -> "*",CompiledObjects.getClass.getTypeName -> "sandbox",HttpCode.getClass.getTypeName -> "200",DynamicCompileEndpoint.getClass.getTypeName -> "getPathParams, scalaFutureToBoxedJsonResponse",APIUtil.getClass.getTypeName -> "errorJsonResponse, errorJsonResponse$default$1, errorJsonResponse$default$2, errorJsonResponse$default$3, errorJsonResponse$default$4, scalaFutureToLaFuture, futureToBoxedResponse",ErrorMessages.getClass.getTypeName -> "*",ExecutionContext.Implicits.getClass.getTypeName -> "global",JSONFactory400.getClass.getTypeName -> "createBanksJson",classOf[Sandbox].getTypeName -> "runInSandbox",classOf[CallContext].getTypeName -> "*",classOf[ResourceDoc].getTypeName -> "getPathParams","scala.reflect.runtime.package$" -> "universe",PractiseEndpoint.getClass.getTypeName + "*" -> "*"]""".stripMargin
- val scalaCode2 = s"${DynamicUtil.importStatements}"+dependenciesString.replaceFirst("\\[","Map(").dropRight(1) +").mapValues(v => StringUtils.split(v, ',').map(_.trim).toSet)"
+ val scalaCode2 = s"${DynamicUtil.importStatements}"+dependenciesString.replaceFirst("\\[","Map[String, String](").dropRight(1) +").mapValues(v => StringUtils.split(v, ',').map(_.trim).toSet).toMap"
val dependenciesBox2: Box[Map[String, Set[String]]] = DynamicUtil.compileScalaCode(scalaCode2)
val dependencies2 = dependenciesBox2.openOrThrowException("Can not compile the string to Map")
dependencies2.toString contains ("code.api.util.NewStyle") shouldBe (true)
diff --git a/obp-api/src/test/scala/code/util/FrozenClassUtil.scala b/obp-api/src/test/scala/code/util/FrozenClassUtil.scala
index e99e985c13..fd463014dc 100644
--- a/obp-api/src/test/scala/code/util/FrozenClassUtil.scala
+++ b/obp-api/src/test/scala/code/util/FrozenClassUtil.scala
@@ -92,7 +92,7 @@ object FrozenClassUtil extends Loggable{
.map(it => ReflectUtils.getDeepGenericType(it).head)
.toSet
.filter(ReflectUtils.isObpType)
- .filterNot(tp ==) // avoid infinite recursive
+ .filterNot(tp == _) // avoid infinite recursive
match {
case set if(set.size > 0) => set.flatMap(getNestedOBPType) + tp
case _ => Set(tp)
diff --git a/obp-api/src/test/scala/code/util/FrozenMetaDataText.scala b/obp-api/src/test/scala/code/util/FrozenMetaDataText.scala
new file mode 100644
index 0000000000..b45b188283
--- /dev/null
+++ b/obp-api/src/test/scala/code/util/FrozenMetaDataText.scala
@@ -0,0 +1,96 @@
+package code.util
+
+import java.io.{FileInputStream, ObjectInputStream}
+import java.nio.charset.StandardCharsets
+import java.nio.file.{Files, Paths}
+
+import code.connector.RestConnector_vMar2019_FrozenUtil
+import org.apache.commons.io.IOUtils
+
+/**
+ * Renders the two frozen-contract fixtures as text, and writes those renderings beside them.
+ *
+ * The fixtures are Java-serialized blobs. They exist to fail when a frozen type drifts, which only
+ * works if a human can see what changed - and a binary diff shows nothing. The Scala 2.13 migration
+ * had to regenerate both, because collections written under 2.12 do not deserialize under 2.13, and
+ * that regeneration went in as two unreadable blobs. Comparing them afterwards showed the migration
+ * lost nothing and added three types that became describable (APIUtil.JArrayBody, org.json4s.JArray,
+ * PostAccountTagJSON), plus one rendering change in the other fixture (org.json4s.JsonAST.JValue is
+ * now org.json4s.JValue, which RestConnector_vMar2019_FrozenTest already normalises). Benign - but
+ * it should not have taken a hex dump to establish.
+ *
+ * So each blob has a `.txt` sibling, and FrozenMetaDataTextTest fails when the two disagree.
+ *
+ * To regenerate after a frozen type legitimately changes: run the generator for that fixture
+ * (FrozenClassUtil, RestConnector_vMar2019_FrozenUtil), then run this object's main - it rewrites
+ * both texts from whatever the blobs now hold. Review the text diff, and commit blob and text
+ * together. This reads the blobs only, so it needs no server and no props.
+ */
+object FrozenMetaDataText {
+
+ /**
+ * Each blob has to be read exactly the way it was written - a mismatch surfaces as an
+ * OptionalDataException rather than anything descriptive. FrozenClassUtil writes one object:
+ * (List[(ApiVersion, Set[endpointName])], Map[typeName, Map[fieldName, typeRendering]]).
+ */
+ def readFrozenApiInfo(path: String): (List[(Any, Set[Any])], Map[Any, Any]) = {
+ val input = new ObjectInputStream(new FileInputStream(path))
+ try {
+ input.readObject() match {
+ case (versions: List[_], types: Map[_, _]) =>
+ val pairs = versions.collect { case (version, names: Set[_]) => (version: Any, names.map(n => n: Any)) }
+ (pairs, types.asInstanceOf[Map[Any, Any]])
+ case other => sys.error(s"unexpected shape in $path: ${other.getClass.getName}")
+ }
+ } finally IOUtils.closeQuietly(input)
+ }
+
+ /**
+ * RestConnector_vMar2019_FrozenUtil writes a UTF header, then the connector method names, then
+ * the type metadata. The names are connector methods, not endpoints, and are labelled as such.
+ */
+ def readConnectorInfo(path: String): (List[String], Map[Any, Any]) = {
+ val input = new ObjectInputStream(new FileInputStream(path))
+ try {
+ input.readUTF()
+ val methodNames = input.readObject().asInstanceOf[List[String]]
+ val types = input.readObject().asInstanceOf[Map[Any, Any]]
+ (methodNames, types)
+ } finally IOUtils.closeQuietly(input)
+ }
+
+ private def renderTypes(types: Map[Any, Any]): List[String] =
+ types.toList.flatMap {
+ case (typeName, fields: Map[_, _]) =>
+ fields.toList.map { case (fieldName, fieldType) => s"field\t$typeName\t$fieldName\t$fieldType" }
+ case (typeName, other) => List(s"field\t$typeName\t\t$other")
+ }.sorted
+
+ /** Sorted throughout, so two runs over the same blob produce the same bytes. */
+ def renderFrozenApiInfo(path: String): String = {
+ val (versions, types) = readFrozenApiInfo(path)
+ val endpoints = versions.flatMap { case (version, names) => names.map(n => s"endpoint\t$version\t$n") }.sorted
+ (endpoints ::: renderTypes(types)).mkString("\n") + "\n"
+ }
+
+ def renderConnectorInfo(path: String): String = {
+ val (methodNames, types) = readConnectorInfo(path)
+ (methodNames.map(n => s"method\t$n").sorted ::: renderTypes(types)).mkString("\n") + "\n"
+ }
+
+ /** blobPath + ".txt" - the text sits beside the blob it describes rather than somewhere central. */
+ def textPathOf(blobPath: String): String = blobPath + ".txt"
+
+ def main(args: Array[String]): Unit = {
+ val written = List(
+ FrozenClassUtil.persistFilePath -> renderFrozenApiInfo(FrozenClassUtil.persistFilePath),
+ RestConnector_vMar2019_FrozenUtil.persistFilePath -> renderConnectorInfo(RestConnector_vMar2019_FrozenUtil.persistFilePath)
+ ).map { case (blobPath, text) =>
+ val target = Paths.get(textPathOf(blobPath))
+ Files.write(target, text.getBytes(StandardCharsets.UTF_8))
+ target
+ }
+ written.foreach(p => println(s"wrote $p"))
+ println("review the diff, then commit each blob with its text")
+ }
+}
diff --git a/obp-api/src/test/scala/code/util/FrozenMetaDataTextTest.scala b/obp-api/src/test/scala/code/util/FrozenMetaDataTextTest.scala
new file mode 100644
index 0000000000..34e7a0acc0
--- /dev/null
+++ b/obp-api/src/test/scala/code/util/FrozenMetaDataTextTest.scala
@@ -0,0 +1,42 @@
+package code.util
+
+import java.io.File
+import java.nio.charset.StandardCharsets
+import java.nio.file.{Files, Paths}
+
+import code.connector.RestConnector_vMar2019_FrozenUtil
+import org.scalatest.{FlatSpec, Matchers}
+
+/**
+ * Keeps the two frozen-contract fixtures reviewable: each Java-serialized blob has a checked-in
+ * text sibling, and this fails when the two disagree, so a regeneration cannot land as an
+ * unreadable binary diff. See [[FrozenMetaDataText]] for why they exist and how to regenerate them.
+ *
+ * This only compares. It does not write - a test that repairs the tree it is checking hides the
+ * thing it was added to surface, and would leave a release build with a file nobody reviewed.
+ */
+class FrozenMetaDataTextTest extends FlatSpec with Matchers {
+
+ private def checkFixture(blobPath: String, render: String => String): Unit = {
+ assume(new File(blobPath).exists(), s"fixture not persisted yet: $blobPath")
+
+ val textPath = Paths.get(FrozenMetaDataText.textPathOf(blobPath))
+ withClue(s"${textPath.getFileName} is missing; run code.util.FrozenMetaDataText to write it: ") {
+ Files.exists(textPath) shouldBe true
+ }
+
+ val actual = new String(Files.readAllBytes(textPath), StandardCharsets.UTF_8)
+ withClue(s"${textPath.getFileName} is out of date with its blob; " +
+ s"run code.util.FrozenMetaDataText, then review the diff: ") {
+ actual should equal(render(blobPath))
+ }
+ }
+
+ "frozen_type_meta_data" should "match its checked-in text rendering" in {
+ checkFixture(FrozenClassUtil.persistFilePath, FrozenMetaDataText.renderFrozenApiInfo)
+ }
+
+ "RestConnector_vMar2019_frozen_meta_data" should "match its checked-in text rendering" in {
+ checkFixture(RestConnector_vMar2019_FrozenUtil.persistFilePath, FrozenMetaDataText.renderConnectorInfo)
+ }
+}
diff --git a/obp-commons/pom.xml b/obp-commons/pom.xml
index 6740fc285e..0a916a82fa 100644
--- a/obp-commons/pom.xml
+++ b/obp-commons/pom.xml
@@ -24,6 +24,15 @@
compile
${scala.compiler}
+
+
+ org.scala-lang.modules
+ scala-collection-compat_${scala.version}
+ 2.1.2
+
org.scalatest
scalatest_${scala.version}
diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala
index 3e9f0938ba..586d4c66b9 100644
--- a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala
+++ b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala
@@ -40,7 +40,9 @@ import java.util.Date
import scala.reflect.runtime.universe._
-abstract class Converter[T, D <% T: TypeTag]{
+// `D <% T` was view-bound syntax; it desugars to exactly the implicit constructor parameter
+// written out here, so subclasses need the same implicit D => T they already needed.
+abstract class Converter[T, D: TypeTag](implicit ev: D => T){
//this method declared as common method to avoid conflict with Predf#$confirms
implicit def toCommons(t: T): D = ReflectUtils.toSibling[T, D].apply(t)
diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala b/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala
index ec8ee7375f..7b76a27f5e 100644
--- a/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala
+++ b/obp-commons/src/main/scala/com/openbankproject/commons/model/enums/Enumerations.scala
@@ -240,8 +240,8 @@ object DynamicEntityFieldType extends OBPEnumeration[DynamicEntityFieldType]{
true
} else {
val value = jValue.asInstanceOf[JString].s
- val minLengthValue = if(minLength != JNothing) minLength.asInstanceOf[JInt].num.intValue() else 0
- val maxLengthValue = if(minLength != JNothing) maxLength.asInstanceOf[JInt].num.intValue() else Int.MaxValue
+ val minLengthValue = if(minLength != JNothing) minLength.asInstanceOf[JInt].num.intValue else 0
+ val maxLengthValue = if(minLength != JNothing) maxLength.asInstanceOf[JInt].num.intValue else Int.MaxValue
minLengthValue <= value.size && value.size <= maxLengthValue
}
diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/util/Functions.scala b/obp-commons/src/main/scala/com/openbankproject/commons/util/Functions.scala
index 7d2ea176f4..2411a52a7d 100644
--- a/obp-commons/src/main/scala/com/openbankproject/commons/util/Functions.scala
+++ b/obp-commons/src/main/scala/com/openbankproject/commons/util/Functions.scala
@@ -1,8 +1,7 @@
package com.openbankproject.commons.util
import java.util.regex.Pattern
-import scala.collection.{GenSetLike, GenTraversableOnce, SeqLike, TraversableLike, immutable}
-import scala.collection.generic.CanBuildFrom
+import scala.collection.{Factory, immutable}
import scala.reflect.runtime.universe.Type
/**
@@ -47,20 +46,23 @@ object Functions {
()=> value
}
+ // Iterable in place of Traversable and GenTraversableOnce: 2.13 removes both. Every value
+ // these two actually meet - arrays and ordinary collections - is an Iterable, so the runtime
+ // type tests keep selecting the same things.
def deepFlatten(arr: Array[_]): Array[Any] = {
arr.collect {
case a:Array[_] => a
- case coll: GenTraversableOnce[_] => coll.toArray[Any]
+ case coll: Iterable[_] => coll.toArray[Any]
}.flatMap(deepFlatten(_)) ++
- arr.filterNot(it => it.isInstanceOf[Array[_]] || it.isInstanceOf[GenTraversableOnce[_]])
+ arr.filterNot(it => it.isInstanceOf[Array[_]] || it.isInstanceOf[Iterable[_]])
}
- def deepFlatten[A](coll: Traversable[A]): Traversable[Any] = {
+ def deepFlatten[A](coll: Iterable[A]): Iterable[Any] = {
coll.collect {
- case a:Array[_] => a.toTraversable
- case coll: Traversable[_] => coll
+ case a:Array[_] => a.toIndexedSeq
+ case coll: Iterable[_] => coll
}.flatMap(deepFlatten(_)) ++
- coll.filterNot(it => it.isInstanceOf[Array[_]] || it.isInstanceOf[GenTraversableOnce[_]])
+ coll.filterNot(it => it.isInstanceOf[Array[_]] || it.isInstanceOf[Iterable[_]])
}
/**
@@ -95,9 +97,21 @@ object Functions {
def ?:[B >: A](b: B): B = if(b == null) a else b
}
- implicit class RichCollection[A, Repr](iterable: TraversableLike[A, Repr]){
- def distinctBy[B, That](f: A => B)(implicit canBuildFrom: CanBuildFrom[Repr, A, That]): That = {
- val builder = canBuildFrom(iterable.repr)
+ /**
+ * 2.13 removes TraversableLike, SeqLike, GenSetLike and CanBuildFrom outright, so this had
+ * to be rebuilt rather than renamed. It is now written against the collection type itself
+ * plus scala.collection.Factory, which 2.13 has natively and scala-collection-compat
+ * back-ports to 2.12, so one source compiles on both.
+ *
+ * The result type also narrows: CanBuildFrom[Repr, A, That] allowed the result to be a
+ * different kind of collection from the source, and none of the call sites ever used that -
+ * distinctBy returns the List it was given, classify splits a Seq into two Seqs, ?+ returns
+ * the List it was given. Fixing the result at C[A] keeps every existing call compiling and
+ * removes a degree of freedom that only made the rewrite harder.
+ */
+ implicit class RichCollection[A, C[X] <: Iterable[X]](iterable: C[A]){
+ def distinctBy[B](f: A => B)(implicit factory: Factory[A, C[A]]): C[A] = {
+ val builder = factory.newBuilder
val set = scala.collection.mutable.Set[B]()
iterable.foreach(it => {
val calculatedElement = f(it)
@@ -105,7 +119,7 @@ object Functions {
builder += it
}
})
- builder.result
+ builder.result()
}
def toMap[K, V](keyFn: A => K, valueFn: A => V): Map[K, V] = {
val b = immutable.Map.newBuilder[K, V]
@@ -123,12 +137,11 @@ object Functions {
* split collection to tuple of two collections, left is predicate check is true, right is predicate check is false
* @param predicate check element function
* @param canBuildFrom
- * @tparam That to collection's type
* @return tuple
*/
- def classify[That](predicate: A => Boolean)(implicit canBuildFrom: CanBuildFrom[Repr, A, That]): (That, That) = {
- val builderLeft = canBuildFrom(iterable.repr)
- val builderRight = canBuildFrom(iterable.repr)
+ def classify(predicate: A => Boolean)(implicit factory: Factory[A, C[A]]): (C[A], C[A]) = {
+ val builderLeft = factory.newBuilder
+ val builderRight = factory.newBuilder
for (x <- iterable) {
if(predicate(x)) builderLeft += x else builderRight += x
}
@@ -139,14 +152,13 @@ object Functions {
* add one element if coll not exists that element
* @param ele
* @param canBuildFrom
- * @tparam That
* @return new coll contains given ele
*/
- def ?+ [That](ele: A)(implicit canBuildFrom: CanBuildFrom[Repr, A, That]): That = {
+ def ?+ (ele: A)(implicit factory: Factory[A, C[A]]): C[A] = {
if(existsElement(ele)) {
- iterable.asInstanceOf[That]
+ iterable
} else {
- val builder = canBuildFrom(iterable.repr)
+ val builder = factory.newBuilder
builder ++= iterable
builder += ele
builder.result()
@@ -157,25 +169,27 @@ object Functions {
* remove element if coll exists that element, may remove multiple if exists more than one.
* @param ele
* @param canBuildFrom
- * @tparam That
* @return a new coll not contains given ele
*/
- def ?- [That](ele: A)(implicit canBuildFrom: CanBuildFrom[Repr, A, That]): That = {
+ def ?- (ele: A)(implicit factory: Factory[A, C[A]]): C[A] = {
if(!existsElement(ele)) {
- iterable.asInstanceOf[That]
+ iterable
} else {
- val builder = canBuildFrom(iterable.repr)
+ val builder = factory.newBuilder
for(e <- iterable if e != ele)
builder += e
builder.result()
}
}
- private def existsElement[That](ele: A) = {
+ // Seq and Set stand in for SeqLike and GenSetLike. Both are matched at their
+ // scala.collection root so a mutable receiver is still recognised - on 2.13 the
+ // unqualified names mean the immutable ones only.
+ private def existsElement(ele: A): Boolean = {
iterable match {
- case seq: SeqLike[A, Repr] => seq.contains(ele)
- case set: GenSetLike[A, Repr] => set.contains(ele)
- case _ => iterable.exists(ele ==)
+ case seq: scala.collection.Seq[A @unchecked] => seq.contains(ele)
+ case set: scala.collection.Set[A @unchecked] => set.contains(ele)
+ case _ => iterable.exists(ele == _)
}
}
diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/util/JsonUtils.scala b/obp-commons/src/main/scala/com/openbankproject/commons/util/JsonUtils.scala
index 330253ae25..35c076b74b 100644
--- a/obp-commons/src/main/scala/com/openbankproject/commons/util/JsonUtils.scala
+++ b/obp-commons/src/main/scala/com/openbankproject/commons/util/JsonUtils.scala
@@ -767,7 +767,7 @@ object JsonUtils {
Validate.isTrue(tail.forall(_.isInstanceOf[JObject]), s"All the items of Json $fullFieldName should be object type.")
def fieldNameToType(jObject: JObject) = jObject.obj.map(it => it.name -> getType(it.value)).toMap
val headFieldNameToType = fieldNameToType(head)
- val allItemsHaveSameStructure = tail.map(it => fieldNameToType(it.asInstanceOf[JObject])).forall(headFieldNameToType ==)
+ val allItemsHaveSameStructure = tail.map(it => fieldNameToType(it.asInstanceOf[JObject])).forall(headFieldNameToType == _)
Validate.isTrue(allItemsHaveSameStructure, s"All the items of Json $fullFieldName should the same structure.")
case JArray(_) :: tail => Validate.isTrue(tail.forall(_.isInstanceOf[JArray]), s"All the items of Json $fullFieldName should be array type.")
}
@@ -791,7 +791,9 @@ object JsonUtils {
case v => v
}
- val subTypes: List[String] = nestedObjects collect {
+ // Dotted rather than infix: with the postfix `toList` rewritten as `.toList`, an infix
+ // `collect` would bind the call to the block instead of to the collect result.
+ val subTypes: List[String] = nestedObjects.collect {
case (JField(name, v: JObject), path) =>
jObjectToCaseClass(v, typeNamePrefix, name, getParentFiledName(path))
case (JField(name, JArray((v: JObject) :: _)), path) =>
@@ -806,7 +808,7 @@ object JsonUtils {
jObjectToCaseClass(v, typeNamePrefix, name, getParentFiledName(path))
case (JField(_, JArray(JArray(JArray(JArray(JArray(JArray(_ :: _) :: _) :: _) :: _) :: _) :: _)), path) =>
throw new IllegalArgumentException(s"Json field $path have too much nested level, max nested level be supported is 5.")
- } toList
+ }.toList
subTypes
}
diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/util/ReflectUtils.scala b/obp-commons/src/main/scala/com/openbankproject/commons/util/ReflectUtils.scala
index bf3a999d5d..6d9bb428fe 100644
--- a/obp-commons/src/main/scala/com/openbankproject/commons/util/ReflectUtils.scala
+++ b/obp-commons/src/main/scala/com/openbankproject/commons/util/ReflectUtils.scala
@@ -769,19 +769,20 @@ object ReflectUtils {
def toOthers[T: TypeTag](items: List[_]): List[T] = items.map(toOther[T](_))
// the follow four currying function is for implicit usage, to convert trait type to commons case class
- def toSibling[T, D <% T: TypeTag]: T => D = (t: T) => toOther[D](t)
+ // `D <% T` was view-bound syntax; it desugars to exactly the implicit parameter written out here.
+ def toSibling[T, D: TypeTag](implicit ev: D => T): T => D = (t: T) => toOther[D](t)
- def toSiblings[T, D <% T: TypeTag]: List[T] => List[D] = (items: List[T]) => toOthers[D](items)
+ def toSiblings[T, D: TypeTag](implicit ev: D => T): List[T] => List[D] = (items: List[T]) => toOthers[D](items)
- def toSiblingBox[T, D <% T: TypeTag]: Box[T] => Box[D] = (box: Box[T]) => box.map(toOther[D](_))
+ def toSiblingBox[T, D: TypeTag](implicit ev: D => T): Box[T] => Box[D] = (box: Box[T]) => box.map(toOther[D](_))
- def toSiblingsBox[T, D <% T: TypeTag]: Box[List[T]] => Box[List[D]] = (boxItems: Box[List[T]]) => boxItems.map(toOthers[D](_))
+ def toSiblingsBox[T, D: TypeTag](implicit ev: D => T): Box[List[T]] => Box[List[D]] = (boxItems: Box[List[T]]) => boxItems.map(toOthers[D](_))
- def toSiblingOption[T, D <% T: TypeTag]: Option[T] => Option[D] = (option: Option[T]) => option.map(toOther[D](_))
+ def toSiblingOption[T, D: TypeTag](implicit ev: D => T): Option[T] => Option[D] = (option: Option[T]) => option.map(toOther[D](_))
- def toSiblingsOption[T, D <% T: TypeTag]: Option[List[T]] => Option[List[D]] = (optionItems: Option[List[T]]) => optionItems.map(toOthers[D](_))
+ def toSiblingsOption[T, D: TypeTag](implicit ev: D => T): Option[List[T]] => Option[List[D]] = (optionItems: Option[List[T]]) => optionItems.map(toOthers[D](_))
/**
* get the value by the field name, see the usage :
diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/util/RequiredFieldValidation.scala b/obp-commons/src/main/scala/com/openbankproject/commons/util/RequiredFieldValidation.scala
index 9b82799143..84762e1845 100644
--- a/obp-commons/src/main/scala/com/openbankproject/commons/util/RequiredFieldValidation.scala
+++ b/obp-commons/src/main/scala/com/openbankproject/commons/util/RequiredFieldValidation.scala
@@ -12,9 +12,6 @@ import Functions.Implicits._
import org.json4s.{Formats, JValue}
import org.json4s.JsonDSL._
-import scala.collection.GenTraversableOnce
-import scala.collection.mutable.ArrayBuffer
-
/**
* Mark given type's field or constructor variable is required for some apiVersion
*
@@ -153,7 +150,7 @@ case class RequiredInfo(requiredArgs: Seq[RequiredArgs]) extends RequiredFields
val scannedPathValue: Any = prePathValue match {
case null => null
- case arr: Array[_] => arr.filterNot(null ==)
+ case arr: Array[_] => arr.filterNot(null == _)
.map(ele => ReflectUtils.getField(ele.asInstanceOf[AnyRef], currentPath))
case any: AnyRef => ReflectUtils.getField(any, currentPath)
}
@@ -164,7 +161,7 @@ case class RequiredInfo(requiredArgs: Seq[RequiredArgs]) extends RequiredFields
if(scannedPath == fieldPath) {
if(prePathValue != JNull) {
(prePathValue, scannedPathValue) match {
- case (_: Array[_], arr: Array[_]) if arr.exists(null ==) => noValuePath += fieldPath
+ case (_: Array[_], arr: Array[_]) if arr.exists(null == _) => noValuePath += fieldPath
case (_: AnyRef, null) => noValuePath += fieldPath
case _ => () // do nothing
}
@@ -187,8 +184,10 @@ case class RequiredInfo(requiredArgs: Seq[RequiredArgs]) extends RequiredFields
*/
private def flatten(any: Any): Any = any match {
case a:Array[_] => Functions.deepFlatten(a)
- case ab: ArrayBuffer[_] => Functions.deepFlatten(ab.toArray[Any])
- case coll: GenTraversableOnce[_] => Functions.deepFlatten(coll.toArray[Any])
+ // Iterable in place of GenTraversableOnce, which 2.13 removes; every collection reached here
+ // is one. It also absorbed the ArrayBuffer arm that used to sit above: ArrayBuffer is an
+ // Iterable, and the two arms had the same body, so only this one could ever run.
+ case coll: Iterable[_] => Functions.deepFlatten(coll.toArray[Any])
case _ => any
}
@@ -210,7 +209,7 @@ case class RequiredArgs(fieldPath:String, include: Array[ApiVersion],
{
val includeAll = include.contains(allVersion)
val excludeAll = exclude.contains(allVersion)
- val excludeSome = exclude.filterNot(allVersion ==).nonEmpty
+ val excludeSome = exclude.filterNot(allVersion == _).nonEmpty
def assertNot(assertion: Boolean, message: => Any) = assert(!assertion, message)
diff --git a/obp-commons/src/test/scala/com/openbankproject/commons/util/FunctionsTest.scala b/obp-commons/src/test/scala/com/openbankproject/commons/util/FunctionsTest.scala
index d9bf9dbaa2..61b4b83487 100644
--- a/obp-commons/src/test/scala/com/openbankproject/commons/util/FunctionsTest.scala
+++ b/obp-commons/src/test/scala/com/openbankproject/commons/util/FunctionsTest.scala
@@ -50,6 +50,45 @@ class FunctionsTest extends FlatSpec with Matchers {
list.distinctBy(_.name) should contain theSameElementsAs List(FPerson("foo", 12), FPerson("bar", 15))
}
+ "classify" should "split a collection into the elements that match and those that do not" taggedAs FunctionsTag in {
+ // The production caller is validateRequiredFields in code.bankconnectors, which classifies
+ // validation results by isLeft and then reads only the left half; it had no test.
+ val list = List(FPerson("foo", 12), FPerson("bar", 15), FPerson("baz", 11))
+
+ val (adults, minors) = list.classify(_.age >= 12)
+
+ adults should contain theSameElementsAs List(FPerson("foo", 12), FPerson("bar", 15))
+ minors should contain theSameElementsAs List(FPerson("baz", 11))
+ }
+
+ it should "keep the element order of the source collection within each half" taggedAs FunctionsTag in {
+ val (even, odd) = List(1, 2, 3, 4, 5, 6).classify(_ % 2 == 0)
+
+ even should equal(List(2, 4, 6))
+ odd should equal(List(1, 3, 5))
+ }
+
+ it should "return two empty collections for an empty source" taggedAs FunctionsTag in {
+ val (matched, unmatched) = List.empty[Int].classify(_ > 0)
+
+ matched should be(empty)
+ unmatched should be(empty)
+ }
+
+ "toMapByKey and toMapByValue" should "index a collection either way round" taggedAs FunctionsTag in {
+ val list = List(FPerson("foo", 12), FPerson("bar", 15))
+
+ list.toMapByKey(_.name) should equal(Map("foo" -> FPerson("foo", 12), "bar" -> FPerson("bar", 15)))
+ list.toMapByValue(_.age) should equal(Map(FPerson("foo", 12) -> 12, FPerson("bar", 15) -> 15))
+ }
+
+ "notExists" should "be the negation of exists" taggedAs FunctionsTag in {
+ val list = List(1, 2, 3)
+
+ list.notExists(_ > 5) should equal(true)
+ list.notExists(_ > 2) should equal(false)
+ }
+
"findByType" should "find one or none element" taggedAs FunctionsTag in {
val list = List(12, "", new Date(), FPerson("foo", 12), FPerson("bar", 15), FPerson("foo", 16))
val person = list.findByType[FPerson]
diff --git a/pom.xml b/pom.xml
index c4dfe0d648..ff08870465 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,13 +11,16 @@
Open Bank Project API Parent
2011
- 2.12
- 2.12.21
+ 2.13
+ 2.13.18
1.1.5
1.1.0
4.1.2
1.11.4
- v1.0.4
+
+ v1.0.5
0.23.30
UTF-8
@@ -61,11 +64,21 @@
rejected -release 25 with "'25' is not a valid choice for '-release'", and the symptom was
read as a Scala-version limit. maven-enforcer-plugin now fails fast on that case instead.
- Caveat: on Scala 2.12 this only widens the visible API surface, it does not raise the
- class-file version. 2.12 emits Java 8 class files whatever -release says, so a Scala class
- that calls a Java 25 method fails at run time with NoSuchMethodError instead of at load
- time with UnsupportedClassVersionError. Getting that check back needs Scala 2.13+. javac
- does honour it, so the .java sources under src/main/scala track this value. -->
+ On Scala 2.12 this only widened the visible API surface and did not raise the class-file
+ version: 2.12 emitted Java 8 class files whatever -release said, so a Scala class calling a
+ Java 25 method failed at run time with NoSuchMethodError rather than at load time with
+ UnsupportedClassVersionError. Scala 2.13 honours it fully and emits class files at this
+ level, so that check is now real.
+
+ The 2.13 migration planned to hold this at 8 across the flip, so that the language version
+ and the bytecode version moved in separate, separately revertible commits. That is not
+ possible: the visible API surface is not decorative even on 2.12. The sources call
+ String.isBlank (Java 11) in five places and java.io.ObjectInputFilter (Java 9) in
+ BankAccountCreationDispatcher, where it filters deserialization - and -release 8 hides
+ both, so the module does not compile. Dropping the filter to satisfy a build property
+ would trade a security control for tidiness, so the two axes move together and the
+ verification that belonged to the bytecode step - confirming the class-file level actually
+ moved, and exercising everything that reads bytecode at run time - happens on this. -->
25
@@ -242,7 +255,15 @@
-deprecation
-explaintypes
-->
- -Ypartial-unification
+
+
+ -Ymacro-annotations
-Ybackend-parallelism
4
@@ -280,15 +301,9 @@
net.alchim31.maven
scala-maven-plugin
-
-
-
- org.scalamacros
- paradise_${scala.compiler}
- 2.1.1
-
-
+
diff --git a/release_notes.md b/release_notes.md
index ee7863b57f..9a7ded3d3f 100644
--- a/release_notes.md
+++ b/release_notes.md
@@ -3,6 +3,34 @@
### Most recent changes at top of file
```
Date Commit Action
+15/08/2026 614e7294e BUILD/DEPLOY CHANGE: obp-api and obp-commons are built with Scala 2.13.
+ The class files this produces are Java 25, where 2.12 emitted Java 8
+ whatever -release said - 2.13 honours -release fully. Anything loading
+ these artifacts on a JVM below 25 now fails at class load with
+ UnsupportedClassVersionError rather than at first call. The Docker
+ images and CI already run 25; an operator running the jars on their own
+ JVM has to be on 25 as well.
+
+ Two dependency swaps are visible to anyone assembling their own
+ artifact: cglib is replaced by byte-buddy, which generates the Connector
+ proxies (cglib bundles ASM 7.1 and cannot read class files this new),
+ and scalacache moves 0.9.3 to 0.28.0, which changes how a failed Redis
+ decode is reported - it returns a value rather than throwing, and is
+ still treated as a cache miss.
+
+ No API signature changed. Endpoint behaviour, request and response
+ shapes and error codes are the same; per-version test counts match the
+ 2.12 baseline.
+
+ The DOCUMENTATION of response shapes is corrected in 62 typed response
+ bodies (resource-docs/swagger). 2.12 described a bare-List response by
+ reflecting over the cons cell - publishing its head/tl internals - and
+ described nested collection fields as empty objects. Both now read
+ {"type":"array", ...} with the element's real schema under items. The
+ responses themselves are unchanged; only their published description
+ moved, from wrong to right. Verified against a 2.12 baseline diff:
+ 0 breaking changes, 62 corrections, 0 regressions.
+
13/08/2026 298e1af87 Added props open_corridor.platform_bank_id.
The platform fee accrual endpoints settle to the platform, which is
modelled as a bank; this names its BANK_ID. There is no usable default,
diff --git a/run_tests_parallel.sh b/run_tests_parallel.sh
index 3eb179df36..f9d94aa7c8 100755
--- a/run_tests_parallel.sh
+++ b/run_tests_parallel.sh
@@ -76,9 +76,15 @@ fi
# Multiple checkouts starting this script simultaneously race on that write and can
# corrupt each other's JARs (torn ZipFile). We use an atomic mkdir lock to serialise
# ~/.m2 writes across processes. The lock is released immediately after the install
-# and cleaned up on exit (including crashes) via the EXIT trap.
+# and cleaned up on exit (including crashes) via an ownership-checked EXIT trap.
+# This checkout's absolute path, used to keep the orphan reaper below to test JVMs from here.
+CHECKOUT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
OBC_LOCK="/tmp/obp-commons-m2-install.lock"
-trap 'rm -rf "$OBC_LOCK"' EXIT
+# Armed here, and ownership-checked: it removes the directory only when the pid recorded inside is
+# this process. Armed unconditionally it would delete a lock another run holds - while waiting for
+# one, or in the instant after releasing ours and before a disarm. Armed only after the mkdir it
+# would miss a signal in between. Checking the pid is what makes both ends safe.
+trap '[[ "$(cat "$OBC_LOCK/pid" 2>/dev/null)" == "$$" ]] && rm -rf "$OBC_LOCK"' EXIT
SHARDS=4
for arg in "$@"; do
@@ -231,7 +237,7 @@ run_shard() {
OBP_HOSTNAME="http://localhost:${port}" \
OBP_HTTP4S_TEST_PORT="${http4s_port}" \
OBP_MAIL_TEST_MODE="true" \
- OBP_DYNAMIC_CODE_SANDBOX_PERMISSIONS='[new java.net.NetPermission("specifyStreamHandler"), new java.lang.reflect.ReflectPermission("suppressAccessChecks"), new java.lang.RuntimePermission("getenv.*"), new java.util.PropertyPermission("cglib.useCache", "read"), new java.util.PropertyPermission("net.sf.cglib.test.stressHashCodes", "read"), new java.util.PropertyPermission("cglib.debugLocation", "read"), new java.lang.RuntimePermission("accessDeclaredMembers"), new java.lang.RuntimePermission("getClassLoader")]' \
+ OBP_DYNAMIC_CODE_SANDBOX_PERMISSIONS='[new java.net.NetPermission("specifyStreamHandler"), new java.lang.reflect.ReflectPermission("suppressAccessChecks"), new java.lang.RuntimePermission("getenv.*"), new java.lang.RuntimePermission("accessDeclaredMembers"), new java.lang.RuntimePermission("getClassLoader")]' \
OBP_ALLOW_USER_GENERATED_SCALA_CODE="true" \
OBP_API_INSTANCE_ID="shard_${n}_${port}" \
"$TIMEOUT_BIN" 1200 mvn scalatest:test -pl obp-commons,obp-api -DfailIfNoTests=false \
@@ -262,6 +268,36 @@ run_shard() {
return $rc
}
+# scalatest-maven-plugin runs with forkMode=once, so a shard is two JVMs: mvn, and the test JVM it
+# forks. Pekko's non-daemon threads keep that fork alive after the tests finish; mvn exits anyway,
+# the fork is reparented and nothing has owned it since. The `timeout` above never sees this - it
+# fires only when mvn itself overruns, and on the ordinary path mvn returns 0.
+#
+# Left alone they accumulate: five were found alive six to ten hours after their runs, one of them
+# holding port 8080, where it answered a verification probe with a build eight commits old and no
+# error anywhere. Matching on both -Drun.mode=test (the plugin's own argLine) and this checkout's
+# basedir keeps this to test JVMs from this worktree - a dev server started by hand has no
+# run.mode=test, and another checkout has another basedir.
+# Called once, after every shard has been waited on - never from run_shard. The shards run in
+# parallel and share this matcher, so reaping from inside one of them would kill the test JVMs the
+# others are still using.
+reap_orphaned_test_jvms() {
+ local pids pid
+ # These select what to kill, so neither half may treat a dot as "any character". grep takes -F.
+ # pgrep has no fixed-string option - its pattern is an extended regex either way, which
+ # `pgrep -f "sleep 3.0"` matching a running `sleep 300` demonstrates - so the dots are escaped.
+ pids=$(pgrep -f -- "-Drun\.mode=test" 2>/dev/null | while read -r pid; do
+ ps -o command= -p "$pid" 2>/dev/null | grep -qF -- "$CHECKOUT_ROOT" && echo "$pid"
+ done)
+ [[ -z "$pids" ]] && return 0
+ echo "Reaping orphaned test JVM(s) left by this run: $(echo $pids | tr '\n' ' ')"
+ # shellcheck disable=SC2086
+ kill $pids 2>/dev/null
+ sleep 3
+ for pid in $pids; do kill -9 "$pid" 2>/dev/null; done
+ return 0
+}
+
START=$(date +%s)
# ── Lint (CI compile job's first step): test-isolation static check; abort on fail ──
@@ -291,10 +327,50 @@ echo ""
# The obp-commons install holds OBC_LOCK (see top) so concurrent checkouts don't
# race on the shared ~/.m2 write. The subsequent test-compile writes only to this
# checkout's own target/ and is safe to run in parallel across checkouts.
-echo "Pre-compile 1/2: install obp-commons -> ~/.m2 ..."
-until mkdir "$OBC_LOCK" 2>/dev/null; do sleep 2; done
+echo "Pre-compile 1/2: install obp-parent + obp-commons -> ~/.m2 ..."
+# The lock records its holder's PID so a run killed before it could clean up does not wedge every
+# later one. Two ways it can be stale: the recorded PID is gone, or there is no PID at all - the
+# holder died between the mkdir and the write below, which is the case that used to be unreclaimable.
+# The second gets a grace period, since a live holder is only momentarily in that state. Every path
+# through the loop sleeps and advances the counter, so a removal that does not take cannot spin.
+OBC_LOCK_WAITED=0
+OBC_LOCK_NO_PID_GRACE=30
+until mkdir "$OBC_LOCK" 2>/dev/null; do
+ OBC_LOCK_PID="$(cat "$OBC_LOCK/pid" 2>/dev/null || true)"
+ OBC_LOCK_STALE=""
+ if [[ -n "$OBC_LOCK_PID" ]]; then
+ # ps -p, not kill -0: kill -0 fails with EPERM for a live process owned by another user as
+ # well as with ESRCH for one that is gone, so it reads somebody else's running build as dead.
+ ps -p "$OBC_LOCK_PID" >/dev/null 2>&1 || OBC_LOCK_STALE="held by dead PID $OBC_LOCK_PID"
+ elif (( OBC_LOCK_WAITED >= OBC_LOCK_NO_PID_GRACE )); then
+ OBC_LOCK_STALE="has recorded no holder for ${OBC_LOCK_NO_PID_GRACE}s"
+ fi
+
+ if [[ -n "$OBC_LOCK_STALE" ]]; then
+ echo " Lock $OBC_LOCK_STALE; removing it."
+ rm -rf "$OBC_LOCK" 2>/dev/null || true
+ if [[ -d "$OBC_LOCK" ]]; then
+ echo "Cannot remove stale $OBC_LOCK - check its owner and permissions." >&2
+ exit 1
+ fi
+ fi
+
+ if (( OBC_LOCK_WAITED >= 600 )); then
+ echo "Timed out after 10m waiting for $OBC_LOCK (held by PID ${OBC_LOCK_PID:-unknown})." >&2
+ exit 1
+ fi
+ sleep 2
+ OBC_LOCK_WAITED=$(( OBC_LOCK_WAITED + 2 ))
+done
+echo $$ > "$OBC_LOCK/pid"
+# -am so the parent pom is installed alongside obp-commons. Installing the module alone leaves
+# whatever obp-parent is already in ~/.m2, and obp-api resolves its dependencies through that pom -
+# scala.version, lift.version and the rest live there. A stale parent therefore pulls _2.12
+# artifacts onto the classpath next to a freshly built obp-commons, and because com.tesobe:obp-commons
+# carries no Scala suffix nothing detects the mismatch: the build succeeds and the tests die at run
+# time with ClassNotFoundException: scala.Serializable.
MAVEN_OPTS="$MVN_OPTS" \
- mvn install -DskipTests -pl obp-commons -q > test-results/parallel/precompile.log 2>&1
+ mvn install -DskipTests -pl obp-commons -am -q > test-results/parallel/precompile.log 2>&1
PRECOMPILE_RC=$?
rm -rf "$OBC_LOCK"
if [[ $PRECOMPILE_RC -eq 0 ]]; then
@@ -470,6 +546,12 @@ if [[ "$HAVE_PY3" = "1" ]] && ls "$REPORTS_DIR"/*.xml >/dev/null 2>&1; then
|| echo " (speed report skipped)"
fi
+# Reaped here, not straight after the shards: every shard has been waited on since then, but both
+# the surefire audit and the speed report read those XMLs above, and this script already treats a
+# report truncated by a JVM killed mid-write as a broken suite. Killing before either read could
+# manufacture exactly that failure. By this line nothing left alive can change the verdict.
+reap_orphaned_test_jvms
+
# Final verdict LAST so `tail -N` always captures it, plus a machine-readable file
# that survives any piping of stdout (`./run.sh | tail` reports tail's exit code).
echo ""
diff --git a/scripts/regenerate_grpc.sh b/scripts/regenerate_grpc.sh
new file mode 100755
index 0000000000..f4e5a26aa6
--- /dev/null
+++ b/scripts/regenerate_grpc.sh
@@ -0,0 +1,127 @@
+#!/usr/bin/env bash
+# Regenerate the gRPC/protobuf Scala sources under obp-api/src/main/scala/code/obp/grpc.
+#
+# Those files are generated but checked in, and the build has no protoc plugin, so without this
+# script their provenance is folklore: nobody can say which protoc or which scalapb produced them.
+# Both are pinned here and cached under target/, so two runs on two machines produce the same bytes.
+#
+# ./scripts/regenerate_grpc.sh regenerate in place
+# ./scripts/regenerate_grpc.sh --check regenerate into a temp dir and diff, changing nothing
+#
+# READ THIS BEFORE REGENERATING. The checked-in sources are NOT a clean output of this script, and
+# --check reports a large diff on purpose:
+#
+# * They sit in different packages. api.proto declares `package code.obp.grpc` and chat.proto
+# declares `code.obp.grpc.chat.g1`, but the checked-in code is under code.obp.grpc.api and
+# code.obp.grpc.chat.api. Regenerating adds a parallel set of packages (41 files becomes 71)
+# instead of updating the existing ones.
+# * They have been edited by hand. ObpServiceGrpc.scala and ApiProto.scala carry a
+# "Temporarily disabled ... javaDescriptor filter" change, with matching edits in Client.scala
+# and ObpGrpcServer.scala. Regenerating discards all of it.
+#
+# So regenerating is a deliberate piece of work - reconciling packages and re-applying those edits -
+# not a routine refresh. The scalapb 0.9.0 upgrade did not do it: the 41 companion signatures that
+# 0.9.0 narrowed were patched in place instead, which keeps the hand edits intact. Use this script
+# to see what upstream generation would produce, and to make a real regeneration reproducible when
+# somebody takes that work on.
+#
+# After regenerating, read the diff. Generated code is still code that ships: a scalapb upgrade can
+# change the shape of repeated fields, the companion objects, or the service stubs, and looking is
+# the only way to know what moved. Then run the smoke test, which drives the result over a socket:
+# mvn -pl obp-api test -DwildcardSuites=code.obp.grpc.ObpGrpcServerSmokeTest
+
+set -euo pipefail
+
+# Must match scalapb-runtime-grpc in obp-api/pom.xml. The generated code and its runtime are one
+# unit: 0.8.4-generated sources do not compile against the 0.9.0 runtime at all (the
+# GeneratedMessageCompanion signatures changed), so upgrading one without the other does not work.
+SCALAPB_VERSION="0.9.0"
+
+# scalapbc bundles protoc-jar, which pins protoc 3.7.1 - a release with no osx-aarch_64 binary, so
+# it cannot run on Apple Silicon at all. protoc is therefore fetched directly and handed the
+# protoc-gen-scala plugin from the scalapbc distribution. 3.17.3 is the earliest release published
+# for osx-aarch_64, which makes it the closest available to scalapb 0.9.0's own era; do not reach
+# for a much newer protoc, whose descriptors this scalapb was never built against.
+PROTOC_VERSION="3.17.3"
+
+REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
+PROTO_DIR="$REPO_ROOT/obp-api/src/main/protobuf"
+OUT_DIR="$REPO_ROOT/obp-api/src/main/scala"
+CACHE_DIR="$REPO_ROOT/target/grpc-codegen"
+
+CHECK_ONLY=false
+[[ "${1:-}" == "--check" ]] && CHECK_ONLY=true
+
+mkdir -p "$CACHE_DIR"
+
+# --- platform ----------------------------------------------------------------------------
+case "$(uname -s)" in
+ Darwin) OS="osx" ;;
+ Linux) OS="linux" ;;
+ *) echo "Unsupported OS: $(uname -s)" >&2; exit 1 ;;
+esac
+case "$(uname -m)" in
+ arm64|aarch64) ARCH="aarch_64" ;;
+ x86_64|amd64) ARCH="x86_64" ;;
+ *) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
+esac
+CLASSIFIER="$OS-$ARCH"
+
+# --- protoc ------------------------------------------------------------------------------
+PROTOC="$CACHE_DIR/protoc-$PROTOC_VERSION-$CLASSIFIER"
+if [[ ! -x "$PROTOC" ]]; then
+ echo "Fetching protoc $PROTOC_VERSION ($CLASSIFIER) ..."
+ curl --proto '=https' --tlsv1.2 -fsSL -o "$PROTOC" \
+ "https://repo1.maven.org/maven2/com/google/protobuf/protoc/$PROTOC_VERSION/protoc-$PROTOC_VERSION-$CLASSIFIER.exe"
+ chmod +x "$PROTOC"
+fi
+
+# --- scalapbc (for its protoc-gen-scala plugin) -------------------------------------------
+SCALAPBC_HOME="$CACHE_DIR/scalapbc-$SCALAPB_VERSION"
+if [[ ! -d "$SCALAPBC_HOME" ]]; then
+ echo "Fetching scalapbc $SCALAPB_VERSION ..."
+ curl --proto '=https' --tlsv1.2 -fsSL -o "$CACHE_DIR/scalapbc.zip" \
+ "https://github.com/scalapb/ScalaPB/releases/download/v$SCALAPB_VERSION/scalapbc-$SCALAPB_VERSION.zip"
+ unzip -q -d "$CACHE_DIR" "$CACHE_DIR/scalapbc.zip"
+ rm -f "$CACHE_DIR/scalapbc.zip"
+fi
+PLUGIN="$SCALAPBC_HOME/bin/protoc-gen-scala"
+chmod +x "$PLUGIN"
+
+# --- destination --------------------------------------------------------------------------
+if $CHECK_ONLY; then
+ DEST="$(mktemp -d)"
+ trap 'rm -rf "$DEST"' EXIT
+else
+ DEST="$OUT_DIR"
+fi
+
+# --- generate -------------------------------------------------------------------------------
+# grpc=true emits the service stubs alongside the messages. The protobuf directory doubles as the
+# include path so the google/ well-known types vendored beside the .proto files resolve.
+# Not mapfile: that is bash 4, and macOS still ships 3.2 as /bin/bash.
+# connector.proto is excluded along with the vendored google/ types. It declares `package
+# code.bankconnectors.grpc` and scalapb appends the file name, so generating from it writes
+# code.bankconnectors.grpc.connector - a second copy of the connector service that nothing imports.
+# GrpcUtils takes those types from code.bankconnectors.grpc.api, which is hand-written and predates
+# this script. The generated copy was committed by accident with the scalapb upgrade (335ace483,
+# 360 lines over 4 files) and removed again; without this exclusion the next regeneration restores
+# it. Reconcile connector.proto with the .api package before dropping the exclusion.
+PROTOS=()
+while IFS= read -r proto; do PROTOS+=("$proto"); done \
+ < <(find "$PROTO_DIR" -name '*.proto' -not -path '*/google/*' -not -name 'connector.proto' | sort)
+
+echo "Generating from ${#PROTOS[@]} proto files (protoc $PROTOC_VERSION, scalapb $SCALAPB_VERSION)"
+"$PROTOC" \
+ --plugin=protoc-gen-scala="$PLUGIN" \
+ --proto_path="$PROTO_DIR" \
+ --scala_out=grpc:"$DEST" \
+ "${PROTOS[@]}"
+
+if $CHECK_ONLY; then
+ echo
+ echo "--- diff against the checked-in sources (empty means they are reproducible) ---"
+ diff -ru "$OUT_DIR/code/obp/grpc" "$DEST/code/obp/grpc" || true
+else
+ echo "Regenerated into $DEST - review the diff before committing."
+fi