Как мне сериализовать UniqueIdentifier в строку и обратно? - PullRequest
0 голосов
/ 21 января 2019

Мне нужно передать UniqueIdentifier в виде строки между двумя службами.К сожалению, UniqueIdentifier#toString и UniqueIdentifier.fromString работают неправильно, если установлен externalId.

Каков канонический способ сериализации и десериализации UniqueIdentifier?

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Если вы используете библиотеку Corda для создания набора UniqueIdentifier с пользовательским внешним идентификатором, вы можете увидеть, что toString() сгенерирует шаблон ${externalId}_$id, т.е. dummyExternalId_10ed0cc3-7bdf-4000-b610-595e36667d7d.

Таким образом, чтобы преобразовать его обратно в UniqueIdentifier из этой строки, просто разделите на разделитель _

if (p.text.contains("_")) {
            val ids = p.text.split("_")
            //Create UUID object from string.
            val uuid: UUID = UUID.fromString(ids[1])
            //Create UniqueIdentifier object using externalId and UUID.
            return UniqueIdentifier(ids[0], uuid)
        }

Ссылка здесь

Если у вас есть подчеркивание во внешнем идентификаторе, вам, вероятно, понадобится ваша собственная функция.

val potentialIds = input.split("_")

// Drop last one and stitch back the external id
val externalIdString = potentialIds.dropLast(1).joinToString("_")

// Last one is the UUID
val uuid = UUID.fromString(potentialIds.last())
val finalUniqueIdentifier = UniqueIdentifier(externalIdString, uuid)
0 голосов
/ 21 января 2019

Подождите секунду, вам нужно создать UniqueIdentifier для вашего бизнеса? В этом случае вы можете просто создать UniqueIdentifier с нуля и передать его как переменную между службами (транзакции принимают внешнее вложение).

Если вам нужно «извлечь» уникальный идентификатор вашего штата, я не думаю, что это возможно.

Если я пропустил момент, заранее извиняюсь: D

...