diff --git a/NOTICE b/NOTICE index 531742cc88ab2ead0e0882c83ac41bad9af13da0..ac55248d8e77a3fb370eefe5152c8dba974c3eeb 100644 --- a/NOTICE +++ b/NOTICE @@ -273,16 +273,19 @@ The following software have components provided under the terms of this license: - AWS Java SDK for the AWS Simple Systems Management (SSM) Service (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for the Amazon EC2 Container Registry (from https://aws.amazon.com/sdkforjava) - AWS Java SDK for the Amazon EC2 Container Service (from https://aws.amazon.com/sdkforjava) +- AWS SDK For Java (from https://aws.amazon.com/sdkforjava) +- AWS SDK for Java - BOM (from https://aws.amazon.com/sdkforjava) - AWS SDK for Java - Core (from https://aws.amazon.com/sdkforjava) - AWS SDK for Java - Models (from https://aws.amazon.com/sdkforjava) - Adapter: RxJava (from https://repo1.maven.org/maven2/com/squareup/retrofit2/adapter-rxjava) -- Apache Commons Codec (from https://commons.apache.org/proper/commons-codec/) +- Apache Commons Codec (from http://commons.apache.org/proper/commons-codec/, https://commons.apache.org/proper/commons-codec/) - Apache Commons Collections (from http://commons.apache.org/proper/commons-collections/) - Apache Commons IO (from http://commons.apache.org/io/, https://commons.apache.org/proper/commons-io/, https://repo1.maven.org/maven2/commons-io/commons-io) - Apache Commons Lang (from http://commons.apache.org/proper/commons-lang/) - Apache Commons Logging (from http://commons.apache.org/logging/, http://commons.apache.org/proper/commons-logging/) - Apache Geronimo JMS Spec 2.0 (from http://geronimo.apache.org/maven/${siteId}/${version}) - Apache Groovy (from http://groovy-lang.org, http://groovy.codehaus.org/, https://groovy-lang.org) +- Apache HttpClient (from http://hc.apache.org/httpcomponents-client) - Apache HttpClient Cache (from http://hc.apache.org/httpcomponents-client) - Apache HttpCore (from http://hc.apache.org/httpcomponents-core-ga, http://hc.apache.org/httpcomponents-core-ga/, http://hc.apache.org/httpcomponents-core/) - Apache Log4j API (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api) @@ -303,11 +306,12 @@ The following software have components provided under the terms of this license: - Byte Buddy (without dependencies) (from https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy) - Byte Buddy Java agent (from https://repo1.maven.org/maven2/net/bytebuddy/byte-buddy-agent) - ClassMate (from http://github.com/cowtowncoder/java-classmate) -- Cloud Key Management Service (KMS) API v1-rev86-1.24.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-cloudkms) -- Cloud Storage JSON API v1-rev20211018-1.32.1 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) +- Cloud Key Management Service (KMS) API (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-cloudkms) +- Cloud Storage JSON API (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-storage) - CloudWatch Metrics for AWS Java SDK (from https://aws.amazon.com/sdkforjava) - Converter: Jackson (from https://github.com/square/retrofit, https://repo1.maven.org/maven2/com/squareup/retrofit2/converter-jackson) - Core functionality for the Reactor Netty library (from https://github.com/reactor/reactor-netty) +- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - FindBugs-jsr305 (from http://findbugs.sourceforge.net/) - GSON extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-gson) - Google APIs Client Library for Java (from https://repo1.maven.org/maven2/com/google/api-client/google-api-client) @@ -322,6 +326,7 @@ The following software have components provided under the terms of this license: - Google Cloud Storage (from https://github.com/googleapis/google-cloud-java/tree/master/google-cloud-clients/google-cloud-storage, https://github.com/googleapis/java-storage) - Google Guice - Core Library (from https://repo1.maven.org/maven2/com/google/inject/guice) - Google HTTP Client Library for Java (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client) +- Google Identity and Access Management (IAM) API (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-iam) - Google OAuth Client Library for Java (from https://repo1.maven.org/maven2/com/google/oauth-client/google-oauth-client) - Gson (from http://code.google.com/p/google-gson/, https://repo1.maven.org/maven2/com/google/code/gson/gson) - Guava InternalFutureFailureAccess and InternalFutures (from https://repo1.maven.org/maven2/com/google/guava/failureaccess) @@ -330,12 +335,10 @@ The following software have components provided under the terms of this license: - Hibernate Validator (from https://repo1.maven.org/maven2/org/hibernate/hibernate-validator, https://repo1.maven.org/maven2/org/hibernate/validator/hibernate-validator) - HikariCP (from https://github.com/brettwooldridge/HikariCP) - Hop (from https://github.com/rabbitmq/hop, https://www.rabbitmq.com) -- HttpClient (from http://hc.apache.org/httpcomponents-client) - IBM COS Java SDK for Amazon S3 (from https://github.com/ibm/ibm-cos-sdk-java) - IBM COS Java SDK for COS KMS (from https://github.com/ibm/ibm-cos-sdk-java) - IBM COS SDK For Java (from https://github.com/ibm/ibm-cos-sdk-java) - IBM COS SDK for Java - Core (from https://github.com/ibm/ibm-cos-sdk-java) -- Identity and Access Management (IAM) API v1-rev310-1.25.0 (from https://repo1.maven.org/maven2/com/google/apis/google-api-services-iam) - J2ObjC Annotations (from https://github.com/google/j2objc/) - JBoss Logging 3 (from http://www.jboss.org) - JCIP Annotations under Apache License (from http://stephenc.github.com/jcip-annotations) @@ -343,7 +346,7 @@ The following software have components provided under the terms of this license: - JSON Small and Fast Parser (from https://repo1.maven.org/maven2/net/minidev/json-smart, https://urielch.github.io/) - JSON Web Token support for the JVM (from https://repo1.maven.org/maven2/io/jsonwebtoken/jjwt) - JSON library from Android SDK (from http://developer.android.com/sdk) -- JSONassert (from http://github.com/skyscreamer/yoga) +- JSONassert (from http://github.com/skyscreamer/yoga, https://github.com/skyscreamer/JSONassert) - JSR107 API and SPI (from https://github.com/jsr107/jsr107spec) - Jackson 2 extensions to the Google HTTP Client Library for Java. (from https://repo1.maven.org/maven2/com/google/http-client/google-http-client-jackson2) - Jackson dataformat: CBOR (from http://github.com/FasterXML/jackson-dataformats-binary) @@ -358,9 +361,8 @@ The following software have components provided under the terms of this license: - Jackson-dataformat-YAML (from http://wiki.fasterxml.com/JacksonExtensionYAML, https://github.com/FasterXML/jackson, https://github.com/FasterXML/jackson-dataformats-text) - Jackson-module-parameter-names (from https://repo1.maven.org/maven2/com/fasterxml/jackson/module/jackson-module-parameter-names) - Jakarta Bean Validation API (from https://beanvalidation.org) -- Jakarta Expression Language Implementation (from https://projects.eclipse.org/projects/ee4j.el) - Java Libraries for Amazon Simple WorkFlow (from https://aws.amazon.com/sdkforjava) -- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna) +- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna, https://repo1.maven.org/maven2/net/java/dev/jna/jna) - Java Native Access Platform (from https://github.com/java-native-access/jna) - Java UUID Generator (from http://wiki.fasterxml.com/JugHome) - Javassist (from http://www.javassist.org/) @@ -389,6 +391,7 @@ The following software have components provided under the terms of this license: - Mockito (from http://mockito.org, http://www.mockito.org, https://github.com/mockito/mockito) - MongoDB Driver (from http://www.mongodb.org) - MongoDB Java Driver (from http://mongodb.org/, http://www.mongodb.org) +- Netty Reactive Streams Implementation (from https://repo1.maven.org/maven2/com/typesafe/netty/netty-reactive-streams) - Netty/Buffer (from https://repo1.maven.org/maven2/io/netty/netty-buffer) - Netty/Codec (from https://repo1.maven.org/maven2/io/netty/netty-codec) - Netty/Codec/DNS (from https://repo1.maven.org/maven2/io/netty/netty-codec-dns) @@ -424,6 +427,7 @@ The following software have components provided under the terms of this license: - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - Reactive Streams Netty driver (from https://github.com/reactor/reactor-netty) - Retrofit (from https://github.com/square/retrofit, https://repo1.maven.org/maven2/com/squareup/retrofit2/retrofit) +- RxJava (from https://github.com/ReactiveX/RxJava) - Simple XML (safe) (from https://github.com/dweiss/simplexml) - SnakeYAML (from http://code.google.com/p/snakeyaml/, http://www.snakeyaml.org) - Spring AOP (from http://www.springframework.org, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-aop) @@ -455,10 +459,11 @@ The following software have components provided under the terms of this license: - Spring Data Core (from https://repo1.maven.org/maven2/org/springframework/data/spring-data-commons) - Spring Data MongoDB - Core (from https://repo1.maven.org/maven2/org/springframework/data/spring-data-mongodb) - Spring Expression Language (SpEL) (from https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-expression) -- Spring JMS (from https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-jms) +- Spring JDBC (from https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-jdbc) +- Spring JMS (from http://www.springframework.org, https://github.com/SpringSource/spring-framework, https://github.com/spring-projects/spring-framework, https://repo1.maven.org/maven2/org/springframework/spring-jms) - Spring Messaging (from https://github.com/spring-projects/spring-framework) -- Spring Plugin - Core (from https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-core) - Spring Plugin - Metadata Extension (from https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-metadata) +- Spring Plugin Core (from https://repo1.maven.org/maven2/org/springframework/plugin/spring-plugin-core) - Spring Security - Core (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-core, https://spring.io/projects/spring-security, https://spring.io/spring-security) - Spring Security - Namespace Configuration Module (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-config, https://spring.io/spring-security) - Spring Security - Web Application Security Module (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-web, https://spring.io/projects/spring-security, https://spring.io/spring-security) @@ -494,7 +499,7 @@ The following software have components provided under the terms of this license: - jackson-databind (from http://github.com/FasterXML/jackson, http://wiki.fasterxml.com/JacksonHome) - java-cloudant (from https://cloudant.com) - javatuples (from http://www.javatuples.org) -- javax.inject (from http://code.google.com/p/atinject/) +- javax.inject (from http://code.google.com/p/atinject/, https://repo1.maven.org/maven2/org/glassfish/hk2/external/javax.inject) - jose4j (from https://bitbucket.org/b_c/jose4j/) - json-path (from http://code.google.com/p/json-path/, https://github.com/jayway/JsonPath) - lettuce (from http://github.com/mp911de/lettuce/wiki, https://github.com/lettuce-io/lettuce-core/wiki) @@ -514,8 +519,6 @@ The following software have components provided under the terms of this license: - proto-google-iam-v1 (from https://github.com/googleapis/googleapis, https://github.com/googleapis/java-iam/proto-google-iam-v1) - requests (from http://python-requests.org, https://requests.readthedocs.io) - resilience4j (from https://github.com/resilience4j/resilience4j, ttps://resilience4j.readme.io) -- rxjava (from https://github.com/ReactiveX/RxJava) -- spring-jdbc (from https://repo1.maven.org/maven2/org/springframework/spring-jdbc) - springfox-bean-validators (from https://github.com/springfox/springfox) - springfox-boot-starter (from https://github.com/springfox/springfox) - springfox-core (from https://github.com/springfox/springfox) @@ -544,7 +547,7 @@ The following software have components provided under the terms of this license: - API Common (from https://github.com/googleapis, https://github.com/googleapis/api-common-java) - GAX (Google Api eXtensions) (from https://github.com/googleapis, https://github.com/googleapis/gax-java) - Hamcrest (from http://hamcrest.org/JavaHamcrest/) -- Hamcrest Core (from https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) +- Hamcrest Core (from http://hamcrest.org/, https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) - HdrHistogram (from http://hdrhistogram.github.io/HdrHistogram/) - PostgreSQL JDBC Driver - Reflections (from http://code.google.com/p/reflections/, http://github.com/ronmamo/reflections) @@ -558,15 +561,15 @@ The following software have components provided under the terms of this license: - API Common (from https://github.com/googleapis, https://github.com/googleapis/api-common-java) - ASM Core (from http://asm.ow2.io/, http://asm.ow2.org/) -- Apache Commons Codec (from https://commons.apache.org/proper/commons-codec/) +- Apache Commons Codec (from http://commons.apache.org/proper/commons-codec/, https://commons.apache.org/proper/commons-codec/) - GAX (Google Api eXtensions) (from https://github.com/googleapis, https://github.com/googleapis/gax-java) - Google APIs Client Library for Java (from https://repo1.maven.org/maven2/com/google/api-client/google-api-client) - Google Auth Library for Java - Credentials (from https://repo1.maven.org/maven2/com/google/auth/google-auth-library-credentials) - Google Auth Library for Java - OAuth2 HTTP (from https://repo1.maven.org/maven2/com/google/auth/google-auth-library-oauth2-http) - Hamcrest (from http://hamcrest.org/JavaHamcrest/) -- Hamcrest Core (from https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) +- Hamcrest Core (from http://hamcrest.org/, https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core) - HdrHistogram (from http://hdrhistogram.github.io/HdrHistogram/) -- Jakarta Activation API jar (from https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) - Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -596,8 +599,6 @@ The following software have components provided under the terms of this license: ======================================================================== CC-BY-4.0 ======================================================================== -The following software have components provided under the terms of this license: - - Microsoft Application Insights Java SDK Core (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Spring Boot starter (from https://github.com/Microsoft/ApplicationInsights-Java) - Microsoft Application Insights Java SDK Web Module (from https://github.com/Microsoft/ApplicationInsights-Java) @@ -615,6 +616,7 @@ CDDL-1.1 ======================================================================== The following software have components provided under the terms of this license: +- JSR 353 (JSON Processing) API (from http://json-processing-spec.java.net) - JSR 353 (JSON Processing) Default Provider (from http://jsonp.java.net) - JSR 374 (JSON Processing) API (from https://javaee.github.io/jsonp) - JavaBeans Activation Framework @@ -634,6 +636,7 @@ EPL-1.0 The following software have components provided under the terms of this license: - AspectJ Weaver (from http://www.aspectj.org, https://www.eclipse.org/aspectj/) +- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) - JUnit Jupiter API (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Jupiter Engine (from http://junit.org/junit5/, https://junit.org/junit5/) @@ -641,7 +644,6 @@ The following software have components provided under the terms of this license: - JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) -- Jakarta Expression Language Implementation (from https://projects.eclipse.org/projects/ee4j.el) - Logback Classic Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-classic) - Logback Contrib :: JSON :: Classic (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-classic) - Logback Contrib :: JSON :: Core (from https://repo1.maven.org/maven2/ch/qos/logback/contrib/logback-json-core) @@ -658,6 +660,7 @@ EPL-2.0 ======================================================================== The following software have components provided under the terms of this license: +- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - JUnit Jupiter (Aggregator) (from https://junit.org/junit5/) - JUnit Jupiter API (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Jupiter Engine (from http://junit.org/junit5/, https://junit.org/junit5/) @@ -665,13 +668,13 @@ The following software have components provided under the terms of this license: - JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) -- Jakarta Expression Language Implementation (from https://projects.eclipse.org/projects/ee4j.el) ======================================================================== GPL-2.0-only ======================================================================== The following software have components provided under the terms of this license: +- JSR 353 (JSON Processing) API (from http://json-processing-spec.java.net) - JSR 353 (JSON Processing) Default Provider (from http://jsonp.java.net) - JSR 374 (JSON Processing) API (from https://javaee.github.io/jsonp) - JavaBeans Activation Framework @@ -692,10 +695,11 @@ GPL-2.0-with-classpath-exception The following software have components provided under the terms of this license: - Checker Qual (from https://checkerframework.org) +- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) +- JSR 353 (JSON Processing) API (from http://json-processing-spec.java.net) - JSR 353 (JSON Processing) Default Provider (from http://jsonp.java.net) - JSR 374 (JSON Processing) API (from https://javaee.github.io/jsonp) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) -- Jakarta Expression Language Implementation (from https://projects.eclipse.org/projects/ee4j.el) - JavaBeans Activation Framework - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - javax.annotation-api (from http://jcp.org/en/jsr/detail?id=250) @@ -706,15 +710,13 @@ GPL-3.0-only ======================================================================== The following software have components provided under the terms of this license: +- Expression Language 3.0 (from http://el-spec.java.net, http://uel.java.net, https://projects.eclipse.org/projects/ee4j.el) - Jakarta Annotations API (from https://projects.eclipse.org/projects/ee4j.ca) -- Jakarta Expression Language Implementation (from https://projects.eclipse.org/projects/ee4j.el) - Project Lombok (from http://projectlombok.org, https://projectlombok.org) ======================================================================== JSON ======================================================================== -The following software have components provided under the terms of this license: - - JSON in Java (from https://github.com/douglascrockford/JSON-java) ======================================================================== @@ -722,7 +724,7 @@ LGPL-2.1-only ======================================================================== The following software have components provided under the terms of this license: -- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna) +- Java Native Access (from https://github.com/java-native-access/jna, https://github.com/twall/jna, https://repo1.maven.org/maven2/net/java/dev/jna/jna) - Java Native Access Platform (from https://github.com/java-native-access/jna) - Javassist (from http://www.javassist.org/) - Logback Classic Module (from http://logback.qos.ch, https://repo1.maven.org/maven2/ch/qos/logback/logback-classic) @@ -748,8 +750,6 @@ The following software have components provided under the terms of this license: ======================================================================== LGPL-3.0-only ======================================================================== -The following software have components provided under the terms of this license: - - Apache Log4j API (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api) - Apache Log4j Core (from https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core) - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) @@ -766,7 +766,7 @@ The following software have components provided under the terms of this license: - Azure Java Client Authentication Library for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) - Azure Java Client Runtime for ARM (from https://github.com/Azure/autorest-clientruntime-for-java) - Azure Java Client Runtime for AutoRest (from https://github.com/Azure/autorest-clientruntime-for-java) -- Azure Spring Boot AutoConfigure (from https://github.com/Azure/azure-sdk-for-java) +- Azure Spring Boot AutoConfigure (from https://github.com/Azure/azure-sdk-for-java, https://github.com/Microsoft/azure-spring-boot) - Bouncy Castle Provider (from http://www.bouncycastle.org/java.html, https://www.bouncycastle.org/java.html) - Checker Qual (from https://checkerframework.org) - ClassGraph (from https://github.com/classgraph/classgraph) @@ -794,6 +794,7 @@ The following software have components provided under the terms of this license: - Microsoft Azure SDK annotations (from https://github.com/Microsoft/java-api-annotations) - Microsoft Azure SDK for EventGrid Management (from https://github.com/Azure/azure-sdk-for-java) - Microsoft Azure SDK for SQL API of Azure Cosmos DB Service (from https://github.com/Azure/azure-sdk-for-java) +- Microsoft Azure SDK for Service Bus (from https://github.com/Azure/azure-sdk-for-java, https://github.com/Azure/azure-service-bus-java) - Microsoft Azure SDK for eventgrid (from https://github.com/Azure/azure-sdk-for-java) - Microsoft Azure client library for Blob Storage (from https://github.com/Azure/azure-sdk-for-java) - Microsoft Azure client library for Identity (from https://github.com/Azure/azure-sdk-for-java) @@ -813,7 +814,6 @@ The following software have components provided under the terms of this license: - Spring Security - Core (from http://spring.io/spring-security, https://repo1.maven.org/maven2/org/springframework/security/spring-security-core, https://spring.io/projects/spring-security, https://spring.io/spring-security) - adal4j (from https://github.com/AzureAD/azure-activedirectory-library-for-java) - azure-documentdb (from http://azure.microsoft.com/en-us/services/documentdb/, https://azure.microsoft.com/en-us/services/cosmos-db/) -- azure-servicebus (from https://github.com/Azure/azure-service-bus-java) - botocore (from https://github.com/boto/botocore) - documentdb-bulkexecutor (from http://azure.microsoft.com/en-us/services/documentdb/) - micrometer-core (from https://github.com/micrometer-metrics/micrometer) @@ -845,21 +845,17 @@ PHP-3.01 ======================================================================== The following software have components provided under the terms of this license: -- Jakarta Activation API jar (from https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) ======================================================================== Public-Domain ======================================================================== -The following software have components provided under the terms of this license: - - Spongy Castle (from http://rtyley.github.io/spongycastle/) ======================================================================== Python-2.0 ======================================================================== -The following software have components provided under the terms of this license: - - google-auth (from https://github.com/GoogleCloudPlatform/google-auth-library-python, https://github.com/googleapis/google-auth-library-python) ======================================================================== @@ -911,7 +907,7 @@ The following software have components provided under the terms of this license: - JUnit Jupiter Params (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Commons (from http://junit.org/junit5/, https://junit.org/junit5/) - JUnit Platform Engine API (from http://junit.org/junit5/, https://junit.org/junit5/) -- Jakarta Activation API jar (from https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) +- Jakarta Activation API (from https://github.com/eclipse-ee4j/jaf, https://repo1.maven.org/maven2/jakarta/activation/jakarta.activation-api) - Jakarta XML Binding API (from https://repo1.maven.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api, https://repo1.maven.org/maven2/org/jboss/spec/javax/xml/bind/jboss-jaxb-api_2.3_spec) - RabbitMQ Java Client (from http://www.rabbitmq.com, https://www.rabbitmq.com) - Spongy Castle (from http://rtyley.github.io/spongycastle/) diff --git a/devops/azure/chart/helm-config.yml b/devops/azure/chart/helm-config.yml index f3e4e404f074de5f7328efe9227fd34d8afc1aab..9087322e321dec48fa453135a0dd5de73ea9e296 100644 --- a/devops/azure/chart/helm-config.yml +++ b/devops/azure/chart/helm-config.yml @@ -30,3 +30,8 @@ image: tag: #{Build.SourceVersion}# default_tenant: #{DEFAULT_TENANT}# + +featureFlag: + notificationv2: + enabledEnvs: + - dev diff --git a/devops/azure/chart/templates/deployment.yaml b/devops/azure/chart/templates/deployment.yaml index 02c2e1716053bc34666d46ea3f2f16b7fe5842cb..bcb98c44d72d08fc04ee500b24dbe6ca6040f263 100644 --- a/devops/azure/chart/templates/deployment.yaml +++ b/devops/azure/chart/templates/deployment.yaml @@ -115,10 +115,21 @@ spec: value: {{ .Values.default_tenant}} - name: azure_istioauth_enabled value: "true" - - name: event_grid_enabled - value: "false" - name: event_grid_topic value: "schemachangedtopic" + - name: servicebus_topic_name + value: "schemachangedtopic" + {{- if has .Values.env .Values.featureFlag.notificationv2.enabledEnvs }} + - name: event_grid_enabled + value: "false" + - name: service_bus_enabled + value: "true" + {{- else }} + - name: event_grid_enabled + value: "true" + - name: service_bus_enabled + value: "false" + {{- end }} - name: SPRING_CONFIG_NAME value: "common,application" diff --git a/devops/azure/chart/values.yaml b/devops/azure/chart/values.yaml index 43f31b021d725ab3b2e381450f65df0fa5baedb7..e78bfd659a263d11a24ccb0e051b512231717f15 100644 --- a/devops/azure/chart/values.yaml +++ b/devops/azure/chart/values.yaml @@ -23,3 +23,8 @@ image: tag: latest default_tenant: opendes + +featureFlag: + notificationv2: + enabledEnvs: + - demo diff --git a/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/SchemaApplication.java b/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/SchemaApplication.java index 3496b345c1f0da1cf66bfd032e2a94f124236f1a..740993d9d2b7215c9f4c8ff9804f8a02b50af73d 100644 --- a/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/SchemaApplication.java +++ b/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/SchemaApplication.java @@ -18,6 +18,7 @@ import org.opengroup.osdu.azure.dependencies.AzureOSDUConfig; import org.opengroup.osdu.schema.azure.di.AzureBootstrapConfig; import org.opengroup.osdu.schema.azure.di.CosmosContainerConfig; import org.opengroup.osdu.schema.azure.di.EventGridConfig; +import org.opengroup.osdu.schema.azure.di.PubSubConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @@ -33,7 +34,8 @@ public class SchemaApplication { AzureBootstrapConfig.class, AzureOSDUConfig.class, CosmosContainerConfig.class, - EventGridConfig.class + EventGridConfig.class, + PubSubConfig.class }; SpringApplication.run(sources, args); } diff --git a/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/di/PubSubConfig.java b/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/di/PubSubConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..603310ee6375bce5c4a6dddefa0641ecabc73584 --- /dev/null +++ b/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/di/PubSubConfig.java @@ -0,0 +1,19 @@ +package org.opengroup.osdu.schema.azure.di; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import lombok.Getter; + +@Configuration +@ConfigurationProperties(prefix = "azure.pubsub") +@Getter +public class PubSubConfig { + + @Value("${azure.servicebus.topic-name}") + private String serviceBusTopic; + + @Value("${azure.serviceBus.enabled}") + private boolean serviceBusEnabled; +} diff --git a/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImpl.java b/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImpl.java index 2a06c3d7cffa24db6a196b197403474738a52c93..9bb10871c9eb2678062ae96b0336cffab0521763 100644 --- a/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImpl.java +++ b/provider/schema-azure/src/main/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImpl.java @@ -15,21 +15,20 @@ */ package org.opengroup.osdu.schema.azure.impl.messagebus; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.UUID; import java.util.stream.Collectors; -import org.joda.time.DateTime; -import org.opengroup.osdu.azure.eventgrid.EventGridTopicStore; +import org.opengroup.osdu.azure.publisherFacade.MessagePublisher; +import org.opengroup.osdu.azure.publisherFacade.PublisherInfo; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.model.http.AppException; import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.tenant.TenantInfo; import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; import org.opengroup.osdu.schema.azure.di.EventGridConfig; +import org.opengroup.osdu.schema.azure.di.PubSubConfig; import org.opengroup.osdu.schema.azure.di.SystemResourceConfig; import org.opengroup.osdu.schema.azure.impl.messagebus.model.SchemaPubSubInfo; import org.opengroup.osdu.schema.constants.SchemaConstants; @@ -38,13 +37,9 @@ import org.opengroup.osdu.schema.provider.interfaces.messagebus.IMessageBus; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.microsoft.azure.eventgrid.models.EventGridEvent; - @Component public class MessageBusImpl implements IMessageBus { - @Autowired - private EventGridTopicStore eventGridTopicStore; @Autowired private JaxRsDpsLog logger; @Autowired @@ -55,30 +50,35 @@ public class MessageBusImpl implements IMessageBus { DpsHeaders headers; @Autowired private ITenantFactory tenantFactory; - @Autowired - SystemResourceConfig systemResourceConfig; + private PubSubConfig pubSubConfig; + @Autowired + private SystemResourceConfig systemResourceConfig; + @Autowired + private MessagePublisher messagePublisher; private final static String EVENT_DATA_VERSION = "1.0"; @Override public void publishMessage(String schemaId, String eventType) { + // This if block will be removed once schema-core starts consuming *System* methods. - if (systemResourceConfig.getSharedTenant().equalsIgnoreCase(headers.getPartitionId())) { - this.publishMessageForSystemSchema(schemaId, eventType); - return; + if (systemResourceConfig.getSharedTenant().equalsIgnoreCase(headers. + getPartitionId())) { this.publishMessageForSystemSchema(schemaId, eventType); + return; } - if (eventGridConfig.isEventGridEnabled()) { + + if (eventGridConfig.isEventGridEnabled() || pubSubConfig.isServiceBusEnabled()) { logger.info("Generating event of type {}",eventType); try { - publishToEventGrid(schemaId, eventType, headers.getPartitionId()); + publishSchemaEventToAzure(schemaId, eventType, headers); auditLogger.schemaNotificationSuccess(Collections.singletonList(schemaId)); }catch (AppException ex) { - + //We do not want to fail schema creation if notification delivery has failed, hence just logging the exception auditLogger.schemaNotificationFailure(Collections.singletonList(schemaId)); - logger.warning(SchemaConstants.SCHEMA_NOTIFICATION_FAILED); + logger.warning(SchemaConstants.SCHEMA_NOTIFICATION_FAILED, ex); } }else { @@ -93,15 +93,20 @@ public class MessageBusImpl implements IMessageBus { */ @Override public void publishMessageForSystemSchema(String schemaId, String eventType) { - if (eventGridConfig.isEventGridEnabled()) { + if (eventGridConfig.isEventGridEnabled() || pubSubConfig.isServiceBusEnabled()) { logger.info("Generating event of type {}",eventType); try { // Publish the event for all the tenants. List privateTenantList = tenantFactory.listTenantInfo().stream().map(TenantInfo::getName) .collect(Collectors.toList()); - for (String tenant : privateTenantList) { - publishToEventGrid(schemaId, eventType, tenant); + HashMap headersMap = new HashMap<>(); + headersMap.put(DpsHeaders.ACCOUNT_ID, tenant); + headersMap.put(DpsHeaders.DATA_PARTITION_ID, tenant); + headersMap.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); + DpsHeaders headers = DpsHeaders.createFromMap(headersMap); + publishSchemaEventToAzure(schemaId, eventType, headers); + } auditLogger.schemaNotificationSuccess(Collections.singletonList(schemaId)); @@ -109,7 +114,7 @@ public class MessageBusImpl implements IMessageBus { //We do not want to fail schema creation if notification delivery has failed, hence just logging the exception auditLogger.schemaNotificationFailure(Collections.singletonList(schemaId)); - logger.warning(SchemaConstants.SCHEMA_NOTIFICATION_FAILED); + logger.warning(SchemaConstants.SCHEMA_NOTIFICATION_FAILED,ex); } }else { @@ -117,32 +122,26 @@ public class MessageBusImpl implements IMessageBus { } } - private void publishToEventGrid(String schemaId, String eventType, String dataPartitionId) { + private void publishSchemaEventToAzure(String schemaId, String eventType, DpsHeaders headers) { - String messageId = UUID.randomUUID().toString(); SchemaPubSubInfo[] schemaPubSubMsgs = new SchemaPubSubInfo [1]; schemaPubSubMsgs[0]=new SchemaPubSubInfo(schemaId,eventType); - List eventsList = new ArrayList<>(); - HashMap message = new HashMap<>(); - message.put("data", schemaPubSubMsgs); - message.put(DpsHeaders.ACCOUNT_ID, dataPartitionId); - message.put(DpsHeaders.DATA_PARTITION_ID, dataPartitionId); - message.put(DpsHeaders.CORRELATION_ID, headers.getCorrelationId()); - + + //EventGridEvent supports array of messages to be triggered in a batch but at present we do not support //schema creation in bulk so generating one event at a time. - EventGridEvent eventGridEvent = new EventGridEvent( - messageId, - SchemaConstants.EVENT_SUBJECT, - message, - eventType, - DateTime.now(), - EVENT_DATA_VERSION - ); - eventsList.add(eventGridEvent); - logger.info("Schema event created: " + messageId); - eventGridTopicStore.publishToEventGridTopic(dataPartitionId, eventGridConfig.getCustomTopicName(), eventsList); - logger.info("Schema event generated successfully"); + PublisherInfo publisherInfo = PublisherInfo.builder() + .batch(schemaPubSubMsgs) + .eventGridTopicName(eventGridConfig.getCustomTopicName()) + .eventGridEventSubject(SchemaConstants.EVENT_SUBJECT) + .eventGridEventType(eventType) + .eventGridEventDataVersion(EVENT_DATA_VERSION) + .serviceBusTopicName(pubSubConfig.getServiceBusTopic()) + .build(); + logger.info("Schema event created."); + messagePublisher.publishMessage(headers, publisherInfo); + logger.info("Schema event triggered successfully"); + } } diff --git a/provider/schema-azure/src/main/resources/application.properties b/provider/schema-azure/src/main/resources/application.properties index faa48f6569fdaf7418dcd79d08cdb960e518642a..2d62e88ddf164cc58033ba1586eaf4dcc5512151 100644 --- a/provider/schema-azure/src/main/resources/application.properties +++ b/provider/schema-azure/src/main/resources/application.properties @@ -71,9 +71,12 @@ azure.activedirectory.app-resource-id=${aad_client_id} shared.tenant.name=opendes -# Azure Event Grid Configuration +# PubSub Configuration azure.eventGrid.enabled=${event_grid_enabled} azure.eventGrid.topicName=${event_grid_topic} +azure.servicebus.topic-name=${servicebus_topic_name} +azure.serviceBus.enabled=${service_bus_enabled} +azure.pubsub.publish=true # Configuration for system schemas azure.system.sharedTenant=${shared.tenant.name} diff --git a/provider/schema-azure/src/test/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImplTest.java b/provider/schema-azure/src/test/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImplTest.java index b72eb4a0e7bf35edd21eb751b532ffbad139c41e..e99a838ae18917629ded5e1535ce0b8d89d8abb8 100644 --- a/provider/schema-azure/src/test/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImplTest.java +++ b/provider/schema-azure/src/test/java/org/opengroup/osdu/schema/azure/impl/messagebus/MessageBusImplTest.java @@ -44,14 +44,19 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import org.opengroup.osdu.azure.eventgrid.EventGridTopicStore; +import org.opengroup.osdu.azure.publisherFacade.MessagePublisher; +import org.opengroup.osdu.azure.publisherFacade.PublisherInfo; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; import org.opengroup.osdu.core.common.model.http.DpsHeaders; import org.opengroup.osdu.core.common.model.tenant.TenantInfo; import org.opengroup.osdu.core.common.provider.interfaces.ITenantFactory; import org.opengroup.osdu.schema.azure.di.EventGridConfig; +import org.opengroup.osdu.schema.azure.di.PubSubConfig; import org.opengroup.osdu.schema.azure.di.SystemResourceConfig; import org.opengroup.osdu.schema.azure.impl.messagebus.model.SchemaPubSubInfo; +import org.opengroup.osdu.schema.constants.SchemaConstants; import org.opengroup.osdu.schema.logging.AuditLogger; +import org.springframework.beans.factory.annotation.Autowired; import com.microsoft.azure.eventgrid.models.EventGridEvent; import com.microsoft.azure.servicebus.primitives.ServiceBusException; @@ -66,26 +71,22 @@ public class MessageBusImplTest { private static final String systemCosmosDBName = "osdu-system-db"; private static final String sharedTenantId = "common"; - @Mock - private EventGridTopicStore eventGridTopicStore; - @Mock private EventGridConfig eventGridConfig; - @Mock private DpsHeaders dpsHeaders; - @Mock private JaxRsDpsLog logger; - @Mock private AuditLogger auditLogger; - @Mock private ITenantFactory tenantFactory; - @Mock SystemResourceConfig systemResourceConfig; + @Mock + private MessagePublisher messagePublisher; + @Mock + private PubSubConfig pubSubConfig; @InjectMocks private MessageBusImpl messageBusImpl; @@ -104,10 +105,11 @@ public class MessageBusImplTest { public void should_publishToEventGrid_WhenFlagIsFalse() { //The schema-notification is turned off when(this.eventGridConfig.isEventGridEnabled()).thenReturn(false); + when(this.pubSubConfig.isServiceBusEnabled()).thenReturn(false); //Call publish Message messageBusImpl.publishMessage("dummy", "dummy"); //Assert that eventGridTopicStore is not called even once - verify(this.eventGridTopicStore, times(0)).publishToEventGridTopic(any(), any(), anyList()); + verify(this.messagePublisher, times(0)).publishMessage(any(), any()); } @Test @@ -115,91 +117,76 @@ public class MessageBusImplTest { Mockito.when(dpsHeaders.getPartitionId()).thenReturn(sharedTenantId); //The schema-notification is turned off when(this.eventGridConfig.isEventGridEnabled()).thenReturn(false); + when(this.pubSubConfig.isServiceBusEnabled()).thenReturn(false); //Call publish Message messageBusImpl.publishMessageForSystemSchema("dummy", "dummy"); messageBusImpl.publishMessage("dummy", "dummy"); //Assert that eventGridTopicStore is not called even once - verify(this.eventGridTopicStore, times(0)).publishToEventGridTopic(any(), any(), anyList()); + verify(this.messagePublisher, times(0)).publishMessage(any(), any()); } @Test - public void should_publishToEventGrid_WhenFlagIsTrue() { + public void should_publishToEventGridOnly_WhenFlagIsTrue() { //The schema-notification is turned on when(this.eventGridConfig.isEventGridEnabled()).thenReturn(true); + when(this.pubSubConfig.isServiceBusEnabled()).thenReturn(false); //The schema-notification is turned off when(this.eventGridConfig.getCustomTopicName()).thenReturn("dummy-topic"); - //The schema-notification is turned off - doNothing().when(this.eventGridTopicStore).publishToEventGridTopic(anyString(), anyString(), anyList());; - ArgumentCaptor> captorList = ArgumentCaptor.forClass(ArrayList.class); + + ArgumentCaptor captorArg = ArgumentCaptor.forClass(PublisherInfo.class); SchemaPubSubInfo[] schemaPubSubMsgs = new SchemaPubSubInfo [1]; schemaPubSubMsgs[0]=new SchemaPubSubInfo("dummy","schema_create"); - HashMap data = new HashMap<>(); - data.put("data", schemaPubSubMsgs); - data.put(DpsHeaders.ACCOUNT_ID, DATA_PARTITION_WITH_FALLBACK_ACCOUNT_ID); - data.put(DpsHeaders.DATA_PARTITION_ID, PARTITION_ID); - data.put(DpsHeaders.CORRELATION_ID, CORRELATION_ID); - + //The schema-notification is turned off + doNothing().when(this.messagePublisher).publishMessage(any(), any()); + //Call publish Message messageBusImpl.publishMessage("dummy", "schema_create"); //Assert that eventGridTopicStore is called once - verify(this.eventGridTopicStore, times(1)).publishToEventGridTopic(anyString(), anyString(), captorList.capture()); - ArrayList eventGridList = captorList.getValue(); - assertNotNull(eventGridList); - assertThat(eventGridList.size(), is(equalTo(1))); + verify(this.messagePublisher, times(1)).publishMessage(any(), captorArg.capture()); + PublisherInfo publisherInfoCaptured = captorArg.getValue(); + assertNotNull(publisherInfoCaptured); + + SchemaPubSubInfo schemaPubSubInfoActual = ((SchemaPubSubInfo[])publisherInfoCaptured.getBatch())[0]; + assertEquals("dummy", schemaPubSubInfoActual.getKind()); + assertEquals("schema_create", schemaPubSubInfoActual.getOp()); - HashMap outputData = (HashMap)eventGridList.get(0).data(); - assertEquals(((SchemaPubSubInfo[])outputData.get("data"))[0].getKind(), "dummy"); - assertEquals(((SchemaPubSubInfo[])outputData.get("data"))[0].getOp(), "schema_create"); - } - + @Test - public void should_publishToEventGrid_WhenFlagIsTrue_PublicSchemas() { - - Mockito.when(dpsHeaders.getPartitionId()).thenReturn(sharedTenantId); - TenantInfo tenant1 = new TenantInfo(); - tenant1.setName(PARTITION_ID); - tenant1.setDataPartitionId(PARTITION_ID); - TenantInfo tenant2 = new TenantInfo(); - tenant2.setName(OTHER_TENANT); - tenant2.setDataPartitionId(OTHER_TENANT); - Collection tenants = Lists.newArrayList(tenant1, tenant2); - when(this.tenantFactory.listTenantInfo()).thenReturn(tenants); - - //The schema-notification is turned on - when(this.eventGridConfig.isEventGridEnabled()).thenReturn(true); - when(this.eventGridConfig.getCustomTopicName()).thenReturn("dummy-topic"); - doNothing().when(this.eventGridTopicStore).publishToEventGridTopic(anyString(), anyString(), anyList());; - ArgumentCaptor> captorList = ArgumentCaptor.forClass(ArrayList.class); - - - SchemaPubSubInfo[] schemaPubSubMsgs = new SchemaPubSubInfo [1]; - schemaPubSubMsgs[0]=new SchemaPubSubInfo("dummy","schema_create"); - - HashMap data = new HashMap<>(); - data.put("data", schemaPubSubMsgs); - data.put(DpsHeaders.ACCOUNT_ID, PARTITION_ID); - data.put(DpsHeaders.DATA_PARTITION_ID, PARTITION_ID); - data.put(DpsHeaders.CORRELATION_ID, CORRELATION_ID); - - //Call publish Message - messageBusImpl.publishMessageForSystemSchema("dummy", "schema_create"); - - //Assert that eventGridTopicStore is called once - verify(this.eventGridTopicStore, times(2)).publishToEventGridTopic(anyString(), anyString(), captorList.capture()); - ArrayList eventGridList = captorList.getValue(); - assertNotNull(eventGridList); - assertThat(eventGridList.size(), is(equalTo(1))); - - HashMap outputData = (HashMap)eventGridList.get(0).data(); - assertEquals(((SchemaPubSubInfo[])outputData.get("data"))[0].getKind(), "dummy"); - assertEquals(((SchemaPubSubInfo[])outputData.get("data"))[0].getOp(), "schema_create"); - + public void should_publishToServiceBusOnly_WhenFlagIsTrue() { + + //The schema-notification is turned on + when(this.eventGridConfig.isEventGridEnabled()).thenReturn(false); + when(this.pubSubConfig.isServiceBusEnabled()).thenReturn(true); + //The schema-notification is turned off + when(this.eventGridConfig.getCustomTopicName()).thenReturn("dummy-topic"); + + ArgumentCaptor captorArg = ArgumentCaptor.forClass(PublisherInfo.class); + + + SchemaPubSubInfo[] schemaPubSubMsgs = new SchemaPubSubInfo [1]; + schemaPubSubMsgs[0]=new SchemaPubSubInfo("dummy","schema_create"); + + //The schema-notification is turned off + doNothing().when(this.messagePublisher).publishMessage(any(), any()); + + //Call publish Message + messageBusImpl.publishMessage("dummy", "schema_create"); + + //Assert that eventGridTopicStore is called once + verify(this.messagePublisher, times(1)).publishMessage(any(), captorArg.capture()); + PublisherInfo publisherInfoCaptured = captorArg.getValue(); + assertNotNull(publisherInfoCaptured); + + SchemaPubSubInfo schemaPubSubInfoActual = ((SchemaPubSubInfo[])publisherInfoCaptured.getBatch())[0]; + assertEquals("dummy", schemaPubSubInfoActual.getKind()); + assertEquals("schema_create", schemaPubSubInfoActual.getOp()); + } }