diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b0606ca --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +# Default ignored files +/shelf/ +/workspace.xml + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ \ No newline at end of file diff --git a/Reto-Yape.postman_collection.json b/Reto-Yape.postman_collection.json new file mode 100644 index 0000000..9b039a5 --- /dev/null +++ b/Reto-Yape.postman_collection.json @@ -0,0 +1,71 @@ +{ + "info": { + "_postman_id": "781f392d-4929-4fbc-a19a-3acfca88e110", + "name": "Proyecto-Reto-Tech", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "GetTransaction", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8081/api/transactions/7f5eff8f-e6cc-4c88-9aae-b5662d22e038", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8081", + "path": [ + "api", + "transactions", + "7f5eff8f-e6cc-4c88-9aae-b5662d22e038" + ] + } + }, + "response": [] + }, + { + "name": "CreateTransaction", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"accountExternalIdDebit\": \"5e3d2c23-9ffe-41bf-81eb-c2cf26f88295\",\r\n \"accountExternalIdCredit\": \"88db4a29-686a-43e3-9344-f3ce7288e335\",\r\n \"transferTypeId\": 1,\r\n \"value\": 32333\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8081/api/transactions", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8081", + "path": [ + "api", + "transactions" + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/antifraud-service-app/.idea/.gitignore b/antifraud-service-app/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/antifraud-service-app/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/antifraud-service-app/.idea/compiler.xml b/antifraud-service-app/.idea/compiler.xml new file mode 100644 index 0000000..91e3403 --- /dev/null +++ b/antifraud-service-app/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/antifraud-service-app/.idea/encodings.xml b/antifraud-service-app/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/antifraud-service-app/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/antifraud-service-app/.idea/jarRepositories.xml b/antifraud-service-app/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/antifraud-service-app/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/antifraud-service-app/.idea/jpa-buddy.xml b/antifraud-service-app/.idea/jpa-buddy.xml new file mode 100644 index 0000000..966d5f5 --- /dev/null +++ b/antifraud-service-app/.idea/jpa-buddy.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/antifraud-service-app/.idea/misc.xml b/antifraud-service-app/.idea/misc.xml new file mode 100644 index 0000000..6e71067 --- /dev/null +++ b/antifraud-service-app/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/antifraud-service-app/.idea/uiDesigner.xml b/antifraud-service-app/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/antifraud-service-app/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/antifraud-service-app/Dockerfile b/antifraud-service-app/Dockerfile new file mode 100644 index 0000000..6b4231c --- /dev/null +++ b/antifraud-service-app/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:11-jre-slim +#COPY wait-for-kafka.sh /wait-for-kafka.sh +COPY target/antifraud-service-app-1.0-SNAPSHOT.jar antifraud-service-app.jar +ENTRYPOINT ["java", "-jar", "/antifraud-service-app.jar"] \ No newline at end of file diff --git a/antifraud-service-app/pom.xml b/antifraud-service-app/pom.xml new file mode 100644 index 0000000..d189189 --- /dev/null +++ b/antifraud-service-app/pom.xml @@ -0,0 +1,127 @@ + + + 4.0.0 + + spring-boot-starter-parent + org.springframework.boot + 2.7.5 + + + + com.app.yape.antifraud + antifraud-service-app + antifraud-service-app + Reto solucionado: proceso de reclutamiento Yape + 1.0-SNAPSHOT + + + 11 + 11 + UTF-8 + + + + org.springframework.boot + spring-boot-starter-webflux + + + org.springframework.boot + spring-boot-starter-data-mongodb-reactive + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter + + + org.projectlombok + lombok + 1.18.28 + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + org.springframework.plugin + spring-plugin-core + 1.2.0.RELEASE + + + org.springframework.boot + spring-boot-starter-test + test + + + io.projectreactor + reactor-test + test + + + org.springframework.boot + spring-boot-starter-validation + + + javax.validation + validation-api + 2.0.1.Final + + + + org.springframework.kafka + spring-kafka + + + + io.projectreactor.kafka + reactor-kafka + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.5 + + + + prepare-agent + + + + report + test + + report + + + + + + + \ No newline at end of file diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/ServiceAntifraudApplicationMain.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/ServiceAntifraudApplicationMain.java new file mode 100644 index 0000000..0132357 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/ServiceAntifraudApplicationMain.java @@ -0,0 +1,21 @@ +package com.yape.app.antifraud; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.core.env.Environment; + +@Slf4j +@SpringBootApplication +public class ServiceAntifraudApplicationMain { + public static void main(String[] args) { + Environment env = SpringApplication.run(ServiceAntifraudApplicationMain.class, args).getEnvironment(); + log.info("\n----------------------------------------------------------\n\t" + .concat("Application '{}' is running! Access URLs:\n\t") + .concat("Local: \t\thttp://localhost:{}\n\t") + .concat("Profile(s): \t{}\n----------------------------------------------------------"), + env.getProperty("spring.application.name"), + env.getProperty("server.port"), + env.getActiveProfiles()); + } +} \ No newline at end of file diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/config/JsonConverterMessageConfig.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/config/JsonConverterMessageConfig.java new file mode 100644 index 0000000..a570714 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/config/JsonConverterMessageConfig.java @@ -0,0 +1,14 @@ +package com.yape.app.antifraud.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.support.converter.ByteArrayJsonMessageConverter; +import org.springframework.kafka.support.converter.JsonMessageConverter; + +@Configuration +public class JsonConverterMessageConfig { + @Bean + public JsonMessageConverter jsonMessageConverter() { + return new ByteArrayJsonMessageConverter(); + } +} \ No newline at end of file diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/config/KafkaConfigMain.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/config/KafkaConfigMain.java new file mode 100644 index 0000000..d723719 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/config/KafkaConfigMain.java @@ -0,0 +1,102 @@ +package com.yape.app.antifraud.config; + +import com.yape.app.antifraud.model.entity.Transaction; +import org.apache.kafka.clients.admin.AdminClient; +import org.apache.kafka.clients.admin.NewTopic; +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; +import org.springframework.kafka.core.ConsumerFactory; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaAdmin; +import org.springframework.kafka.core.reactive.ReactiveKafkaConsumerTemplate; +import org.springframework.kafka.core.reactive.ReactiveKafkaProducerTemplate; +import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer; +import org.springframework.kafka.support.serializer.JsonDeserializer; +import org.springframework.kafka.support.serializer.JsonSerializer; +import reactor.kafka.receiver.ReceiverOptions; +import reactor.kafka.sender.SenderOptions; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class KafkaConfigMain { + @Value("${spring.kafka.bootstrap-servers}") + private String boostrapServerMain; + + @Bean + public ReactiveKafkaProducerTemplate reactiveKafkaProducerTemplate() { + Map propertiesConfig = new HashMap<>(); + propertiesConfig.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain); + propertiesConfig.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + propertiesConfig.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class); + propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES, "*"); + propertiesConfig.put(JsonSerializer.ADD_TYPE_INFO_HEADERS, false); + + SenderOptions senderOptions = SenderOptions.create(propertiesConfig); + return new ReactiveKafkaProducerTemplate<>(senderOptions); + } + + @Bean + public ReactiveKafkaConsumerTemplate reactiveKafkaConsumerTemplate() { + Map propertiesConfig = new HashMap<>(); + propertiesConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain); + propertiesConfig.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); + propertiesConfig.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, + ErrorHandlingDeserializer.class.getName()); + propertiesConfig.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, + JsonDeserializer.class.getName()); + propertiesConfig.put(JsonDeserializer.VALUE_DEFAULT_TYPE, Transaction.class.getName()); + propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES, + "com.yape.app.transaction.model.entity,com.yape.app.antifraud.model.entity"); + + ReceiverOptions receiverOptions = ReceiverOptions.create(propertiesConfig); + return new ReactiveKafkaConsumerTemplate<>(receiverOptions); + } + + @Bean + public ConsumerFactory consumerFactory(){ + Map propertiesConfig = new HashMap<>(); + propertiesConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain); + propertiesConfig.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); + propertiesConfig.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer.class); + propertiesConfig.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, JsonDeserializer.class.getName()); + propertiesConfig.put(JsonDeserializer.VALUE_DEFAULT_TYPE, + "com.yape.app.antifraud.model.entity.Transaction"); + propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES, + "com.yape.app.antifraud.model.entity"); + return new DefaultKafkaConsumerFactory<>(propertiesConfig); + } + + @Bean + public ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory() { + ConcurrentKafkaListenerContainerFactory factory = + new ConcurrentKafkaListenerContainerFactory<>(); + factory.setConsumerFactory(consumerFactory()); + return factory; + } + + @Bean + public KafkaAdmin kafkaAdmin() { + KafkaAdmin kafkaAdmin = new KafkaAdmin(Collections.singletonMap("bootstrap.servers", boostrapServerMain)); + kafkaAdmin.setAutoCreate(true); + return kafkaAdmin; + } + + @Bean + public AdminClient adminClient() { + return AdminClient.create(kafkaAdmin().getConfigurationProperties()); + } + + @Bean + public NewTopic topic() { + return new NewTopic("transactionCreated", 1, (short) 1); + } +} \ No newline at end of file diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/model/entity/Transaction.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/model/entity/Transaction.java new file mode 100644 index 0000000..752232b --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/model/entity/Transaction.java @@ -0,0 +1,22 @@ +package com.yape.app.antifraud.model.entity; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.time.LocalDateTime; + +@Document(collection = "transactions") +@Getter +@Setter +public class Transaction { + @Id + private String transactionExternalId; + private String accountExternalIdDebit; + private String accountExternalIdCredit; + private String transferTypeId; + private Double value; + private String status; + private LocalDateTime createdAt; +} diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/model/request/TransactionRequest.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/model/request/TransactionRequest.java new file mode 100644 index 0000000..1495ab7 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/model/request/TransactionRequest.java @@ -0,0 +1,17 @@ +package com.yape.app.antifraud.model.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@Builder +public class TransactionRequest { + private String accountExternalIdDebit; + private String accountExternalIdCredit; + private Integer transferTypeId; + private Double value; +} diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/repository/TransactionRepository.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/repository/TransactionRepository.java new file mode 100644 index 0000000..ffcce90 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/repository/TransactionRepository.java @@ -0,0 +1,9 @@ +package com.yape.app.antifraud.repository; + +import com.yape.app.antifraud.model.entity.Transaction; +import org.springframework.data.mongodb.repository.ReactiveMongoRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TransactionRepository extends ReactiveMongoRepository { +} diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/AntifraudService.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/AntifraudService.java new file mode 100644 index 0000000..1736666 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/AntifraudService.java @@ -0,0 +1,8 @@ +package com.yape.app.antifraud.service; + +import com.yape.app.antifraud.model.entity.Transaction; +import reactor.core.publisher.Mono; + +public interface AntifraudService { + Mono validateTransaction(Transaction transaction); +} diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/ConsumerServiceKafka.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/ConsumerServiceKafka.java new file mode 100644 index 0000000..7110fd8 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/ConsumerServiceKafka.java @@ -0,0 +1,8 @@ +package com.yape.app.antifraud.service; + +import com.yape.app.antifraud.model.entity.Transaction; +import reactor.core.publisher.Mono; + +public interface ConsumerServiceKafka { + void consume(Transaction transaction); +} diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/ProducerServiceKafka.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/ProducerServiceKafka.java new file mode 100644 index 0000000..71e85cd --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/ProducerServiceKafka.java @@ -0,0 +1,7 @@ +package com.yape.app.antifraud.service; + +import com.yape.app.antifraud.model.entity.Transaction; + +public interface ProducerServiceKafka { + void sendTransactionStatusEvent(Transaction transaction); +} diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/AntifraudServiceImpl.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/AntifraudServiceImpl.java new file mode 100644 index 0000000..e3daaea --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/AntifraudServiceImpl.java @@ -0,0 +1,27 @@ +package com.yape.app.antifraud.service.impl; + +import com.yape.app.antifraud.model.entity.Transaction; +import com.yape.app.antifraud.service.AntifraudService; +import com.yape.app.antifraud.service.ProducerServiceKafka; +import com.yape.app.antifraud.util.Util; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Mono; + +@Service +@AllArgsConstructor +public class AntifraudServiceImpl implements AntifraudService { + + private final ProducerServiceKafka kafkaProducerService; + + @Override + public Mono validateTransaction(Transaction transaction) { + if (transaction.getValue() > 1000) { + transaction.setStatus(Util.REJECTED); + } else { + transaction.setStatus(Util.APPROVED); + } + return Mono.just(transaction) + .doOnSuccess(kafkaProducerService::sendTransactionStatusEvent); + } +} \ No newline at end of file diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/ConsumerServiceKafkaImpl.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/ConsumerServiceKafkaImpl.java new file mode 100644 index 0000000..b0f9e50 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/ConsumerServiceKafkaImpl.java @@ -0,0 +1,27 @@ +package com.yape.app.antifraud.service.impl; + +import com.yape.app.antifraud.model.entity.Transaction; +import com.yape.app.antifraud.service.AntifraudService; +import com.yape.app.antifraud.service.ConsumerServiceKafka; +import lombok.AllArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class ConsumerServiceKafkaImpl implements ConsumerServiceKafka { + + private static final Logger logger = LoggerFactory.getLogger(ConsumerServiceKafkaImpl.class); + private final AntifraudService antiFraudService; + + @Override + @KafkaListener(topics = "transactionCreated", groupId = "group_id") + public void consume(@Payload Transaction transaction) { + logger.debug("[Consume Started]"); + antiFraudService.validateTransaction(transaction).subscribe(); + logger.debug("[Transaction Validated]"); + } +} \ No newline at end of file diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/ProducerServiceKafkaImpl.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/ProducerServiceKafkaImpl.java new file mode 100644 index 0000000..a341f9a --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/service/impl/ProducerServiceKafkaImpl.java @@ -0,0 +1,18 @@ +package com.yape.app.antifraud.service.impl; + +import com.yape.app.antifraud.model.entity.Transaction; +import com.yape.app.antifraud.service.ProducerServiceKafka; +import lombok.AllArgsConstructor; +import org.springframework.kafka.core.reactive.ReactiveKafkaProducerTemplate; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class ProducerServiceKafkaImpl implements ProducerServiceKafka { + + private ReactiveKafkaProducerTemplate kafkaTemplate; + @Override + public void sendTransactionStatusEvent(Transaction transaction) { + kafkaTemplate.send("transactionStatusUpdated", transaction).subscribe(); + } +} \ No newline at end of file diff --git a/antifraud-service-app/src/main/java/com/yape/app/antifraud/util/Util.java b/antifraud-service-app/src/main/java/com/yape/app/antifraud/util/Util.java new file mode 100644 index 0000000..2d19937 --- /dev/null +++ b/antifraud-service-app/src/main/java/com/yape/app/antifraud/util/Util.java @@ -0,0 +1,11 @@ +package com.yape.app.antifraud.util; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class Util { + + public static final String REJECTED = "REJECTED"; + public static final String APPROVED = "APPROVED"; +} \ No newline at end of file diff --git a/antifraud-service-app/src/main/resources/application.yml b/antifraud-service-app/src/main/resources/application.yml new file mode 100644 index 0000000..627e3b1 --- /dev/null +++ b/antifraud-service-app/src/main/resources/application.yml @@ -0,0 +1,43 @@ +spring: + application: + name: antifraud-service-app + kafka: + bootstrap-servers: kafka:9092 + consumer: + group-id: group_id + auto-offset-reset: earliest + key-deserializer: org.apache.kafka.common.serialization.StringDeserializer + value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer + properties: + spring: + deserializer: + value: + delegate: + class: org.springframework.kafka.support.serializer.JsonDeserializer + json: + trusted: + packages: "com.yape.app.transaction.model.entity,com.yape.app.antifraud.model.entity" + producer: + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer + admin: + auto-create-topics: true + topic: + transactionCreated: + partitions: 1 + replicas: 1 + listener: + missing-topics-fatal: false + template: + default-topic: transactionCreated + profiles: + active: local + +server: + port: 8080 + +logging: + level: + org.springframework.data.mongodb.core.ReactiveMongoTemplate: DEBUG + web: TRACE + org.springframework.web: TRACE \ No newline at end of file diff --git a/antifraud-service-app/target/antifraud-service-app-1.0-SNAPSHOT.jar b/antifraud-service-app/target/antifraud-service-app-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..f86cb58 Binary files /dev/null and b/antifraud-service-app/target/antifraud-service-app-1.0-SNAPSHOT.jar differ diff --git a/antifraud-service-app/target/antifraud-service-app-1.0-SNAPSHOT.jar.original b/antifraud-service-app/target/antifraud-service-app-1.0-SNAPSHOT.jar.original new file mode 100644 index 0000000..d389fc4 Binary files /dev/null and b/antifraud-service-app/target/antifraud-service-app-1.0-SNAPSHOT.jar.original differ diff --git a/antifraud-service-app/target/classes/application.yml b/antifraud-service-app/target/classes/application.yml new file mode 100644 index 0000000..627e3b1 --- /dev/null +++ b/antifraud-service-app/target/classes/application.yml @@ -0,0 +1,43 @@ +spring: + application: + name: antifraud-service-app + kafka: + bootstrap-servers: kafka:9092 + consumer: + group-id: group_id + auto-offset-reset: earliest + key-deserializer: org.apache.kafka.common.serialization.StringDeserializer + value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer + properties: + spring: + deserializer: + value: + delegate: + class: org.springframework.kafka.support.serializer.JsonDeserializer + json: + trusted: + packages: "com.yape.app.transaction.model.entity,com.yape.app.antifraud.model.entity" + producer: + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer + admin: + auto-create-topics: true + topic: + transactionCreated: + partitions: 1 + replicas: 1 + listener: + missing-topics-fatal: false + template: + default-topic: transactionCreated + profiles: + active: local + +server: + port: 8080 + +logging: + level: + org.springframework.data.mongodb.core.ReactiveMongoTemplate: DEBUG + web: TRACE + org.springframework.web: TRACE \ No newline at end of file diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/ServiceAntifraudApplicationMain.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/ServiceAntifraudApplicationMain.class new file mode 100644 index 0000000..3ddd5e7 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/ServiceAntifraudApplicationMain.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/config/JsonConverterMessageConfig.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/config/JsonConverterMessageConfig.class new file mode 100644 index 0000000..7f2d0fb Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/config/JsonConverterMessageConfig.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/config/KafkaConfigMain.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/config/KafkaConfigMain.class new file mode 100644 index 0000000..9a91170 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/config/KafkaConfigMain.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/model/entity/Transaction.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/model/entity/Transaction.class new file mode 100644 index 0000000..67f98fe Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/model/entity/Transaction.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/model/request/TransactionRequest$TransactionRequestBuilder.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/model/request/TransactionRequest$TransactionRequestBuilder.class new file mode 100644 index 0000000..f0a2cb1 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/model/request/TransactionRequest$TransactionRequestBuilder.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/model/request/TransactionRequest.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/model/request/TransactionRequest.class new file mode 100644 index 0000000..f9771a7 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/model/request/TransactionRequest.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/repository/TransactionRepository.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/repository/TransactionRepository.class new file mode 100644 index 0000000..655f295 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/repository/TransactionRepository.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/service/AntifraudService.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/AntifraudService.class new file mode 100644 index 0000000..6a9092c Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/AntifraudService.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/service/ConsumerServiceKafka.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/ConsumerServiceKafka.class new file mode 100644 index 0000000..0b82b76 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/ConsumerServiceKafka.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/service/ProducerServiceKafka.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/ProducerServiceKafka.class new file mode 100644 index 0000000..ca5c411 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/ProducerServiceKafka.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/AntifraudServiceImpl.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/AntifraudServiceImpl.class new file mode 100644 index 0000000..224f462 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/AntifraudServiceImpl.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/ConsumerServiceKafkaImpl.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/ConsumerServiceKafkaImpl.class new file mode 100644 index 0000000..8d2bbcc Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/ConsumerServiceKafkaImpl.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/ProducerServiceKafkaImpl.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/ProducerServiceKafkaImpl.class new file mode 100644 index 0000000..fed1a28 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/service/impl/ProducerServiceKafkaImpl.class differ diff --git a/antifraud-service-app/target/classes/com/yape/app/antifraud/util/Util.class b/antifraud-service-app/target/classes/com/yape/app/antifraud/util/Util.class new file mode 100644 index 0000000..23ecee7 Binary files /dev/null and b/antifraud-service-app/target/classes/com/yape/app/antifraud/util/Util.class differ diff --git a/antifraud-service-app/target/maven-archiver/pom.properties b/antifraud-service-app/target/maven-archiver/pom.properties new file mode 100644 index 0000000..250c23b --- /dev/null +++ b/antifraud-service-app/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=antifraud-service-app +groupId=com.app.yape.antifraud +version=1.0-SNAPSHOT diff --git a/antifraud-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/antifraud-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..3d98293 --- /dev/null +++ b/antifraud-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,14 @@ +com\yape\app\antifraud\config\JsonConverterMessageConfig.class +com\yape\app\antifraud\model\entity\Transaction.class +com\yape\app\antifraud\service\AntifraudService.class +com\yape\app\antifraud\service\ConsumerServiceKafka.class +com\yape\app\antifraud\service\impl\ConsumerServiceKafkaImpl.class +com\yape\app\antifraud\model\request\TransactionRequest.class +com\yape\app\antifraud\repository\TransactionRepository.class +com\yape\app\antifraud\service\impl\ProducerServiceKafkaImpl.class +com\yape\app\antifraud\ServiceAntifraudApplicationMain.class +com\yape\app\antifraud\model\request\TransactionRequest$TransactionRequestBuilder.class +com\yape\app\antifraud\config\KafkaConfigMain.class +com\yape\app\antifraud\service\impl\AntifraudServiceImpl.class +com\yape\app\antifraud\util\Util.class +com\yape\app\antifraud\service\ProducerServiceKafka.class diff --git a/antifraud-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/antifraud-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..a9e6f70 --- /dev/null +++ b/antifraud-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,13 @@ +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\model\entity\Transaction.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\config\JsonConverterMessageConfig.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\service\AntifraudService.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\ServiceAntifraudApplicationMain.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\service\impl\ConsumerServiceKafkaImpl.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\repository\TransactionRepository.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\config\KafkaConfigMain.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\util\Util.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\service\impl\AntifraudServiceImpl.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\service\ProducerServiceKafka.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\service\impl\ProducerServiceKafkaImpl.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\model\request\TransactionRequest.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\antifraud-service-app\src\main\java\com\yape\app\antifraud\service\ConsumerServiceKafka.java diff --git a/antifraud-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/antifraud-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/antifraud-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/antifraud-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml index 6e9a9c5..b6e15b5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,25 +1,65 @@ -version: "3.7" +version: "3.8" services: - postgres: - image: postgres:14 + mongodb: + image: mongo:4.4 + container_name: mongo ports: - - "5432:5432" - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres + - "27017:27017" + volumes: + - mongo-data:/data/db + networks: + - challenge-network zookeeper: - image: confluentinc/cp-zookeeper:5.5.3 + image: bitnami/zookeeper:latest + container_name: zookeeper + ports: + - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 + ZOOKEEPER_TICK_TIME: 2000 + ALLOW_ANONYMOUS_LOGIN: "yes" + networks: + - challenge-network kafka: - image: confluentinc/cp-enterprise-kafka:5.5.3 - depends_on: [zookeeper] + image: bitnami/kafka:latest + container_name: kafka + ports: + - "9092:9092" environment: - KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT - KAFKA_BROKER_ID: 1 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - KAFKA_JMX_PORT: 9991 + KAFKA_BROKER_ID: 1 + KAFKA_JMX_PORT: 9991 + depends_on: + - zookeeper + networks: + - challenge-network + + transaction-service-app: + build: + context: ./transaction-service-app + container_name: transaction-service-app + ports: + - "8081:8081" + depends_on: + - mongodb + - kafka + networks: + - challenge-network + + antifraud-service-app: + build: + context: ./antifraud-service-app + container_name: antifraud-service-app ports: - - 9092:9092 \ No newline at end of file + - "8000:8080" + depends_on: + - kafka + networks: + - challenge-network +volumes: + mongo-data: +networks: + challenge-network: \ No newline at end of file diff --git a/transaction-service-app/.idea/.gitignore b/transaction-service-app/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/transaction-service-app/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/transaction-service-app/.idea/compiler.xml b/transaction-service-app/.idea/compiler.xml new file mode 100644 index 0000000..1b9bbd4 --- /dev/null +++ b/transaction-service-app/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/transaction-service-app/.idea/encodings.xml b/transaction-service-app/.idea/encodings.xml new file mode 100644 index 0000000..63e9001 --- /dev/null +++ b/transaction-service-app/.idea/encodings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/transaction-service-app/.idea/jarRepositories.xml b/transaction-service-app/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/transaction-service-app/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/transaction-service-app/.idea/jpa-buddy.xml b/transaction-service-app/.idea/jpa-buddy.xml new file mode 100644 index 0000000..898e07a --- /dev/null +++ b/transaction-service-app/.idea/jpa-buddy.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/transaction-service-app/.idea/misc.xml b/transaction-service-app/.idea/misc.xml new file mode 100644 index 0000000..6e71067 --- /dev/null +++ b/transaction-service-app/.idea/misc.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/transaction-service-app/.idea/uiDesigner.xml b/transaction-service-app/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/transaction-service-app/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/transaction-service-app/Dockerfile b/transaction-service-app/Dockerfile new file mode 100644 index 0000000..2ab1e44 --- /dev/null +++ b/transaction-service-app/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:11-jre-slim + #COPY wait-for-kafka.sh /wait-for-kafka.sh +COPY target/transaction-service-app-1.0-SNAPSHOT.jar transaction-service-app.jar +ENTRYPOINT ["java", "-jar", "/transaction-service-app.jar"] \ No newline at end of file diff --git a/transaction-service-app/pom.xml b/transaction-service-app/pom.xml new file mode 100644 index 0000000..74e9e15 --- /dev/null +++ b/transaction-service-app/pom.xml @@ -0,0 +1,136 @@ + + + 4.0.0 + + spring-boot-starter-parent + org.springframework.boot + 2.7.5 + + + com.app.yape.transaction + transaction-service-app + transaction-service-app + Reto solucionado: proceso de reclutamiento Yape + 1.0-SNAPSHOT + + + 11 + 11 + UTF-8 + + + + org.springframework.boot + spring-boot-starter-webflux + + + org.springframework.boot + spring-boot-starter-data-mongodb-reactive + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter + + + org.projectlombok + lombok + 1.18.28 + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + org.springframework.plugin + spring-plugin-core + 1.2.0.RELEASE + + + org.springframework.boot + spring-boot-starter-test + test + + + io.projectreactor + reactor-test + test + + + org.springframework.boot + spring-boot-starter-validation + + + javax.validation + validation-api + 2.0.1.Final + + + + org.springframework.kafka + spring-kafka + + + + io.projectreactor.kafka + reactor-kafka + + + org.springframework.boot + spring-boot-starter-graphql + + + org.springframework.graphql + spring-graphql-test + test + + + + + + org.springframework.boot + spring-boot-maven-plugin + 2.7.3 + + + + org.projectlombok + lombok + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.5 + + + + prepare-agent + + + + report + test + + report + + + + + + + \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/ServiceTransactionApplicationMain.java b/transaction-service-app/src/main/java/com/yape/app/transaction/ServiceTransactionApplicationMain.java new file mode 100644 index 0000000..7830aa6 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/ServiceTransactionApplicationMain.java @@ -0,0 +1,23 @@ +package com.yape.app.transaction; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.core.env.Environment; + +@Slf4j +@SpringBootApplication +public class ServiceTransactionApplicationMain { + public static void main(String[] args){ + Environment env = SpringApplication.run(ServiceTransactionApplicationMain.class, args).getEnvironment(); + log.info("\n----------------------------------------------------------\n\t" + .concat("Application '{}' is running! Access URLs:\n\t") + .concat("Local: \t\thttp://localhost:{}\n\t") + .concat("DB: \t{}\n\t") + .concat("Profile(s): \t{}\n----------------------------------------------------------"), + env.getProperty("spring.application.name"), + env.getProperty("server.port"), + env.getProperty("spring.data.mongodb.database"), + env.getActiveProfiles()); + } +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/builder/TransactionBuilder.java b/transaction-service-app/src/main/java/com/yape/app/transaction/builder/TransactionBuilder.java new file mode 100644 index 0000000..0849a1f --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/builder/TransactionBuilder.java @@ -0,0 +1,35 @@ +package com.yape.app.transaction.builder; + +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.model.request.TransactionRequest; +import com.yape.app.transaction.model.response.NameValue; +import com.yape.app.transaction.model.response.TransactionResponse; + +import java.time.LocalDateTime; +import java.util.UUID; + +import static com.yape.app.transaction.util.Util.parseDateToString; + +public class TransactionBuilder { + public static TransactionResponse buildTransactionToResponse(Transaction transaction) { + return TransactionResponse.builder() + .transactionExternalId(transaction.getTransactionExternalId()) + .transactionStatus(NameValue.builder().name(transaction.getStatus()).build()) + .transactionType(NameValue.builder().name(transaction.getTransferTypeId()).build()) + .value(transaction.getValue()) + .createdAt(parseDateToString(transaction.getCreatedAt())) + .build(); + } + + public static Transaction buildTransactionFromRequest(TransactionRequest transactionRequest){ + return Transaction.builder() + .transactionExternalId(UUID.randomUUID().toString()) + .transferTypeId(transactionRequest.getTransferTypeId()) + .accountExternalIdCredit(transactionRequest.getAccountExternalIdCredit()) + .accountExternalIdDebit(transactionRequest.getAccountExternalIdDebit()) + .status("PENDING") + .value(transactionRequest.getValue()) + .createdAt(LocalDateTime.now()) + .build(); + } +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/config/JsonConverterMessageConfig.java b/transaction-service-app/src/main/java/com/yape/app/transaction/config/JsonConverterMessageConfig.java new file mode 100644 index 0000000..a15f3b6 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/config/JsonConverterMessageConfig.java @@ -0,0 +1,14 @@ +package com.yape.app.transaction.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.support.converter.ByteArrayJsonMessageConverter; +import org.springframework.kafka.support.converter.JsonMessageConverter; + +@Configuration +public class JsonConverterMessageConfig { + @Bean + public JsonMessageConverter jsonConverterMessage() { + return new ByteArrayJsonMessageConverter(); + } +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/config/KafkaConfigMain.java b/transaction-service-app/src/main/java/com/yape/app/transaction/config/KafkaConfigMain.java new file mode 100644 index 0000000..08b51e9 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/config/KafkaConfigMain.java @@ -0,0 +1,81 @@ +package com.yape.app.transaction.config; + +import com.yape.app.transaction.model.entity.Transaction; +import org.apache.kafka.clients.consumer.ConsumerConfig; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; +import org.springframework.kafka.core.ConsumerFactory; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.reactive.ReactiveKafkaConsumerTemplate; +import org.springframework.kafka.core.reactive.ReactiveKafkaProducerTemplate; +import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer; +import org.springframework.kafka.support.serializer.JsonDeserializer; +import org.springframework.kafka.support.serializer.JsonSerializer; +import reactor.kafka.receiver.ReceiverOptions; +import reactor.kafka.sender.SenderOptions; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class KafkaConfigMain { + @Value("${spring.kafka.bootstrap-servers}") + private String boostrapServerMain; + + @Bean + public ReactiveKafkaProducerTemplate reactiveKafkaProducerTemplate() { + Map propertiesConfig = new HashMap<>(); + propertiesConfig.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain); + propertiesConfig.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); + propertiesConfig.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class); + propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES, "*"); + propertiesConfig.put(JsonSerializer.ADD_TYPE_INFO_HEADERS, false); + + SenderOptions senderOptions = SenderOptions.create(propertiesConfig); + return new ReactiveKafkaProducerTemplate<>(senderOptions); + } + + @Bean + public ReactiveKafkaConsumerTemplate reactiveKafkaConsumerTemplate() { + Map propertiesConfig = new HashMap<>(); + propertiesConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain); + propertiesConfig.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); + propertiesConfig.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, + ErrorHandlingDeserializer.class.getName()); + propertiesConfig.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, + JsonDeserializer.class.getName()); + propertiesConfig.put(JsonDeserializer.VALUE_DEFAULT_TYPE, Transaction.class.getName()); + propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES, + "com.yape.app.antifraud.model.entity,com.yape.app.transaction.model.entity"); + + ReceiverOptions receiverOptions = ReceiverOptions.create(propertiesConfig); + return new ReactiveKafkaConsumerTemplate<>(receiverOptions); + } + + @Bean + public ConsumerFactory consumerFactory(){ + Map propertiesConfig = new HashMap<>(); + propertiesConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain); + propertiesConfig.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); + propertiesConfig.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer.class); + propertiesConfig.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, JsonDeserializer.class.getName()); + propertiesConfig.put(JsonDeserializer.VALUE_DEFAULT_TYPE, + "com.yape.app.transaction.model.entity.Transaction"); + propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES, + "com.yape.app.transaction.model.entity"); + return new DefaultKafkaConsumerFactory<>(propertiesConfig); + } + + @Bean + public ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory() { + ConcurrentKafkaListenerContainerFactory factory = + new ConcurrentKafkaListenerContainerFactory<>(); + factory.setConsumerFactory(consumerFactory()); + return factory; + } +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/controller/GraphQLTransactionController.java b/transaction-service-app/src/main/java/com/yape/app/transaction/controller/GraphQLTransactionController.java new file mode 100644 index 0000000..4ac9e20 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/controller/GraphQLTransactionController.java @@ -0,0 +1,43 @@ +package com.yape.app.transaction.controller; + +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.model.request.TransactionRequest; +import com.yape.app.transaction.model.response.TransactionResponse; +import com.yape.app.transaction.service.TransactionService; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.graphql.data.method.annotation.Argument; +import org.springframework.graphql.data.method.annotation.MutationMapping; +import org.springframework.graphql.data.method.annotation.QueryMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Mono; + +@RestController +@Slf4j +@AllArgsConstructor +public class GraphQLTransactionController { + + private TransactionService transactionService; + + @QueryMapping + public Mono getTransaction(@Argument String transactionExternalId) { + return transactionService.getTransaction(transactionExternalId); + } + + @MutationMapping + public Mono createTransaction(@Argument String accountExternalIdDebit, + @Argument String accountExternalIdCredit, + @Argument String transferTypeId, + @Argument Double value) { + + TransactionRequest transactionRequest = + TransactionRequest.builder() + .accountExternalIdCredit(accountExternalIdCredit) + .accountExternalIdDebit(accountExternalIdDebit) + .transferTypeId(transferTypeId) + .value(value) + .build(); + + return transactionService.createTransaction(transactionRequest); + } +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/controller/TransactionController.java b/transaction-service-app/src/main/java/com/yape/app/transaction/controller/TransactionController.java new file mode 100644 index 0000000..fa2d49a --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/controller/TransactionController.java @@ -0,0 +1,32 @@ +package com.yape.app.transaction.controller; + +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.model.request.TransactionRequest; +import com.yape.app.transaction.model.response.TransactionResponse; +import com.yape.app.transaction.service.TransactionService; +import lombok.AllArgsConstructor; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Mono; + +@RestController +@RequestMapping("/api/transactions") +@AllArgsConstructor +public class TransactionController { + + private final TransactionService transactionService; + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public Mono createTransaction(@RequestBody TransactionRequest transactionRequest) { + return transactionService.createTransaction(transactionRequest); + } + + @GetMapping("/{transactionExternalId}") + public Mono> getTransaction(@PathVariable String transactionExternalId) { + return transactionService.getTransaction(transactionExternalId) + .map(ResponseEntity::ok) + .defaultIfEmpty(ResponseEntity.notFound().build()); + } +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/model/entity/Transaction.java b/transaction-service-app/src/main/java/com/yape/app/transaction/model/entity/Transaction.java new file mode 100644 index 0000000..1557061 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/model/entity/Transaction.java @@ -0,0 +1,24 @@ +package com.yape.app.transaction.model.entity; + +import lombok.*; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; + +import java.time.LocalDateTime; + +@Document(collection = "transactions") +@Getter +@Setter +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class Transaction { + @Id + private String transactionExternalId; + private String accountExternalIdDebit; + private String accountExternalIdCredit; + private String transferTypeId; + private Double value; + private String status; + private LocalDateTime createdAt; +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/model/request/TransactionRequest.java b/transaction-service-app/src/main/java/com/yape/app/transaction/model/request/TransactionRequest.java new file mode 100644 index 0000000..c3658e4 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/model/request/TransactionRequest.java @@ -0,0 +1,17 @@ +package com.yape.app.transaction.model.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@AllArgsConstructor +@Builder +public class TransactionRequest { + private String accountExternalIdDebit; + private String accountExternalIdCredit; + private String transferTypeId; + private Double value; +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/model/response/NameValue.java b/transaction-service-app/src/main/java/com/yape/app/transaction/model/response/NameValue.java new file mode 100644 index 0000000..bfe9986 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/model/response/NameValue.java @@ -0,0 +1,12 @@ +package com.yape.app.transaction.model.response; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +public class NameValue { + private String name; +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/model/response/TransactionResponse.java b/transaction-service-app/src/main/java/com/yape/app/transaction/model/response/TransactionResponse.java new file mode 100644 index 0000000..4ec2c77 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/model/response/TransactionResponse.java @@ -0,0 +1,16 @@ +package com.yape.app.transaction.model.response; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@Builder +public class TransactionResponse { + private String transactionExternalId; + private NameValue transactionType; + private NameValue transactionStatus; + private Double value; + private String createdAt; +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/repository/TransactionRepository.java b/transaction-service-app/src/main/java/com/yape/app/transaction/repository/TransactionRepository.java new file mode 100644 index 0000000..7a97bdb --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/repository/TransactionRepository.java @@ -0,0 +1,9 @@ +package com.yape.app.transaction.repository; + +import com.yape.app.transaction.model.entity.Transaction; +import org.springframework.data.mongodb.repository.ReactiveMongoRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TransactionRepository extends ReactiveMongoRepository { +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/service/ConsumerKafkaService.java b/transaction-service-app/src/main/java/com/yape/app/transaction/service/ConsumerKafkaService.java new file mode 100644 index 0000000..de61d91 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/service/ConsumerKafkaService.java @@ -0,0 +1,7 @@ +package com.yape.app.transaction.service; + +import com.yape.app.transaction.model.entity.Transaction; + +public interface ConsumerKafkaService { + void Consume(Transaction transaction); +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/service/ProducerKafkaService.java b/transaction-service-app/src/main/java/com/yape/app/transaction/service/ProducerKafkaService.java new file mode 100644 index 0000000..f482361 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/service/ProducerKafkaService.java @@ -0,0 +1,7 @@ +package com.yape.app.transaction.service; + +import com.yape.app.transaction.model.entity.Transaction; + +public interface ProducerKafkaService { + void sendCreatedEventTransaction(Transaction transaction); +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/service/TransactionService.java b/transaction-service-app/src/main/java/com/yape/app/transaction/service/TransactionService.java new file mode 100644 index 0000000..009e0d8 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/service/TransactionService.java @@ -0,0 +1,13 @@ +package com.yape.app.transaction.service; + +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.model.request.TransactionRequest; +import com.yape.app.transaction.model.response.TransactionResponse; +import reactor.core.publisher.Mono; + +public interface TransactionService { + + Mono createTransaction(TransactionRequest transactionDto); + Mono getTransaction(String transactionExternalId); + Mono updateStatusTransaction(String transactionExternalId, String status); +} diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/ConsumerKafkaServiceImpl.java b/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/ConsumerKafkaServiceImpl.java new file mode 100644 index 0000000..ba781d3 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/ConsumerKafkaServiceImpl.java @@ -0,0 +1,20 @@ +package com.yape.app.transaction.service.impl; + +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.service.TransactionService; +import lombok.AllArgsConstructor; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class ConsumerKafkaServiceImpl { + private final TransactionService transactionService; + + @KafkaListener(topics = "transactionStatusUpdated", groupId = "group_id") + public void consume(Transaction transaction){ + transactionService.updateStatusTransaction( + transaction.getTransactionExternalId(), + transaction.getStatus()).subscribe(); + } +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/ProducerKafkaServiceImpl.java b/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/ProducerKafkaServiceImpl.java new file mode 100644 index 0000000..59e66c7 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/ProducerKafkaServiceImpl.java @@ -0,0 +1,18 @@ +package com.yape.app.transaction.service.impl; + +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.service.ProducerKafkaService; +import lombok.AllArgsConstructor; +import org.springframework.kafka.core.reactive.ReactiveKafkaProducerTemplate; +import org.springframework.stereotype.Service; + +@Service +@AllArgsConstructor +public class ProducerKafkaServiceImpl implements ProducerKafkaService { + private final ReactiveKafkaProducerTemplate kafkaProducerTemplate; + + @Override + public void sendCreatedEventTransaction(Transaction transaction) { + kafkaProducerTemplate.send("transactionCreated", transaction).subscribe(); + } +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/TransactionServiceImpl.java b/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/TransactionServiceImpl.java new file mode 100644 index 0000000..a206ed8 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/service/impl/TransactionServiceImpl.java @@ -0,0 +1,60 @@ +package com.yape.app.transaction.service.impl; + +import com.yape.app.transaction.builder.TransactionBuilder; +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.model.request.TransactionRequest; +import com.yape.app.transaction.model.response.TransactionResponse; +import com.yape.app.transaction.repository.TransactionRepository; +import com.yape.app.transaction.service.TransactionService; +import com.yape.app.transaction.util.Util; +import lombok.AllArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import reactor.core.publisher.Mono; + +import java.time.LocalDateTime; +import java.util.UUID; +import static com.yape.app.transaction.builder.TransactionBuilder.buildTransactionFromRequest; + +@Service +@AllArgsConstructor +public class TransactionServiceImpl implements TransactionService { + + private final TransactionRepository transactionRepository; + private final ProducerKafkaServiceImpl producerServiceKafka; + + private static final Logger logger = LoggerFactory.getLogger(TransactionServiceImpl.class); + @Override + public Mono createTransaction(TransactionRequest transactionDto) { + Transaction transaction = new Transaction(); + transaction.setTransactionExternalId(UUID.randomUUID().toString()); + transaction.setAccountExternalIdDebit(transactionDto.getAccountExternalIdDebit()); + transaction.setAccountExternalIdCredit(transactionDto.getAccountExternalIdCredit()); + transaction.setTransferTypeId(transactionDto.getTransferTypeId()); + transaction.setValue(transactionDto.getValue()); + transaction.setStatus(Util.PENDING); + transaction.setCreatedAt(LocalDateTime.now()); + return transactionRepository.save(buildTransactionFromRequest(transactionDto)) + .doOnSuccess(producerServiceKafka::sendCreatedEventTransaction) + .onErrorResume(error -> { + logger.error("Error en createTransaction", error); + return Mono.error(error); + }); + } + + @Override + public Mono getTransaction(String transactionExternalId) { + return transactionRepository.findById(transactionExternalId) + .map(TransactionBuilder::buildTransactionToResponse); + } + + @Override + public Mono updateStatusTransaction(String transactionExternalId, String status) { + return transactionRepository.findById(transactionExternalId) + .flatMap(transaction -> { + transaction.setStatus(status); + return transactionRepository.save(transaction); + }); + } +} \ No newline at end of file diff --git a/transaction-service-app/src/main/java/com/yape/app/transaction/util/Util.java b/transaction-service-app/src/main/java/com/yape/app/transaction/util/Util.java new file mode 100644 index 0000000..c881693 --- /dev/null +++ b/transaction-service-app/src/main/java/com/yape/app/transaction/util/Util.java @@ -0,0 +1,17 @@ +package com.yape.app.transaction.util; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class Util { + public static final String DATE_TIME_AMPM_FORMAT = "dd/MM/yyyy hh:mm:ss"; + public static final String PENDING = "PENDING"; + + public static String parseDateToString(LocalDateTime date) { + return date != null ? date.format(DateTimeFormatter.ofPattern(DATE_TIME_AMPM_FORMAT)) : null; + } +} diff --git a/transaction-service-app/src/main/resources/application.yml b/transaction-service-app/src/main/resources/application.yml new file mode 100644 index 0000000..abd7732 --- /dev/null +++ b/transaction-service-app/src/main/resources/application.yml @@ -0,0 +1,43 @@ +spring: + application: + name: transaction-service-app + data: + mongodb: + database: transactions_db + uri: mongodb://mongodb:27017/transactions_db + kafka: + bootstrap-servers: kafka:9092 + consumer: + group-id: group_id + auto-offset-reset: earliest + key-deserializer: org.apache.kafka.common.serialization.StringDeserializer + value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer + properties: + spring: + deserializer: + value: + delegate: + class: org.springframework.kafka.support.serializer.JsonDeserializer + json: + trusted: + packages: "com.yape.app.transaction.model.entity,com.yape.app.antifraud.model.entity" + producer: + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer + listener: + missing-topics-fatal: false + graphql: + graphiql: + enabled: true + path: /graphiql + profiles: + active: local + +server: + port: 8081 + +logging: + level: + org.springframework.data.mongodb.core.ReactiveMongoTemplate: DEBUG + web: TRACE + org.springframework.web: TRACE \ No newline at end of file diff --git a/transaction-service-app/src/main/resources/graphQL/queryTest b/transaction-service-app/src/main/resources/graphQL/queryTest new file mode 100644 index 0000000..20f1c80 --- /dev/null +++ b/transaction-service-app/src/main/resources/graphQL/queryTest @@ -0,0 +1,20 @@ +query GetTransaction { + getTransaction(transactionExternalId: "aa64f123-eg65-6g97-b3f1-56737223422c"){ + transactionExternalId + accountExternalIdDebit + transactionExternalId + transferTypeId + value + status + createdAt + } +} + +mutation CreateTransaction{ + + createTransaction(accountExternalIdDebit: "963147", accountExternalIdCredit: "145963", transferTypeId: "12", value: 192){ + transactionExternalId + accountExternalIdDebit + value + } +} \ No newline at end of file diff --git a/transaction-service-app/src/main/resources/graphQL/transaction.graphqls b/transaction-service-app/src/main/resources/graphQL/transaction.graphqls new file mode 100644 index 0000000..27cd967 --- /dev/null +++ b/transaction-service-app/src/main/resources/graphQL/transaction.graphqls @@ -0,0 +1,24 @@ +type Transaction { + transactionExternalId: String + accountExternalIdDebit: String + accountExternalIdCredit: String + transferTypeId: String + value: Float + status: String + createdAt: String +} + +input TransactionInput { + accountExternalIdDebit: String + accountExternalIdCredit: String + transferTypeId: String + value: Float +} + +type Query { + getTransaction(transactionExternalId: String): Transaction +} + +type Mutation { + createTransaction(accountExternalIdDebit: String, accountExternalIdCredit: String, transferTypeId: String, value: Float): Transaction +} \ No newline at end of file diff --git a/transaction-service-app/src/test/java/com/yape/app/transaction/controller/TransactionControllerTest.java b/transaction-service-app/src/test/java/com/yape/app/transaction/controller/TransactionControllerTest.java new file mode 100644 index 0000000..f9dce53 --- /dev/null +++ b/transaction-service-app/src/test/java/com/yape/app/transaction/controller/TransactionControllerTest.java @@ -0,0 +1,42 @@ +package com.yape.app.transaction.controller; + +import com.yape.app.transaction.model.entity.Transaction; +import com.yape.app.transaction.model.request.TransactionRequest; +import com.yape.app.transaction.model.response.TransactionResponse; +import com.yape.app.transaction.service.TransactionService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import reactor.core.publisher.Mono; +import reactor.test.StepVerifier; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +public class TransactionControllerTest { + + @InjectMocks + private TransactionController transactionController; + + @Mock + private TransactionService transactionService; + + @Test + public void createTransaction() { + // Given + TransactionRequest transactionRequest = new TransactionRequest("1","1","1",2.0); + Transaction transaction = new Transaction(); + when(transactionService.createTransaction(any(TransactionRequest.class))).thenReturn(Mono.just(transaction)); + + // When + Mono responseMono = transactionController.createTransaction(transactionRequest); + + // Then + StepVerifier.create(responseMono) + .expectNext(transaction) + .verifyComplete(); + } +} \ No newline at end of file diff --git a/transaction-service-app/target/classes/application.yml b/transaction-service-app/target/classes/application.yml new file mode 100644 index 0000000..abd7732 --- /dev/null +++ b/transaction-service-app/target/classes/application.yml @@ -0,0 +1,43 @@ +spring: + application: + name: transaction-service-app + data: + mongodb: + database: transactions_db + uri: mongodb://mongodb:27017/transactions_db + kafka: + bootstrap-servers: kafka:9092 + consumer: + group-id: group_id + auto-offset-reset: earliest + key-deserializer: org.apache.kafka.common.serialization.StringDeserializer + value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer + properties: + spring: + deserializer: + value: + delegate: + class: org.springframework.kafka.support.serializer.JsonDeserializer + json: + trusted: + packages: "com.yape.app.transaction.model.entity,com.yape.app.antifraud.model.entity" + producer: + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.springframework.kafka.support.serializer.JsonSerializer + listener: + missing-topics-fatal: false + graphql: + graphiql: + enabled: true + path: /graphiql + profiles: + active: local + +server: + port: 8081 + +logging: + level: + org.springframework.data.mongodb.core.ReactiveMongoTemplate: DEBUG + web: TRACE + org.springframework.web: TRACE \ No newline at end of file diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/ServiceTransactionApplicationMain.class b/transaction-service-app/target/classes/com/yape/app/transaction/ServiceTransactionApplicationMain.class new file mode 100644 index 0000000..e73a292 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/ServiceTransactionApplicationMain.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/builder/TransactionBuilder.class b/transaction-service-app/target/classes/com/yape/app/transaction/builder/TransactionBuilder.class new file mode 100644 index 0000000..0a93115 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/builder/TransactionBuilder.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/config/JsonConverterMessageConfig.class b/transaction-service-app/target/classes/com/yape/app/transaction/config/JsonConverterMessageConfig.class new file mode 100644 index 0000000..cb0d46e Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/config/JsonConverterMessageConfig.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/config/KafkaConfigMain.class b/transaction-service-app/target/classes/com/yape/app/transaction/config/KafkaConfigMain.class new file mode 100644 index 0000000..fbac588 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/config/KafkaConfigMain.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/controller/GraphQLTransactionController.class b/transaction-service-app/target/classes/com/yape/app/transaction/controller/GraphQLTransactionController.class new file mode 100644 index 0000000..6f87640 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/controller/GraphQLTransactionController.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/controller/TransactionController.class b/transaction-service-app/target/classes/com/yape/app/transaction/controller/TransactionController.class new file mode 100644 index 0000000..c55a593 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/controller/TransactionController.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/entity/Transaction$TransactionBuilder.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/entity/Transaction$TransactionBuilder.class new file mode 100644 index 0000000..60da03c Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/entity/Transaction$TransactionBuilder.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/entity/Transaction.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/entity/Transaction.class new file mode 100644 index 0000000..793490d Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/entity/Transaction.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder.class new file mode 100644 index 0000000..e820fb5 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/request/TransactionRequest.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/request/TransactionRequest.class new file mode 100644 index 0000000..ee718da Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/request/TransactionRequest.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/response/NameValue$NameValueBuilder.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/NameValue$NameValueBuilder.class new file mode 100644 index 0000000..7d950da Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/NameValue$NameValueBuilder.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/response/NameValue.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/NameValue.class new file mode 100644 index 0000000..b9d0c30 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/NameValue.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder.class new file mode 100644 index 0000000..7e3a3bf Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/model/response/TransactionResponse.class b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/TransactionResponse.class new file mode 100644 index 0000000..bcd256c Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/model/response/TransactionResponse.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/repository/TransactionRepository.class b/transaction-service-app/target/classes/com/yape/app/transaction/repository/TransactionRepository.class new file mode 100644 index 0000000..4ae6914 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/repository/TransactionRepository.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/service/ConsumerKafkaService.class b/transaction-service-app/target/classes/com/yape/app/transaction/service/ConsumerKafkaService.class new file mode 100644 index 0000000..9fe17fc Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/service/ConsumerKafkaService.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/service/ProducerKafkaService.class b/transaction-service-app/target/classes/com/yape/app/transaction/service/ProducerKafkaService.class new file mode 100644 index 0000000..f4c23c7 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/service/ProducerKafkaService.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/service/TransactionService.class b/transaction-service-app/target/classes/com/yape/app/transaction/service/TransactionService.class new file mode 100644 index 0000000..4b6843a Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/service/TransactionService.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/ConsumerKafkaServiceImpl.class b/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/ConsumerKafkaServiceImpl.class new file mode 100644 index 0000000..bfce9e9 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/ConsumerKafkaServiceImpl.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/ProducerKafkaServiceImpl.class b/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/ProducerKafkaServiceImpl.class new file mode 100644 index 0000000..ad70f14 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/ProducerKafkaServiceImpl.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/TransactionServiceImpl.class b/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/TransactionServiceImpl.class new file mode 100644 index 0000000..e631280 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/service/impl/TransactionServiceImpl.class differ diff --git a/transaction-service-app/target/classes/com/yape/app/transaction/util/Util.class b/transaction-service-app/target/classes/com/yape/app/transaction/util/Util.class new file mode 100644 index 0000000..6b512c4 Binary files /dev/null and b/transaction-service-app/target/classes/com/yape/app/transaction/util/Util.class differ diff --git a/transaction-service-app/target/classes/graphQL/queryTest b/transaction-service-app/target/classes/graphQL/queryTest new file mode 100644 index 0000000..20f1c80 --- /dev/null +++ b/transaction-service-app/target/classes/graphQL/queryTest @@ -0,0 +1,20 @@ +query GetTransaction { + getTransaction(transactionExternalId: "aa64f123-eg65-6g97-b3f1-56737223422c"){ + transactionExternalId + accountExternalIdDebit + transactionExternalId + transferTypeId + value + status + createdAt + } +} + +mutation CreateTransaction{ + + createTransaction(accountExternalIdDebit: "963147", accountExternalIdCredit: "145963", transferTypeId: "12", value: 192){ + transactionExternalId + accountExternalIdDebit + value + } +} \ No newline at end of file diff --git a/transaction-service-app/target/classes/graphQL/transaction.graphqls b/transaction-service-app/target/classes/graphQL/transaction.graphqls new file mode 100644 index 0000000..27cd967 --- /dev/null +++ b/transaction-service-app/target/classes/graphQL/transaction.graphqls @@ -0,0 +1,24 @@ +type Transaction { + transactionExternalId: String + accountExternalIdDebit: String + accountExternalIdCredit: String + transferTypeId: String + value: Float + status: String + createdAt: String +} + +input TransactionInput { + accountExternalIdDebit: String + accountExternalIdCredit: String + transferTypeId: String + value: Float +} + +type Query { + getTransaction(transactionExternalId: String): Transaction +} + +type Mutation { + createTransaction(accountExternalIdDebit: String, accountExternalIdCredit: String, transferTypeId: String, value: Float): Transaction +} \ No newline at end of file diff --git a/transaction-service-app/target/jacoco.exec b/transaction-service-app/target/jacoco.exec new file mode 100644 index 0000000..000d39a Binary files /dev/null and b/transaction-service-app/target/jacoco.exec differ diff --git a/transaction-service-app/target/maven-archiver/pom.properties b/transaction-service-app/target/maven-archiver/pom.properties new file mode 100644 index 0000000..990a568 --- /dev/null +++ b/transaction-service-app/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=transaction-service-app +groupId=com.app.yape.transaction +version=1.0-SNAPSHOT diff --git a/transaction-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/transaction-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..f8b1544 --- /dev/null +++ b/transaction-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,22 @@ +com\yape\app\transaction\config\KafkaConfigMain.class +com\yape\app\transaction\service\impl\ConsumerKafkaServiceImpl.class +com\yape\app\transaction\service\impl\ProducerKafkaServiceImpl.class +com\yape\app\transaction\model\response\NameValue$NameValueBuilder.class +com\yape\app\transaction\service\TransactionService.class +com\yape\app\transaction\controller\TransactionController.class +com\yape\app\transaction\model\response\TransactionResponse.class +com\yape\app\transaction\controller\GraphQLTransactionController.class +com\yape\app\transaction\model\entity\Transaction$TransactionBuilder.class +com\yape\app\transaction\util\Util.class +com\yape\app\transaction\repository\TransactionRepository.class +com\yape\app\transaction\model\request\TransactionRequest.class +com\yape\app\transaction\model\entity\Transaction.class +com\yape\app\transaction\config\JsonConverterMessageConfig.class +com\yape\app\transaction\ServiceTransactionApplicationMain.class +com\yape\app\transaction\model\response\NameValue.class +com\yape\app\transaction\builder\TransactionBuilder.class +com\yape\app\transaction\service\ConsumerKafkaService.class +com\yape\app\transaction\model\response\TransactionResponse$TransactionResponseBuilder.class +com\yape\app\transaction\service\ProducerKafkaService.class +com\yape\app\transaction\service\impl\TransactionServiceImpl.class +com\yape\app\transaction\model\request\TransactionRequest$TransactionRequestBuilder.class diff --git a/transaction-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/transaction-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..e7bd276 --- /dev/null +++ b/transaction-service-app/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,18 @@ +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\repository\TransactionRepository.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\model\entity\Transaction.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\util\Util.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\controller\GraphQLTransactionController.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\model\request\TransactionRequest.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\config\JsonConverterMessageConfig.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\service\impl\ConsumerKafkaServiceImpl.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\service\impl\TransactionServiceImpl.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\service\ProducerKafkaService.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\config\KafkaConfigMain.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\service\ConsumerKafkaService.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\service\impl\ProducerKafkaServiceImpl.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\service\TransactionService.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\model\response\TransactionResponse.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\ServiceTransactionApplicationMain.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\builder\TransactionBuilder.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\controller\TransactionController.java +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\main\java\com\yape\app\transaction\model\response\NameValue.java diff --git a/transaction-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/transaction-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..90dcde7 --- /dev/null +++ b/transaction-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -0,0 +1 @@ +com\yape\app\transaction\controller\TransactionControllerTest.class diff --git a/transaction-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/transaction-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..0bca2cd --- /dev/null +++ b/transaction-service-app/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -0,0 +1 @@ +C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\src\test\java\com\yape\app\transaction\controller\TransactionControllerTest.java diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/TransactionBuilder.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/TransactionBuilder.html new file mode 100644 index 0000000..715d63b --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/TransactionBuilder.html @@ -0,0 +1 @@ +TransactionBuilder

TransactionBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total50 of 500 %0 of 0n/a33171733
buildTransactionToResponse(Transaction)250 %n/a117711
buildTransactionFromRequest(TransactionRequest)220 %n/a119911
TransactionBuilder()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/TransactionBuilder.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/TransactionBuilder.java.html new file mode 100644 index 0000000..9c3f158 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/TransactionBuilder.java.html @@ -0,0 +1,36 @@ +TransactionBuilder.java

TransactionBuilder.java

package com.yape.app.transaction.builder;
+
+import com.yape.app.transaction.model.entity.Transaction;
+import com.yape.app.transaction.model.request.TransactionRequest;
+import com.yape.app.transaction.model.response.NameValue;
+import com.yape.app.transaction.model.response.TransactionResponse;
+
+import java.time.LocalDateTime;
+import java.util.UUID;
+
+import static com.yape.app.transaction.util.Util.parseDateToString;
+
+public class TransactionBuilder {
+    public static TransactionResponse buildTransactionToResponse(Transaction transaction) {
+        return TransactionResponse.builder()
+                .transactionExternalId(transaction.getTransactionExternalId())
+                .transactionStatus(NameValue.builder().name(transaction.getStatus()).build())
+                .transactionType(NameValue.builder().name(transaction.getTransferTypeId()).build())
+                .value(transaction.getValue())
+                .createdAt(parseDateToString(transaction.getCreatedAt()))
+                .build();
+    }
+
+    public static Transaction buildTransactionFromRequest(TransactionRequest transactionRequest){
+        return Transaction.builder()
+                .transactionExternalId(UUID.randomUUID().toString())
+                .transferTypeId(transactionRequest.getTransferTypeId())
+                .accountExternalIdCredit(transactionRequest.getAccountExternalIdCredit())
+                .accountExternalIdDebit(transactionRequest.getAccountExternalIdDebit())
+                .status("PENDING")
+                .value(transactionRequest.getValue())
+                .createdAt(LocalDateTime.now())
+                .build();
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/index.html new file mode 100644 index 0000000..c04426a --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.builder

com.yape.app.transaction.builder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total50 of 500 %0 of 0n/a3317173311
TransactionBuilder500 %n/a3317173311
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/index.source.html new file mode 100644 index 0000000..58ba068 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.builder/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.builder

com.yape.app.transaction.builder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total50 of 500 %0 of 0n/a3317173311
TransactionBuilder.java500 %n/a3317173311
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/JsonConverterMessageConfig.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/JsonConverterMessageConfig.html new file mode 100644 index 0000000..41c991f --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/JsonConverterMessageConfig.html @@ -0,0 +1 @@ +JsonConverterMessageConfig

JsonConverterMessageConfig

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total7 of 70 %0 of 0n/a222222
jsonConverterMessage()40 %n/a111111
JsonConverterMessageConfig()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/JsonConverterMessageConfig.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/JsonConverterMessageConfig.java.html new file mode 100644 index 0000000..fc398cd --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/JsonConverterMessageConfig.java.html @@ -0,0 +1,15 @@ +JsonConverterMessageConfig.java

JsonConverterMessageConfig.java

package com.yape.app.transaction.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.kafka.support.converter.ByteArrayJsonMessageConverter;
+import org.springframework.kafka.support.converter.JsonMessageConverter;
+
+@Configuration
+public class JsonConverterMessageConfig {
+    @Bean
+    public JsonMessageConverter jsonConverterMessage() {
+        return new ByteArrayJsonMessageConverter();
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/KafkaConfigMain.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/KafkaConfigMain.html new file mode 100644 index 0000000..1bbcd34 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/KafkaConfigMain.html @@ -0,0 +1 @@ +KafkaConfigMain

KafkaConfigMain

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total139 of 1390 %0 of 0n/a55313155
reactiveKafkaConsumerTemplate()460 %n/a11111111
consumerFactory()410 %n/a118811
reactiveKafkaProducerTemplate()390 %n/a118811
kafkaListenerContainerFactory()100 %n/a113311
KafkaConfigMain()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/KafkaConfigMain.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/KafkaConfigMain.java.html new file mode 100644 index 0000000..860b053 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/KafkaConfigMain.java.html @@ -0,0 +1,82 @@ +KafkaConfigMain.java

KafkaConfigMain.java

package com.yape.app.transaction.config;
+
+import com.yape.app.transaction.model.entity.Transaction;
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.clients.producer.ProducerConfig;
+import org.apache.kafka.common.serialization.StringDeserializer;
+import org.apache.kafka.common.serialization.StringSerializer;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
+import org.springframework.kafka.core.ConsumerFactory;
+import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
+import org.springframework.kafka.core.reactive.ReactiveKafkaConsumerTemplate;
+import org.springframework.kafka.core.reactive.ReactiveKafkaProducerTemplate;
+import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer;
+import org.springframework.kafka.support.serializer.JsonDeserializer;
+import org.springframework.kafka.support.serializer.JsonSerializer;
+import reactor.kafka.receiver.ReceiverOptions;
+import reactor.kafka.sender.SenderOptions;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+public class KafkaConfigMain {
+    @Value("${spring.kafka.bootstrap-servers}")
+    private String boostrapServerMain;
+
+    @Bean
+    public ReactiveKafkaProducerTemplate<String, Transaction> reactiveKafkaProducerTemplate() {
+        Map<String, Object> propertiesConfig = new HashMap<>();
+        propertiesConfig.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain);
+        propertiesConfig.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
+        propertiesConfig.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
+        propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES, "*");
+        propertiesConfig.put(JsonSerializer.ADD_TYPE_INFO_HEADERS, false);
+
+        SenderOptions<String, Transaction> senderOptions = SenderOptions.create(propertiesConfig);
+        return new ReactiveKafkaProducerTemplate<>(senderOptions);
+    }
+
+    @Bean
+    public ReactiveKafkaConsumerTemplate<String, Transaction> reactiveKafkaConsumerTemplate() {
+        Map<String, Object> propertiesConfig = new HashMap<>();
+        propertiesConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain);
+        propertiesConfig.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
+        propertiesConfig.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
+                ErrorHandlingDeserializer.class.getName());
+        propertiesConfig.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS,
+                JsonDeserializer.class.getName());
+        propertiesConfig.put(JsonDeserializer.VALUE_DEFAULT_TYPE, Transaction.class.getName());
+        propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES,
+                "com.yape.app.antifraud.model.entity,com.yape.app.transaction.model.entity");
+
+        ReceiverOptions<String, Transaction> receiverOptions = ReceiverOptions.create(propertiesConfig);
+        return new ReactiveKafkaConsumerTemplate<>(receiverOptions);
+    }
+
+    @Bean
+    public ConsumerFactory<String,Transaction> consumerFactory(){
+        Map<String, Object> propertiesConfig = new HashMap<>();
+        propertiesConfig.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServerMain);
+        propertiesConfig.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
+        propertiesConfig.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer.class);
+        propertiesConfig.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, JsonDeserializer.class.getName());
+        propertiesConfig.put(JsonDeserializer.VALUE_DEFAULT_TYPE,
+                "com.yape.app.transaction.model.entity.Transaction");
+        propertiesConfig.put(JsonDeserializer.TRUSTED_PACKAGES,
+                "com.yape.app.transaction.model.entity");
+        return new DefaultKafkaConsumerFactory<>(propertiesConfig);
+    }
+
+    @Bean
+    public ConcurrentKafkaListenerContainerFactory<String, Transaction> kafkaListenerContainerFactory() {
+        ConcurrentKafkaListenerContainerFactory<String, Transaction> factory =
+                new ConcurrentKafkaListenerContainerFactory<>();
+        factory.setConsumerFactory(consumerFactory());
+        return factory;
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/index.html new file mode 100644 index 0000000..18c1e3b --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.config

com.yape.app.transaction.config

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total146 of 1460 %0 of 0n/a7733337722
KafkaConfigMain1390 %n/a5531315511
JsonConverterMessageConfig70 %n/a22222211
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/index.source.html new file mode 100644 index 0000000..970e0b8 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.config/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.config

com.yape.app.transaction.config

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total146 of 1460 %0 of 0n/a7733337722
KafkaConfigMain.java1390 %n/a5531315511
JsonConverterMessageConfig.java70 %n/a22222211
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/GraphQLTransactionController.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/GraphQLTransactionController.html new file mode 100644 index 0000000..36082de --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/GraphQLTransactionController.html @@ -0,0 +1 @@ +GraphQLTransactionController

GraphQLTransactionController

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total31 of 310 %0 of 0n/a44101044
createTransaction(String, String, String, Double)160 %n/a117711
GraphQLTransactionController(TransactionService)60 %n/a111111
getTransaction(String)50 %n/a111111
static {...}40 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/GraphQLTransactionController.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/GraphQLTransactionController.java.html new file mode 100644 index 0000000..a9ecc5d --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/GraphQLTransactionController.java.html @@ -0,0 +1,44 @@ +GraphQLTransactionController.java

GraphQLTransactionController.java

package com.yape.app.transaction.controller;
+
+import com.yape.app.transaction.model.entity.Transaction;
+import com.yape.app.transaction.model.request.TransactionRequest;
+import com.yape.app.transaction.model.response.TransactionResponse;
+import com.yape.app.transaction.service.TransactionService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.graphql.data.method.annotation.Argument;
+import org.springframework.graphql.data.method.annotation.MutationMapping;
+import org.springframework.graphql.data.method.annotation.QueryMapping;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Mono;
+
+@RestController
+@Slf4j
+@AllArgsConstructor
+public class GraphQLTransactionController {
+
+    private TransactionService transactionService;
+
+    @QueryMapping
+    public Mono<TransactionResponse> getTransaction(@Argument String transactionExternalId) {
+        return transactionService.getTransaction(transactionExternalId);
+    }
+
+    @MutationMapping
+    public Mono<Transaction> createTransaction(@Argument String accountExternalIdDebit,
+                                               @Argument String accountExternalIdCredit,
+                                               @Argument String transferTypeId,
+                                               @Argument Double value) {
+
+        TransactionRequest transactionRequest =
+                TransactionRequest.builder()
+                        .accountExternalIdCredit(accountExternalIdCredit)
+                        .accountExternalIdDebit(accountExternalIdDebit)
+                        .transferTypeId(transferTypeId)
+                        .value(value)
+                        .build();
+
+        return transactionService.createTransaction(transactionRequest);
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/TransactionController.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/TransactionController.html new file mode 100644 index 0000000..d599af9 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/TransactionController.html @@ -0,0 +1 @@ +TransactionController

TransactionController

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total10 of 2152 %0 of 0n/a133513
getTransaction(String)100 %n/a113311
TransactionController(TransactionService)6100 %n/a010101
createTransaction(TransactionRequest)5100 %n/a010101
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/TransactionController.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/TransactionController.java.html new file mode 100644 index 0000000..9fca172 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/TransactionController.java.html @@ -0,0 +1,33 @@ +TransactionController.java

TransactionController.java

package com.yape.app.transaction.controller;
+
+import com.yape.app.transaction.model.entity.Transaction;
+import com.yape.app.transaction.model.request.TransactionRequest;
+import com.yape.app.transaction.model.response.TransactionResponse;
+import com.yape.app.transaction.service.TransactionService;
+import lombok.AllArgsConstructor;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import reactor.core.publisher.Mono;
+
+@RestController
+@RequestMapping("/api/transactions")
+@AllArgsConstructor
+public class TransactionController {
+
+    private final TransactionService transactionService;
+
+    @PostMapping
+    @ResponseStatus(HttpStatus.CREATED)
+    public Mono<Transaction> createTransaction(@RequestBody TransactionRequest transactionRequest) {
+        return transactionService.createTransaction(transactionRequest);
+    }
+
+    @GetMapping("/{transactionExternalId}")
+    public Mono<ResponseEntity<TransactionResponse>> getTransaction(@PathVariable String transactionExternalId) {
+        return transactionService.getTransaction(transactionExternalId)
+                .map(ResponseEntity::ok)
+                .defaultIfEmpty(ResponseEntity.notFound().build());
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/index.html new file mode 100644 index 0000000..83afe54 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.controller

com.yape.app.transaction.controller

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total41 of 5221 %0 of 0n/a5713155712
GraphQLTransactionController310 %n/a4410104411
TransactionController101152 %n/a13351301
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/index.source.html new file mode 100644 index 0000000..9b3dd2c --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.controller/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.controller

com.yape.app.transaction.controller

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total41 of 5221 %0 of 0n/a5713155712
GraphQLTransactionController.java310 %n/a4410104411
TransactionController.java101152 %n/a13351301
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction$TransactionBuilder.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction$TransactionBuilder.html new file mode 100644 index 0000000..1b950d5 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction$TransactionBuilder.html @@ -0,0 +1 @@ +Transaction.TransactionBuilder

Transaction.TransactionBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total72 of 720 %0 of 0n/a1010111010
build()180 %n/a111111
toString()160 %n/a111111
transactionExternalId(String)50 %n/a111111
accountExternalIdDebit(String)50 %n/a111111
accountExternalIdCredit(String)50 %n/a111111
transferTypeId(String)50 %n/a111111
value(Double)50 %n/a111111
status(String)50 %n/a111111
createdAt(LocalDateTime)50 %n/a111111
Transaction.TransactionBuilder()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction.html new file mode 100644 index 0000000..48c6c95 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction.html @@ -0,0 +1 @@ +Transaction

Transaction

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total77 of 803 %0 of 0n/a161710111617
Transaction(String, String, String, String, Double, String, LocalDateTime)240 %n/a111111
builder()40 %n/a111111
setTransactionExternalId(String)40 %n/a111111
setAccountExternalIdDebit(String)40 %n/a111111
setAccountExternalIdCredit(String)40 %n/a111111
setTransferTypeId(String)40 %n/a111111
setValue(Double)40 %n/a111111
setStatus(String)40 %n/a111111
setCreatedAt(LocalDateTime)40 %n/a111111
getTransactionExternalId()30 %n/a111111
getAccountExternalIdDebit()30 %n/a111111
getAccountExternalIdCredit()30 %n/a111111
getTransferTypeId()30 %n/a111111
getValue()30 %n/a111111
getStatus()30 %n/a111111
getCreatedAt()30 %n/a111111
Transaction()3100 %n/a010101
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction.java.html new file mode 100644 index 0000000..753209b --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/Transaction.java.html @@ -0,0 +1,25 @@ +Transaction.java

Transaction.java

package com.yape.app.transaction.model.entity;
+
+import lombok.*;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.time.LocalDateTime;
+
+@Document(collection = "transactions")
+@Getter
+@Setter
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class Transaction {
+    @Id
+    private String transactionExternalId;
+    private String accountExternalIdDebit;
+    private String accountExternalIdCredit;
+    private String transferTypeId;
+    private Double value;
+    private String status;
+    private LocalDateTime createdAt;
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/index.html new file mode 100644 index 0000000..2e53701 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.model.entity

com.yape.app.transaction.model.entity

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total149 of 1521 %0 of 0n/a26271011262712
Transaction7733 %n/a16171011161701
Transaction.TransactionBuilder720 %n/a101011101011
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/index.source.html new file mode 100644 index 0000000..08ab106 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.entity/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.model.entity

com.yape.app.transaction.model.entity

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total149 of 1521 %0 of 0n/a26271011262712
Transaction.java14931 %n/a26271011262712
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest$TransactionRequestBuilder.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest$TransactionRequestBuilder.html new file mode 100644 index 0000000..ec0d65b --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest$TransactionRequestBuilder.html @@ -0,0 +1 @@ +TransactionRequest.TransactionRequestBuilder

TransactionRequest.TransactionRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total45 of 450 %0 of 0n/a771177
build()120 %n/a111111
toString()100 %n/a111111
accountExternalIdDebit(String)50 %n/a111111
accountExternalIdCredit(String)50 %n/a111111
transferTypeId(String)50 %n/a111111
value(Double)50 %n/a111111
TransactionRequest.TransactionRequestBuilder()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest.html new file mode 100644 index 0000000..a923906 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest.html @@ -0,0 +1 @@ +TransactionRequest

TransactionRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total32 of 4731 %0 of 0n/a91067910
builder()40 %n/a111111
setAccountExternalIdDebit(String)40 %n/a111111
setAccountExternalIdCredit(String)40 %n/a111111
setTransferTypeId(String)40 %n/a111111
setValue(Double)40 %n/a111111
getAccountExternalIdDebit()30 %n/a111111
getAccountExternalIdCredit()30 %n/a111111
getTransferTypeId()30 %n/a111111
getValue()30 %n/a111111
TransactionRequest(String, String, String, Double)15100 %n/a010101
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest.java.html new file mode 100644 index 0000000..16ac6f6 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/TransactionRequest.java.html @@ -0,0 +1,18 @@ +TransactionRequest.java

TransactionRequest.java

package com.yape.app.transaction.model.request;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@Builder
+public class TransactionRequest {
+    private String accountExternalIdDebit;
+    private String accountExternalIdCredit;
+    private String transferTypeId;
+    private Double value;
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/index.html new file mode 100644 index 0000000..52a4e39 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.model.request

com.yape.app.transaction.model.request

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total77 of 9216 %0 of 0n/a161767161712
TransactionRequest.TransactionRequestBuilder450 %n/a77117711
TransactionRequest321531 %n/a9106791001
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/index.source.html new file mode 100644 index 0000000..e9a727e --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.request/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.model.request

com.yape.app.transaction.model.request

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total77 of 9216 %0 of 0n/a161767161712
TransactionRequest.java771516 %n/a161767161712
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue$NameValueBuilder.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue$NameValueBuilder.html new file mode 100644 index 0000000..1fa2b73 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue$NameValueBuilder.html @@ -0,0 +1 @@ +NameValue.NameValueBuilder

NameValue.NameValueBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total18 of 180 %0 of 0n/a441144
build()60 %n/a111111
name(String)50 %n/a111111
toString()40 %n/a111111
NameValue.NameValueBuilder()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue.html new file mode 100644 index 0000000..b10a9fb --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue.html @@ -0,0 +1 @@ +NameValue

NameValue

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total17 of 170 %0 of 0n/a443344
NameValue(String)60 %n/a111111
builder()40 %n/a111111
setName(String)40 %n/a111111
getName()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue.java.html new file mode 100644 index 0000000..2779f85 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/NameValue.java.html @@ -0,0 +1,13 @@ +NameValue.java

NameValue.java

package com.yape.app.transaction.model.response;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Builder
+public class NameValue {
+    private  String name;
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse$TransactionResponseBuilder.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse$TransactionResponseBuilder.html new file mode 100644 index 0000000..1d276c0 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse$TransactionResponseBuilder.html @@ -0,0 +1 @@ +TransactionResponse.TransactionResponseBuilder

TransactionResponse.TransactionResponseBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total54 of 540 %0 of 0n/a881188
build()140 %n/a111111
toString()120 %n/a111111
transactionExternalId(String)50 %n/a111111
transactionType(NameValue)50 %n/a111111
transactionStatus(NameValue)50 %n/a111111
value(Double)50 %n/a111111
createdAt(String)50 %n/a111111
TransactionResponse.TransactionResponseBuilder()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse.html new file mode 100644 index 0000000..e42c871 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse.html @@ -0,0 +1 @@ +TransactionResponse

TransactionResponse

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total57 of 570 %0 of 0n/a1212771212
TransactionResponse(String, NameValue, NameValue, Double, String)180 %n/a111111
builder()40 %n/a111111
setTransactionExternalId(String)40 %n/a111111
setTransactionType(NameValue)40 %n/a111111
setTransactionStatus(NameValue)40 %n/a111111
setValue(Double)40 %n/a111111
setCreatedAt(String)40 %n/a111111
getTransactionExternalId()30 %n/a111111
getTransactionType()30 %n/a111111
getTransactionStatus()30 %n/a111111
getValue()30 %n/a111111
getCreatedAt()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse.java.html new file mode 100644 index 0000000..14c8d70 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/TransactionResponse.java.html @@ -0,0 +1,17 @@ +TransactionResponse.java

TransactionResponse.java

package com.yape.app.transaction.model.response;
+
+import lombok.Builder;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+@Builder
+public class TransactionResponse {
+    private String transactionExternalId;
+    private NameValue transactionType;
+    private NameValue transactionStatus;
+    private Double value;
+    private String createdAt;
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/index.html new file mode 100644 index 0000000..78484a7 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.model.response

com.yape.app.transaction.model.response

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total146 of 1460 %0 of 0n/a28281010282844
TransactionResponse570 %n/a121277121211
TransactionResponse.TransactionResponseBuilder540 %n/a88118811
NameValue.NameValueBuilder180 %n/a44114411
NameValue170 %n/a44334411
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/index.source.html new file mode 100644 index 0000000..27f4d27 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.model.response/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.model.response

com.yape.app.transaction.model.response

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total146 of 1460 %0 of 0n/a28281010282844
TransactionResponse.java1110 %n/a202077202022
NameValue.java350 %n/a88338822
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ConsumerKafkaServiceImpl.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ConsumerKafkaServiceImpl.html new file mode 100644 index 0000000..e4b7cd2 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ConsumerKafkaServiceImpl.html @@ -0,0 +1 @@ +ConsumerKafkaServiceImpl

ConsumerKafkaServiceImpl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total16 of 160 %0 of 0n/a225522
consume(Transaction)100 %n/a114411
ConsumerKafkaServiceImpl(TransactionService)60 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ConsumerKafkaServiceImpl.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ConsumerKafkaServiceImpl.java.html new file mode 100644 index 0000000..b4ccc9b --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ConsumerKafkaServiceImpl.java.html @@ -0,0 +1,21 @@ +ConsumerKafkaServiceImpl.java

ConsumerKafkaServiceImpl.java

package com.yape.app.transaction.service.impl;
+
+import com.yape.app.transaction.model.entity.Transaction;
+import com.yape.app.transaction.service.TransactionService;
+import lombok.AllArgsConstructor;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ConsumerKafkaServiceImpl {
+    private final TransactionService transactionService;
+
+    @KafkaListener(topics = "transactionStatusUpdated", groupId = "group_id")
+    public void consume(Transaction transaction){
+        transactionService.updateStatusTransaction(
+                transaction.getTransactionExternalId(),
+                transaction.getStatus()).subscribe();
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ProducerKafkaServiceImpl.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ProducerKafkaServiceImpl.html new file mode 100644 index 0000000..b4cb4ea --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ProducerKafkaServiceImpl.html @@ -0,0 +1 @@ +ProducerKafkaServiceImpl

ProducerKafkaServiceImpl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total14 of 140 %0 of 0n/a223322
sendCreatedEventTransaction(Transaction)80 %n/a112211
ProducerKafkaServiceImpl(ReactiveKafkaProducerTemplate)60 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ProducerKafkaServiceImpl.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ProducerKafkaServiceImpl.java.html new file mode 100644 index 0000000..2911c4b --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/ProducerKafkaServiceImpl.java.html @@ -0,0 +1,19 @@ +ProducerKafkaServiceImpl.java

ProducerKafkaServiceImpl.java

package com.yape.app.transaction.service.impl;
+
+import com.yape.app.transaction.model.entity.Transaction;
+import com.yape.app.transaction.service.ProducerKafkaService;
+import lombok.AllArgsConstructor;
+import org.springframework.kafka.core.reactive.ReactiveKafkaProducerTemplate;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class ProducerKafkaServiceImpl implements ProducerKafkaService {
+    private final ReactiveKafkaProducerTemplate<String,Transaction> kafkaProducerTemplate;
+
+    @Override
+    public void sendCreatedEventTransaction(Transaction transaction) {
+        kafkaProducerTemplate.send("transactionCreated", transaction).subscribe();
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/TransactionServiceImpl.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/TransactionServiceImpl.html new file mode 100644 index 0000000..4ad5b4f --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/TransactionServiceImpl.html @@ -0,0 +1 @@ +TransactionServiceImpl

TransactionServiceImpl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total89 of 890 %0 of 0n/a77212177
createTransaction(TransactionRequest)450 %n/a11111111
updateStatusTransaction(String, String)90 %n/a112211
TransactionServiceImpl(TransactionRepository, ProducerKafkaServiceImpl)90 %n/a111111
lambda$updateStatusTransaction$1(String, Transaction)80 %n/a112211
getTransaction(String)70 %n/a112211
lambda$createTransaction$0(Throwable)70 %n/a112211
static {...}40 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/TransactionServiceImpl.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/TransactionServiceImpl.java.html new file mode 100644 index 0000000..3a949da --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/TransactionServiceImpl.java.html @@ -0,0 +1,61 @@ +TransactionServiceImpl.java

TransactionServiceImpl.java

package com.yape.app.transaction.service.impl;
+
+import com.yape.app.transaction.builder.TransactionBuilder;
+import com.yape.app.transaction.model.entity.Transaction;
+import com.yape.app.transaction.model.request.TransactionRequest;
+import com.yape.app.transaction.model.response.TransactionResponse;
+import com.yape.app.transaction.repository.TransactionRepository;
+import com.yape.app.transaction.service.TransactionService;
+import com.yape.app.transaction.util.Util;
+import lombok.AllArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import reactor.core.publisher.Mono;
+
+import java.time.LocalDateTime;
+import java.util.UUID;
+import static com.yape.app.transaction.builder.TransactionBuilder.buildTransactionFromRequest;
+
+@Service
+@AllArgsConstructor
+public class TransactionServiceImpl implements TransactionService {
+
+    private final TransactionRepository transactionRepository;
+    private final ProducerKafkaServiceImpl producerServiceKafka;
+
+    private static final Logger logger = LoggerFactory.getLogger(TransactionServiceImpl.class);
+    @Override
+    public Mono<Transaction> createTransaction(TransactionRequest transactionDto) {
+        Transaction transaction = new Transaction();
+        transaction.setTransactionExternalId(UUID.randomUUID().toString());
+        transaction.setAccountExternalIdDebit(transactionDto.getAccountExternalIdDebit());
+        transaction.setAccountExternalIdCredit(transactionDto.getAccountExternalIdCredit());
+        transaction.setTransferTypeId(transactionDto.getTransferTypeId());
+        transaction.setValue(transactionDto.getValue());
+        transaction.setStatus(Util.PENDING);
+        transaction.setCreatedAt(LocalDateTime.now());
+        return transactionRepository.save(buildTransactionFromRequest(transactionDto))
+                .doOnSuccess(producerServiceKafka::sendCreatedEventTransaction)
+                .onErrorResume(error -> {
+                    logger.error("Error en createTransaction", error);
+                    return Mono.error(error);
+                });
+    }
+
+    @Override
+    public Mono<TransactionResponse> getTransaction(String transactionExternalId) {
+        return transactionRepository.findById(transactionExternalId)
+                .map(TransactionBuilder::buildTransactionToResponse);
+    }
+
+    @Override
+    public Mono<Transaction> updateStatusTransaction(String transactionExternalId, String status) {
+        return transactionRepository.findById(transactionExternalId)
+                .flatMap(transaction -> {
+                    transaction.setStatus(status);
+                    return transactionRepository.save(transaction);
+                });
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/index.html new file mode 100644 index 0000000..c687881 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.service.impl

com.yape.app.transaction.service.impl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total119 of 1190 %0 of 0n/a11112929111133
TransactionServiceImpl890 %n/a7721217711
ConsumerKafkaServiceImpl160 %n/a22552211
ProducerKafkaServiceImpl140 %n/a22332211
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/index.source.html new file mode 100644 index 0000000..0679e76 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.service.impl/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.service.impl

com.yape.app.transaction.service.impl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total119 of 1190 %0 of 0n/a11112929111133
TransactionServiceImpl.java890 %n/a7721217711
ConsumerKafkaServiceImpl.java160 %n/a22552211
ProducerKafkaServiceImpl.java140 %n/a22332211
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/Util.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/Util.html new file mode 100644 index 0000000..99f665c --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/Util.html @@ -0,0 +1 @@ +Util

Util

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total9 of 90 %2 of 20 %221111
parseDateToString(LocalDateTime)90 %20 %221111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/Util.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/Util.java.html new file mode 100644 index 0000000..49d908e --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/Util.java.html @@ -0,0 +1,18 @@ +Util.java

Util.java

package com.yape.app.transaction.util;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class Util {
+    public static final String DATE_TIME_AMPM_FORMAT = "dd/MM/yyyy hh:mm:ss";
+    public static final String PENDING = "PENDING";
+
+    public static String parseDateToString(LocalDateTime date) {
+        return date != null ? date.format(DateTimeFormatter.ofPattern(DATE_TIME_AMPM_FORMAT)) : null;
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/index.html new file mode 100644 index 0000000..98fba5f --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/index.html @@ -0,0 +1 @@ +com.yape.app.transaction.util

com.yape.app.transaction.util

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total9 of 90 %2 of 20 %22111111
Util90 %20 %22111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/index.source.html new file mode 100644 index 0000000..e014e7d --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction.util/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction.util

com.yape.app.transaction.util

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total9 of 90 %2 of 20 %22111111
Util.java90 %20 %22111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction/ServiceTransactionApplicationMain.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/ServiceTransactionApplicationMain.html new file mode 100644 index 0000000..4f3d916 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/ServiceTransactionApplicationMain.html @@ -0,0 +1 @@ +ServiceTransactionApplicationMain

ServiceTransactionApplicationMain

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total49 of 490 %0 of 0n/a33131333
main(String[])420 %n/a11111111
static {...}40 %n/a111111
ServiceTransactionApplicationMain()30 %n/a111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction/ServiceTransactionApplicationMain.java.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/ServiceTransactionApplicationMain.java.html new file mode 100644 index 0000000..18db7ed --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/ServiceTransactionApplicationMain.java.html @@ -0,0 +1,24 @@ +ServiceTransactionApplicationMain.java

ServiceTransactionApplicationMain.java

package com.yape.app.transaction;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.core.env.Environment;
+
+@Slf4j
+@SpringBootApplication
+public class ServiceTransactionApplicationMain {
+    public static void main(String[] args){
+        Environment env = SpringApplication.run(ServiceTransactionApplicationMain.class, args).getEnvironment();
+        log.info("\n----------------------------------------------------------\n\t"
+                        .concat("Application '{}' is running! Access URLs:\n\t")
+                        .concat("Local: \t\thttp://localhost:{}\n\t")
+                        .concat("DB: \t{}\n\t")
+                        .concat("Profile(s): \t{}\n----------------------------------------------------------"),
+                env.getProperty("spring.application.name"),
+                env.getProperty("server.port"),
+                env.getProperty("spring.data.mongodb.database"),
+                env.getActiveProfiles());
+    }
+}
+
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction/index.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/index.html new file mode 100644 index 0000000..5f6db8c --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/index.html @@ -0,0 +1 @@ +com.yape.app.transaction

com.yape.app.transaction

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total49 of 490 %0 of 0n/a3313133311
ServiceTransactionApplicationMain490 %n/a3313133311
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/com.yape.app.transaction/index.source.html b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/index.source.html new file mode 100644 index 0000000..370bd5e --- /dev/null +++ b/transaction-service-app/target/site/jacoco/com.yape.app.transaction/index.source.html @@ -0,0 +1 @@ +com.yape.app.transaction

com.yape.app.transaction

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total49 of 490 %0 of 0n/a3313133311
ServiceTransactionApplicationMain.java490 %n/a3313133311
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/index.html b/transaction-service-app/target/site/jacoco/index.html new file mode 100644 index 0000000..6dd7a71 --- /dev/null +++ b/transaction-service-app/target/site/jacoco/index.html @@ -0,0 +1 @@ +transaction-service-app

transaction-service-app

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total786 of 8153 %2 of 20 %1011051321361001041518
com.yape.app.transaction.model.entity14931 %n/a26271011262712
com.yape.app.transaction.config1460 %n/a7733337722
com.yape.app.transaction.model.response1460 %n/a28281010282844
com.yape.app.transaction.service.impl1190 %n/a11112929111133
com.yape.app.transaction.model.request771516 %n/a161767161712
com.yape.app.transaction.builder500 %n/a3317173311
com.yape.app.transaction490 %n/a3313133311
com.yape.app.transaction.controller411121 %n/a5713155712
com.yape.app.transaction.util90 %20 %22111111
\ No newline at end of file diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/branchfc.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/branchfc.gif new file mode 100644 index 0000000..989b46d Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/branchfc.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/branchnc.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/branchnc.gif new file mode 100644 index 0000000..1933e07 Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/branchnc.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/branchpc.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/branchpc.gif new file mode 100644 index 0000000..cbf711b Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/branchpc.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/bundle.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/bundle.gif new file mode 100644 index 0000000..fca9c53 Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/bundle.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/class.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/class.gif new file mode 100644 index 0000000..eb348fb Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/class.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/down.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/down.gif new file mode 100644 index 0000000..440a14d Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/down.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/greenbar.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/greenbar.gif new file mode 100644 index 0000000..0ba6567 Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/greenbar.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/group.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/group.gif new file mode 100644 index 0000000..a4ea580 Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/group.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/method.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/method.gif new file mode 100644 index 0000000..7d24707 Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/method.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/package.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/package.gif new file mode 100644 index 0000000..131c28d Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/package.gif differ diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/prettify.css b/transaction-service-app/target/site/jacoco/jacoco-resources/prettify.css new file mode 100644 index 0000000..be5166e --- /dev/null +++ b/transaction-service-app/target/site/jacoco/jacoco-resources/prettify.css @@ -0,0 +1,13 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #2A00FF; } +.kwd { color: #7F0055; font-weight:bold; } +.com { color: #3F5FBF; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +.dec { color: #606; } diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/prettify.js b/transaction-service-app/target/site/jacoco/jacoco-resources/prettify.js new file mode 100644 index 0000000..b2766fe --- /dev/null +++ b/transaction-service-app/target/site/jacoco/jacoco-resources/prettify.js @@ -0,0 +1,1510 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + *

+ * + * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

+ * Usage:

    + *
  1. include this source file in an html page via + * {@code } + *
  2. define style rules. See the example page for examples. + *
  3. mark the {@code
    } and {@code } tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code } tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Walks the DOM returning a properly escaped version of innerHTML.
    +  * @param {Node} node
    +  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    +  */
    +window['PR_normalizedHtml']
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +  = window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    +window['_pr_isIE6'] = function () {
    +  var ieVersion = navigator && navigator.userAgent &&
    +      navigator.userAgent.match(/\bMSIE ([678])\./);
    +  ieVersion = ieVersion ? +ieVersion[1] : false;
    +  window['_pr_isIE6'] = function () { return ieVersion; };
    +  return ieVersion;
    +};
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  // Define regexps here so that the interpreter doesn't have to create an
    +  // object each time the function containing them is called.
    +  // The language spec requires a new object created even if you don't access
    +  // the $1 members.
    +  var pr_amp = /&/g;
    +  var pr_lt = /</g;
    +  var pr_gt = />/g;
    +  var pr_quot = /\"/g;
    +  /** like textToHtml but escapes double quotes to be attribute safe. */
    +  function attribToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;')
    +        .replace(pr_quot, '&quot;');
    +  }
    +
    +  /** escapest html special characters to html. */
    +  function textToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;');
    +  }
    +
    +
    +  var pr_ltEnt = /&lt;/g;
    +  var pr_gtEnt = /&gt;/g;
    +  var pr_aposEnt = /&apos;/g;
    +  var pr_quotEnt = /&quot;/g;
    +  var pr_ampEnt = /&amp;/g;
    +  var pr_nbspEnt = /&nbsp;/g;
    +  /** unescapes html to plain text. */
    +  function htmlToText(html) {
    +    var pos = html.indexOf('&');
    +    if (pos < 0) { return html; }
    +    // Handle numeric entities specially.  We can't use functional substitution
    +    // since that doesn't work in older versions of Safari.
    +    // These should be rare since most browsers convert them to normal chars.
    +    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    +      var end = html.indexOf(';', pos);
    +      if (end >= 0) {
    +        var num = html.substring(pos + 3, end);
    +        var radix = 10;
    +        if (num && num.charAt(0) === 'x') {
    +          num = num.substring(1);
    +          radix = 16;
    +        }
    +        var codePoint = parseInt(num, radix);
    +        if (!isNaN(codePoint)) {
    +          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    +                  html.substring(end + 1));
    +        }
    +      }
    +    }
    +
    +    return html.replace(pr_ltEnt, '<')
    +        .replace(pr_gtEnt, '>')
    +        .replace(pr_aposEnt, "'")
    +        .replace(pr_quotEnt, '"')
    +        .replace(pr_nbspEnt, ' ')
    +        .replace(pr_ampEnt, '&');
    +  }
    +
    +  /** is the given node's innerHTML normally unescaped? */
    +  function isRawContent(node) {
    +    return 'XMP' === node.tagName;
    +  }
    +
    +  var newlineRe = /[\r\n]/g;
    +  /**
    +   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    +   */
    +  function isPreformatted(node, content) {
    +    // PRE means preformatted, and is a very common case, so don't create
    +    // unnecessary computed style objects.
    +    if ('PRE' === node.tagName) { return true; }
    +    if (!newlineRe.test(content)) { return true; }  // Don't care
    +    var whitespace = '';
    +    // For disconnected nodes, IE has no currentStyle.
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      // Firefox makes a best guess if node is disconnected whereas Safari
    +      // returns the empty string.
    +      whitespace = window.getComputedStyle(node, null).whiteSpace;
    +    }
    +    return !whitespace || whitespace === 'pre';
    +  }
    +
    +  function normalizedHtml(node, out, opt_sortAttrs) {
    +    switch (node.nodeType) {
    +      case 1:  // an element
    +        var name = node.tagName.toLowerCase();
    +
    +        out.push('<', name);
    +        var attrs = node.attributes;
    +        var n = attrs.length;
    +        if (n) {
    +          if (opt_sortAttrs) {
    +            var sortedAttrs = [];
    +            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    +            sortedAttrs.sort(function (a, b) {
    +                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    +              });
    +            attrs = sortedAttrs;
    +          }
    +          for (var i = 0; i < n; ++i) {
    +            var attr = attrs[i];
    +            if (!attr.specified) { continue; }
    +            out.push(' ', attr.name.toLowerCase(),
    +                     '="', attribToHtml(attr.value), '"');
    +          }
    +        }
    +        out.push('>');
    +        for (var child = node.firstChild; child; child = child.nextSibling) {
    +          normalizedHtml(child, out, opt_sortAttrs);
    +        }
    +        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    +          out.push('<\/', name, '>');
    +        }
    +        break;
    +      case 3: case 4: // text
    +        out.push(textToHtml(node.nodeValue));
    +        break;
    +    }
    +  }
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union o the sets o strings matched d by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +
    +      // Expand letters to groupts to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +
    +      return parts.join('');
    +    }
    +
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +  var PR_innerHtmlWorks = null;
    +  function getInnerHtml(node) {
    +    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    +    // an html description of well formed XML and the containing tag is a PRE
    +    // tag, so we detect that case and emulate innerHTML.
    +    if (null === PR_innerHtmlWorks) {
    +      var testNode = document.createElement('PRE');
    +      testNode.appendChild(
    +          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    +      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    +    }
    +
    +    if (PR_innerHtmlWorks) {
    +      var content = node.innerHTML;
    +      // XMP tags contain unescaped entities so require special handling.
    +      if (isRawContent(node)) {
    +        content = textToHtml(content);
    +      } else if (!isPreformatted(node, content)) {
    +        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    +            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    +      }
    +      return content;
    +    }
    +
    +    var out = [];
    +    for (var child = node.firstChild; child; child = child.nextSibling) {
    +      normalizedHtml(child, out);
    +    }
    +    return out.join('');
    +  }
    +
    +  /** returns a function that expand tabs to spaces.  This function can be fed
    +    * successive chunks of text, and will maintain its own internal state to
    +    * keep track of how tabs are expanded.
    +    * @return {function (string) : string} a function that takes
    +    *   plain text and return the text with tabs expanded.
    +    * @private
    +    */
    +  function makeTabExpander(tabWidth) {
    +    var SPACES = '                ';
    +    var charInLine = 0;
    +
    +    return function (plainText) {
    +      // walk over each character looking for tabs and newlines.
    +      // On tabs, expand them.  On newlines, reset charInLine.
    +      // Otherwise increment charInLine
    +      var out = null;
    +      var pos = 0;
    +      for (var i = 0, n = plainText.length; i < n; ++i) {
    +        var ch = plainText.charAt(i);
    +
    +        switch (ch) {
    +          case '\t':
    +            if (!out) { out = []; }
    +            out.push(plainText.substring(pos, i));
    +            // calculate how much space we need in front of this part
    +            // nSpaces is the amount of padding -- the number of spaces needed
    +            // to move us to the next column, where columns occur at factors of
    +            // tabWidth.
    +            var nSpaces = tabWidth - (charInLine % tabWidth);
    +            charInLine += nSpaces;
    +            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    +              out.push(SPACES.substring(0, nSpaces));
    +            }
    +            pos = i + 1;
    +            break;
    +          case '\n':
    +            charInLine = 0;
    +            break;
    +          default:
    +            ++charInLine;
    +        }
    +      }
    +      if (!out) { return plainText; }
    +      out.push(plainText.substring(pos));
    +      return out.join('');
    +    };
    +  }
    +
    +  var pr_chunkPattern = new RegExp(
    +      '[^<]+'  // A run of characters other than '<'
    +      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    +      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    +      // a probable tag that should not be highlighted
    +      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    +      + '|<',  // A '<' that does not begin a larger chunk
    +      'g');
    +  var pr_commentPrefix = /^<\!--/;
    +  var pr_cdataPrefix = /^<!\[CDATA\[/;
    +  var pr_brPrefix = /^<br\b/i;
    +  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    +
    +  /** split markup into chunks of html tags (style null) and
    +    * plain text (style {@link #PR_PLAIN}), converting tags which are
    +    * significant for tokenization (<br>) into their textual equivalent.
    +    *
    +    * @param {string} s html where whitespace is considered significant.
    +    * @return {Object} source code and extracted tags.
    +    * @private
    +    */
    +  function extractTags(s) {
    +    // since the pattern has the 'g' modifier and defines no capturing groups,
    +    // this will return a list of all chunks which we then classify and wrap as
    +    // PR_Tokens
    +    var matches = s.match(pr_chunkPattern);
    +    var sourceBuf = [];
    +    var sourceBufLen = 0;
    +    var extractedTags = [];
    +    if (matches) {
    +      for (var i = 0, n = matches.length; i < n; ++i) {
    +        var match = matches[i];
    +        if (match.length > 1 && match.charAt(0) === '<') {
    +          if (pr_commentPrefix.test(match)) { continue; }
    +          if (pr_cdataPrefix.test(match)) {
    +            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    +            sourceBuf.push(match.substring(9, match.length - 3));
    +            sourceBufLen += match.length - 12;
    +          } else if (pr_brPrefix.test(match)) {
    +            // <br> tags are lexically significant so convert them to text.
    +            // This is undone later.
    +            sourceBuf.push('\n');
    +            ++sourceBufLen;
    +          } else {
    +            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    +              // A <span class="nocode"> will start a section that should be
    +              // ignored.  Continue walking the list until we see a matching end
    +              // tag.
    +              var name = match.match(pr_tagNameRe)[2];
    +              var depth = 1;
    +              var j;
    +              end_tag_loop:
    +              for (j = i + 1; j < n; ++j) {
    +                var name2 = matches[j].match(pr_tagNameRe);
    +                if (name2 && name2[2] === name) {
    +                  if (name2[1] === '/') {
    +                    if (--depth === 0) { break end_tag_loop; }
    +                  } else {
    +                    ++depth;
    +                  }
    +                }
    +              }
    +              if (j < n) {
    +                extractedTags.push(
    +                    sourceBufLen, matches.slice(i, j + 1).join(''));
    +                i = j;
    +              } else {  // Ignore unclosed sections.
    +                extractedTags.push(sourceBufLen, match);
    +              }
    +            } else {
    +              extractedTags.push(sourceBufLen, match);
    +            }
    +          }
    +        } else {
    +          var literalText = htmlToText(match);
    +          sourceBuf.push(literalText);
    +          sourceBufLen += literalText.length;
    +        }
    +      }
    +    }
    +    return { source: sourceBuf.join(''), tags: extractedTags };
    +  }
    +
    +  /** True if the given tag contains a class attribute with the nocode class. */
    +  function isNoCodeTag(tag) {
    +    return !!tag
    +        // First canonicalize the representation of attributes
    +        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    +                 ' $1="$2$3$4"')
    +        // Then look for the attribute we want.
    +        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    +  }
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    if (options['hashComments']) {
    +      if (options['cStyleComments']) {
    +        // Stop C preprocessor declarations at an unclosed open comment
    +        shortcutStylePatterns.push(
    +            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +             null, '#']);
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /** Breaks {@code job.source} around style boundaries in
    +    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    +    * and leaves the result in {@code job.prettyPrintedHtml}.
    +    * @param {Object} job like {
    +    *    source: {string} source as plain text,
    +    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    +    *                   html preceded by their position in {@code job.source}
    +    *                   in order
    +    *    decorations: {Array.<number|string} an array of style classes preceded
    +    *                 by the position at which they start in job.source in order
    +    * }
    +    * @private
    +    */
    +  function recombineTagsAndDecorations(job) {
    +    var sourceText = job.source;
    +    var extractedTags = job.extractedTags;
    +    var decorations = job.decorations;
    +
    +    var html = [];
    +    // index past the last char in sourceText written to html
    +    var outputIdx = 0;
    +
    +    var openDecoration = null;
    +    var currentDecoration = null;
    +    var tagPos = 0;  // index into extractedTags
    +    var decPos = 0;  // index into decorations
    +    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    +
    +    var adjacentSpaceRe = /([\r\n ]) /g;
    +    var startOrSpaceRe = /(^| ) /gm;
    +    var newlineRe = /\r\n?|\n/g;
    +    var trailingSpaceRe = /[ \r\n]$/;
    +    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    +
    +    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    +    var isIE678 = window['_pr_isIE6']();
    +    var lineBreakHtml = (
    +        isIE678
    +        ? (job.sourceNode.tagName === 'PRE'
    +           // Use line feeds instead of <br>s so that copying and pasting works
    +           // on IE.
    +           // Doing this on other browsers breaks lots of stuff since \r\n is
    +           // treated as two newlines on Firefox.
    +           ? (isIE678 === 6 ? '&#160;\r\n' :
    +              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    +           // IE collapses multiple adjacent <br>s into 1 line break.
    +           // Prefix every newline with '&#160;' to prevent such behavior.
    +           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    +           : '&#160;<br />')
    +        : '<br />');
    +
    +    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    +    // number of the first line.
    +    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    +    var lineBreaker;
    +    if (numberLines) {
    +      var lineBreaks = [];
    +      for (var i = 0; i < 10; ++i) {
    +        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    +      }
    +      var lineNum = numberLines[1] && numberLines[1].length
    +          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    +      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    +      if (lineNum) {
    +        html.push(' value="', lineNum + 1, '"');
    +      }
    +      html.push('>');
    +      lineBreaker = function () {
    +        var lb = lineBreaks[++lineNum % 10];
    +        // If a decoration is open, we need to close it before closing a list-item
    +        // and reopen it on the other side of the list item.
    +        return openDecoration
    +            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    +      };
    +    } else {
    +      lineBreaker = lineBreakHtml;
    +    }
    +
    +    // A helper function that is responsible for opening sections of decoration
    +    // and outputing properly escaped chunks of source
    +    function emitTextUpTo(sourceIdx) {
    +      if (sourceIdx > outputIdx) {
    +        if (openDecoration && openDecoration !== currentDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        if (!openDecoration && currentDecoration) {
    +          openDecoration = currentDecoration;
    +          html.push('<span class="', openDecoration, '">');
    +        }
    +        // This interacts badly with some wikis which introduces paragraph tags
    +        // into pre blocks for some strange reason.
    +        // It's necessary for IE though which seems to lose the preformattedness
    +        // of <pre> tags when their innerHTML is assigned.
    +        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    +        // and it serves to undo the conversion of <br>s to newlines done in
    +        // chunkify.
    +        var htmlChunk = textToHtml(
    +            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    +            .replace(lastWasSpace
    +                     ? startOrSpaceRe
    +                     : adjacentSpaceRe, '$1&#160;');
    +        // Keep track of whether we need to escape space at the beginning of the
    +        // next chunk.
    +        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    +        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    +        outputIdx = sourceIdx;
    +      }
    +    }
    +
    +    while (true) {
    +      // Determine if we're going to consume a tag this time around.  Otherwise
    +      // we consume a decoration or exit.
    +      var outputTag;
    +      if (tagPos < extractedTags.length) {
    +        if (decPos < decorations.length) {
    +          // Pick one giving preference to extractedTags since we shouldn't open
    +          // a new style that we're going to have to immediately close in order
    +          // to output a tag.
    +          outputTag = extractedTags[tagPos] <= decorations[decPos];
    +        } else {
    +          outputTag = true;
    +        }
    +      } else {
    +        outputTag = false;
    +      }
    +      // Consume either a decoration or a tag or exit.
    +      if (outputTag) {
    +        emitTextUpTo(extractedTags[tagPos]);
    +        if (openDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        html.push(extractedTags[tagPos + 1]);
    +        tagPos += 2;
    +      } else if (decPos < decorations.length) {
    +        emitTextUpTo(decorations[decPos]);
    +        currentDecoration = decorations[decPos + 1];
    +        decPos += 2;
    +      } else {
    +        break;
    +      }
    +    }
    +    emitTextUpTo(sourceText.length);
    +    if (openDecoration) {
    +      html.push('</span>');
    +    }
    +    if (numberLines) { html.push('</li></ol>'); }
    +    job.prettyPrintedHtml = html.join('');
    +  }
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var sourceCodeHtml = job.sourceCodeHtml;
    +    var opt_langExtension = job.langExtension;
    +
    +    // Prepopulate output in case processing fails with an exception.
    +    job.prettyPrintedHtml = sourceCodeHtml;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndExtractedTags.source;
    +      job.source = source;
    +      job.basePos = 0;
    +
    +      /** Even entries are positions in source in ascending order.  Odd entries
    +        * are tags that were extracted at that position.
    +        * @type {Array.<number|string>}
    +        */
    +      job.extractedTags = sourceAndExtractedTags.tags;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +      // Integrate the decorations and tags back into the source code to produce
    +      // a decorated html string which is left in job.prettyPrintedHtml.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    +    var job = {
    +      sourceCodeHtml: sourceCodeHtml,
    +      langExtension: opt_langExtension
    +    };
    +    applyDecorator(job);
    +    return job.prettyPrintedHtml;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        // [JACOCO] 'prettyprint' -> 'source'
    +        if (cs.className && cs.className.indexOf('source') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR_registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                // [JACOCO] 'prettyprint' -> 'source'
    +                p.className && p.className.indexOf('source') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // fetch the content as a snippet of properly escaped HTML.
    +            // Firefox adds newlines at the end.
    +            var content = getInnerHtml(cs);
    +            content = content.replace(/(?:\r\n?|\n)$/, '');
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              sourceCodeHtml: content,
    +              langExtension: langExtension,
    +              sourceNode: cs
    +            };
    +            applyDecorator(prettyPrintingJob);
    +            replaceWithPrettyPrintedHtml();
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    function replaceWithPrettyPrintedHtml() {
    +      var newContent = prettyPrintingJob.prettyPrintedHtml;
    +      if (!newContent) { return; }
    +      var cs = prettyPrintingJob.sourceNode;
    +
    +      // push the prettified html back into the tag.
    +      if (!isRawContent(cs)) {
    +        // just replace the old html with the new
    +        cs.innerHTML = newContent;
    +      } else {
    +        // we need to change the tag to a <pre> since <xmp>s do not allow
    +        // embedded tags such as the span tags used to attach styles to
    +        // sections of source code.
    +        var pre = document.createElement('PRE');
    +        for (var i = 0; i < cs.attributes.length; ++i) {
    +          var a = cs.attributes[i];
    +          if (a.specified) {
    +            var aname = a.name.toLowerCase();
    +            if (aname === 'class') {
    +              pre.className = a.value;  // For IE 6
    +            } else {
    +              pre.setAttribute(a.name, a.value);
    +            }
    +          }
    +        }
    +        pre.innerHTML = newContent;
    +
    +        // remove the old
    +        cs.parentNode.replaceChild(pre, cs);
    +        cs = pre;
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['PR_normalizedHtml'] = normalizedHtml;
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'combinePrefixPatterns': combinePrefixPatterns,
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/redbar.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/redbar.gif
    new file mode 100644
    index 0000000..c2f7146
    Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/redbar.gif differ
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/report.css b/transaction-service-app/target/site/jacoco/jacoco-resources/report.css
    new file mode 100644
    index 0000000..dd936bc
    --- /dev/null
    +++ b/transaction-service-app/target/site/jacoco/jacoco-resources/report.css
    @@ -0,0 +1,243 @@
    +body, td {
    +  font-family:sans-serif;
    +  font-size:10pt;
    +}
    +
    +h1 {
    +  font-weight:bold;
    +  font-size:18pt;
    +}
    +
    +.breadcrumb {
    +  border:#d6d3ce 1px solid;
    +  padding:2px 4px 2px 4px;
    +}
    +
    +.breadcrumb .info {
    +  float:right;
    +}
    +
    +.breadcrumb .info a {
    +  margin-left:8px;
    +}
    +
    +.el_report {
    +  padding-left:18px;
    +  background-image:url(report.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_group {
    +  padding-left:18px;
    +  background-image:url(group.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_bundle {
    +  padding-left:18px;
    +  background-image:url(bundle.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_package {
    +  padding-left:18px;
    +  background-image:url(package.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_class {
    +  padding-left:18px;
    +  background-image:url(class.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_source {
    +  padding-left:18px;
    +  background-image:url(source.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_method {
    +  padding-left:18px;
    +  background-image:url(method.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_session {
    +  padding-left:18px;
    +  background-image:url(session.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +pre.source {
    +  border:#d6d3ce 1px solid;
    +  font-family:monospace;
    +}
    +
    +pre.source ol {
    +  margin-bottom: 0px;
    +  margin-top: 0px;
    +}
    +
    +pre.source li {
    +  border-left: 1px solid #D6D3CE;
    +  color: #A0A0A0;
    +  padding-left: 0px;
    +}
    +
    +pre.source span.fc {
    +  background-color:#ccffcc;
    +}
    +
    +pre.source span.nc {
    +  background-color:#ffaaaa;
    +}
    +
    +pre.source span.pc {
    +  background-color:#ffffcc;
    +}
    +
    +pre.source span.bfc {
    +  background-image: url(branchfc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bfc:hover {
    +  background-color:#80ff80;
    +}
    +
    +pre.source span.bnc {
    +  background-image: url(branchnc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bnc:hover {
    +  background-color:#ff8080;
    +}
    +
    +pre.source span.bpc {
    +  background-image: url(branchpc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bpc:hover {
    +  background-color:#ffff80;
    +}
    +
    +table.coverage {
    +  empty-cells:show;
    +  border-collapse:collapse;
    +}
    +
    +table.coverage thead {
    +  background-color:#e0e0e0;
    +}
    +
    +table.coverage thead td {
    +  white-space:nowrap;
    +  padding:2px 14px 0px 6px;
    +  border-bottom:#b0b0b0 1px solid;
    +}
    +
    +table.coverage thead td.bar {
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr1 {
    +  text-align:right;
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr2 {
    +  text-align:right;
    +  padding-left:2px;
    +}
    +
    +table.coverage thead td.sortable {
    +  cursor:pointer;
    +  background-image:url(sort.gif);
    +  background-position:right center;
    +  background-repeat:no-repeat;
    +}
    +
    +table.coverage thead td.up {
    +  background-image:url(up.gif);
    +}
    +
    +table.coverage thead td.down {
    +  background-image:url(down.gif);
    +}
    +
    +table.coverage tbody td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +  border-bottom:#d6d3ce 1px solid;
    +}
    +
    +table.coverage tbody tr:hover {
    +  background: #f0f0d0 !important;
    +}
    +
    +table.coverage tbody td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +table.coverage tfoot td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +}
    +
    +table.coverage tfoot td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +.footer {
    +  margin-top:20px;
    +  border-top:#d6d3ce 1px solid;
    +  padding-top:2px;
    +  font-size:8pt;
    +  color:#a0a0a0;
    +}
    +
    +.footer a {
    +  color:#a0a0a0;
    +}
    +
    +.right {
    +  float:right;
    +}
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/report.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/report.gif
    new file mode 100644
    index 0000000..8547be5
    Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/report.gif differ
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/session.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/session.gif
    new file mode 100644
    index 0000000..0151bad
    Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/session.gif differ
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/sort.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/sort.gif
    new file mode 100644
    index 0000000..6757c2c
    Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/sort.gif differ
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/sort.js b/transaction-service-app/target/site/jacoco/jacoco-resources/sort.js
    new file mode 100644
    index 0000000..e269fe3
    --- /dev/null
    +++ b/transaction-service-app/target/site/jacoco/jacoco-resources/sort.js
    @@ -0,0 +1,148 @@
    +/*******************************************************************************
    + * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
    + * This program and the accompanying materials are made available under
    + * the terms of the Eclipse Public License 2.0 which is available at
    + * http://www.eclipse.org/legal/epl-2.0
    + *
    + * SPDX-License-Identifier: EPL-2.0
    + *
    + * Contributors:
    + *    Marc R. Hoffmann - initial API and implementation
    + *
    + *******************************************************************************/
    +
    +(function () {
    +
    +  /**
    +   * Sets the initial sorting derived from the hash.
    +   *
    +   * @param linkelementids
    +   *          list of element ids to search for links to add sort inidcator
    +   *          hash links
    +   */
    +  function initialSort(linkelementids) {
    +    window.linkelementids = linkelementids;
    +    var hash = window.location.hash;
    +    if (hash) {
    +      var m = hash.match(/up-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, true);
    +        }
    +        return;
    +      }
    +      var m = hash.match(/dn-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, false);
    +        }
    +        return
    +      }
    +    }
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header dependening on the current sort state.
    +   */
    +  function toggleSort(header) {
    +    var sortup = header.className.indexOf('down ') == 0;
    +    sortColumn(header, sortup);
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header in the given direction.
    +   */
    +  function sortColumn(header, sortup) {
    +    var table = header.parentNode.parentNode.parentNode;
    +    var body = table.tBodies[0];
    +    var colidx = getNodePosition(header);
    +
    +    resetSortedStyle(table);
    +
    +    var rows = body.rows;
    +    var sortedrows = [];
    +    for (var i = 0; i < rows.length; i++) {
    +      r = rows[i];
    +      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    +    }
    +
    +    var hash;
    +
    +    if (sortup) {
    +      for (var i = sortedrows.length - 1; i >= 0; i--) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'up ' + header.className;
    +      hash = 'up-' + header.id;
    +    } else {
    +      for (var i = 0; i < sortedrows.length; i++) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'down ' + header.className;
    +      hash = 'dn-' + header.id;
    +    }
    +
    +    setHash(hash);
    +  }
    +
    +  /**
    +   * Adds the sort indicator as a hash to the document URL and all links.
    +   */
    +  function setHash(hash) {
    +    window.document.location.hash = hash;
    +    ids = window.linkelementids;
    +    for (var i = 0; i < ids.length; i++) {
    +        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    +    }
    +  }
    +
    +  /**
    +   * Extend all links within the given tag with the given hash.
    +   */
    +  function setHashOnAllLinks(tag, hash) {
    +    links = tag.getElementsByTagName("a");
    +    for (var i = 0; i < links.length; i++) {
    +        var a = links[i];
    +        var href = a.href;
    +        var hashpos = href.indexOf("#");
    +        if (hashpos != -1) {
    +            href = href.substring(0, hashpos);
    +        }
    +        a.href = href + "#" + hash;
    +    }
    +  }
    +
    +  /**
    +   * Calculates the position of a element within its parent.
    +   */
    +  function getNodePosition(element) {
    +    var pos = -1;
    +    while (element) {
    +      element = element.previousSibling;
    +      pos++;
    +    }
    +    return pos;
    +  }
    +
    +  /**
    +   * Remove the sorting indicator style from all headers.
    +   */
    +  function resetSortedStyle(table) {
    +    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    +      if (c.className) {
    +        if (c.className.indexOf('down ') == 0) {
    +          c.className = c.className.slice(5);
    +        }
    +        if (c.className.indexOf('up ') == 0) {
    +          c.className = c.className.slice(3);
    +        }
    +      }
    +    }
    +  }
    +
    +  window['initialSort'] = initialSort;
    +  window['toggleSort'] = toggleSort;
    +
    +})();
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/source.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/source.gif
    new file mode 100644
    index 0000000..b226e41
    Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/source.gif differ
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-resources/up.gif b/transaction-service-app/target/site/jacoco/jacoco-resources/up.gif
    new file mode 100644
    index 0000000..58ed216
    Binary files /dev/null and b/transaction-service-app/target/site/jacoco/jacoco-resources/up.gif differ
    diff --git a/transaction-service-app/target/site/jacoco/jacoco-sessions.html b/transaction-service-app/target/site/jacoco/jacoco-sessions.html
    new file mode 100644
    index 0000000..50cd741
    --- /dev/null
    +++ b/transaction-service-app/target/site/jacoco/jacoco-sessions.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="es"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">transaction-service-app</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">LAPTOP-2UFR11IA-efd8748</span></td><td>8 set. 2024 22:07:58</td><td>8 set. 2024 22:08:02</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">ch.qos.logback.classic.BasicConfigurator</span></td><td><code>0047a66eeae0d6b2</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.Level</span></td><td><code>e2155b45608f35d7</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.Logger</span></td><td><code>f35d4d4ad6b0173a</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.LoggerContext</span></td><td><code>d057ce3cea631d6b</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.layout.TTLLLayout</span></td><td><code>17db39eb61acaa64</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.pattern.ClassicConverter</span></td><td><code>78403f02659989af</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.pattern.ThrowableHandlingConverter</span></td><td><code>266cc4ca75fcd39d</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.pattern.ThrowableProxyConverter</span></td><td><code>46dc88ad0c97e462</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.selector.DefaultContextSelector</span></td><td><code>fd861e3242ccff2f</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.spi.EventArgUtil</span></td><td><code>88f3990bf293da69</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.spi.LoggerContextVO</span></td><td><code>ecac106025bca4a3</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.spi.LoggingEvent</span></td><td><code>75c5fe4974050a6f</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.spi.TurboFilterList</span></td><td><code>aa3cf39d0c0c651e</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.util.ContextInitializer</span></td><td><code>f560906e9553d69f</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.util.ContextSelectorStaticBinder</span></td><td><code>271bbf6fa66123b1</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.util.EnvUtil</span></td><td><code>39b5543082458460</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.util.LogbackMDCAdapter</span></td><td><code>a05682a253fd41d4</code></td></tr><tr><td><span class="el_class">ch.qos.logback.classic.util.LoggerNameUtil</span></td><td><code>b8d88c97a0cadcfa</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.BasicStatusManager</span></td><td><code>f42ab87c1f66e222</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.ConsoleAppender</span></td><td><code>d101474cda5e45c9</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.ContextBase</span></td><td><code>707ceedbd09855e6</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.CoreConstants</span></td><td><code>09363a83cd5b4101</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.LayoutBase</span></td><td><code>e6bfd3b1edc3ab01</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.OutputStreamAppender</span></td><td><code>79e07918442741f3</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.UnsynchronizedAppenderBase</span></td><td><code>0672be5753362c70</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.encoder.EncoderBase</span></td><td><code>f2507a7276f26c10</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.encoder.LayoutWrappingEncoder</span></td><td><code>6c80790d34287d6b</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.helpers.CyclicBuffer</span></td><td><code>422c7b9f7318f10a</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.joran.spi.ConsoleTarget</span></td><td><code>6e2cdd5051fbf329</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.joran.spi.ConsoleTarget.1</span></td><td><code>9612187e03729cd5</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.joran.spi.ConsoleTarget.2</span></td><td><code>ea3332451607183e</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.pattern.Converter</span></td><td><code>925f6cb417029041</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.pattern.DynamicConverter</span></td><td><code>66d903dd096314f6</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.pattern.FormattingConverter</span></td><td><code>c3110b5495da3c0a</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.spi.AppenderAttachableImpl</span></td><td><code>356e7661a1308dba</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.spi.ContextAwareBase</span></td><td><code>507768fbb8be644f</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.spi.FilterAttachableImpl</span></td><td><code>e0d2c4e50fd975d2</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.spi.FilterReply</span></td><td><code>8ffb0681c411c96a</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.spi.LogbackLock</span></td><td><code>b3b7af385a799776</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.status.InfoStatus</span></td><td><code>1d3c0987bb0ffe10</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.status.StatusBase</span></td><td><code>7c1cffd1a9986020</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.status.StatusUtil</span></td><td><code>b5fec2971e383d38</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.COWArrayList</span></td><td><code>fd4fbd3c0c90c052</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.CachingDateFormatter</span></td><td><code>371338e1c1d98e24</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.EnvUtil</span></td><td><code>adc66c330ddaa6c4</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.Loader</span></td><td><code>6a7f26fdd43cf12b</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.Loader.1</span></td><td><code>d6e48f075e51e44b</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.OptionHelper</span></td><td><code>ed7183d6bad9d2a9</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.StatusListenerConfigHelper</span></td><td><code>b3e50ff76e275069</code></td></tr><tr><td><span class="el_class">ch.qos.logback.core.util.StatusPrinter</span></td><td><code>04fef78263405164</code></td></tr><tr><td><a href="com.yape.app.transaction.controller/TransactionController.html" class="el_class">com.yape.app.transaction.controller.TransactionController</a></td><td><code>9d7877b223244a81</code></td></tr><tr><td><span class="el_class">com.yape.app.transaction.controller.TransactionControllerTest</span></td><td><code>d849d6b0a648e353</code></td></tr><tr><td><a href="com.yape.app.transaction.model.entity/Transaction.html" class="el_class">com.yape.app.transaction.model.entity.Transaction</a></td><td><code>a4e3680260fe63b6</code></td></tr><tr><td><a href="com.yape.app.transaction.model.request/TransactionRequest.html" class="el_class">com.yape.app.transaction.model.request.TransactionRequest</a></td><td><code>310fc009346609c3</code></td></tr><tr><td><span class="el_class">com.yape.app.transaction.service.TransactionService.MockitoMock.Z4niyvCf</span></td><td><code>4b2ffbe7dc3dd4cd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.ByteBuddy</span></td><td><code>33fbc0829b8e2652</code></td></tr><tr><td><span class="el_class">net.bytebuddy.ClassFileVersion</span></td><td><code>907fca1b89111e0a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.ClassFileVersion.VersionLocator.Resolved</span></td><td><code>c8b4f3ffa3a708cf</code></td></tr><tr><td><span class="el_class">net.bytebuddy.ClassFileVersion.VersionLocator.Resolver</span></td><td><code>575662f2862fb481</code></td></tr><tr><td><span class="el_class">net.bytebuddy.NamingStrategy.AbstractBase</span></td><td><code>77e9d686c976f6e6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.NamingStrategy.Suffixing</span></td><td><code>65bfa03c85847dc9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.NamingStrategy.Suffixing.BaseNameResolver.ForUnnamedType</span></td><td><code>1fb9c5c929a4a173</code></td></tr><tr><td><span class="el_class">net.bytebuddy.NamingStrategy.SuffixingRandom</span></td><td><code>cdbdedcf0cea0a02</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache</span></td><td><code>d02df3631a17fa08</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.LookupKey</span></td><td><code>b75da15a4577d948</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.SimpleKey</span></td><td><code>99731a44c3f39c30</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.Sort</span></td><td><code>3f135d4f310abf3c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.Sort.1</span></td><td><code>3be4336e35a8cbfd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.Sort.2</span></td><td><code>5a2bb9e71930a24a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.Sort.3</span></td><td><code>5792db85826ac4ba</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.StorageKey</span></td><td><code>da984e48de27d4a8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.TypeCache.WithInlineExpunction</span></td><td><code>5c74d69cd94d649e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.asm.AsmVisitorWrapper.NoOp</span></td><td><code>a613c160b15bbc65</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.ByteCodeElement.Token.TokenList</span></td><td><code>1070489264457774</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.ModifierReviewable.AbstractBase</span></td><td><code>0b625f401d945e23</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.NamedElement.WithDescriptor</span></td><td><code>69f25e85d31086f5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.TypeVariableSource.AbstractBase</span></td><td><code>b8003891860323ce</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationDescription</span></td><td><code>7e080fcc4ab41eb1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationDescription.AbstractBase</span></td><td><code>55a8b2f7b58a15aa</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationDescription.ForLoadedAnnotation</span></td><td><code>a2b247526c4d26ca</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationList.AbstractBase</span></td><td><code>c3dca45e359b717d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationList.Empty</span></td><td><code>10e1e01ec4afb6b0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationList.Explicit</span></td><td><code>b96636e855735fc3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationList.ForLoadedAnnotations</span></td><td><code>a6be8b00fa72ab7a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue</span></td><td><code>e46e60f3e4357d8a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.AbstractBase</span></td><td><code>6b46c288929d794a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant</span></td><td><code>650f7b88da7502df</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType</span></td><td><code>8683233734d98d81</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.1</span></td><td><code>ecf694f5c718a013</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.2</span></td><td><code>113fe247f14fdcdd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.3</span></td><td><code>ad40ce4c8d647d57</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.4</span></td><td><code>649136274570c878</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.5</span></td><td><code>25519a3723562b18</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.6</span></td><td><code>d0a4ee1eb78e8925</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.7</span></td><td><code>5cc6d38c7688ce9e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.8</span></td><td><code>542fa217a5fe4c51</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForConstant.PropertyDelegate.ForNonArrayType.9</span></td><td><code>9adc51229ebb26c9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForEnumerationDescription</span></td><td><code>451401174e8ca82f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForEnumerationDescription.Loaded</span></td><td><code>fda0610025cc12ff</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.ForTypeDescription</span></td><td><code>256f9475d7baab5e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.annotation.AnnotationValue.Loaded.AbstractBase</span></td><td><code>1a834bbf25c86ab4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.enumeration.EnumerationDescription.AbstractBase</span></td><td><code>36efae2fe3237ba9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.enumeration.EnumerationDescription.ForLoadedEnumeration</span></td><td><code>5b47cbeca30adac0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldDescription</span></td><td><code>68bfcf27b64f643e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldDescription.AbstractBase</span></td><td><code>8e18b7d4e1ceddcb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldDescription.InDefinedShape.AbstractBase</span></td><td><code>e1174a0c69da5a57</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldDescription.Latent</span></td><td><code>f267c31e54d89fa1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldDescription.SignatureToken</span></td><td><code>3fabeebea84ce146</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldDescription.Token</span></td><td><code>3f20efc75bd15e42</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldList.AbstractBase</span></td><td><code>78739d279005d8a4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldList.Explicit</span></td><td><code>323b76a02a64f9a7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.field.FieldList.ForTokens</span></td><td><code>ea98dba6ef4eb758</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription</span></td><td><code>cb9472a3dd295bbd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.AbstractBase</span></td><td><code>909086af904cf59b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.ForLoadedConstructor</span></td><td><code>e3c79dd807083c08</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.ForLoadedMethod</span></td><td><code>d9fe344c56539dc6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.InDefinedShape.AbstractBase</span></td><td><code>673ca3d2d56a4b0a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.InDefinedShape.AbstractBase.ForLoadedExecutable</span></td><td><code>db01999a48adc399</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.Latent</span></td><td><code>20e100c8a3802774</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.Latent.TypeInitializer</span></td><td><code>87bee94b36e1d209</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.SignatureToken</span></td><td><code>5888f2557f6a88e0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.Token</span></td><td><code>b268931f291edf88</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.TypeSubstituting</span></td><td><code>8dc21d2e259d2c0f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodDescription.TypeToken</span></td><td><code>f7f14b8ac76ebd98</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodList.AbstractBase</span></td><td><code>b054427f9b6a48f1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodList.Explicit</span></td><td><code>b03ab4c21a93dfd0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodList.ForLoadedMethods</span></td><td><code>38bd1bf17eb05676</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodList.ForTokens</span></td><td><code>40aa960dc7616ac5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.MethodList.TypeSubstituting</span></td><td><code>f1f510557a04392e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.AbstractBase</span></td><td><code>173e1a83772e6071</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.ForLoadedParameter</span></td><td><code>8dd9bfdcb695c00c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.ForLoadedParameter.OfMethod</span></td><td><code>811597af8855d53c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.InDefinedShape.AbstractBase</span></td><td><code>717f5d8d90c005f1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.Latent</span></td><td><code>1aa2e08f2ad0d5c2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.Token</span></td><td><code>36549650fa40d54b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.Token.TypeList</span></td><td><code>1890975119bdb094</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterDescription.TypeSubstituting</span></td><td><code>6cc95e3ea064743d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.AbstractBase</span></td><td><code>6fe6f7a3a2c191ea</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.Empty</span></td><td><code>8f4a45d2f54ed28b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.Explicit.ForTypes</span></td><td><code>75d84e0b4fcd99a9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.ForLoadedExecutable</span></td><td><code>1456c072c3be7105</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.ForLoadedExecutable.OfConstructor</span></td><td><code>6d7eaa8911075319</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.ForLoadedExecutable.OfMethod</span></td><td><code>f0835708e2d15fb4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.ForTokens</span></td><td><code>b77d0ee711552f0c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.method.ParameterList.TypeSubstituting</span></td><td><code>293f1f350b97c439</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.FieldManifestation</span></td><td><code>61ed9ad5f460d425</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.ModifierContributor.Resolver</span></td><td><code>4c37457cc5fe415c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.Ownership</span></td><td><code>03978521bbedeaac</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.SynchronizationState</span></td><td><code>1ee1e76d573ad75b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.SyntheticState</span></td><td><code>0ea0b3d14a159257</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.TypeManifestation</span></td><td><code>823497b74af56cf0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.Visibility</span></td><td><code>eddec8671a9488f2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.modifier.Visibility.1</span></td><td><code>d7e383ada6123e01</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.PackageDescription.AbstractBase</span></td><td><code>fbc5f3918eb9463b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.PackageDescription.ForLoadedPackage</span></td><td><code>647cf445f49b7cf5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.PackageDescription.Simple</span></td><td><code>0cb49b8e5cdceb1d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.RecordComponentList.AbstractBase</span></td><td><code>fa2d664156de0c87</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.RecordComponentList.ForTokens</span></td><td><code>b72447d1fcbe18bd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDefinition.Sort</span></td><td><code>e252ac8a021f4082</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDefinition.SuperClassIterator</span></td><td><code>dcc41092c6176f54</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription</span></td><td><code>556ed0842dcd3465</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.AbstractBase</span></td><td><code>9b7edee1f6952787</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.AbstractBase.OfSimpleType</span></td><td><code>483d56f844c30342</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.ArrayProjection</span></td><td><code>52be511c8867ffda</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.ForLoadedType</span></td><td><code>5b55f6567ca336e3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic</span></td><td><code>2060d4dc45d3c2e8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AbstractBase</span></td><td><code>c502b06bfc002685</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.Delegator</span></td><td><code>afb40a0ca3dd1ad2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.Delegator.Chained</span></td><td><code>7347a4e0bb7fe47f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.Delegator.ForLoadedExecutableExceptionType</span></td><td><code>ee047d5fa8b19816</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.Delegator.ForLoadedExecutableParameterType</span></td><td><code>4cc665588ba8a3ed</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.Delegator.ForLoadedMethodReturnType</span></td><td><code>e70ca34464d59e2c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.Delegator.Simple</span></td><td><code>276dc01c19be899a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.ForComponentType</span></td><td><code>e22944259a507fe3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.ForTypeArgument</span></td><td><code>0328fd48e3f88e32</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.AnnotationReader.NoOp</span></td><td><code>37783f2093ae79d5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.LazyProjection</span></td><td><code>274d99416a5cb623</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.LazyProjection.ForLoadedReturnType</span></td><td><code>ea24c72c4837d7b0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.LazyProjection.ForLoadedSuperClass</span></td><td><code>ade5b5634025a265</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.LazyProjection.OfMethodParameter</span></td><td><code>fbd54a23f55c9c38</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.LazyProjection.WithEagerNavigation</span></td><td><code>2510547f5c9a4d8d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.LazyProjection.WithEagerNavigation.OfAnnotatedElement</span></td><td><code>b66cbbb36bcf8ce7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.LazyProjection.WithResolvedErasure</span></td><td><code>b505bf2834db53b7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfGenericArray</span></td><td><code>94f835db0700ba74</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfGenericArray.Latent</span></td><td><code>ef516308c5a95163</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfNonGenericType</span></td><td><code>3248523ac72afe2c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfNonGenericType.ForErasure</span></td><td><code>6d50ab33d378184b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfNonGenericType.ForLoadedType</span></td><td><code>3b3467723d9731b9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfParameterizedType</span></td><td><code>debb53902f99b163</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfParameterizedType.ForGenerifiedErasure</span></td><td><code>044f915ef79d4d6a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfParameterizedType.ForLoadedType</span></td><td><code>665d5913ca2d9fd5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfParameterizedType.ForLoadedType.ParameterArgumentTypeList</span></td><td><code>c8d5c46994726ebc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.OfParameterizedType.Latent</span></td><td><code>ec499817450efd9e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.ForRawType</span></td><td><code>8ddec94f07bea745</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.ForSignatureVisitor</span></td><td><code>d064b1023fc6fbdf</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.ForSignatureVisitor.OfTypeArgument</span></td><td><code>1dcc8531f3fb55d7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Reducing</span></td><td><code>2eaeaf69297ee96e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Reifying</span></td><td><code>17c066309993e094</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Reifying.1</span></td><td><code>e65ef85aec0cd842</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Reifying.2</span></td><td><code>964bced66b2c1d7d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Substitutor</span></td><td><code>663ccb73adcb0dab</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Substitutor.ForAttachment</span></td><td><code>42044f5ed173c5fe</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Substitutor.ForDetachment</span></td><td><code>12ecb8e8f3b195d9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeDescription.Generic.Visitor.Substitutor.WithoutTypeSubstitution</span></td><td><code>b75931f5770a7572</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList</span></td><td><code>da60a7cfb717d0a8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.AbstractBase</span></td><td><code>4700315364477234</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Empty</span></td><td><code>59d00ad7b53c811a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Explicit</span></td><td><code>81495dfc3a359dfe</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.ForLoadedTypes</span></td><td><code>4356a7471aec6f20</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.AbstractBase</span></td><td><code>5376e1d2298a6512</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.Empty</span></td><td><code>df9431d33e66dbb4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.Explicit</span></td><td><code>1ab8c93e54ee2ac6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.ForDetachedTypes</span></td><td><code>1b6544725fdb45a6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.ForDetachedTypes.OfTypeVariables</span></td><td><code>05b85732c40f12b7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.ForDetachedTypes.WithResolvedErasure</span></td><td><code>3ae7efc80de7c3db</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.ForLoadedTypes</span></td><td><code>c603bfa8790b860c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.ForLoadedTypes.OfTypeVariables</span></td><td><code>d713fc161a8b3c83</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.OfConstructorExceptionTypes</span></td><td><code>41a985dd07ed867c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.OfLoadedInterfaceTypes</span></td><td><code>99d4f3faf0ed1337</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.OfMethodExceptionTypes</span></td><td><code>74966b175ac75ab9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.description.type.TypeList.Generic.OfMethodExceptionTypes.TypeProjection</span></td><td><code>2d651d381fd3d0a8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase</span></td><td><code>54fa44dc440448da</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter</span></td><td><code>5f4faab3b408ec94</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter.FieldDefinitionAdapter</span></td><td><code>fd8d7a11be3c9ede</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter.MethodDefinitionAdapter</span></td><td><code>e75374fa15e452ff</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter.MethodDefinitionAdapter.AnnotationAdapter</span></td><td><code>baf66768a8ba7010</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter.MethodDefinitionAdapter.SimpleParameterAnnotationAdapter</span></td><td><code>24c4f03b22480ac9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter.MethodMatchAdapter</span></td><td><code>5914cb1a77b4c084</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter.MethodMatchAdapter.AnnotationAdapter</span></td><td><code>8becc0d3a2f579f7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Adapter.OptionalMethodMatchAdapter</span></td><td><code>1e5cba284e697ff2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.Delegator</span></td><td><code>cd65d88864fb9551</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.AbstractBase.UsingTypeWriter</span></td><td><code>2c521e681717b547</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.FieldDefinition.Optional.AbstractBase</span></td><td><code>ae345146b4ff4937</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.FieldDefinition.Optional.Valuable.AbstractBase</span></td><td><code>bbf864ab6ae58db5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.FieldDefinition.Optional.Valuable.AbstractBase.Adapter</span></td><td><code>c094da12c027af78</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.AbstractBase</span></td><td><code>9c472892ce0a50bb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.AbstractBase.Adapter</span></td><td><code>d3915da6e1e1de4c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ExceptionDefinition.AbstractBase</span></td><td><code>5d66e82b417f9b46</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ImplementationDefinition.AbstractBase</span></td><td><code>e0513b10037138a8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ParameterDefinition.AbstractBase</span></td><td><code>ce292c22036f8154</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ParameterDefinition.Initial.AbstractBase</span></td><td><code>75703fad010e1cc6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ParameterDefinition.Simple.AbstractBase</span></td><td><code>0a7a2334f6a9b15d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ParameterDefinition.Simple.Annotatable.AbstractBase</span></td><td><code>c67240824c7cd31a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ParameterDefinition.Simple.Annotatable.AbstractBase.Adapter</span></td><td><code>f1f199a3d7662651</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.ReceiverTypeDefinition.AbstractBase</span></td><td><code>a20cd2a086e77441</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Builder.MethodDefinition.TypeVariableDefinition.AbstractBase</span></td><td><code>b010816c4e7b6513</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Default</span></td><td><code>ca6748217ece3884</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Default.Loaded</span></td><td><code>e63ea06339154cad</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.DynamicType.Default.Unloaded</span></td><td><code>876286f205b44199</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.TargetType</span></td><td><code>26c139b5f2f58862</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.Compound</span></td><td><code>a5a52522b43091ef</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.ForMethod</span></td><td><code>22ab387d59f6c970</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.ForMethod.MethodModifierTransformer</span></td><td><code>829c18ff395159ba</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.ForMethod.TransformedMethod</span></td><td><code>083bfd5734c4504d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.ForMethod.TransformedMethod.AttachmentVisitor</span></td><td><code>43014c50e1310fbf</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.ForMethod.TransformedMethod.TransformedParameter</span></td><td><code>84642c4a6f0d1bdc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.ForMethod.TransformedMethod.TransformedParameterList</span></td><td><code>54d561afbee57f99</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.Transformer.NoOp</span></td><td><code>49cd89a2b3b975a3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.TypeResolutionStrategy.Passive</span></td><td><code>d5784ee7fb36ce53</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.VisibilityBridgeStrategy.Default</span></td><td><code>ae8d9f7fd85c6aad</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.VisibilityBridgeStrategy.Default.1</span></td><td><code>63c0d42260c7599e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.VisibilityBridgeStrategy.Default.2</span></td><td><code>a8389e9d32c4ecd7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.VisibilityBridgeStrategy.Default.3</span></td><td><code>30f7afc5a8be245c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ByteArrayClassLoader.PersistenceHandler</span></td><td><code>811732d1db761cc5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ByteArrayClassLoader.PersistenceHandler.1</span></td><td><code>c9ee72578a4d55a4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ByteArrayClassLoader.PersistenceHandler.2</span></td><td><code>f7eb2a49ccc0c5d4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassInjector.AbstractBase</span></td><td><code>331215a38873f162</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection</span></td><td><code>9b4c6d016e86d89d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher.CreationAction</span></td><td><code>e95efd9bc7c2fbec</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassInjector.UsingReflection.Dispatcher.UsingUnsafeInjection</span></td><td><code>ee369f8a9915cac0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassInjector.UsingUnsafe</span></td><td><code>0fe8982cff47681a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassInjector.UsingUnsafe.Dispatcher.CreationAction</span></td><td><code>cee35100457096e8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassInjector.UsingUnsafe.Dispatcher.Enabled</span></td><td><code>fe60291c22873865</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassLoadingStrategy</span></td><td><code>17fb081ccc92f99c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassLoadingStrategy.Default</span></td><td><code>7390ec8634515594</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassLoadingStrategy.Default.InjectionDispatcher</span></td><td><code>759cb7a298fc98b7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassLoadingStrategy.Default.WrappingDispatcher</span></td><td><code>88c49bdd78533ba6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.ClassLoadingStrategy.ForUnsafeInjection</span></td><td><code>fae0995eb7740944</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.MultipleParentClassLoader.Builder</span></td><td><code>c6fb9f2d63f216f9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.PackageDefinitionStrategy.Definition.Undefined</span></td><td><code>1b8dafe51f80088c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.PackageDefinitionStrategy.NoOp</span></td><td><code>31480ec85144aa31</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.loading.PackageDefinitionStrategy.Trivial</span></td><td><code>d0ed587787d4d89f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.ClassWriterStrategy.Default</span></td><td><code>f0774d4bbe85a809</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.ClassWriterStrategy.Default.1</span></td><td><code>09a3c2cfe88a5ae4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.ClassWriterStrategy.Default.2</span></td><td><code>76afb59bd5abdd5f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.ClassWriterStrategy.FrameComputingClassWriter</span></td><td><code>6dcf362306ddc5d0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldLocator.AbstractBase</span></td><td><code>db8c5004661a0bd8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldLocator.ForClassHierarchy</span></td><td><code>0e8431af1152b965</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldLocator.ForClassHierarchy.Factory</span></td><td><code>d97235dbbc3871e9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldLocator.Resolution.Simple</span></td><td><code>7e3dca01a01498d1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldRegistry.Default</span></td><td><code>cc5265630d0906f2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldRegistry.Default.Compiled</span></td><td><code>00933225bc77b175</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldRegistry.Default.Compiled.Entry</span></td><td><code>0ec1361a69a955fd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.FieldRegistry.Default.Entry</span></td><td><code>a7413622fd851aa9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.InstrumentedType.Default</span></td><td><code>83177f7ca587cf30</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.InstrumentedType.Factory.Default</span></td><td><code>cd900ae01efd903f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.InstrumentedType.Factory.Default.1</span></td><td><code>a7ce85bb2f37ff77</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.InstrumentedType.Factory.Default.2</span></td><td><code>ad157a47dace4f55</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler</span></td><td><code>fc88be698cc4a50f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.AbstractBase</span></td><td><code>ad55505e167100d9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default</span></td><td><code>a37bac0e0eceb0c9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Harmonizer.ForJavaMethod</span></td><td><code>4b92bfc82ab49b25</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Harmonizer.ForJavaMethod.Token</span></td><td><code>e2da236960e0a189</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key</span></td><td><code>421619c0f44567f3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key.Detached</span></td><td><code>82540bbf94c15922</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key.Harmonized</span></td><td><code>5d9ad1d55d82a355</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key.Store</span></td><td><code>f948e4de58324a0f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key.Store.Entry.Initial</span></td><td><code>1fc852958287c36a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key.Store.Entry.Resolved</span></td><td><code>6672a261c5f5dd2e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key.Store.Entry.Resolved.Node</span></td><td><code>0f0b18948cce4159</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Key.Store.Graph</span></td><td><code>f50e2614e64a132c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Compiler.Default.Merger.Directional</span></td><td><code>0ba0f74ab7d66be7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Linked.Delegation</span></td><td><code>7341085250d5f338</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Node.Simple</span></td><td><code>f9767f80e7124acc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Node.Sort</span></td><td><code>8e20af4bf9dad8a0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Node.Unresolved</span></td><td><code>c42332646fb3e771</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.NodeList</span></td><td><code>3f435ec381113f00</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodGraph.Simple</span></td><td><code>9a1f1f9d25ac44be</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Default</span></td><td><code>35ae92274e85ac88</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Default.Compiled</span></td><td><code>dd840dc4ea29fc06</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Default.Compiled.Entry</span></td><td><code>827864e42dc177c2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Default.Entry</span></td><td><code>66b9b2c39c4a08ee</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Default.Prepared</span></td><td><code>3c270a20a21353d7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Default.Prepared.Entry</span></td><td><code>e96586202cb119f0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Handler.ForImplementation</span></td><td><code>ea77701fcbc47e2c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.MethodRegistry.Handler.ForImplementation.Compiled</span></td><td><code>7b000ab44a4af2cc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.RecordComponentRegistry.Default</span></td><td><code>eec49897d441dcbe</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.RecordComponentRegistry.Default.Compiled</span></td><td><code>1d64a300c478cbd4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeInitializer.Drain.Default</span></td><td><code>a3bc2736d5ad95f5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeInitializer.None</span></td><td><code>d062b02ed3f4d342</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeInitializer.Simple</span></td><td><code>3429322f4d42e2d4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeValidation</span></td><td><code>b9ab70dc0d5e3c60</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.Default</span></td><td><code>c13cf997e386f3cc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.Default.ClassDumpAction.Dispatcher.Disabled</span></td><td><code>d4f0d2e7fbcab045</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.Default.ForCreation</span></td><td><code>c5a3093c0a9bebbf</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.Default.UnresolvedType</span></td><td><code>3f5380fd3549f07e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.Default.ValidatingClassVisitor</span></td><td><code>0449b85d73902e5f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.FieldPool.Record.ForExplicitField</span></td><td><code>a03e0587988aae1f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.MethodPool.Record.AccessBridgeWrapper</span></td><td><code>9527fd76169900c9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.MethodPool.Record.ForDefinedMethod</span></td><td><code>e3fde8a86929682d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.MethodPool.Record.ForDefinedMethod.WithBody</span></td><td><code>963047d43410ba83</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.MethodPool.Record.ForNonImplementedMethod</span></td><td><code>28a00d78fb553a8c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.TypeWriter.MethodPool.Record.Sort</span></td><td><code>928d954d831a88bc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy.Default</span></td><td><code>0d114e09a2faac83</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy.Default.1</span></td><td><code>16fc5c99e02d7f9f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy.Default.2</span></td><td><code>dd199479878d5739</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy.Default.3</span></td><td><code>792ea5ce51475037</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy.Default.4</span></td><td><code>98fceb895a262b45</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.ConstructorStrategy.Default.5</span></td><td><code>f0898605f9020c16</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder</span></td><td><code>16995528b814abfb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.SubclassDynamicTypeBuilder.InstrumentableMatcher</span></td><td><code>c2850d79fc87446b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget</span></td><td><code>17f509a8b52b39f3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget.Factory</span></td><td><code>f6c0a700d93e9d10</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget.OriginTypeResolver</span></td><td><code>282c73cc811d5b71</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget.OriginTypeResolver.1</span></td><td><code>2eb773d398b87160</code></td></tr><tr><td><span class="el_class">net.bytebuddy.dynamic.scaffold.subclass.SubclassImplementationTarget.OriginTypeResolver.2</span></td><td><code>903a99da03746eb8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.FieldAccessor</span></td><td><code>0174e94238af9d2f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.FieldAccessor.FieldLocation.Relative</span></td><td><code>e3f1a92ea73df3a5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.FieldAccessor.FieldLocation.Relative.Prepared</span></td><td><code>c55029896988613b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.FieldAccessor.FieldNameExtractor.ForBeanProperty</span></td><td><code>751b847060c7cd95</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.FieldAccessor.ForImplicitProperty</span></td><td><code>623c50de803e8dff</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.FieldAccessor.ForImplicitProperty.Appender</span></td><td><code>db2e4aeceee38d5f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default</span></td><td><code>d63040bc175192ee</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default.AbstractPropertyAccessorMethod</span></td><td><code>4a69ecc69149f327</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default.AccessorMethod</span></td><td><code>147ddbd116dc5018</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default.AccessorMethodDelegation</span></td><td><code>4ecb89b1b8e43487</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default.CacheValueField</span></td><td><code>091aa1cc83b89353</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default.DelegationRecord</span></td><td><code>7772d9b1460b4444</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default.Factory</span></td><td><code>329a9c16f45fea72</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.Default.FieldCacheEntry</span></td><td><code>93ea3c3584aedbb3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.ExtractableView.AbstractBase</span></td><td><code>a2bce3211300b141</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.FrameGeneration</span></td><td><code>85cfd05a0313231d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.FrameGeneration.1</span></td><td><code>1a7229cc1aa2fe64</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.FrameGeneration.2</span></td><td><code>4c4edc4b4128953d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Context.FrameGeneration.3</span></td><td><code>0086e69e9329bfd5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.SpecialMethodInvocation.AbstractBase</span></td><td><code>99ac1d4463895d3f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.SpecialMethodInvocation.Illegal</span></td><td><code>fe05bdf1b81d2463</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.SpecialMethodInvocation.Simple</span></td><td><code>7916d516ba029853</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Target.AbstractBase</span></td><td><code>891cf9f2a321fafd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Target.AbstractBase.DefaultMethodInvocation</span></td><td><code>29b19b204be139f3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Target.AbstractBase.DefaultMethodInvocation.1</span></td><td><code>3ba9a760aa49a971</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.Implementation.Target.AbstractBase.DefaultMethodInvocation.2</span></td><td><code>8279f38afb254f72</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.LoadedTypeInitializer.NoOp</span></td><td><code>1af8ca0d9b7adbe8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodAccessorFactory.AccessType</span></td><td><code>a8b1b417256441f1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall</span></td><td><code>9251b44dfd29e831</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.Appender</span></td><td><code>b108fada5fdaf224</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.ArgumentLoader.ForMethodParameter</span></td><td><code>27c6e8587355ecbd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.ArgumentLoader.ForMethodParameter.Factory</span></td><td><code>b4db52149f474bc5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.MethodInvoker.ForContextualInvocation.Factory</span></td><td><code>655146ce4ac9eab5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.MethodInvoker.ForVirtualInvocation.WithImplicitType</span></td><td><code>b28621164470f5a3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.MethodLocator.ForExplicitMethod</span></td><td><code>99f3c681fe17468e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.TargetHandler.ForMethodParameter</span></td><td><code>7498b3460d90e103</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.TargetHandler.ForMethodParameter.Resolved</span></td><td><code>04cc8ab3c2c8bcbf</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.TargetHandler.ForSelfOrStaticInvocation.Factory</span></td><td><code>4240030260d49936</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.TerminationHandler.Simple</span></td><td><code>8661202aa19373c5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.TerminationHandler.Simple.1</span></td><td><code>7e75be1c6b4d6117</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.TerminationHandler.Simple.2</span></td><td><code>f9781532f50651fb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.TerminationHandler.Simple.3</span></td><td><code>dfae9890b6004933</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodCall.WithoutSpecifiedTarget</span></td><td><code>d6f1bb290a2a92f5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodDelegation</span></td><td><code>ec9af1244cdb0f2c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodDelegation.Appender</span></td><td><code>578e9e4be578040b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodDelegation.ImplementationDelegate.Compiled.ForStaticCall</span></td><td><code>78b3eb01c3540dcc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodDelegation.ImplementationDelegate.ForStaticMethod</span></td><td><code>f19452fcc061d904</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.MethodDelegation.WithCustomProperties</span></td><td><code>c804a366d1128499</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.SuperMethodCall</span></td><td><code>48a9709638c71f00</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.SuperMethodCall.Appender</span></td><td><code>1278488d60ed8e86</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.SuperMethodCall.Appender.TerminationHandler</span></td><td><code>35d2e0ef6d7f630d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.SuperMethodCall.Appender.TerminationHandler.1</span></td><td><code>05664af3a3b6738b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.SuperMethodCall.Appender.TerminationHandler.2</span></td><td><code>be670f96c6d93831</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationAppender.Default</span></td><td><code>7787cf7f483d6685</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationAppender.ForTypeAnnotations</span></td><td><code>040d5aab72de4582</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationAppender.Target.OnField</span></td><td><code>52ad3ce83f52621f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationAppender.Target.OnMethod</span></td><td><code>b2534f024a4880dd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationAppender.Target.OnMethodParameter</span></td><td><code>c9f39d80b694c092</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationAppender.Target.OnType</span></td><td><code>db8f4f1dbbcf3c3e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationRetention</span></td><td><code>6dca59a58d56874f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationValueFilter.Default</span></td><td><code>190882f8828de18a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationValueFilter.Default.1</span></td><td><code>593737e47cc84848</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.AnnotationValueFilter.Default.2</span></td><td><code>a61861baa0bc96ee</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.FieldAttributeAppender.ForInstrumentedField</span></td><td><code>ca19f51ae14fb7b4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.MethodAttributeAppender.Compound</span></td><td><code>87d24d92007e506e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.MethodAttributeAppender.Factory.Compound</span></td><td><code>85113e9ca3ae38c3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.MethodAttributeAppender.ForInstrumentedMethod</span></td><td><code>4e40a53e08d4cbbb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.MethodAttributeAppender.ForInstrumentedMethod.1</span></td><td><code>a3b87b1a75d290fd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.MethodAttributeAppender.ForInstrumentedMethod.2</span></td><td><code>10e734a991eea3bf</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.MethodAttributeAppender.NoOp</span></td><td><code>aa6841038c96aed0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.attribute.TypeAttributeAppender.ForInstrumentedType</span></td><td><code>537a1dac83c99ae9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.AuxiliaryType</span></td><td><code>577555a7861b5701</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.AuxiliaryType.NamingStrategy.SuffixingRandom</span></td><td><code>9ff4d19573d987f3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.MethodCallProxy</span></td><td><code>e4ad67673bba91b3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.MethodCallProxy.AssignableSignatureCall</span></td><td><code>e32307e618f933aa</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.MethodCallProxy.ConstructorCall</span></td><td><code>0b6e2af51e015c06</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.MethodCallProxy.ConstructorCall.Appender</span></td><td><code>6a4a35552c21bf78</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.MethodCallProxy.MethodCall</span></td><td><code>d2f0f120376a3b4f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.MethodCallProxy.MethodCall.Appender</span></td><td><code>df4a3b2e219da333</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.auxiliary.MethodCallProxy.PrecomputedMethodGraph</span></td><td><code>d3435422341aae7c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.ArgumentTypeResolver</span></td><td><code>74973272be85ce17</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.ArgumentTypeResolver.ParameterIndexToken</span></td><td><code>a8052b758f0a0361</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.DeclaringTypeResolver</span></td><td><code>d1000b5d5bf7bd79</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.1</span></td><td><code>54de841f73ee4eae</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.AmbiguityResolver</span></td><td><code>7d40b5a2d5d69397</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.AmbiguityResolver.Compound</span></td><td><code>eab4a548d2693cd2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.AmbiguityResolver.Resolution</span></td><td><code>e8ca39d95b4ade42</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.BindingResolver.Default</span></td><td><code>ed3f9e212bdf4696</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.MethodBinding.Builder</span></td><td><code>ffaacecf2e1956bd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.MethodBinding.Builder.Build</span></td><td><code>fbe15ed2c0b7c26f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.MethodBinding.Illegal</span></td><td><code>ca301be97fe35cde</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.MethodInvoker.Simple</span></td><td><code>dafea2ba3b2f164b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.ParameterBinding.Anonymous</span></td><td><code>30b0f734840f8b2c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.ParameterBinding.Illegal</span></td><td><code>470dc52d77c3898e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.ParameterBinding.Unique</span></td><td><code>c60c100f523804e4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.Processor</span></td><td><code>1dd9238ba412581f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.TerminationHandler.Default</span></td><td><code>946265fda2ca27e8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.TerminationHandler.Default.1</span></td><td><code>db109132d7373fda</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodDelegationBinder.TerminationHandler.Default.2</span></td><td><code>cb3895b610bd15d5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.MethodNameEqualityResolver</span></td><td><code>65a8d1431b34fdcd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.ParameterLengthResolver</span></td><td><code>58a025cd0f10dff1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.AllArguments.Assignment</span></td><td><code>bfcd0244baa95f1b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.AllArguments.Binder</span></td><td><code>7ed5bf64ac194c84</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Argument.Binder</span></td><td><code>9d613cfc7a8f0cd6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Argument.BindingMechanic</span></td><td><code>ad9a5463673957e4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Argument.BindingMechanic.1</span></td><td><code>5750463a9b2658fe</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Argument.BindingMechanic.2</span></td><td><code>653fe2b1bb93cce4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.BindingPriority.Resolver</span></td><td><code>2fd170c18c979895</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Default.Binder</span></td><td><code>fdd8dd2baa86d3db</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.DefaultCall.Binder</span></td><td><code>d7e4b58cec267a0e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.DefaultMethod.Binder</span></td><td><code>03d209c7b50b3b07</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Empty.Binder</span></td><td><code>6af2e8e3cdad25b3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.FieldValue.Binder</span></td><td><code>ffe1f66fdf57240f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.FieldValue.Binder.Delegate</span></td><td><code>b16d4f0b5def41e9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.IgnoreForBinding.Verifier</span></td><td><code>f6eaa0a37f2ce769</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Origin.Binder</span></td><td><code>58bfe04015269f97</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.RuntimeType.Verifier</span></td><td><code>79ef98193cf36f83</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.StubValue.Binder</span></td><td><code>c5dcbbaafc956a20</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.Super.Binder</span></td><td><code>159db3adf8f80917</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.SuperCall.Binder</span></td><td><code>d504027b57aeebbe</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.SuperMethod.Binder</span></td><td><code>787b81ea7c3cf9d1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder</span></td><td><code>a9644f0a487b56f8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder.DelegationProcessor</span></td><td><code>08e777de45b651f6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder.DelegationProcessor.Handler.Bound</span></td><td><code>fe4b74c6469cb373</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder.DelegationProcessor.Handler.Unbound</span></td><td><code>53b08d554175038c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder.ParameterBinder</span></td><td><code>6f273cd5a9428c36</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder.ParameterBinder.ForFieldBinding</span></td><td><code>49c4acf91fc87123</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.TargetMethodAnnotationDrivenBinder.Record</span></td><td><code>f5597b43768b5a7b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bind.annotation.This.Binder</span></td><td><code>b3e837fb5b95fa04</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.ByteCodeAppender.Compound</span></td><td><code>0f6ce72d7ea48338</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.ByteCodeAppender.Simple</span></td><td><code>3d7cd79d87926f75</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.ByteCodeAppender.Size</span></td><td><code>897030ac0b46252c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.Duplication</span></td><td><code>87726ed8bb6e39de</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.Duplication.1</span></td><td><code>6cbf4aae44bb9c6a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.Duplication.2</span></td><td><code>204abf23cbf37c68</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.Duplication.3</span></td><td><code>0631976e078609bd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.Removal</span></td><td><code>6d539a300caa5092</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.Removal.1</span></td><td><code>ab763f3b743f79a5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.Removal.2</span></td><td><code>fd766afb93ac2a09</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.StackManipulation.AbstractBase</span></td><td><code>31ac4a0904ac3e09</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.StackManipulation.Compound</span></td><td><code>96939a22aac4c91b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.StackManipulation.Illegal</span></td><td><code>d75e2eb0d394f6c3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.StackManipulation.Size</span></td><td><code>e69b15cd3e8d4461</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.StackManipulation.Trivial</span></td><td><code>56f2787cdbce4d40</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.StackSize</span></td><td><code>80f94e8effa2f7bb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.TypeCreation</span></td><td><code>4865d2e454028bc1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.Assigner</span></td><td><code>7e67d52e9390b000</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.Assigner.Typing</span></td><td><code>b09adf7fa17d04b8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.TypeCasting</span></td><td><code>1a445bd188e2931d</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveTypeAwareAssigner</span></td><td><code>c888a19b998b7769</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveWideningDelegate</span></td><td><code>1008755d8fe45330</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.primitive.PrimitiveWideningDelegate.WideningStackManipulation</span></td><td><code>796408ff7247d988</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.primitive.VoidAwareAssigner</span></td><td><code>3df36760b29d387a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.reference.GenericTypeAwareAssigner</span></td><td><code>3623cb487284bb53</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.assign.reference.ReferenceTypeAwareAssigner</span></td><td><code>59b5f6f8641c87f2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.collection.ArrayFactory</span></td><td><code>f2dcfb1430649b3e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.collection.ArrayFactory.ArrayCreator</span></td><td><code>7ff584cc516e3f40</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.collection.ArrayFactory.ArrayCreator.ForReferenceType</span></td><td><code>2ffee25860dde2e1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.collection.ArrayFactory.ArrayStackManipulation</span></td><td><code>2420354f9fdfb502</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.ClassConstant</span></td><td><code>8c2c8e360f844ad5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.ClassConstant.ForReferenceType</span></td><td><code>a779a54b4d7fcd6c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.DefaultValue</span></td><td><code>56544d5987e5a6d8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.DoubleConstant</span></td><td><code>829c95b7b67e95cf</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.FloatConstant</span></td><td><code>bdee038754940fff</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.IntegerConstant</span></td><td><code>58a28f871a6a0499</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.LongConstant</span></td><td><code>113f925135fa3020</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.MethodConstant</span></td><td><code>55d1fac9a2312bd2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.MethodConstant.CachedMethod</span></td><td><code>927dce16203d5f6c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.MethodConstant.ForMethod</span></td><td><code>5c66dba4a8bfbcea</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.NullConstant</span></td><td><code>9cf4bfc5c52a2517</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.constant.TextConstant</span></td><td><code>76b9599de59f2aeb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.FieldAccess</span></td><td><code>e098860a4703e90a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.FieldAccess.AccessDispatcher</span></td><td><code>20c90535a547e3cd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.FieldAccess.AccessDispatcher.AbstractFieldInstruction</span></td><td><code>75724b7b6b2e4a66</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.FieldAccess.AccessDispatcher.FieldGetInstruction</span></td><td><code>adcac7724ac0272c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.FieldAccess.AccessDispatcher.FieldPutInstruction</span></td><td><code>aeaedb775e139b65</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.MethodInvocation</span></td><td><code>ccdb8e0f61d03f72</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.MethodInvocation.Invocation</span></td><td><code>7edd2eb29addcb20</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.MethodReturn</span></td><td><code>3cbfd6833fda70dd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.MethodVariableAccess</span></td><td><code>7ec211e72c6c3719</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.MethodVariableAccess.MethodLoading</span></td><td><code>0b690307be533e18</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.MethodVariableAccess.MethodLoading.TypeCastingHandler.NoOp</span></td><td><code>3f3d0d86b569e241</code></td></tr><tr><td><span class="el_class">net.bytebuddy.implementation.bytecode.member.MethodVariableAccess.OffsetLoading</span></td><td><code>4794627822a950ec</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.AnnotationWriter</span></td><td><code>0932d72e909ca807</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.Attribute</span></td><td><code>706e3dca943537f4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.ByteVector</span></td><td><code>202001c737179f70</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.ClassVisitor</span></td><td><code>98826fd4e883df65</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.ClassWriter</span></td><td><code>c9c9db052671c945</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.FieldVisitor</span></td><td><code>21cf79e64cb95598</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.FieldWriter</span></td><td><code>3c4ebfcb2bc7032e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.Handler</span></td><td><code>763c7a3b0dc4fc7e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.MethodVisitor</span></td><td><code>3a3fa5cb8e06f5c0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.MethodWriter</span></td><td><code>76fc9326535687d1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.Symbol</span></td><td><code>f44d88efeab63dac</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.SymbolTable</span></td><td><code>00001f478e852135</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.SymbolTable.Entry</span></td><td><code>904cbca1953e75e2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.Type</span></td><td><code>45a01df29df18510</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.TypeReference</span></td><td><code>7c2c246da0bafedc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.signature.SignatureVisitor</span></td><td><code>b9cc80f05fd1a1b5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.jar.asm.signature.SignatureWriter</span></td><td><code>4b49360620cb7f6c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.AnnotationTypeMatcher</span></td><td><code>4c083a293a95675e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.BooleanMatcher</span></td><td><code>fc276a6c128e2875</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.CollectionErasureMatcher</span></td><td><code>76b5d2cc623cc312</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.CollectionItemMatcher</span></td><td><code>640386844f0e29b8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.CollectionOneToOneMatcher</span></td><td><code>670278e525ff9bfc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.CollectionSizeMatcher</span></td><td><code>8f59b8be9ab4a58b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.DeclaringAnnotationMatcher</span></td><td><code>72a4630003105f69</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.DeclaringTypeMatcher</span></td><td><code>76e282c5482618bb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ElementMatcher.Junction.AbstractBase</span></td><td><code>d129e1a5bbea50cb</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ElementMatcher.Junction.Conjunction</span></td><td><code>6586c7d2abf8bf59</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ElementMatcher.Junction.Disjunction</span></td><td><code>78eb86ff19c5e913</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ElementMatcher.Junction.ForNonNullValues</span></td><td><code>40b97e222b442c20</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ElementMatchers</span></td><td><code>d173e8185d30d23b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.EqualityMatcher</span></td><td><code>7ddcccca3867f2c6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ErasureMatcher</span></td><td><code>327b39df894c794a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.FilterableList.AbstractBase</span></td><td><code>acc833b482b3e913</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.FilterableList.Empty</span></td><td><code>994e694dc878695f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.LatentMatcher.Disjunction</span></td><td><code>cf547e86976c153f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.LatentMatcher.ForFieldToken</span></td><td><code>08b4951ce99afdff</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.LatentMatcher.ForFieldToken.ResolvedMatcher</span></td><td><code>7a313b55df92d5ce</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.LatentMatcher.ForMethodToken</span></td><td><code>acf53d7e0ad9c66c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.LatentMatcher.ForMethodToken.ResolvedMatcher</span></td><td><code>a1b47b682cdd16e5</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.LatentMatcher.Resolved</span></td><td><code>838bf93f64347719</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodParameterTypeMatcher</span></td><td><code>d565dce3bed4679b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodParameterTypesMatcher</span></td><td><code>4f9a1c61c2ca1d30</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodParametersMatcher</span></td><td><code>754bf9d07553d1f9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodReturnTypeMatcher</span></td><td><code>1b6fa22a35a706bc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodSortMatcher</span></td><td><code>d9a4a7f8ba8d705a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodSortMatcher.Sort</span></td><td><code>df4da3ccf1c43fb2</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodSortMatcher.Sort.1</span></td><td><code>9f8edcf420246fae</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodSortMatcher.Sort.2</span></td><td><code>5b30e294f2304972</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodSortMatcher.Sort.3</span></td><td><code>9c8b9e468a9ba4ee</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodSortMatcher.Sort.4</span></td><td><code>4c3709005a13f932</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.MethodSortMatcher.Sort.5</span></td><td><code>93400b67a6230353</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ModifierMatcher</span></td><td><code>c0d2e66fbd31c083</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.ModifierMatcher.Mode</span></td><td><code>09bd88f8f539be92</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.NameMatcher</span></td><td><code>b901fc4b35799fa4</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.NegatingMatcher</span></td><td><code>a7d93978e9d78d7e</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.SignatureTokenMatcher</span></td><td><code>60c758b99c3d9148</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher</span></td><td><code>236df1d1d60ab580</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode</span></td><td><code>78a8ab1a5e998326</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.1</span></td><td><code>197cd818fecbf0dc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.2</span></td><td><code>130a12e752b093e0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.3</span></td><td><code>37e1825b2b41bae8</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.4</span></td><td><code>34a59e75ad57ee16</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.5</span></td><td><code>6b18de0e0195fcc7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.6</span></td><td><code>bdaf5299d13e3bfe</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.7</span></td><td><code>f608050eb76b29c9</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.8</span></td><td><code>7a1f43a330aa49e3</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.StringMatcher.Mode.9</span></td><td><code>d97cfe0669542624</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.SuperTypeMatcher</span></td><td><code>5f65e9ccb1649334</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.TypeSortMatcher</span></td><td><code>bea3cd319f7a9ab6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.matcher.VisibilityMatcher</span></td><td><code>6f0d2c70b6ce50e1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.pool.TypePool.AbstractBase</span></td><td><code>03ef41c73bcdac6f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.pool.TypePool.AbstractBase.Hierarchical</span></td><td><code>1ef4bf1634aa9314</code></td></tr><tr><td><span class="el_class">net.bytebuddy.pool.TypePool.CacheProvider.Simple</span></td><td><code>3b477cf62a71a399</code></td></tr><tr><td><span class="el_class">net.bytebuddy.pool.TypePool.ClassLoading</span></td><td><code>f60fbd5bc692f3c0</code></td></tr><tr><td><span class="el_class">net.bytebuddy.pool.TypePool.Empty</span></td><td><code>8c0a9ed2a729f1ac</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.CompoundList</span></td><td><code>b8b501baeee21c20</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.ConstructorComparator</span></td><td><code>c7333b6b982e8e09</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.GraalImageCode</span></td><td><code>99c2d8870a99ec8c</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.Invoker.Dispatcher</span></td><td><code>bb7f751c11c3b61b</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.JavaModule</span></td><td><code>5223602c7c397de6</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.MethodComparator</span></td><td><code>4e5549fe1a1bb16a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.RandomString</span></td><td><code>475c5a28b2a65671</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher</span></td><td><code>787d0fb443c33196</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.Dispatcher.ForDefaultValue</span></td><td><code>4ebad402feea5e1f</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.Dispatcher.ForDefaultValue.OfNonPrimitiveArray</span></td><td><code>8e244cbf0b1c2c9a</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.Dispatcher.ForInstanceCheck</span></td><td><code>348c5ed1a0ea72ea</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.Dispatcher.ForNonStaticMethod</span></td><td><code>bf4d2158c4101736</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.Dispatcher.ForStaticMethod</span></td><td><code>2cbd19f9947661fd</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.DynamicClassLoader</span></td><td><code>fa40b0b626be1aa7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.DynamicClassLoader.Resolver.CreationAction</span></td><td><code>8ca4ae6007eb9fd7</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.DynamicClassLoader.Resolver.ForModuleSystem</span></td><td><code>9a96cee67ed31732</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.InvokerCreationAction</span></td><td><code>8b81db7b9bb021a1</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.dispatcher.JavaDispatcher.ProxiedInvocationHandler</span></td><td><code>a4eb032d57e965fc</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.privilege.GetMethodAction</span></td><td><code>74124300a1be96ce</code></td></tr><tr><td><span class="el_class">net.bytebuddy.utility.privilege.GetSystemPropertyAction</span></td><td><code>3dcb9c5481b99d57</code></td></tr><tr><td><span class="el_class">org.apache.maven.plugin.surefire.log.api.NullConsoleLogger</span></td><td><code>80d79e52a7499259</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.AbstractPathConfiguration</span></td><td><code>8182fa1396653f01</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BaseProviderFactory</span></td><td><code>82593383b8ea92d6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BiProperty</span></td><td><code>4945e268841ae2cb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>5e68b147d2c4b22f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>dc8fd5c18ebb0e44</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>c898ea9ca4a65da5</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>fbf5fb96600339ce</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Command</span></td><td><code>eb1b53eb8cbe7b47</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader</span></td><td><code>0c8d3ca700ec7199</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.1</span></td><td><code>fbfebde20e2b504c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.CommandRunnable</span></td><td><code>ee59ae4d74408619</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.DumpErrorSingleton</span></td><td><code>2b476b92c5a56cec</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>7c637cf5651513d1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>8e738e4578953efa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.2</span></td><td><code>eed8c1764882af0e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.3</span></td><td><code>c484c4542ee85d76</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.4</span></td><td><code>fdd9c09c784f8eea</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.5</span></td><td><code>7b8c4d35432edce6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.6</span></td><td><code>b897d54528b69e6d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.7</span></td><td><code>fe5121edb86030bc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.PingScheduler</span></td><td><code>d29065207a6b6c40</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkingReporterFactory</span></td><td><code>076a6c0176f6238b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkingRunListener</span></td><td><code>92d4b034b32ca2c0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.MasterProcessCommand</span></td><td><code>da65de332c2de19d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker</span></td><td><code>71b8c658da2ea8d3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker.2</span></td><td><code>68d262a2c2ad8f14</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker.ProcessInfoConsumer</span></td><td><code>73f319c21fab7e7f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProcessInfo</span></td><td><code>b5b56cd86f3f0b31</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>ae4bf137cc5290c1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>d19986536a351b50</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Shutdown</span></td><td><code>ee9c65017e107986</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>a8cc10b01ed27439</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>f47497b1dde50d64</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>5ea9766678ac06a2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.cli.CommandLineOption</span></td><td><code>467fc7f51b73863b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.JUnitPlatformProvider</span></td><td><code>ab158bf01758e7cb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter</span></td><td><code>02cb8e87a6db2057</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.TestPlanScannerFilter</span></td><td><code>622558f718a42827</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.providerapi.AbstractProvider</span></td><td><code>90f3b08fe8a1c87c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture</span></td><td><code>b8ae904ed8536017</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>f912ea5d2dac308e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ConsoleOutputCapture.NullOutputStream</span></td><td><code>8d05eb67510fd586</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ReporterConfiguration</span></td><td><code>4281487891f02f69</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.SimpleReportEntry</span></td><td><code>ced572f24a462295</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.io.IOUtils</span></td><td><code>31aed2fcfab3e082</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.io.output.StringBuilderWriter</span></td><td><code>6d33fec8cb3374c0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.JavaVersion</span></td><td><code>a8452005cb20bb7d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.StringUtils</span></td><td><code>4f785afa8bb3a23f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.SystemUtils</span></td><td><code>aba69a973b7ba06a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.commons.lang3.math.NumberUtils</span></td><td><code>d0156407bff7b695</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shade.org.apache.maven.shared.utils.StringUtils</span></td><td><code>483d14212b21a3ea</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.suite.RunResult</span></td><td><code>f5c7c53a954bcafa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.DirectoryScannerParameters</span></td><td><code>2b5eeacae469cd1d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.IncludedExcludedPatterns</span></td><td><code>f39908e3b64d7090</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest</span></td><td><code>a598483e424232d4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest.ClassMatcher</span></td><td><code>79be7f2fa77ad8d7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest.MethodMatcher</span></td><td><code>7c71374a51e8e61b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.ResolvedTest.Type</span></td><td><code>90e4214668937845</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.RunOrderParameters</span></td><td><code>b4c06223c3099700</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestArtifactInfo</span></td><td><code>f703953620e80b33</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestListResolver</span></td><td><code>7d372c99b98a147d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.testset.TestRequest</span></td><td><code>0fa2c0cc34345df2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.CloseableIterator</span></td><td><code>cc15bdebae86d5d2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.DefaultRunOrderCalculator</span></td><td><code>1aeecbcd3bf6e89b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.DefaultScanResult</span></td><td><code>7fefafdf8c793c36</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.ReflectionUtils</span></td><td><code>8d5f4b05d6d77207</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.RunOrder</span></td><td><code>d2292a6beb4b6337</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.TestsToRun</span></td><td><code>a95363e4b4ba2069</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.TestsToRun.ClassesIterator</span></td><td><code>84a139c598502c0b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.DaemonThreadFactory</span></td><td><code>21a589f6dedb169c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.DaemonThreadFactory.NamedThreadFactory</span></td><td><code>682458ca85b067a3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.DumpFileUtils</span></td><td><code>506743b77fc98f6e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.ImmutableMap</span></td><td><code>72bcae5e55b4fabb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.ObjectUtils</span></td><td><code>69a2a92649b44645</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.StringUtils</span></td><td><code>3a7e4daf0a993e1e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.util.internal.StringUtils.EncodedArray</span></td><td><code>477f1d94d78cb50b</code></td></tr><tr><td><span class="el_class">org.apiguardian.api.API.Status</span></td><td><code>95d0ffea805fc01a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator</span></td><td><code>ff38de3576197150</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.IndicativeSentences</span></td><td><code>d3479e0ffacb9f9f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores</span></td><td><code>9c83688ffdea180b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.Simple</span></td><td><code>d01947bfadff13a2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.Standard</span></td><td><code>5f69fbdb73dadd83</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.TestInstance.Lifecycle</span></td><td><code>963667ad7acf2075</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>fc311dfabd3a0e23</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext</span></td><td><code>6d743ab9f0c8d392</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Namespace</span></td><td><code>cc164c19cc2ec84e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.InvocationInterceptor</span></td><td><code>78636fba04d849bd</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>011031d0b1fe58db</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.CachingJupiterConfiguration</span></td><td><code>14c3e96d913ba609</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.DefaultJupiterConfiguration</span></td><td><code>150a59979eccb4d7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.EnumConfigurationParameterConverter</span></td><td><code>433eec982a6fabbc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter</span></td><td><code>665228d315b7ac04</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>9d93b2a6a01092c9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor</span></td><td><code>49129651cf7ad1b5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassExtensionContext</span></td><td><code>67d8de68b849441a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassTestDescriptor</span></td><td><code>2f87db51b4485e07</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.DisplayNameUtils</span></td><td><code>e1e9919d0d67675d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ExtensionUtils</span></td><td><code>722183e8696c5137</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>6354e569d97134a9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>25e568b41a4f507e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterTestDescriptor</span></td><td><code>8af8f2d9d691826c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.LifecycleMethodUtils</span></td><td><code>6249a1cbea332afc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor</span></td><td><code>27c3365cc0c4e908</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodExtensionContext</span></td><td><code>0508b2e2c19f7ac3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils</span></td><td><code>a247fc379f47df66</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor</span></td><td><code>72ce602be7bfa92c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractAnnotatedDescriptorWrapper</span></td><td><code>90b10f2d90d7b01b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor</span></td><td><code>f8eb297929c247eb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor.DescriptorWrapperOrderer</span></td><td><code>c8e1585f8474ed61</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassOrderingVisitor</span></td><td><code>1f09fc1c6b9779bb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassSelectorResolver</span></td><td><code>47bba3d717485ecb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DefaultClassDescriptor</span></td><td><code>9064f3528773a161</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>5dc6be896f50996f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>621c8591e557439a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodOrderingVisitor</span></td><td><code>7d9864cebac818e1</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver</span></td><td><code>a425905a414a12d5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType</span></td><td><code>f4804d6ffc25a580</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.1</span></td><td><code>aeaeeb04a7d2c1a3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.2</span></td><td><code>4f06e6c9eef38fa4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.3</span></td><td><code>e3f41424e245bd2a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>d746bcff9a71ec26</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>f75dfd9ee2347890</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>909f14a1b9fe84dc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>34690a186bfcf3ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>941a8af0d47a68fd</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>f2039dbd13fce110</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>c13a4260435c18a8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>4be487dee199f633</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ConditionEvaluator</span></td><td><code>df91d94b180fe511</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ConstructorInvocation</span></td><td><code>60b80968f2bdedc3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultTestInstances</span></td><td><code>0fc6d90567826bc4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExecutableInvoker</span></td><td><code>d2368ccaaa2037b7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExecutableInvoker.ReflectiveInterceptorCall</span></td><td><code>84813aa1a30927b7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExtensionValuesStore</span></td><td><code>e4054d96e0311350</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExtensionValuesStore.CompositeKey</span></td><td><code>66813dae6cf686fe</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExtensionValuesStore.MemoizingSupplier</span></td><td><code>df3ce2070a75daaf</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ExtensionValuesStore.StoredValue</span></td><td><code>57cb9ab75faabc0f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain</span></td><td><code>9798b2a812d2015d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain.InterceptedInvocation</span></td><td><code>199eef1acbe0b316</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain.ValidatingInvocation</span></td><td><code>f064b1c2c4a4bf86</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>b48cc2a96dab0116</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>d1557432e23d2776</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>3926323ef1c7fb03</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.MethodInvocation</span></td><td><code>8b8fd00463d994df</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.NamespaceAwareStore</span></td><td><code>c0df02c5fe61ed0f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.TestInstancesProvider</span></td><td><code>357bca6226069e7b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>1604b4e34c1363e4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.ExtensionRegistry</span></td><td><code>a610f9723b95715c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry</span></td><td><code>4951101173afa58b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>32adc631c7f45534</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory</span></td><td><code>55b0b3b7482f7782</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>3c520f8376f91ff7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>7187071bfc76c6ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutConfiguration</span></td><td><code>e255baf2a634c095</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutDurationParser</span></td><td><code>bb6a412c3829dae9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutExtension</span></td><td><code>e90faf479207d574</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory</span></td><td><code>46546a446de4c9c0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector</span></td><td><code>e9ee7d4e1adecdd1</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try</span></td><td><code>5200e6adc191344c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Failure</span></td><td><code>5d1cf7b52cd7a7ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>39fdfe1f67bc0eda</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>c71dcf008235901c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.support.AnnotationSupport</span></td><td><code>183c2f1d296c27a5</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.support.ReflectionSupport</span></td><td><code>945bcc92fedf115d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>192a2ed89eaed125</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>bf70ae4f9e1a53b8</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassNamePatternFilterUtils</span></td><td><code>661df78b93e45465</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassUtils</span></td><td><code>60a2276f3701443f</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>54e3df9bb2092b52</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>8a03a781a6a5c2d1</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>c8254e72fb8d44dd</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>9ac3110b58c001d0</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>3125245fc9d900bc</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>237c0cb03ac19254</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.UnrecoverableExceptions</span></td><td><code>e906a774e770e7d4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>6a52e5b4f7292f48</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>cc0aadc5880fb4e4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener</span></td><td><code>f7640d771a4374d6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener.1</span></td><td><code>a4cdbe8dd38d8f57</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryRequest</span></td><td><code>2f8e616c1234b5ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener</span></td><td><code>693fee5cbd4c2df0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener.1</span></td><td><code>999902b68f81dd9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>f80b4e071e194cb8</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>5ffaaa90df97ca04</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>a787a89e1f12d534</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult</span></td><td><code>b0cf35dcc829d3f4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult.Status</span></td><td><code>c505c2274f89f01d</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>aeaac58c9e7df241</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>20fe3e02963cb4b9</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>6b1b512d17bb680e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>ad256e9fb4407e04</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>f649a106c8945a6a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>f77d401d3f546230</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>6c86362ad62a1954</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>a1cacad45a144508</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>d9d42aa13a2aea27</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.MethodSelector</span></td><td><code>69292f007e74298d</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>b9c965daf4d9a476</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.ClassSource</span></td><td><code>37bd92069360f773</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>8f2f77769ee0e9c9</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.MethodSource</span></td><td><code>1d55ac49f5cabc20</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver</span></td><td><code>dc6114dc7e983729</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution</span></td><td><code>ea497a81a10c339c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.DefaultContext</span></td><td><code>b39f8895aeb78b1e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver</span></td><td><code>687cbe6b3b72b453</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.Builder</span></td><td><code>21b59a849a1e0107</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.DefaultInitializationContext</span></td><td><code>1904819635770d62</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver</span></td><td><code>8853a3b7d6531935</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match</span></td><td><code>922481c433789199</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match.Type</span></td><td><code>a62615901052f237</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Resolution</span></td><td><code>c90571b7b64f19a0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource</span></td><td><code>efa2e06c87a351c3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode</span></td><td><code>96e95d210b150f97</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>5c686da27ab7f7b0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>963cba9b029b4b19</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.LockManager</span></td><td><code>5aedd3bd3957b5a6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>d5630bd7243c23ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>5aca1404ff0f9294</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor</span></td><td><code>7c2670c7a35cfba6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask</span></td><td><code>f652d8cc5e11bdc5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask.DefaultDynamicTestExecutor</span></td><td><code>abd00dd511d28b2f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTaskContext</span></td><td><code>bdf88cd3834282a5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTreeWalker</span></td><td><code>c689092b060d0b12</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils</span></td><td><code>a7ec8f66d373c169</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils.1</span></td><td><code>5a44a7e2cbf864b4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService</span></td><td><code>4021fb0b954634b6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleLock</span></td><td><code>2036ec8b92a38105</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ThrowableCollector</span></td><td><code>6fd7a27676be3c50</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>225bb434f8f223e2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>9a2b71b572924cbc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>7dda3ad9a0e6a666</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>9f3466cbe6d5a584</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherConfig</span></td><td><code>a355b55f1fea9e21</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryResultValidator</span></td><td><code>93df7a3977833cf5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>52cf3c3c69d4dfba</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig</span></td><td><code>b3c713ac595fde03</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig.Builder</span></td><td><code>a17564c5b87448a3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>ef55cacb5e47a902</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>e78a71b91c159e69</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>766208a42b7391ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.Root</span></td><td><code>32394ca895f9fb9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>7c054c4cf76cb0f6</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestExecutionListenerRegistry</span></td><td><code>2299bac1075a6bf3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener</span></td><td><code>3a1f3bd6b32f854b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.TestExecutionListenerRegistry</span></td><td><code>2549306f9f4bc4a7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.TestExecutionListenerRegistry.CompositeTestExecutionListener</span></td><td><code>54c88d30baf04181</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.LegacyReportingUtils</span></td><td><code>9dc21fd2f024a158</code></td></tr><tr><td><span class="el_class">org.mockito.Answers</span></td><td><code>7bb49d321e73bbc5</code></td></tr><tr><td><span class="el_class">org.mockito.ArgumentMatchers</span></td><td><code>09d65d5d1d4b1daf</code></td></tr><tr><td><span class="el_class">org.mockito.Mockito</span></td><td><code>bd9c62077a639c72</code></td></tr><tr><td><span class="el_class">org.mockito.MockitoAnnotations</span></td><td><code>4e582471d227b01d</code></td></tr><tr><td><span class="el_class">org.mockito.configuration.DefaultMockitoConfiguration</span></td><td><code>7c1c365c15c2133e</code></td></tr><tr><td><span class="el_class">org.mockito.internal.MockitoCore</span></td><td><code>402eae6f392115ba</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.CaptorAnnotationProcessor</span></td><td><code>b1d3667699da5bde</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.ClassPathLoader</span></td><td><code>1837784d8946effa</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.DefaultDoNotMockEnforcer</span></td><td><code>c193dbfbfd7e7112</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.DefaultInjectionEngine</span></td><td><code>9d4f4284084eab52</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.GlobalConfiguration</span></td><td><code>cee487af60df9de4</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.IndependentAnnotationEngine</span></td><td><code>6712157121b4c009</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.IndependentAnnotationEngine.1</span></td><td><code>0c571489b6a84e81</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.InjectingAnnotationEngine</span></td><td><code>093bcb2236e9e096</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.MockAnnotationProcessor</span></td><td><code>c227d08ff7d98a5c</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.SpyAnnotationEngine</span></td><td><code>0e1046ea3cb07962</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.ConstructorInjection</span></td><td><code>a2e0cfed216ffbf1</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.ConstructorInjection.SimpleArgumentResolver</span></td><td><code>b819c4822ab7a648</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.MockInjection</span></td><td><code>41ad05a9cf251c66</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.MockInjection.OngoingMockInjection</span></td><td><code>4c9b53365f5f9c2a</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.MockInjectionStrategy</span></td><td><code>cd40af08f6405c20</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.MockInjectionStrategy.1</span></td><td><code>c6860b7b40dd6139</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.PropertyAndSetterInjection</span></td><td><code>93b665d792e25fd6</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.SpyOnInjectedFieldsHandler</span></td><td><code>6f93949c7ad54b5c</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.filter.NameBasedCandidateFilter</span></td><td><code>cbf3f2390a7a068c</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.filter.TerminalMockCandidateFilter</span></td><td><code>80b5d7c476edad41</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.filter.TypeBasedCandidateFilter</span></td><td><code>bb38595e57e057ee</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.scanner.InjectMocksScanner</span></td><td><code>1b7ab81c25844e8f</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.injection.scanner.MockScanner</span></td><td><code>3b1d7ca146e28785</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.DefaultMockitoPlugins</span></td><td><code>a3d514713c9235ca</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.DefaultPluginSwitch</span></td><td><code>973f142b836667e1</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.PluginFileReader</span></td><td><code>1c7aa64a5a5a162d</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.PluginFinder</span></td><td><code>d946fdf7c3f2c58b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.PluginInitializer</span></td><td><code>172e9a5c046703bf</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.PluginLoader</span></td><td><code>2d00b0c8836bfc7a</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.PluginRegistry</span></td><td><code>7c6b38725ad08380</code></td></tr><tr><td><span class="el_class">org.mockito.internal.configuration.plugins.Plugins</span></td><td><code>ff53f63a8240eb6e</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.DelegatingMethod</span></td><td><code>7ea1353e5c77b5f3</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.MockSettingsImpl</span></td><td><code>73433353e7684171</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.SuspendMethod</span></td><td><code>dc8e823dfe533d87</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.ByteBuddyCrossClassLoaderSerializationSupport</span></td><td><code>91ac516637b8c4ee</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker</span></td><td><code>e18344ca184c75a1</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.BytecodeGenerator</span></td><td><code>896014d879c42ec9</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.MockFeatures</span></td><td><code>161a6ae9389d4da3</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.MockMethodInterceptor</span></td><td><code>d185526feefc5f6b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.DispatcherDefaultingToRealMethod</span></td><td><code>eb121594c82e0f72</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.ModuleHandler</span></td><td><code>77380dd282d3eb30</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.ModuleHandler.ModuleSystemFound</span></td><td><code>d8515816e294707d</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker</span></td><td><code>25f58b4b40e0b021</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.1</span></td><td><code>e7aa37594b29ef14</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.SubclassBytecodeGenerator</span></td><td><code>94fd428955a86efe</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.SubclassInjectionLoader</span></td><td><code>47ea8dba5b15c796</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.SubclassInjectionLoader.WithReflection</span></td><td><code>55a84d6cf8f318a1</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator</span></td><td><code>123a98feabc81a7a</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.TypeCachingBytecodeGenerator.MockitoMockKey</span></td><td><code>8fb34c2e10b7db99</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.bytebuddy.TypeSupport</span></td><td><code>652949fe1e4bb215</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.instance.DefaultInstantiatorProvider</span></td><td><code>3900ee0969504a34</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.instance.ObjenesisInstantiator</span></td><td><code>e451a21eadbc4d30</code></td></tr><tr><td><span class="el_class">org.mockito.internal.creation.settings.CreationSettings</span></td><td><code>417c97a74f5fad25</code></td></tr><tr><td><span class="el_class">org.mockito.internal.debugging.LocationImpl</span></td><td><code>b13b42f8f18069c1</code></td></tr><tr><td><span class="el_class">org.mockito.internal.exceptions.stacktrace.DefaultStackTraceCleaner</span></td><td><code>0be2358e0d7b7d96</code></td></tr><tr><td><span class="el_class">org.mockito.internal.exceptions.stacktrace.DefaultStackTraceCleanerProvider</span></td><td><code>475c82ec8ba01c75</code></td></tr><tr><td><span class="el_class">org.mockito.internal.exceptions.stacktrace.StackTraceFilter</span></td><td><code>3df073dc72decbe3</code></td></tr><tr><td><span class="el_class">org.mockito.internal.framework.DefaultMockitoFramework</span></td><td><code>ceeeaee8d43a87e7</code></td></tr><tr><td><span class="el_class">org.mockito.internal.framework.DefaultMockitoSession</span></td><td><code>ae55b421f5daf7ec</code></td></tr><tr><td><span class="el_class">org.mockito.internal.framework.DefaultMockitoSession.1</span></td><td><code>2f1a3311118217d8</code></td></tr><tr><td><span class="el_class">org.mockito.internal.handler.InvocationNotifierHandler</span></td><td><code>7c138f78143ab433</code></td></tr><tr><td><span class="el_class">org.mockito.internal.handler.MockHandlerFactory</span></td><td><code>236482acbbebaf4a</code></td></tr><tr><td><span class="el_class">org.mockito.internal.handler.MockHandlerImpl</span></td><td><code>e538c869e7bfe6c6</code></td></tr><tr><td><span class="el_class">org.mockito.internal.handler.NullResultGuardian</span></td><td><code>40a1d637e9eadd05</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.ArgumentsProcessor</span></td><td><code>d50039fd637b3496</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.DefaultInvocationFactory</span></td><td><code>fa6c69aea1733666</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.InterceptedInvocation</span></td><td><code>40a1bce4be9e6523</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.InterceptedInvocation.1</span></td><td><code>1a1152b98b0c7d86</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.InvocationComparator</span></td><td><code>8650a51ffae996b8</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.InvocationMatcher</span></td><td><code>0f3f05080ade9bf3</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.InvocationMatcher.1</span></td><td><code>80b88eded9ee9335</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.MatcherApplicationStrategy</span></td><td><code>61ba3ebb5e5c5981</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.MatcherApplicationStrategy.MatcherApplicationType</span></td><td><code>338c14ae51b8af66</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.MatchersBinder</span></td><td><code>b39b9426c9814ac7</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.RealMethod.IsIllegal</span></td><td><code>842737381308d1f8</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.StubInfoImpl</span></td><td><code>1314bab3c1422857</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.TypeSafeMatching</span></td><td><code>0523de66dbdeab05</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.finder.AllInvocationsFinder</span></td><td><code>3a8bd9efde9328ac</code></td></tr><tr><td><span class="el_class">org.mockito.internal.invocation.mockref.MockWeakReference</span></td><td><code>ac456a2a5b693d6e</code></td></tr><tr><td><span class="el_class">org.mockito.internal.junit.DefaultStubbingLookupListener</span></td><td><code>a1e4ec7e686b3adf</code></td></tr><tr><td><span class="el_class">org.mockito.internal.junit.UniversalTestListener</span></td><td><code>457f250b3d07c4be</code></td></tr><tr><td><span class="el_class">org.mockito.internal.junit.UniversalTestListener.1</span></td><td><code>ed1178a9038337b5</code></td></tr><tr><td><span class="el_class">org.mockito.internal.junit.UnusedStubbings</span></td><td><code>b1fba9e0a01f39a9</code></td></tr><tr><td><span class="el_class">org.mockito.internal.junit.UnusedStubbingsFinder</span></td><td><code>859c07844857b59a</code></td></tr><tr><td><span class="el_class">org.mockito.internal.listeners.StubbingLookupNotifier</span></td><td><code>6b94cdf6e74e7282</code></td></tr><tr><td><span class="el_class">org.mockito.internal.listeners.StubbingLookupNotifier.Event</span></td><td><code>c4e0d3870a11bafc</code></td></tr><tr><td><span class="el_class">org.mockito.internal.matchers.Equals</span></td><td><code>1bb4b6d86ac8a29b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.matchers.InstanceOf</span></td><td><code>f0f6c96c8534f837</code></td></tr><tr><td><span class="el_class">org.mockito.internal.matchers.InstanceOf.VarArgAware</span></td><td><code>9cf78287daab417b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.matchers.LocalizedMatcher</span></td><td><code>23d1d86d4409a5f9</code></td></tr><tr><td><span class="el_class">org.mockito.internal.progress.ArgumentMatcherStorageImpl</span></td><td><code>83a3e5fcf460cd8d</code></td></tr><tr><td><span class="el_class">org.mockito.internal.progress.MockingProgressImpl</span></td><td><code>f0bb250cbbac6b8b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.progress.MockingProgressImpl.1</span></td><td><code>a1ad00aef40918d3</code></td></tr><tr><td><span class="el_class">org.mockito.internal.progress.SequenceNumber</span></td><td><code>fd2449d941ed721b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.progress.ThreadSafeMockingProgress</span></td><td><code>5ef9d6f1a875dc18</code></td></tr><tr><td><span class="el_class">org.mockito.internal.progress.ThreadSafeMockingProgress.1</span></td><td><code>1c85bd989b9441aa</code></td></tr><tr><td><span class="el_class">org.mockito.internal.session.DefaultMockitoSessionBuilder</span></td><td><code>22adc2a4c6508445</code></td></tr><tr><td><span class="el_class">org.mockito.internal.session.MockitoLoggerAdapter</span></td><td><code>cb73120505ff3370</code></td></tr><tr><td><span class="el_class">org.mockito.internal.session.MockitoSessionLoggerAdapter</span></td><td><code>cbf7765b9261b147</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.BaseStubbing</span></td><td><code>0fd68c747fb3e1ac</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.ConsecutiveStubbing</span></td><td><code>1b3fea0e4598e3dc</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.DoAnswerStyleStubbing</span></td><td><code>f2057cd0aee1a50b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.InvocationContainerImpl</span></td><td><code>c16048ff1c19fd3e</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.OngoingStubbingImpl</span></td><td><code>646db189ef95b765</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.StrictnessSelector</span></td><td><code>fe0530dbf6b75a61</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.StubbedInvocationMatcher</span></td><td><code>738da3903cdefa65</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.StubbingComparator</span></td><td><code>f895e7950b140908</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.UnusedStubbingReporting</span></td><td><code>d32820ae1d9da2fe</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.answers.CallsRealMethods</span></td><td><code>16da2f316c946fec</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.answers.DefaultAnswerValidator</span></td><td><code>de0c324c57207f3c</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.answers.InvocationInfo</span></td><td><code>558393abbeee5acd</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.answers.Returns</span></td><td><code>b865c001022cfefe</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.defaultanswers.GloballyConfiguredAnswer</span></td><td><code>f308e3faf16f6212</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.defaultanswers.ReturnsDeepStubs</span></td><td><code>0ba1eff301842cf2</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.defaultanswers.ReturnsEmptyValues</span></td><td><code>fb54ce54650adcb6</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.defaultanswers.ReturnsMocks</span></td><td><code>f72b0e3d274c564c</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.defaultanswers.ReturnsMoreEmptyValues</span></td><td><code>4a4f9f45d874e56f</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.defaultanswers.ReturnsSmartNulls</span></td><td><code>8920a999612923c9</code></td></tr><tr><td><span class="el_class">org.mockito.internal.stubbing.defaultanswers.TriesToReturnSelf</span></td><td><code>b9eec415ba57796d</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.Checks</span></td><td><code>c6a1d20be0e11d77</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.ConsoleMockitoLogger</span></td><td><code>b50468c7ba4abdba</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.DefaultMockingDetails</span></td><td><code>eb4060f4b147ea49</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.KotlinInlineClassUtil</span></td><td><code>0581c028953ad812</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.MockCreationValidator</span></td><td><code>e30e40e6aabce2d8</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.MockNameImpl</span></td><td><code>c374206ea5426e18</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.MockUtil</span></td><td><code>22b633290ad851ce</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.ObjectMethodsGuru</span></td><td><code>2e0e0e3f520fd2eb</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.Primitives</span></td><td><code>3126a7777504288b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.StringUtil</span></td><td><code>fc180f2e2cfb19c5</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.collections.HashCodeAndEqualsMockWrapper</span></td><td><code>2ddb4b6df187f1be</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.collections.HashCodeAndEqualsSafeSet</span></td><td><code>f13e3c60a5f3dac1</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.collections.HashCodeAndEqualsSafeSet.1</span></td><td><code>04a9da11a07d7dbd</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.collections.Iterables</span></td><td><code>f2f271f84160edef</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.collections.Sets</span></td><td><code>ba0259dd5d0f4cdf</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.io.IOUtil</span></td><td><code>dd048f2a9c401164</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.FieldInitializationReport</span></td><td><code>4b61273f03d669ef</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.FieldInitializer</span></td><td><code>4c6aee887e49b554</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.FieldInitializer.ParameterizedConstructorInstantiator</span></td><td><code>76c4297779b98ab3</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.FieldInitializer.ParameterizedConstructorInstantiator.1</span></td><td><code>ef1a88c53c8940ad</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.FieldReader</span></td><td><code>adeb073a2d5e6410</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.GenericMetadataSupport</span></td><td><code>85227a69a82c938b</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.GenericMetadataSupport.FromClassGenericMetadataSupport</span></td><td><code>356b7028b146ffda</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.GenericMetadataSupport.ParameterizedReturnType</span></td><td><code>de8799dae02553cd</code></td></tr><tr><td><span class="el_class">org.mockito.internal.util.reflection.ReflectionMemberAccessor</span></td><td><code>5b659ecadce64e6d</code></td></tr><tr><td><span class="el_class">org.mockito.internal.verification.DefaultRegisteredInvocations</span></td><td><code>2c81cbe8de7c014f</code></td></tr><tr><td><span class="el_class">org.mockito.junit.jupiter.MockitoExtension</span></td><td><code>7d3f9dac7e9a9199</code></td></tr><tr><td><span class="el_class">org.mockito.mock.SerializableMode</span></td><td><code>35d1981ec862bf72</code></td></tr><tr><td><span class="el_class">org.mockito.plugins.AnnotationEngine.NoAction</span></td><td><code>cb985c28ad2cce16</code></td></tr><tr><td><span class="el_class">org.mockito.quality.Strictness</span></td><td><code>5c325b301298ef43</code></td></tr><tr><td><span class="el_class">org.objenesis.ObjenesisBase</span></td><td><code>0c1d2fd83029257f</code></td></tr><tr><td><span class="el_class">org.objenesis.ObjenesisStd</span></td><td><code>f35c83a75caea811</code></td></tr><tr><td><span class="el_class">org.objenesis.instantiator.sun.SunReflectionFactoryHelper</span></td><td><code>d17e7b3403696605</code></td></tr><tr><td><span class="el_class">org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator</span></td><td><code>6156947e7d7c507c</code></td></tr><tr><td><span class="el_class">org.objenesis.strategy.BaseInstantiatorStrategy</span></td><td><code>b0aaa6460452f5ce</code></td></tr><tr><td><span class="el_class">org.objenesis.strategy.PlatformDescription</span></td><td><code>c6456f671febfd7c</code></td></tr><tr><td><span class="el_class">org.objenesis.strategy.StdInstantiatorStrategy</span></td><td><code>abae05ba56ea35a6</code></td></tr><tr><td><span class="el_class">org.slf4j.LoggerFactory</span></td><td><code>a381b7ddf19bf47d</code></td></tr><tr><td><span class="el_class">org.slf4j.MDC</span></td><td><code>4d31efbdc380017c</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.NOPLoggerFactory</span></td><td><code>54f5632bfcb8d8d5</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.SubstituteLoggerFactory</span></td><td><code>dc7efc0107a4a62d</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.Util</span></td><td><code>857ff3acc0576435</code></td></tr><tr><td><span class="el_class">org.slf4j.impl.StaticLoggerBinder</span></td><td><code>039b3c899e055991</code></td></tr><tr><td><span class="el_class">org.slf4j.impl.StaticMDCBinder</span></td><td><code>649700d80abb641d</code></td></tr><tr><td><span class="el_class">org.springframework.aop.support.AopUtils</span></td><td><code>386cf262c8b36bdb</code></td></tr><tr><td><span class="el_class">org.springframework.boot.test.mock.mockito.SpringBootMockResolver</span></td><td><code>0d421c9057a50572</code></td></tr><tr><td><span class="el_class">org.springframework.test.util.AopTestUtils</span></td><td><code>444796b132910baa</code></td></tr><tr><td><span class="el_class">org.springframework.util.Assert</span></td><td><code>55d74684317185c0</code></td></tr><tr><td><span class="el_class">reactor.core.Disposables</span></td><td><code>360d7cbe64e0e02b</code></td></tr><tr><td><span class="el_class">reactor.core.Disposables.AlwaysDisposable</span></td><td><code>c221ce80e8e471de</code></td></tr><tr><td><span class="el_class">reactor.core.Scannable</span></td><td><code>ae9e38b679940f95</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.Hooks</span></td><td><code>7ee85d0ffe2e8ef3</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.ImmutableSignal</span></td><td><code>cf6ebb214e1d2266</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.Mono</span></td><td><code>3c9411e2b283a86c</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.MonoJust</span></td><td><code>c70a1d489569549f</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.Operators</span></td><td><code>ece064d3e1df0394</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.Operators.1</span></td><td><code>719fbec9315d64bc</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.Operators.CancelledSubscription</span></td><td><code>284e4d11ee8d6a70</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.Operators.ScalarSubscription</span></td><td><code>d85d8e12a11ff733</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.Signal</span></td><td><code>75b2ec7727dda6aa</code></td></tr><tr><td><span class="el_class">reactor.core.publisher.SignalType</span></td><td><code>652ba3ab232b00f3</code></td></tr><tr><td><span class="el_class">reactor.test.DefaultStepVerifierBuilder</span></td><td><code>75c91c6ac658d494</code></td></tr><tr><td><span class="el_class">reactor.test.DefaultStepVerifierBuilder.AbstractSignalEvent</span></td><td><code>d1e31794c033db13</code></td></tr><tr><td><span class="el_class">reactor.test.DefaultStepVerifierBuilder.DefaultStepVerifier</span></td><td><code>1c921d3cad209598</code></td></tr><tr><td><span class="el_class">reactor.test.DefaultStepVerifierBuilder.DefaultVerifySubscriber</span></td><td><code>6135a26422885b87</code></td></tr><tr><td><span class="el_class">reactor.test.DefaultStepVerifierBuilder.SignalEvent</span></td><td><code>8d8eef4b594f4c63</code></td></tr><tr><td><span class="el_class">reactor.test.MessageFormatter</span></td><td><code>48f7872fe00b70ae</code></td></tr><tr><td><span class="el_class">reactor.test.StepVerifier</span></td><td><code>313bb270551172ea</code></td></tr><tr><td><span class="el_class">reactor.test.StepVerifierOptions</span></td><td><code>f0f06df5cd32713f</code></td></tr><tr><td><span class="el_class">reactor.util.Loggers</span></td><td><code>dab55664952e2876</code></td></tr><tr><td><span class="el_class">reactor.util.Loggers.Slf4JLogger</span></td><td><code>4488b640db0d4cc7</code></td></tr><tr><td><span class="el_class">reactor.util.Loggers.Slf4JLoggerFactory</span></td><td><code>61b1358a7d0bdd23</code></td></tr><tr><td><span class="el_class">reactor.util.context.Context</span></td><td><code>86578d05a692ba20</code></td></tr><tr><td><span class="el_class">reactor.util.context.Context0</span></td><td><code>611701acea2718da</code></td></tr><tr><td><span class="el_class">sun.text.resources.cldr.ext.FormatData_es</span></td><td><code>a527aa9585d1ad12</code></td></tr><tr><td><span class="el_class">sun.text.resources.cldr.ext.FormatData_es_419</span></td><td><code>26040365fbc32335</code></td></tr><tr><td><span class="el_class">sun.text.resources.cldr.ext.FormatData_es_PE</span></td><td><code>dd3a2f59a69df56a</code></td></tr><tr><td><span class="el_class">sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo</span></td><td><code>3d1ea3e23b319ce9</code></td></tr><tr><td><span class="el_class">sun.util.resources.provider.LocaleDataProvider</span></td><td><code>eebde39dfb7981b7</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.5.201910111838</span></div></body></html>
    \ No newline at end of file
    diff --git a/transaction-service-app/target/site/jacoco/jacoco.csv b/transaction-service-app/target/site/jacoco/jacoco.csv
    new file mode 100644
    index 0000000..de77899
    --- /dev/null
    +++ b/transaction-service-app/target/site/jacoco/jacoco.csv
    @@ -0,0 +1,19 @@
    +GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
    +transaction-service-app,com.yape.app.transaction.builder,TransactionBuilder,50,0,0,0,17,0,3,0,3,0
    +transaction-service-app,com.yape.app.transaction.config,JsonConverterMessageConfig,7,0,0,0,2,0,2,0,2,0
    +transaction-service-app,com.yape.app.transaction.config,KafkaConfigMain,139,0,0,0,31,0,5,0,5,0
    +transaction-service-app,com.yape.app.transaction,ServiceTransactionApplicationMain,49,0,0,0,13,0,3,0,3,0
    +transaction-service-app,com.yape.app.transaction.model.entity,Transaction,77,3,0,0,10,1,16,1,16,1
    +transaction-service-app,com.yape.app.transaction.model.entity,Transaction.TransactionBuilder,72,0,0,0,1,0,10,0,10,0
    +transaction-service-app,com.yape.app.transaction.controller,TransactionController,10,11,0,0,3,2,1,2,1,2
    +transaction-service-app,com.yape.app.transaction.controller,GraphQLTransactionController,31,0,0,0,10,0,4,0,4,0
    +transaction-service-app,com.yape.app.transaction.service.impl,ProducerKafkaServiceImpl,14,0,0,0,3,0,2,0,2,0
    +transaction-service-app,com.yape.app.transaction.service.impl,ConsumerKafkaServiceImpl,16,0,0,0,5,0,2,0,2,0
    +transaction-service-app,com.yape.app.transaction.service.impl,TransactionServiceImpl,89,0,0,0,21,0,7,0,7,0
    +transaction-service-app,com.yape.app.transaction.model.request,TransactionRequest,32,15,0,0,6,1,9,1,9,1
    +transaction-service-app,com.yape.app.transaction.model.request,TransactionRequest.TransactionRequestBuilder,45,0,0,0,1,0,7,0,7,0
    +transaction-service-app,com.yape.app.transaction.util,Util,9,0,2,0,1,0,2,0,1,0
    +transaction-service-app,com.yape.app.transaction.model.response,TransactionResponse,57,0,0,0,7,0,12,0,12,0
    +transaction-service-app,com.yape.app.transaction.model.response,NameValue.NameValueBuilder,18,0,0,0,1,0,4,0,4,0
    +transaction-service-app,com.yape.app.transaction.model.response,NameValue,17,0,0,0,3,0,4,0,4,0
    +transaction-service-app,com.yape.app.transaction.model.response,TransactionResponse.TransactionResponseBuilder,54,0,0,0,1,0,8,0,8,0
    diff --git a/transaction-service-app/target/site/jacoco/jacoco.xml b/transaction-service-app/target/site/jacoco/jacoco.xml
    new file mode 100644
    index 0000000..0f49e2d
    --- /dev/null
    +++ b/transaction-service-app/target/site/jacoco/jacoco.xml
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"><report name="transaction-service-app"><sessioninfo id="LAPTOP-2UFR11IA-efd8748" start="1725851278919" dump="1725851282607"/><package name="com/yape/app/transaction/repository"><class name="com/yape/app/transaction/repository/TransactionRepository" sourcefilename="TransactionRepository.java"/><sourcefile name="TransactionRepository.java"/></package><package name="com/yape/app/transaction/builder"><class name="com/yape/app/transaction/builder/TransactionBuilder" sourcefilename="TransactionBuilder.java"><method name="&lt;init&gt;" desc="()V" line="13"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="buildTransactionToResponse" desc="(Lcom/yape/app/transaction/model/entity/Transaction;)Lcom/yape/app/transaction/model/response/TransactionResponse;" line="15"><counter type="INSTRUCTION" missed="25" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="buildTransactionFromRequest" desc="(Lcom/yape/app/transaction/model/request/TransactionRequest;)Lcom/yape/app/transaction/model/entity/Transaction;" line="25"><counter type="INSTRUCTION" missed="22" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="50" covered="0"/><counter type="LINE" missed="17" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="TransactionBuilder.java"><line nr="13" mi="3" ci="0" mb="0" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="16" mi="2" ci="0" mb="0" cb="0"/><line nr="17" mi="6" ci="0" mb="0" cb="0"/><line nr="18" mi="7" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="1" ci="0" mb="0" cb="0"/><line nr="25" mi="2" ci="0" mb="0" cb="0"/><line nr="26" mi="4" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="3" ci="0" mb="0" cb="0"/><line nr="29" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="2" ci="0" mb="0" cb="0"/><line nr="31" mi="2" ci="0" mb="0" cb="0"/><line nr="32" mi="2" ci="0" mb="0" cb="0"/><line nr="33" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="50" covered="0"/><counter type="LINE" missed="17" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="50" covered="0"/><counter type="LINE" missed="17" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></package><package name="com/yape/app/transaction/config"><class name="com/yape/app/transaction/config/JsonConverterMessageConfig" sourcefilename="JsonConverterMessageConfig.java"><method name="&lt;init&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="jsonConverterMessage" desc="()Lorg/springframework/kafka/support/converter/JsonMessageConverter;" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="com/yape/app/transaction/config/KafkaConfigMain" sourcefilename="KafkaConfigMain.java"><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="reactiveKafkaProducerTemplate" desc="()Lorg/springframework/kafka/core/reactive/ReactiveKafkaProducerTemplate;" line="32"><counter type="INSTRUCTION" missed="39" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="reactiveKafkaConsumerTemplate" desc="()Lorg/springframework/kafka/core/reactive/ReactiveKafkaConsumerTemplate;" line="45"><counter type="INSTRUCTION" missed="46" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="consumerFactory" desc="()Lorg/springframework/kafka/core/ConsumerFactory;" line="62"><counter type="INSTRUCTION" missed="41" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="kafkaListenerContainerFactory" desc="()Lorg/springframework/kafka/config/ConcurrentKafkaListenerContainerFactory;" line="76"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="139" covered="0"/><counter type="LINE" missed="31" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="KafkaConfigMain.java"><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="32" mi="4" ci="0" mb="0" cb="0"/><line nr="33" mi="6" ci="0" mb="0" cb="0"/><line nr="34" mi="5" ci="0" mb="0" cb="0"/><line nr="35" mi="5" ci="0" mb="0" cb="0"/><line nr="36" mi="5" ci="0" mb="0" cb="0"/><line nr="37" mi="6" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="5" ci="0" mb="0" cb="0"/><line nr="45" mi="4" ci="0" mb="0" cb="0"/><line nr="46" mi="6" ci="0" mb="0" cb="0"/><line nr="47" mi="5" ci="0" mb="0" cb="0"/><line nr="48" mi="5" ci="0" mb="0" cb="0"/><line nr="49" mi="1" ci="0" mb="0" cb="0"/><line nr="50" mi="5" ci="0" mb="0" cb="0"/><line nr="51" mi="1" ci="0" mb="0" cb="0"/><line nr="52" mi="6" ci="0" mb="0" cb="0"/><line nr="53" mi="5" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="0" cb="0"/><line nr="57" mi="5" ci="0" mb="0" cb="0"/><line nr="62" mi="4" ci="0" mb="0" cb="0"/><line nr="63" mi="6" ci="0" mb="0" cb="0"/><line nr="64" mi="5" ci="0" mb="0" cb="0"/><line nr="65" mi="5" ci="0" mb="0" cb="0"/><line nr="66" mi="6" ci="0" mb="0" cb="0"/><line nr="67" mi="5" ci="0" mb="0" cb="0"/><line nr="69" mi="5" ci="0" mb="0" cb="0"/><line nr="71" mi="5" ci="0" mb="0" cb="0"/><line nr="76" mi="4" ci="0" mb="0" cb="0"/><line nr="78" mi="4" ci="0" mb="0" cb="0"/><line nr="79" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="139" covered="0"/><counter type="LINE" missed="31" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="JsonConverterMessageConfig.java"><line nr="9" mi="3" ci="0" mb="0" cb="0"/><line nr="12" mi="4" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="146" covered="0"/><counter type="LINE" missed="33" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="2" covered="0"/></package><package name="com/yape/app/transaction/service"><class name="com/yape/app/transaction/service/ConsumerKafkaService" sourcefilename="ConsumerKafkaService.java"/><class name="com/yape/app/transaction/service/TransactionService" sourcefilename="TransactionService.java"/><class name="com/yape/app/transaction/service/ProducerKafkaService" sourcefilename="ProducerKafkaService.java"/><sourcefile name="ConsumerKafkaService.java"/><sourcefile name="ProducerKafkaService.java"/><sourcefile name="TransactionService.java"/></package><package name="com/yape/app/transaction"><class name="com/yape/app/transaction/ServiceTransactionApplicationMain" sourcefilename="ServiceTransactionApplicationMain.java"><method name="&lt;init&gt;" desc="()V" line="10"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="main" desc="([Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="49" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="ServiceTransactionApplicationMain.java"><line nr="8" mi="4" ci="0" mb="0" cb="0"/><line nr="10" mi="3" ci="0" mb="0" cb="0"/><line nr="12" mi="5" ci="0" mb="0" cb="0"/><line nr="13" mi="4" ci="0" mb="0" cb="0"/><line nr="14" mi="2" ci="0" mb="0" cb="0"/><line nr="15" mi="2" ci="0" mb="0" cb="0"/><line nr="16" mi="2" ci="0" mb="0" cb="0"/><line nr="17" mi="7" ci="0" mb="0" cb="0"/><line nr="18" mi="6" ci="0" mb="0" cb="0"/><line nr="19" mi="6" ci="0" mb="0" cb="0"/><line nr="20" mi="5" ci="0" mb="0" cb="0"/><line nr="21" mi="2" ci="0" mb="0" cb="0"/><line nr="22" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="49" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="49" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></package><package name="com/yape/app/transaction/model/entity"><class name="com/yape/app/transaction/model/entity/Transaction" sourcefilename="Transaction.java"><method name="builder" desc="()Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTransactionExternalId" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAccountExternalIdDebit" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAccountExternalIdCredit" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTransferTypeId" desc="()Ljava/lang/String;" line="20"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getValue" desc="()Ljava/lang/Double;" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getStatus" desc="()Ljava/lang/String;" line="22"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCreatedAt" desc="()Ljava/time/LocalDateTime;" line="23"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTransactionExternalId" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAccountExternalIdDebit" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAccountExternalIdCredit" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTransferTypeId" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setValue" desc="(Ljava/lang/Double;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setStatus" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCreatedAt" desc="(Ljava/time/LocalDateTime;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/String;Ljava/time/LocalDateTime;)V" line="13"><counter type="INSTRUCTION" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="14"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="77" covered="3"/><counter type="LINE" missed="10" covered="1"/><counter type="COMPLEXITY" missed="16" covered="1"/><counter type="METHOD" missed="16" covered="1"/><counter type="CLASS" missed="0" covered="1"/></class><class name="com/yape/app/transaction/model/entity/Transaction$TransactionBuilder" sourcefilename="Transaction.java"><method name="&lt;init&gt;" desc="()V" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="transactionExternalId" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="accountExternalIdDebit" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="accountExternalIdCredit" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="transferTypeId" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="value" desc="(Ljava/lang/Double;)Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="status" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createdAt" desc="(Ljava/time/LocalDateTime;)Lcom/yape/app/transaction/model/entity/Transaction$TransactionBuilder;" line="12"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lcom/yape/app/transaction/model/entity/Transaction;" line="12"><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="16" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="10" covered="0"/><counter type="METHOD" missed="10" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="Transaction.java"><line nr="11" mi="28" ci="0" mb="0" cb="0"/><line nr="12" mi="76" ci="0" mb="0" cb="0"/><line nr="13" mi="24" ci="0" mb="0" cb="0"/><line nr="14" mi="0" ci="3" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><line nr="22" mi="3" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="149" covered="3"/><counter type="LINE" missed="10" covered="1"/><counter type="COMPLEXITY" missed="26" covered="1"/><counter type="METHOD" missed="26" covered="1"/><counter type="CLASS" missed="1" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="149" covered="3"/><counter type="LINE" missed="10" covered="1"/><counter type="COMPLEXITY" missed="26" covered="1"/><counter type="METHOD" missed="26" covered="1"/><counter type="CLASS" missed="1" covered="1"/></package><package name="com/yape/app/transaction/controller"><class name="com/yape/app/transaction/controller/TransactionController" sourcefilename="TransactionController.java"><method name="createTransaction" desc="(Lcom/yape/app/transaction/model/request/TransactionRequest;)Lreactor/core/publisher/Mono;" line="23"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getTransaction" desc="(Ljava/lang/String;)Lreactor/core/publisher/Mono;" line="28"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lcom/yape/app/transaction/service/TransactionService;)V" line="15"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="10" covered="11"/><counter type="LINE" missed="3" covered="2"/><counter type="COMPLEXITY" missed="1" covered="2"/><counter type="METHOD" missed="1" covered="2"/><counter type="CLASS" missed="0" covered="1"/></class><class name="com/yape/app/transaction/controller/GraphQLTransactionController" sourcefilename="GraphQLTransactionController.java"><method name="getTransaction" desc="(Ljava/lang/String;)Lreactor/core/publisher/Mono;" line="24"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createTransaction" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;)Lreactor/core/publisher/Mono;" line="34"><counter type="INSTRUCTION" missed="16" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lcom/yape/app/transaction/service/TransactionService;)V" line="17"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="16"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="31" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="GraphQLTransactionController.java"><line nr="16" mi="4" ci="0" mb="0" cb="0"/><line nr="17" mi="6" ci="0" mb="0" cb="0"/><line nr="24" mi="5" ci="0" mb="0" cb="0"/><line nr="34" mi="2" ci="0" mb="0" cb="0"/><line nr="35" mi="2" ci="0" mb="0" cb="0"/><line nr="36" mi="2" ci="0" mb="0" cb="0"/><line nr="37" mi="2" ci="0" mb="0" cb="0"/><line nr="38" mi="1" ci="0" mb="0" cb="0"/><line nr="39" mi="2" ci="0" mb="0" cb="0"/><line nr="41" mi="5" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="31" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="TransactionController.java"><line nr="15" mi="0" ci="6" mb="0" cb="0"/><line nr="23" mi="0" ci="5" mb="0" cb="0"/><line nr="28" mi="6" ci="0" mb="0" cb="0"/><line nr="29" mi="1" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="10" covered="11"/><counter type="LINE" missed="3" covered="2"/><counter type="COMPLEXITY" missed="1" covered="2"/><counter type="METHOD" missed="1" covered="2"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="41" covered="11"/><counter type="LINE" missed="13" covered="2"/><counter type="COMPLEXITY" missed="5" covered="2"/><counter type="METHOD" missed="5" covered="2"/><counter type="CLASS" missed="1" covered="1"/></package><package name="com/yape/app/transaction/service/impl"><class name="com/yape/app/transaction/service/impl/ProducerKafkaServiceImpl" sourcefilename="ProducerKafkaServiceImpl.java"><method name="sendCreatedEventTransaction" desc="(Lcom/yape/app/transaction/model/entity/Transaction;)V" line="16"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lorg/springframework/kafka/core/reactive/ReactiveKafkaProducerTemplate;)V" line="10"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="com/yape/app/transaction/service/impl/ConsumerKafkaServiceImpl" sourcefilename="ConsumerKafkaServiceImpl.java"><method name="consume" desc="(Lcom/yape/app/transaction/model/entity/Transaction;)V" line="16"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lcom/yape/app/transaction/service/TransactionService;)V" line="10"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="16" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="com/yape/app/transaction/service/impl/TransactionServiceImpl" sourcefilename="TransactionServiceImpl.java"><method name="createTransaction" desc="(Lcom/yape/app/transaction/model/request/TransactionRequest;)Lreactor/core/publisher/Mono;" line="30"><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTransaction" desc="(Ljava/lang/String;)Lreactor/core/publisher/Mono;" line="48"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="updateStatusTransaction" desc="(Ljava/lang/String;Ljava/lang/String;)Lreactor/core/publisher/Mono;" line="54"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lcom/yape/app/transaction/repository/TransactionRepository;Lcom/yape/app/transaction/service/impl/ProducerKafkaServiceImpl;)V" line="21"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$updateStatusTransaction$1" desc="(Ljava/lang/String;Lcom/yape/app/transaction/model/entity/Transaction;)Lreactor/core/publisher/Mono;" line="56"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$createTransaction$0" desc="(Ljava/lang/Throwable;)Lreactor/core/publisher/Mono;" line="41"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="27"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="LINE" missed="21" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="ProducerKafkaServiceImpl.java"><line nr="10" mi="6" ci="0" mb="0" cb="0"/><line nr="16" mi="7" ci="0" mb="0" cb="0"/><line nr="17" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="ConsumerKafkaServiceImpl.java"><line nr="10" mi="6" ci="0" mb="0" cb="0"/><line nr="16" mi="4" ci="0" mb="0" cb="0"/><line nr="17" mi="2" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="16" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="TransactionServiceImpl.java"><line nr="21" mi="9" ci="0" mb="0" cb="0"/><line nr="27" mi="4" ci="0" mb="0" cb="0"/><line nr="30" mi="4" ci="0" mb="0" cb="0"/><line nr="31" mi="4" ci="0" mb="0" cb="0"/><line nr="32" mi="4" ci="0" mb="0" cb="0"/><line nr="33" mi="4" ci="0" mb="0" cb="0"/><line nr="34" mi="4" ci="0" mb="0" cb="0"/><line nr="35" mi="4" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="37" mi="3" ci="0" mb="0" cb="0"/><line nr="38" mi="9" ci="0" mb="0" cb="0"/><line nr="39" mi="5" ci="0" mb="0" cb="0"/><line nr="40" mi="1" ci="0" mb="0" cb="0"/><line nr="41" mi="4" ci="0" mb="0" cb="0"/><line nr="42" mi="3" ci="0" mb="0" cb="0"/><line nr="48" mi="6" ci="0" mb="0" cb="0"/><line nr="49" mi="1" ci="0" mb="0" cb="0"/><line nr="54" mi="8" ci="0" mb="0" cb="0"/><line nr="55" mi="1" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="0" cb="0"/><line nr="57" mi="5" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="LINE" missed="21" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="119" covered="0"/><counter type="LINE" missed="29" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="3" covered="0"/></package><package name="com/yape/app/transaction/model/request"><class name="com/yape/app/transaction/model/request/TransactionRequest" sourcefilename="TransactionRequest.java"><method name="builder" desc="()Lcom/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder;" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAccountExternalIdDebit" desc="()Ljava/lang/String;" line="13"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAccountExternalIdCredit" desc="()Ljava/lang/String;" line="14"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTransferTypeId" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getValue" desc="()Ljava/lang/Double;" line="16"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAccountExternalIdDebit" desc="(Ljava/lang/String;)V" line="9"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAccountExternalIdCredit" desc="(Ljava/lang/String;)V" line="9"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTransferTypeId" desc="(Ljava/lang/String;)V" line="9"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setValue" desc="(Ljava/lang/Double;)V" line="9"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;)V" line="10"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="32" covered="15"/><counter type="LINE" missed="6" covered="1"/><counter type="COMPLEXITY" missed="9" covered="1"/><counter type="METHOD" missed="9" covered="1"/><counter type="CLASS" missed="0" covered="1"/></class><class name="com/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder" sourcefilename="TransactionRequest.java"><method name="&lt;init&gt;" desc="()V" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="accountExternalIdDebit" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="accountExternalIdCredit" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="transferTypeId" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="value" desc="(Ljava/lang/Double;)Lcom/yape/app/transaction/model/request/TransactionRequest$TransactionRequestBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lcom/yape/app/transaction/model/request/TransactionRequest;" line="11"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="TransactionRequest.java"><line nr="9" mi="16" ci="0" mb="0" cb="0"/><line nr="10" mi="0" ci="15" mb="0" cb="0"/><line nr="11" mi="49" ci="0" mb="0" cb="0"/><line nr="13" mi="3" ci="0" mb="0" cb="0"/><line nr="14" mi="3" ci="0" mb="0" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="16" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="77" covered="15"/><counter type="LINE" missed="6" covered="1"/><counter type="COMPLEXITY" missed="16" covered="1"/><counter type="METHOD" missed="16" covered="1"/><counter type="CLASS" missed="1" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="77" covered="15"/><counter type="LINE" missed="6" covered="1"/><counter type="COMPLEXITY" missed="16" covered="1"/><counter type="METHOD" missed="16" covered="1"/><counter type="CLASS" missed="1" covered="1"/></package><package name="com/yape/app/transaction/util"><class name="com/yape/app/transaction/util/Util" sourcefilename="Util.java"><method name="parseDateToString" desc="(Ljava/time/LocalDateTime;)Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="Util.java"><line nr="15" mi="9" ci="0" mb="2" cb="0"/><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></package><package name="com/yape/app/transaction/model/response"><class name="com/yape/app/transaction/model/response/TransactionResponse" sourcefilename="TransactionResponse.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;Lcom/yape/app/transaction/model/response/NameValue;Lcom/yape/app/transaction/model/response/NameValue;Ljava/lang/Double;Ljava/lang/String;)V" line="9"><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lcom/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder;" line="9"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTransactionExternalId" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTransactionType" desc="()Lcom/yape/app/transaction/model/response/NameValue;" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTransactionStatus" desc="()Lcom/yape/app/transaction/model/response/NameValue;" line="13"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getValue" desc="()Ljava/lang/Double;" line="14"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCreatedAt" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTransactionExternalId" desc="(Ljava/lang/String;)V" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTransactionType" desc="(Lcom/yape/app/transaction/model/response/NameValue;)V" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTransactionStatus" desc="(Lcom/yape/app/transaction/model/response/NameValue;)V" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setValue" desc="(Ljava/lang/Double;)V" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCreatedAt" desc="(Ljava/lang/String;)V" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="57" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="12" covered="0"/><counter type="METHOD" missed="12" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="com/yape/app/transaction/model/response/NameValue$NameValueBuilder" sourcefilename="NameValue.java"><method name="&lt;init&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="name" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/response/NameValue$NameValueBuilder;" line="9"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lcom/yape/app/transaction/model/response/NameValue;" line="9"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="9"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="com/yape/app/transaction/model/response/NameValue" sourcefilename="NameValue.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="9"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lcom/yape/app/transaction/model/response/NameValue$NameValueBuilder;" line="9"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getName" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setName" desc="(Ljava/lang/String;)V" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="com/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder" sourcefilename="TransactionResponse.java"><method name="&lt;init&gt;" desc="()V" line="9"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="transactionExternalId" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder;" line="9"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="transactionType" desc="(Lcom/yape/app/transaction/model/response/NameValue;)Lcom/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder;" line="9"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="transactionStatus" desc="(Lcom/yape/app/transaction/model/response/NameValue;)Lcom/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder;" line="9"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="value" desc="(Ljava/lang/Double;)Lcom/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder;" line="9"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="createdAt" desc="(Ljava/lang/String;)Lcom/yape/app/transaction/model/response/TransactionResponse$TransactionResponseBuilder;" line="9"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lcom/yape/app/transaction/model/response/TransactionResponse;" line="9"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="9"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="54" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="8" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="NameValue.java"><line nr="8" mi="4" ci="0" mb="0" cb="0"/><line nr="9" mi="28" ci="0" mb="0" cb="0"/><line nr="11" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="35" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="8" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="TransactionResponse.java"><line nr="8" mi="20" ci="0" mb="0" cb="0"/><line nr="9" mi="76" ci="0" mb="0" cb="0"/><line nr="11" mi="3" ci="0" mb="0" cb="0"/><line nr="12" mi="3" ci="0" mb="0" cb="0"/><line nr="13" mi="3" ci="0" mb="0" cb="0"/><line nr="14" mi="3" ci="0" mb="0" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="111" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="20" covered="0"/><counter type="METHOD" missed="20" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="146" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="28" covered="0"/><counter type="CLASS" missed="4" covered="0"/></package><counter type="INSTRUCTION" missed="786" covered="29"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="132" covered="4"/><counter type="COMPLEXITY" missed="101" covered="4"/><counter type="METHOD" missed="100" covered="4"/><counter type="CLASS" missed="15" covered="3"/></report>
    \ No newline at end of file
    diff --git a/transaction-service-app/target/surefire-reports/TEST-com.yape.app.transaction.controller.TransactionControllerTest.xml b/transaction-service-app/target/surefire-reports/TEST-com.yape.app.transaction.controller.TransactionControllerTest.xml
    new file mode 100644
    index 0000000..c7f24a6
    --- /dev/null
    +++ b/transaction-service-app/target/surefire-reports/TEST-com.yape.app.transaction.controller.TransactionControllerTest.xml
    @@ -0,0 +1,64 @@
    +<?xml version="1.0" encoding="UTF-8"?>
    +<testsuite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report.xsd" name="com.yape.app.transaction.controller.TransactionControllerTest" time="2.211" tests="1" errors="0" skipped="0" failures="0">
    +  <properties>
    +    <property name="sun.desktop" value="windows"/>
    +    <property name="awt.toolkit" value="sun.awt.windows.WToolkit"/>
    +    <property name="java.specification.version" value="11"/>
    +    <property name="sun.cpu.isalist" value="amd64"/>
    +    <property name="sun.jnu.encoding" value="Cp1252"/>
    +    <property name="java.class.path" value="C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\target\test-classes;C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\target\classes;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.7.5\spring-boot-starter-webflux-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.7.5\spring-boot-starter-json-2.7.5.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.4.2\jackson-databind-2.13.4.2.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.4\jackson-core-2.13.4.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.4\jackson-datatype-jdk8-2.13.4.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.4\jackson-datatype-jsr310-2.13.4.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.4\jackson-module-parameter-names-2.13.4.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.7.5\spring-boot-starter-reactor-netty-2.7.5.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\netty\reactor-netty-http\1.0.24\reactor-netty-http-1.0.24.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-http\4.1.84.Final\netty-codec-http-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-common\4.1.84.Final\netty-common-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-buffer\4.1.84.Final\netty-buffer-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport\4.1.84.Final\netty-transport-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec\4.1.84.Final\netty-codec-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-handler\4.1.84.Final\netty-handler-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-http2\4.1.84.Final\netty-codec-http2-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver-dns\4.1.84.Final\netty-resolver-dns-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver\4.1.84.Final\netty-resolver-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-dns\4.1.84.Final\netty-codec-dns-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver-dns-native-macos\4.1.84.Final\netty-resolver-dns-native-macos-4.1.84.Final-osx-x86_64.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver-dns-classes-macos\4.1.84.Final\netty-resolver-dns-classes-macos-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport-native-epoll\4.1.84.Final\netty-transport-native-epoll-4.1.84.Final-linux-x86_64.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.84.Final\netty-transport-native-unix-common-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport-classes-epoll\4.1.84.Final\netty-transport-classes-epoll-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\netty\reactor-netty-core\1.0.24\reactor-netty-core-1.0.24.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-handler-proxy\4.1.84.Final\netty-handler-proxy-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-socks\4.1.84.Final\netty-codec-socks-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-web\5.3.23\spring-web-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-webflux\5.3.23\spring-webflux-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-data-mongodb-reactive\2.7.5\spring-boot-starter-data-mongodb-reactive-2.7.5.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\reactor-core\3.4.24\reactor-core-3.4.24.jar;C:\Users\ecayc\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\ecayc\.m2\repository\org\mongodb\mongodb-driver-reactivestreams\4.6.1\mongodb-driver-reactivestreams-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\mongodb\bson\4.6.1\bson-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\mongodb\mongodb-driver-core\4.6.1\mongodb-driver-core-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\mongodb\bson-record-codec\4.6.1\bson-record-codec-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\springframework\data\spring-data-mongodb\3.4.5\spring-data-mongodb-3.4.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-expression\5.3.23\spring-expression-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\data\spring-data-commons\2.7.5\spring-data-commons-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.7.5\spring-boot-starter-web-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.5\spring-boot-starter-tomcat-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.68\tomcat-embed-core-9.0.68.jar;C:\Users\ecayc\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.68\tomcat-embed-websocket-9.0.68.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-webmvc\5.3.23\spring-webmvc-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter\2.7.5\spring-boot-starter-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot\2.7.5\spring-boot-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.5\spring-boot-autoconfigure-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.7.5\spring-boot-starter-logging-2.7.5.jar;C:\Users\ecayc\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\ecayc\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\ecayc\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\ecayc\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\ecayc\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\ecayc\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-core\5.3.23\spring-core-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-jcl\5.3.23\spring-jcl-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;C:\Users\ecayc\.m2\repository\org\projectlombok\lombok\1.18.28\lombok-1.18.28.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\ecayc\.m2\repository\io\swagger\swagger-models\1.5.20\swagger-models-1.5.20.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.4\jackson-annotations-2.13.4.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\ecayc\.m2\repository\com\google\guava\guava\20.0\guava-20.0.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\ecayc\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\ecayc\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\ecayc\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\ecayc\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-beans\5.3.23\spring-beans-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-context\5.3.23\spring-context-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-aop\5.3.23\spring-aop-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.7.5\spring-boot-starter-test-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-test\2.7.5\spring-boot-test-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.7.5\spring-boot-test-autoconfigure-2.7.5.jar;C:\Users\ecayc\.m2\repository\com\jayway\jsonpath\json-path\2.7.0\json-path-2.7.0.jar;C:\Users\ecayc\.m2\repository\net\minidev\json-smart\2.4.8\json-smart-2.4.8.jar;C:\Users\ecayc\.m2\repository\net\minidev\accessors-smart\2.4.8\accessors-smart-2.4.8.jar;C:\Users\ecayc\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\ecayc\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;C:\Users\ecayc\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;C:\Users\ecayc\.m2\repository\org\assertj\assertj-core\3.22.0\assertj-core-3.22.0.jar;C:\Users\ecayc\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter\5.8.2\junit-jupiter-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.8.2\junit-jupiter-api-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\ecayc\.m2\repository\org\junit\platform\junit-platform-commons\1.8.2\junit-platform-commons-1.8.2.jar;C:\Users\ecayc\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.8.2\junit-jupiter-params-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.8.2\junit-jupiter-engine-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\junit\platform\junit-platform-engine\1.8.2\junit-platform-engine-1.8.2.jar;C:\Users\ecayc\.m2\repository\org\mockito\mockito-core\4.5.1\mockito-core-4.5.1.jar;C:\Users\ecayc\.m2\repository\net\bytebuddy\byte-buddy\1.12.18\byte-buddy-1.12.18.jar;C:\Users\ecayc\.m2\repository\net\bytebuddy\byte-buddy-agent\1.12.18\byte-buddy-agent-1.12.18.jar;C:\Users\ecayc\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\ecayc\.m2\repository\org\mockito\mockito-junit-jupiter\4.5.1\mockito-junit-jupiter-4.5.1.jar;C:\Users\ecayc\.m2\repository\org\skyscreamer\jsonassert\1.5.1\jsonassert-1.5.1.jar;C:\Users\ecayc\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-test\5.3.23\spring-test-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\xmlunit\xmlunit-core\2.9.0\xmlunit-core-2.9.0.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\reactor-test\3.4.24\reactor-test-3.4.24.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-validation\2.7.5\spring-boot-starter-validation-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.68\tomcat-embed-el-9.0.68.jar;C:\Users\ecayc\.m2\repository\org\hibernate\validator\hibernate-validator\6.2.5.Final\hibernate-validator-6.2.5.Final.jar;C:\Users\ecayc\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\ecayc\.m2\repository\org\jboss\logging\jboss-logging\3.4.3.Final\jboss-logging-3.4.3.Final.jar;C:\Users\ecayc\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\ecayc\.m2\repository\org\springframework\kafka\spring-kafka\2.8.10\spring-kafka-2.8.10.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-messaging\5.3.23\spring-messaging-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-tx\5.3.23\spring-tx-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\retry\spring-retry\1.3.4\spring-retry-1.3.4.jar;C:\Users\ecayc\.m2\repository\org\apache\kafka\kafka-clients\3.1.2\kafka-clients-3.1.2.jar;C:\Users\ecayc\.m2\repository\com\github\luben\zstd-jni\1.5.0-4\zstd-jni-1.5.0-4.jar;C:\Users\ecayc\.m2\repository\org\lz4\lz4-java\1.8.0\lz4-java-1.8.0.jar;C:\Users\ecayc\.m2\repository\org\xerial\snappy\snappy-java\1.1.8.4\snappy-java-1.1.8.4.jar;C:\Users\ecayc\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\kafka\reactor-kafka\1.3.13\reactor-kafka-1.3.13.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-graphql\2.7.5\spring-boot-starter-graphql-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\graphql\spring-graphql\1.0.2\spring-graphql-1.0.2.jar;C:\Users\ecayc\.m2\repository\org\springframework\graphql\spring-graphql-test\1.0.2\spring-graphql-test-1.0.2.jar;C:\Users\ecayc\.m2\repository\com\graphql-java\graphql-java\18.3\graphql-java-18.3.jar;C:\Users\ecayc\.m2\repository\com\graphql-java\java-dataloader\3.1.2\java-dataloader-3.1.2.jar;C:\Users\ecayc\.m2\repository\org\antlr\antlr4-runtime\4.9.3\antlr4-runtime-4.9.3.jar;"/>
    +    <property name="java.vm.vendor" value="Oracle Corporation"/>
    +    <property name="sun.arch.data.model" value="64"/>
    +    <property name="user.variant" value=""/>
    +    <property name="java.vendor.url" value="https://openjdk.java.net/"/>
    +    <property name="user.timezone" value="America/Bogota"/>
    +    <property name="java.vm.specification.version" value="11"/>
    +    <property name="os.name" value="Windows 10"/>
    +    <property name="sun.java.launcher" value="SUN_STANDARD"/>
    +    <property name="user.country" value="PE"/>
    +    <property name="sun.boot.library.path" value="C:\Program Files\OpenJDK\jdk-11.0.8.10-hotspot\bin"/>
    +    <property name="sun.java.command" value="C:\Users\ecayc\AppData\Local\Temp\surefire18307928364547199961\surefirebooter11805772168447226188.jar C:\Users\ecayc\AppData\Local\Temp\surefire18307928364547199961 2024-09-08T22-07-57_942-jvmRun1 surefire9992805915982981919tmp surefire_014987949565624409221tmp"/>
    +    <property name="jdk.debug" value="release"/>
    +    <property name="surefire.test.class.path" value="C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\target\test-classes;C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app\target\classes;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-webflux\2.7.5\spring-boot-starter-webflux-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.7.5\spring-boot-starter-json-2.7.5.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.13.4.2\jackson-databind-2.13.4.2.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.13.4\jackson-core-2.13.4.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.4\jackson-datatype-jdk8-2.13.4.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.4\jackson-datatype-jsr310-2.13.4.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.4\jackson-module-parameter-names-2.13.4.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-reactor-netty\2.7.5\spring-boot-starter-reactor-netty-2.7.5.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\netty\reactor-netty-http\1.0.24\reactor-netty-http-1.0.24.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-http\4.1.84.Final\netty-codec-http-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-common\4.1.84.Final\netty-common-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-buffer\4.1.84.Final\netty-buffer-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport\4.1.84.Final\netty-transport-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec\4.1.84.Final\netty-codec-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-handler\4.1.84.Final\netty-handler-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-http2\4.1.84.Final\netty-codec-http2-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver-dns\4.1.84.Final\netty-resolver-dns-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver\4.1.84.Final\netty-resolver-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-dns\4.1.84.Final\netty-codec-dns-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver-dns-native-macos\4.1.84.Final\netty-resolver-dns-native-macos-4.1.84.Final-osx-x86_64.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-resolver-dns-classes-macos\4.1.84.Final\netty-resolver-dns-classes-macos-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport-native-epoll\4.1.84.Final\netty-transport-native-epoll-4.1.84.Final-linux-x86_64.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport-native-unix-common\4.1.84.Final\netty-transport-native-unix-common-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-transport-classes-epoll\4.1.84.Final\netty-transport-classes-epoll-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\netty\reactor-netty-core\1.0.24\reactor-netty-core-1.0.24.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-handler-proxy\4.1.84.Final\netty-handler-proxy-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\io\netty\netty-codec-socks\4.1.84.Final\netty-codec-socks-4.1.84.Final.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-web\5.3.23\spring-web-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-webflux\5.3.23\spring-webflux-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-data-mongodb-reactive\2.7.5\spring-boot-starter-data-mongodb-reactive-2.7.5.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\reactor-core\3.4.24\reactor-core-3.4.24.jar;C:\Users\ecayc\.m2\repository\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar;C:\Users\ecayc\.m2\repository\org\mongodb\mongodb-driver-reactivestreams\4.6.1\mongodb-driver-reactivestreams-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\mongodb\bson\4.6.1\bson-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\mongodb\mongodb-driver-core\4.6.1\mongodb-driver-core-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\mongodb\bson-record-codec\4.6.1\bson-record-codec-4.6.1.jar;C:\Users\ecayc\.m2\repository\org\springframework\data\spring-data-mongodb\3.4.5\spring-data-mongodb-3.4.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-expression\5.3.23\spring-expression-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\data\spring-data-commons\2.7.5\spring-data-commons-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.7.5\spring-boot-starter-web-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.7.5\spring-boot-starter-tomcat-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.68\tomcat-embed-core-9.0.68.jar;C:\Users\ecayc\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.68\tomcat-embed-websocket-9.0.68.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-webmvc\5.3.23\spring-webmvc-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter\2.7.5\spring-boot-starter-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot\2.7.5\spring-boot-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.7.5\spring-boot-autoconfigure-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.7.5\spring-boot-starter-logging-2.7.5.jar;C:\Users\ecayc\.m2\repository\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;C:\Users\ecayc\.m2\repository\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;C:\Users\ecayc\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;C:\Users\ecayc\.m2\repository\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;C:\Users\ecayc\.m2\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;C:\Users\ecayc\.m2\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-core\5.3.23\spring-core-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-jcl\5.3.23\spring-jcl-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;C:\Users\ecayc\.m2\repository\org\projectlombok\lombok\1.18.28\lombok-1.18.28.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-swagger2\2.9.2\springfox-swagger2-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\swagger\swagger-annotations\1.5.20\swagger-annotations-1.5.20.jar;C:\Users\ecayc\.m2\repository\io\swagger\swagger-models\1.5.20\swagger-models-1.5.20.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.4\jackson-annotations-2.13.4.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-spi\2.9.2\springfox-spi-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-core\2.9.2\springfox-core-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-schema\2.9.2\springfox-schema-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-swagger-common\2.9.2\springfox-swagger-common-2.9.2.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-spring-web\2.9.2\springfox-spring-web-2.9.2.jar;C:\Users\ecayc\.m2\repository\com\google\guava\guava\20.0\guava-20.0.jar;C:\Users\ecayc\.m2\repository\com\fasterxml\classmate\1.5.1\classmate-1.5.1.jar;C:\Users\ecayc\.m2\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;C:\Users\ecayc\.m2\repository\org\springframework\plugin\spring-plugin-metadata\1.2.0.RELEASE\spring-plugin-metadata-1.2.0.RELEASE.jar;C:\Users\ecayc\.m2\repository\org\mapstruct\mapstruct\1.2.0.Final\mapstruct-1.2.0.Final.jar;C:\Users\ecayc\.m2\repository\io\springfox\springfox-swagger-ui\2.9.2\springfox-swagger-ui-2.9.2.jar;C:\Users\ecayc\.m2\repository\org\springframework\plugin\spring-plugin-core\1.2.0.RELEASE\spring-plugin-core-1.2.0.RELEASE.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-beans\5.3.23\spring-beans-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-context\5.3.23\spring-context-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-aop\5.3.23\spring-aop-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.7.5\spring-boot-starter-test-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-test\2.7.5\spring-boot-test-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.7.5\spring-boot-test-autoconfigure-2.7.5.jar;C:\Users\ecayc\.m2\repository\com\jayway\jsonpath\json-path\2.7.0\json-path-2.7.0.jar;C:\Users\ecayc\.m2\repository\net\minidev\json-smart\2.4.8\json-smart-2.4.8.jar;C:\Users\ecayc\.m2\repository\net\minidev\accessors-smart\2.4.8\accessors-smart-2.4.8.jar;C:\Users\ecayc\.m2\repository\org\ow2\asm\asm\9.1\asm-9.1.jar;C:\Users\ecayc\.m2\repository\jakarta\xml\bind\jakarta.xml.bind-api\2.3.3\jakarta.xml.bind-api-2.3.3.jar;C:\Users\ecayc\.m2\repository\jakarta\activation\jakarta.activation-api\1.2.2\jakarta.activation-api-1.2.2.jar;C:\Users\ecayc\.m2\repository\org\assertj\assertj-core\3.22.0\assertj-core-3.22.0.jar;C:\Users\ecayc\.m2\repository\org\hamcrest\hamcrest\2.2\hamcrest-2.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter\5.8.2\junit-jupiter-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter-api\5.8.2\junit-jupiter-api-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\opentest4j\opentest4j\1.2.0\opentest4j-1.2.0.jar;C:\Users\ecayc\.m2\repository\org\junit\platform\junit-platform-commons\1.8.2\junit-platform-commons-1.8.2.jar;C:\Users\ecayc\.m2\repository\org\apiguardian\apiguardian-api\1.1.2\apiguardian-api-1.1.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter-params\5.8.2\junit-jupiter-params-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.8.2\junit-jupiter-engine-5.8.2.jar;C:\Users\ecayc\.m2\repository\org\junit\platform\junit-platform-engine\1.8.2\junit-platform-engine-1.8.2.jar;C:\Users\ecayc\.m2\repository\org\mockito\mockito-core\4.5.1\mockito-core-4.5.1.jar;C:\Users\ecayc\.m2\repository\net\bytebuddy\byte-buddy\1.12.18\byte-buddy-1.12.18.jar;C:\Users\ecayc\.m2\repository\net\bytebuddy\byte-buddy-agent\1.12.18\byte-buddy-agent-1.12.18.jar;C:\Users\ecayc\.m2\repository\org\objenesis\objenesis\3.2\objenesis-3.2.jar;C:\Users\ecayc\.m2\repository\org\mockito\mockito-junit-jupiter\4.5.1\mockito-junit-jupiter-4.5.1.jar;C:\Users\ecayc\.m2\repository\org\skyscreamer\jsonassert\1.5.1\jsonassert-1.5.1.jar;C:\Users\ecayc\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-test\5.3.23\spring-test-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\xmlunit\xmlunit-core\2.9.0\xmlunit-core-2.9.0.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\reactor-test\3.4.24\reactor-test-3.4.24.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-validation\2.7.5\spring-boot-starter-validation-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.68\tomcat-embed-el-9.0.68.jar;C:\Users\ecayc\.m2\repository\org\hibernate\validator\hibernate-validator\6.2.5.Final\hibernate-validator-6.2.5.Final.jar;C:\Users\ecayc\.m2\repository\jakarta\validation\jakarta.validation-api\2.0.2\jakarta.validation-api-2.0.2.jar;C:\Users\ecayc\.m2\repository\org\jboss\logging\jboss-logging\3.4.3.Final\jboss-logging-3.4.3.Final.jar;C:\Users\ecayc\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\Users\ecayc\.m2\repository\org\springframework\kafka\spring-kafka\2.8.10\spring-kafka-2.8.10.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-messaging\5.3.23\spring-messaging-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\spring-tx\5.3.23\spring-tx-5.3.23.jar;C:\Users\ecayc\.m2\repository\org\springframework\retry\spring-retry\1.3.4\spring-retry-1.3.4.jar;C:\Users\ecayc\.m2\repository\org\apache\kafka\kafka-clients\3.1.2\kafka-clients-3.1.2.jar;C:\Users\ecayc\.m2\repository\com\github\luben\zstd-jni\1.5.0-4\zstd-jni-1.5.0-4.jar;C:\Users\ecayc\.m2\repository\org\lz4\lz4-java\1.8.0\lz4-java-1.8.0.jar;C:\Users\ecayc\.m2\repository\org\xerial\snappy\snappy-java\1.1.8.4\snappy-java-1.1.8.4.jar;C:\Users\ecayc\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar;C:\Users\ecayc\.m2\repository\io\projectreactor\kafka\reactor-kafka\1.3.13\reactor-kafka-1.3.13.jar;C:\Users\ecayc\.m2\repository\org\springframework\boot\spring-boot-starter-graphql\2.7.5\spring-boot-starter-graphql-2.7.5.jar;C:\Users\ecayc\.m2\repository\org\springframework\graphql\spring-graphql\1.0.2\spring-graphql-1.0.2.jar;C:\Users\ecayc\.m2\repository\org\springframework\graphql\spring-graphql-test\1.0.2\spring-graphql-test-1.0.2.jar;C:\Users\ecayc\.m2\repository\com\graphql-java\graphql-java\18.3\graphql-java-18.3.jar;C:\Users\ecayc\.m2\repository\com\graphql-java\java-dataloader\3.1.2\java-dataloader-3.1.2.jar;C:\Users\ecayc\.m2\repository\org\antlr\antlr4-runtime\4.9.3\antlr4-runtime-4.9.3.jar;"/>
    +    <property name="sun.cpu.endian" value="little"/>
    +    <property name="user.home" value="C:\Users\ecayc"/>
    +    <property name="user.language" value="es"/>
    +    <property name="java.specification.vendor" value="Oracle Corporation"/>
    +    <property name="java.version.date" value="2020-07-14"/>
    +    <property name="java.home" value="C:\Program Files\OpenJDK\jdk-11.0.8.10-hotspot"/>
    +    <property name="file.separator" value="\"/>
    +    <property name="basedir" value="C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app"/>
    +    <property name="java.vm.compressedOopsMode" value="Zero based"/>
    +    <property name="line.separator" value="&#10;"/>
    +    <property name="java.specification.name" value="Java Platform API Specification"/>
    +    <property name="java.vm.specification.vendor" value="Oracle Corporation"/>
    +    <property name="java.awt.graphicsenv" value="sun.awt.Win32GraphicsEnvironment"/>
    +    <property name="surefire.real.class.path" value="C:\Users\ecayc\AppData\Local\Temp\surefire18307928364547199961\surefirebooter11805772168447226188.jar"/>
    +    <property name="user.script" value=""/>
    +    <property name="sun.management.compiler" value="HotSpot 64-Bit Tiered Compilers"/>
    +    <property name="java.runtime.version" value="11.0.8-internal+0-adhoc..jdk11u"/>
    +    <property name="user.name" value="ecayc"/>
    +    <property name="path.separator" value=";"/>
    +    <property name="os.version" value="10.0"/>
    +    <property name="java.runtime.name" value="OpenJDK Runtime Environment"/>
    +    <property name="file.encoding" value="Cp1252"/>
    +    <property name="java.vm.name" value="OpenJDK 64-Bit Server VM"/>
    +    <property name="localRepository" value="C:\Users\ecayc\.m2\repository"/>
    +    <property name="java.vendor.url.bug" value="https://bugreport.java.com/bugreport/"/>
    +    <property name="java.io.tmpdir" value="C:\Users\ecayc\AppData\Local\Temp\"/>
    +    <property name="idea.version" value="2022.2.4"/>
    +    <property name="java.version" value="11.0.8-internal"/>
    +    <property name="user.dir" value="C:\Users\ecayc\Documents\Repositorio-reto-tech\transaction-service-app"/>
    +    <property name="os.arch" value="amd64"/>
    +    <property name="java.vm.specification.name" value="Java Virtual Machine Specification"/>
    +    <property name="java.awt.printerjob" value="sun.awt.windows.WPrinterJob"/>
    +    <property name="sun.os.patch.level" value=""/>
    +    <property name="java.library.path" value="C:\Program Files\OpenJDK\jdk-11.0.8.10-hotspot\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\Python312\Scripts\;C:\Python312\;C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\apache-maven-3.8.1\bin;C:\openjdk-12.0.2_windows-x64_bin\jdk-12.0.2\bin;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\PuTTY\;C:\Program Files\dotnet\;C:\Program Files\nodejs\;C:\ProgramData\chocolatey\bin;;C:\Program Files\Docker\Docker\resources\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\ecayc\AppData\Local\Microsoft\WindowsApps;C:\Users\ecayc\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\ecayc\AppData\Roaming\npm;."/>
    +    <property name="java.vm.info" value="mixed mode"/>
    +    <property name="java.vendor" value="N/A"/>
    +    <property name="java.vm.version" value="11.0.8-internal+0-adhoc..jdk11u"/>
    +    <property name="sun.io.unicode.encoding" value="UnicodeLittle"/>
    +    <property name="java.class.version" value="55.0"/>
    +  </properties>
    +  <testcase name="createTransaction" classname="com.yape.app.transaction.controller.TransactionControllerTest" time="2.157"/>
    +</testsuite>
    \ No newline at end of file
    diff --git a/transaction-service-app/target/surefire-reports/com.yape.app.transaction.controller.TransactionControllerTest.txt b/transaction-service-app/target/surefire-reports/com.yape.app.transaction.controller.TransactionControllerTest.txt
    new file mode 100644
    index 0000000..92398d6
    --- /dev/null
    +++ b/transaction-service-app/target/surefire-reports/com.yape.app.transaction.controller.TransactionControllerTest.txt
    @@ -0,0 +1,4 @@
    +-------------------------------------------------------------------------------
    +Test set: com.yape.app.transaction.controller.TransactionControllerTest
    +-------------------------------------------------------------------------------
    +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.211 s - in com.yape.app.transaction.controller.TransactionControllerTest
    diff --git a/transaction-service-app/target/test-classes/com/yape/app/transaction/controller/TransactionControllerTest.class b/transaction-service-app/target/test-classes/com/yape/app/transaction/controller/TransactionControllerTest.class
    new file mode 100644
    index 0000000..406a70c
    Binary files /dev/null and b/transaction-service-app/target/test-classes/com/yape/app/transaction/controller/TransactionControllerTest.class differ
    diff --git a/transaction-service-app/target/transaction-service-app-1.0-SNAPSHOT.jar b/transaction-service-app/target/transaction-service-app-1.0-SNAPSHOT.jar
    new file mode 100644
    index 0000000..d33d930
    Binary files /dev/null and b/transaction-service-app/target/transaction-service-app-1.0-SNAPSHOT.jar differ
    diff --git a/transaction-service-app/target/transaction-service-app-1.0-SNAPSHOT.jar.original b/transaction-service-app/target/transaction-service-app-1.0-SNAPSHOT.jar.original
    new file mode 100644
    index 0000000..a019685
    Binary files /dev/null and b/transaction-service-app/target/transaction-service-app-1.0-SNAPSHOT.jar.original differ