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