mirror of
https://github.com/open-metadata/OpenMetadata.git
synced 2025-12-13 00:22:23 +00:00
Issue-19251: Upgrade dropwizard to 4.x and Jetty to 11.x (#19252)
* Issue-19251: Upgrade dropwizard to 4.x and Jetty to 11.x * keep jdbi3.37.1 version for ConnectionAware functionality * Code builds * Merge with main and fix MCP * Fix to make server run * Tests fix * JsonArray causing issue * Fix WebSockets * fix json2schema using jakarta instead of javax * Fix patch tests * Fix tests * Register auditing subtypes in OpenmeteadataOperations --------- Co-authored-by: mohitdeuex <mohit.y@deuexsolutions.com> Co-authored-by: sonikashah <sonikashah94@gmail.com> Co-authored-by: Mohit Yadav <105265192+mohityadav766@users.noreply.github.com>
This commit is contained in:
parent
1ba3250ffc
commit
138d57f890
@ -1 +1,2 @@
|
||||
config.stopBubbling = true
|
||||
lombok.log.fieldName = LOG
|
||||
@ -242,6 +242,7 @@
|
||||
${project.build.directory}/generated-sources/swagger
|
||||
</output>
|
||||
<skipOperationExample>true</skipOperationExample>
|
||||
<skipValidateSpec>true</skipValidateSpec>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
|
||||
@ -0,0 +1,54 @@
|
||||
package org.openmetadata.sdk.exception;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
|
||||
public class WebServiceException extends RuntimeException {
|
||||
private final Response.Status status;
|
||||
private final String errorType;
|
||||
private final String message;
|
||||
|
||||
public WebServiceException(Response.Status status, String errorType, String message) {
|
||||
super(message);
|
||||
this.status = status;
|
||||
this.errorType = errorType;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public WebServiceException(Response.Status status, String errorType, String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
this.status = status;
|
||||
this.errorType = errorType;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public Response getResponse() {
|
||||
return Response.status(status)
|
||||
.type(jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE)
|
||||
.entity(new ErrorMessage(status.getStatusCode(), errorType, message))
|
||||
.build();
|
||||
}
|
||||
|
||||
public static class ErrorMessage {
|
||||
private final int code;
|
||||
private final String errorType;
|
||||
private final String message;
|
||||
|
||||
public ErrorMessage(int code, String errorType, String message) {
|
||||
this.code = code;
|
||||
this.errorType = errorType;
|
||||
this.message = message;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public String getErrorType() {
|
||||
return errorType;
|
||||
}
|
||||
|
||||
public String getMessage() {
|
||||
return message;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1 +1,2 @@
|
||||
config.stopBubbling = true
|
||||
lombok.log.fieldName = LOG
|
||||
@ -11,7 +11,7 @@
|
||||
<artifactId>openmetadata-service</artifactId>
|
||||
|
||||
<properties>
|
||||
<dropwizard.swagger.version>2.0.12-1</dropwizard.swagger.version>
|
||||
<dropwizard.swagger.version>4.0.5-1</dropwizard.swagger.version>
|
||||
<sonar.junit.reportPaths>${project.basedir}/target/surefire-reports</sonar.junit.reportPaths>
|
||||
<sonar.coverage.jacoco.xmlReportPaths>${project.basedir}/target/site/jacoco-aggregate/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
|
||||
<sonar.tests>${project.basedir}/src/test/java</sonar.tests>
|
||||
@ -31,6 +31,9 @@
|
||||
<json-smart.version>2.5.2</json-smart.version>
|
||||
<aws.sdk.version>2.31.1</aws.sdk.version>
|
||||
<bedrock.runtime.version>2.31.1</bedrock.runtime.version>
|
||||
<jetty.version>11.0.24</jetty.version>
|
||||
<logback-core.version>1.4.7</logback-core.version>
|
||||
<logback-classic.version>1.4.7</logback-classic.version>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
@ -79,6 +82,36 @@
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<!-- Jakarta EL implementation -->
|
||||
<dependency>
|
||||
<groupId>org.glassfish</groupId>
|
||||
<artifactId>jakarta.el</artifactId>
|
||||
<version>5.0.0-M1</version>
|
||||
</dependency>
|
||||
<!-- Jakarta EL API -->
|
||||
<dependency>
|
||||
<groupId>jakarta.el</groupId>
|
||||
<artifactId>jakarta.el-api</artifactId>
|
||||
<version>5.0.1</version>
|
||||
</dependency>
|
||||
<!-- Hibernate Validator -->
|
||||
<dependency>
|
||||
<groupId>org.hibernate.validator</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
<version>8.0.1.Final</version>
|
||||
</dependency>
|
||||
<!-- Jakarta Bean Validation API -->
|
||||
<dependency>
|
||||
<groupId>jakarta.validation</groupId>
|
||||
<artifactId>jakarta.validation-api</artifactId>
|
||||
<version>3.0.2</version>
|
||||
</dependency>
|
||||
<!-- Expression Language Dependencies -->
|
||||
<dependency>
|
||||
<groupId>org.glassfish.expressly</groupId>
|
||||
<artifactId>expressly</artifactId>
|
||||
<version>5.0.0</version>
|
||||
</dependency>
|
||||
<!-- Upgrading due to CVE in com.nimbusds:nimbus-jose-jwt -->
|
||||
<dependency>
|
||||
<groupId>com.nimbusds</groupId>
|
||||
@ -136,11 +169,29 @@
|
||||
<dependency>
|
||||
<groupId>io.dropwizard</groupId>
|
||||
<artifactId>dropwizard-core</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>javax.validation</groupId>
|
||||
<artifactId>validation-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.hibernate.validator</groupId>
|
||||
<artifactId>hibernate-validator</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>jakarta.validation</groupId>
|
||||
<artifactId>jakarta.validation-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.dropwizard</groupId>
|
||||
<artifactId>dropwizard-jdbi3</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jdbi</groupId>
|
||||
<artifactId>jdbi3-sqlobject</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.tomcat</groupId>
|
||||
<artifactId>tomcat-jdbc</artifactId>
|
||||
@ -212,8 +263,8 @@
|
||||
<artifactId>jersey-media-multipart</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.github.maksymdolgykh.dropwizard</groupId>
|
||||
<artifactId>dropwizard-micrometer-core</artifactId>
|
||||
<groupId>io.dropwizard</groupId>
|
||||
<artifactId>dropwizard-metrics</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
@ -244,26 +295,8 @@
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.github.maksymdolgykh.dropwizard</groupId>
|
||||
<artifactId>dropwizard-micrometer-jdbi</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-access</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>log4j-over-slf4j</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
<groupId>io.prometheus</groupId>
|
||||
<artifactId>prometheus-metrics-instrumentation-dropwizard</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.dropwizard</groupId>
|
||||
@ -286,10 +319,6 @@
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-annotations</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.dropwizard.modules</groupId>
|
||||
<artifactId>dropwizard-health</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
@ -337,14 +366,17 @@
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-core</artifactId>
|
||||
<version>${logback-core.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>${logback-classic.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-access</artifactId>
|
||||
<version>${logback-classic.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jayway.jsonpath</groupId>
|
||||
@ -391,6 +423,65 @@
|
||||
<artifactId>everit-json-schema</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>org.apache.felix.http.wrappers</artifactId>
|
||||
<version>1.1.8</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>jakarta.servlet</groupId>
|
||||
<artifactId>jakarta.servlet-api</artifactId>
|
||||
<version>${jakarta.servlet-api.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.prometheus</groupId>
|
||||
<artifactId>simpleclient</artifactId>
|
||||
<version>0.16.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.prometheus</groupId>
|
||||
<artifactId>simpleclient_dropwizard</artifactId>
|
||||
<version>0.16.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-bom</artifactId>
|
||||
<version>1.14.5</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- Micrometer Core -->
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-observation</artifactId>
|
||||
<version>1.14.5</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Micrometer Prometheus -->
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-registry-prometheus</artifactId>
|
||||
<version>1.14.5</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.micrometer</groupId>
|
||||
<artifactId>micrometer-core</artifactId>
|
||||
<version>1.14.5</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- Dropwizard Metrics -->
|
||||
<dependency>
|
||||
<groupId>io.dropwizard.metrics</groupId>
|
||||
<artifactId>metrics-core</artifactId>
|
||||
<version>4.2.19</version>
|
||||
</dependency>
|
||||
<!-- Dependencies for cloudwatch monitoring -->
|
||||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
@ -430,14 +521,6 @@
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.java-json-tools</groupId>
|
||||
<artifactId>json-patch</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>testcontainers</artifactId>
|
||||
@ -496,8 +579,8 @@
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.connectors</groupId>
|
||||
<artifactId>jersey-jetty-connector</artifactId>
|
||||
<version>2.40</version>
|
||||
<artifactId>jersey-apache-connector</artifactId>
|
||||
<version>${jersey-bom.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
@ -520,8 +603,9 @@
|
||||
</dependency>
|
||||
<!-- JSON-P: Java API for JSON Processing (JSR 374) -->
|
||||
<dependency>
|
||||
<groupId>javax.json</groupId>
|
||||
<artifactId>javax.json-api</artifactId>
|
||||
<groupId>jakarta.json</groupId>
|
||||
<artifactId>jakarta.json-api</artifactId>
|
||||
<version>2.1.3</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Apache Johnzon: Implementation of the Java API for JSON Processing (JSR 374) -->
|
||||
@ -606,6 +690,11 @@
|
||||
<artifactId>socket.io-server</artifactId>
|
||||
<version>4.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.socket</groupId>
|
||||
<artifactId>engine.io-server-jetty</artifactId>
|
||||
<version>6.2.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.modelcontextprotocol.sdk</groupId>
|
||||
<artifactId>mcp-bom</artifactId>
|
||||
@ -615,15 +704,35 @@
|
||||
<groupId>io.modelcontextprotocol.sdk</groupId>
|
||||
<artifactId>mcp</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.websocket</groupId>
|
||||
<artifactId>websocket-jakarta-server</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.socket</groupId>
|
||||
<artifactId>engine.io-server-jetty</artifactId>
|
||||
<version>6.2.1</version>
|
||||
<groupId>org.eclipse.jetty.websocket</groupId>
|
||||
<artifactId>websocket-jetty-server</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.websocket</groupId>
|
||||
<artifactId>websocket-server</artifactId>
|
||||
<version>9.4.57.v20241219</version>
|
||||
<artifactId>websocket-jetty-api</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-servlet</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-http</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-io</artifactId>
|
||||
<version>${jetty.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
@ -687,12 +796,27 @@
|
||||
<version>${java.saml}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.fasterxml.woodstox</groupId>
|
||||
<artifactId>woodstox-core</artifactId>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.apache.santurario</groupId>
|
||||
<artifactId>xmlsec</artifactId>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.onelogin</groupId>
|
||||
<artifactId>java-saml-core</artifactId>
|
||||
<version>${java.saml}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>servlet-api</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
@ -779,20 +903,45 @@
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
<artifactId>aws-core</artifactId>
|
||||
</dependency>
|
||||
<!-- AWS Auth (if not already included) -->
|
||||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
<artifactId>auth</artifactId>
|
||||
</dependency>
|
||||
<!-- Required AWS dependencies -->
|
||||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
<artifactId>apache-client</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
<artifactId>auth</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>jakarta.ws.rs</groupId>
|
||||
<artifactId>jakarta.ws.rs-api</artifactId>
|
||||
<version>3.1.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.core</groupId>
|
||||
<artifactId>jersey-server</artifactId>
|
||||
<version>${jersey-bom.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.glassfish.jersey.containers</groupId>
|
||||
<artifactId>jersey-container-servlet</artifactId>
|
||||
<version>${jersey-bom.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.parsson</groupId>
|
||||
<artifactId>parsson</artifactId>
|
||||
<version>1.1.5</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>4.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>org.apache.felix.http.servlet-api</artifactId>
|
||||
<version>2.1.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<profiles>
|
||||
@ -969,18 +1118,44 @@
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>io.openapitools.swagger</groupId>
|
||||
<artifactId>swagger-maven-plugin</artifactId>
|
||||
<groupId>io.swagger.core.v3</groupId>
|
||||
<artifactId>swagger-maven-plugin-jakarta</artifactId>
|
||||
<version>2.2.30</version>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>jakarta.servlet</groupId>
|
||||
<artifactId>jakarta.servlet-api</artifactId>
|
||||
<version>${jakarta.servlet-api.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>4.0.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<configuration>
|
||||
<outputFileName>swagger</outputFileName>
|
||||
<outputPath>${basedir}/target/classes/assets</outputPath>
|
||||
<outputFormat>JSONANDYAML</outputFormat>
|
||||
<resourcePackages>
|
||||
<resourcePackage>org.openmetadata.service.resources</resourcePackage>
|
||||
<package>org.openmetadata.service.resources</package>
|
||||
</resourcePackages>
|
||||
<useResourcePackagesChildren>true</useResourcePackagesChildren>
|
||||
<outputDirectory>${basedir}/target/classes/assets/</outputDirectory>
|
||||
<outputFilename>swagger</outputFilename>
|
||||
<outputFormats>JSON,YAML</outputFormats>
|
||||
<prettyPrint>true</prettyPrint>
|
||||
<swaggerConfig>
|
||||
<openAPI>
|
||||
<info>
|
||||
<title>OpenMetadata APIs</title>
|
||||
<version>${project.version}</version>
|
||||
<description>Common types and API definition for OpenMetadata</description>
|
||||
<contact>
|
||||
<name>OpenMetadata</name>
|
||||
<url>https://open-metadata.org/</url>
|
||||
<email>dev@open-metadata.org</email>
|
||||
</contact>
|
||||
<license>
|
||||
<name>Apache 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
|
||||
</license>
|
||||
</info>
|
||||
<servers>
|
||||
<server>
|
||||
<url>/api</url>
|
||||
@ -991,45 +1166,29 @@
|
||||
<description>Endpoint URL</description>
|
||||
</server>
|
||||
</servers>
|
||||
<securityRequirements>
|
||||
<securityRequirement>
|
||||
<entries>
|
||||
<entry>
|
||||
<name>BearerAuth</name>
|
||||
</entry>
|
||||
</entries>
|
||||
</securityRequirement>
|
||||
</securityRequirements>
|
||||
<components>
|
||||
<securitySchemes>
|
||||
<BearerAuth>
|
||||
<type>http</type>
|
||||
<description>Provide Token from Bots settings section in OMD or your Authorization Provider</description>
|
||||
<scheme>bearer</scheme>
|
||||
</BearerAuth>
|
||||
<securityScheme>
|
||||
<key>BearerAuth</key>
|
||||
<securityScheme>
|
||||
<type>http</type>
|
||||
<scheme>bearer</scheme>
|
||||
</securityScheme>
|
||||
</securityScheme>
|
||||
</securitySchemes>
|
||||
</components>
|
||||
<info>
|
||||
<title>OpenMetadata Apis</title>
|
||||
<version>${project.parent.version}</version>
|
||||
<contact>
|
||||
<email>openmetadata-dev@googlegroups.com</email>
|
||||
<name>OpenMetadata</name>
|
||||
<url>https://open-metadata.org</url>
|
||||
</contact>
|
||||
<license>
|
||||
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
|
||||
<name>Apache 2.0</name>
|
||||
</license>
|
||||
</info>
|
||||
<descriptionFile>../openmetadata-docs/content/v1.7.x/main-concepts/metadata-standard/apis.md</descriptionFile>
|
||||
</swaggerConfig>
|
||||
<security>
|
||||
<securityRequirement>
|
||||
<name>BearerAuth</name>
|
||||
</securityRequirement>
|
||||
</security>
|
||||
</openAPI>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>generate</goal>
|
||||
<goal>resolve</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
|
||||
@ -8,7 +8,7 @@ import io.dropwizard.configuration.SubstitutingSourceProvider;
|
||||
import io.dropwizard.configuration.YamlConfigurationFactory;
|
||||
import io.dropwizard.jackson.Jackson;
|
||||
import io.dropwizard.jersey.validation.Validators;
|
||||
import javax.validation.Validator;
|
||||
import jakarta.validation.Validator;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.SneakyThrows;
|
||||
|
||||
@ -34,6 +34,8 @@ import static org.openmetadata.service.util.EntityUtil.getLocalColumnName;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.networknt.schema.JsonSchema;
|
||||
import com.networknt.schema.ValidationMessage;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
@ -57,8 +59,6 @@ import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.csv.CSVFormat;
|
||||
import org.apache.commons.csv.CSVFormat.Builder;
|
||||
|
||||
@ -23,6 +23,8 @@ import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
import io.github.classgraph.ClassGraph;
|
||||
import io.github.classgraph.ClassInfoList;
|
||||
import io.github.classgraph.ScanResult;
|
||||
import jakarta.ws.rs.BadRequestException;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
@ -38,8 +40,6 @@ import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.ws.rs.BadRequestException;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright 2021 Collate
|
||||
* 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.
|
||||
*/
|
||||
|
||||
package org.openmetadata.service;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import jakarta.json.Json;
|
||||
import jakarta.json.JsonArray;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.json.JsonReader;
|
||||
import jakarta.ws.rs.Consumes;
|
||||
import jakarta.ws.rs.WebApplicationException;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.MultivaluedMap;
|
||||
import jakarta.ws.rs.ext.MessageBodyReader;
|
||||
import jakarta.ws.rs.ext.Provider;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringReader;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Type;
|
||||
|
||||
@Provider
|
||||
@Consumes(MediaType.APPLICATION_JSON_PATCH_JSON)
|
||||
public class JsonPatchMessageBodyReader implements MessageBodyReader<JsonPatch> {
|
||||
|
||||
@Override
|
||||
public boolean isReadable(
|
||||
Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
|
||||
return JsonPatch.class.isAssignableFrom(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonPatch readFrom(
|
||||
Class<JsonPatch> type,
|
||||
Type genericType,
|
||||
Annotation[] annotations,
|
||||
MediaType mediaType,
|
||||
MultivaluedMap<String, String> httpHeaders,
|
||||
InputStream entityStream)
|
||||
throws IOException, WebApplicationException {
|
||||
try {
|
||||
// Use Jackson to read the JSON content first to avoid JsonStructure deserialization issues
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
JsonNode jsonNode = mapper.readTree(entityStream);
|
||||
String jsonString = jsonNode.toString();
|
||||
|
||||
// Now parse using Jakarta JSON API
|
||||
try (JsonReader reader = Json.createReader(new StringReader(jsonString))) {
|
||||
JsonArray jsonArray = reader.readArray();
|
||||
return Json.createPatch(jsonArray);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new WebApplicationException("Failed to parse JsonPatch", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -17,8 +17,8 @@ import com.fasterxml.jackson.core.json.JsonReadFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.SerializationFeature;
|
||||
import com.fasterxml.jackson.datatype.jsr353.JSR353Module;
|
||||
import javax.ws.rs.ext.ContextResolver;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
import jakarta.ws.rs.ext.ContextResolver;
|
||||
import jakarta.ws.rs.ext.Provider;
|
||||
|
||||
@Provider
|
||||
public class JsonPatchProvider implements ContextResolver<ObjectMapper> {
|
||||
|
||||
@ -15,23 +15,28 @@ package org.openmetadata.service;
|
||||
|
||||
import static org.openmetadata.service.util.jdbi.JdbiUtils.createAndSetupJDBI;
|
||||
|
||||
import io.dropwizard.Application;
|
||||
import io.dropwizard.configuration.EnvironmentVariableSubstitutor;
|
||||
import io.dropwizard.configuration.SubstitutingSourceProvider;
|
||||
import io.dropwizard.health.conf.HealthConfiguration;
|
||||
import io.dropwizard.health.core.HealthCheckBundle;
|
||||
import io.dropwizard.core.Application;
|
||||
import io.dropwizard.core.server.DefaultServerFactory;
|
||||
import io.dropwizard.core.setup.Bootstrap;
|
||||
import io.dropwizard.core.setup.Environment;
|
||||
import io.dropwizard.jersey.errors.EarlyEofExceptionMapper;
|
||||
import io.dropwizard.jersey.errors.LoggingExceptionMapper;
|
||||
import io.dropwizard.jersey.jackson.JsonProcessingExceptionMapper;
|
||||
import io.dropwizard.jetty.MutableServletContextHandler;
|
||||
import io.dropwizard.lifecycle.Managed;
|
||||
import io.dropwizard.server.DefaultServerFactory;
|
||||
import io.dropwizard.setup.Bootstrap;
|
||||
import io.dropwizard.setup.Environment;
|
||||
import io.federecio.dropwizard.swagger.SwaggerBundle;
|
||||
import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration;
|
||||
import io.socket.engineio.server.EngineIoServerOptions;
|
||||
import io.socket.engineio.server.JettyWebSocketHandler;
|
||||
import jakarta.servlet.DispatcherType;
|
||||
import jakarta.servlet.FilterRegistration;
|
||||
import jakarta.servlet.ServletRegistration;
|
||||
import jakarta.validation.Validation;
|
||||
import jakarta.ws.rs.container.ContainerRequestFilter;
|
||||
import jakarta.ws.rs.container.ContainerResponseFilter;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.security.KeyStoreException;
|
||||
@ -40,24 +45,17 @@ import java.security.cert.CertificateException;
|
||||
import java.util.EnumSet;
|
||||
import java.util.Optional;
|
||||
import javax.naming.ConfigurationException;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.FilterRegistration;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRegistration;
|
||||
import javax.ws.rs.container.ContainerRequestFilter;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.eclipse.jetty.http.pathmap.ServletPathSpec;
|
||||
import org.eclipse.jetty.server.session.SessionHandler;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.eclipse.jetty.websocket.server.NativeWebSocketServletContainerInitializer;
|
||||
import org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter;
|
||||
import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer;
|
||||
import org.glassfish.jersey.media.multipart.MultiPartFeature;
|
||||
import org.glassfish.jersey.server.ServerProperties;
|
||||
import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
|
||||
import org.hibernate.validator.resourceloading.PlatformResourceBundleLocator;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.jdbi.v3.sqlobject.SqlObjects;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@ -165,7 +163,7 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
DatasourceConfig.initialize(catalogConfig.getDataSourceFactory().getDriverClass());
|
||||
|
||||
// Initialize HTTP and JDBI timers
|
||||
MicrometerBundleSingleton.initLatencyEvents(catalogConfig);
|
||||
MicrometerBundleSingleton.initLatencyEvents();
|
||||
|
||||
jdbi = createAndSetupJDBI(environment, catalogConfig.getDataSourceFactory());
|
||||
Entity.setCollectionDAO(getDao(jdbi));
|
||||
@ -208,6 +206,16 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
new ConnectionAwareAnnotationSqlLocator(
|
||||
catalogConfig.getDataSourceFactory().getDriverClass()));
|
||||
|
||||
// Configure validator to use simple message interpolation
|
||||
environment.setValidator(
|
||||
Validation.byDefaultProvider()
|
||||
.configure()
|
||||
.messageInterpolator(
|
||||
new ResourceBundleMessageInterpolator(
|
||||
new PlatformResourceBundleLocator("jakarta.validation.ValidationMessages")))
|
||||
.buildValidatorFactory()
|
||||
.getValidator());
|
||||
|
||||
// Validate flyway Migrations
|
||||
validateMigrations(jdbi, catalogConfig);
|
||||
|
||||
@ -320,28 +328,25 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
config.getAuthenticationConfiguration(), config.getAuthorizerConfiguration());
|
||||
|
||||
// Register Servlets
|
||||
ServletRegistration.Dynamic authLogin =
|
||||
environment
|
||||
.servlets()
|
||||
.addServlet("oauth_login", new AuthLoginServlet(authenticationCodeFlowHandler));
|
||||
authLogin.addMapping("/api/v1/auth/login");
|
||||
ServletRegistration.Dynamic authCallback =
|
||||
environment
|
||||
.servlets()
|
||||
.addServlet("auth_callback", new AuthCallbackServlet(authenticationCodeFlowHandler));
|
||||
authCallback.addMapping("/callback");
|
||||
ServletHolder authLoginHolder =
|
||||
new ServletHolder(new AuthLoginServlet(authenticationCodeFlowHandler));
|
||||
authLoginHolder.setName("oauth_login");
|
||||
environment.getApplicationContext().addServlet(authLoginHolder, "/api/v1/auth/login");
|
||||
|
||||
ServletRegistration.Dynamic authLogout =
|
||||
environment
|
||||
.servlets()
|
||||
.addServlet("auth_logout", new AuthLogoutServlet(authenticationCodeFlowHandler));
|
||||
authLogout.addMapping("/api/v1/auth/logout");
|
||||
ServletHolder authCallbackHolder =
|
||||
new ServletHolder(new AuthCallbackServlet(authenticationCodeFlowHandler));
|
||||
authCallbackHolder.setName("auth_callback");
|
||||
environment.getApplicationContext().addServlet(authCallbackHolder, "/callback");
|
||||
|
||||
ServletRegistration.Dynamic refreshServlet =
|
||||
environment
|
||||
.servlets()
|
||||
.addServlet("auth_refresh", new AuthRefreshServlet(authenticationCodeFlowHandler));
|
||||
refreshServlet.addMapping("/api/v1/auth/refresh");
|
||||
ServletHolder authLogoutHolder =
|
||||
new ServletHolder(new AuthLogoutServlet(authenticationCodeFlowHandler));
|
||||
authLogoutHolder.setName("auth_logout");
|
||||
environment.getApplicationContext().addServlet(authLogoutHolder, "/api/v1/auth/logout");
|
||||
|
||||
ServletHolder refreshHolder =
|
||||
new ServletHolder(new AuthRefreshServlet(authenticationCodeFlowHandler));
|
||||
refreshHolder.setName("auth_refresh");
|
||||
environment.getApplicationContext().addServlet(refreshHolder, "/api/v1/auth/refresh");
|
||||
}
|
||||
}
|
||||
|
||||
@ -372,7 +377,8 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
private void registerMicrometerFilter(
|
||||
Environment environment, EventMonitorConfiguration eventMonitorConfiguration) {
|
||||
FilterRegistration.Dynamic micrometerFilter =
|
||||
environment.servlets().addFilter("OMMicrometerHttpFilter", new OMMicrometerHttpFilter());
|
||||
environment.servlets().addFilter("OMMicrometerHttpFilter", OMMicrometerHttpFilter.class);
|
||||
|
||||
micrometerFilter.addMappingForUrlPatterns(
|
||||
EnumSet.allOf(DispatcherType.class), true, eventMonitorConfiguration.getPathPattern());
|
||||
}
|
||||
@ -386,8 +392,7 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
OpenMetadataAssetServlet assetServlet =
|
||||
new OpenMetadataAssetServlet(
|
||||
config.getBasePath(), "/assets", "/", "index.html", webConfiguration);
|
||||
String pathPattern = "/" + '*';
|
||||
environment.servlets().addServlet("static", assetServlet).addMapping(pathPattern);
|
||||
environment.servlets().addServlet("static", assetServlet).addMapping("/*");
|
||||
}
|
||||
|
||||
protected CollectionDAO getDao(Jdbi jdbi) {
|
||||
@ -397,15 +402,17 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
private void registerSamlServlets(
|
||||
OpenMetadataApplicationConfig catalogConfig, Environment environment)
|
||||
throws IOException, CertificateException, KeyStoreException, NoSuchAlgorithmException {
|
||||
|
||||
if (catalogConfig.getAuthenticationConfiguration() != null
|
||||
&& catalogConfig.getAuthenticationConfiguration().getProvider().equals(AuthProvider.SAML)) {
|
||||
|
||||
// Set up a Session Manager
|
||||
// Ensure we have a session handler
|
||||
MutableServletContextHandler contextHandler = environment.getApplicationContext();
|
||||
if (contextHandler.getSessionHandler() == null) {
|
||||
contextHandler.setSessionHandler(new SessionHandler());
|
||||
}
|
||||
|
||||
// Initialize default SAML settings (e.g. IDP metadata, SP keys, etc.)
|
||||
SamlSettingsHolder.getInstance().initDefaultSettings(catalogConfig);
|
||||
ServletRegistration.Dynamic samlRedirectServlet =
|
||||
environment.servlets().addServlet("saml_login", new SamlLoginServlet());
|
||||
@ -421,19 +428,39 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
environment.servlets().addServlet("saml_metadata", new SamlMetadataServlet());
|
||||
samlMetadataServlet.addMapping("/api/v1/saml/metadata");
|
||||
|
||||
ServletRegistration.Dynamic samlRefreshServlet =
|
||||
environment.servlets().addServlet("saml_refresh_token", new SamlTokenRefreshServlet());
|
||||
samlRefreshServlet.addMapping("/api/v1/saml/refresh");
|
||||
// 1) SAML Login
|
||||
ServletHolder samlLoginHolder = new ServletHolder();
|
||||
samlLoginHolder.setName("saml_login");
|
||||
samlLoginHolder.setServlet(new SamlLoginServlet());
|
||||
contextHandler.addServlet(samlLoginHolder, "/api/v1/saml/login");
|
||||
|
||||
ServletRegistration.Dynamic samlLogoutServlet =
|
||||
environment
|
||||
.servlets()
|
||||
.addServlet(
|
||||
"saml_logout_token",
|
||||
new SamlLogoutServlet(
|
||||
catalogConfig.getAuthenticationConfiguration(),
|
||||
catalogConfig.getAuthorizerConfiguration()));
|
||||
samlLogoutServlet.addMapping("/api/v1/saml/logout");
|
||||
// 2) SAML Assertion Consumer (ACS)
|
||||
ServletHolder samlAcsHolder = new ServletHolder();
|
||||
samlAcsHolder.setName("saml_acs");
|
||||
samlAcsHolder.setServlet(
|
||||
new SamlAssertionConsumerServlet(catalogConfig.getAuthorizerConfiguration()));
|
||||
contextHandler.addServlet(samlAcsHolder, "/api/v1/saml/acs");
|
||||
|
||||
// 3) SAML Metadata
|
||||
ServletHolder samlMetadataHolder = new ServletHolder();
|
||||
samlMetadataHolder.setName("saml_metadata");
|
||||
samlMetadataHolder.setServlet(new SamlMetadataServlet());
|
||||
contextHandler.addServlet(samlMetadataHolder, "/api/v1/saml/metadata");
|
||||
|
||||
// 4) SAML Token Refresh
|
||||
ServletHolder samlRefreshHolder = new ServletHolder();
|
||||
samlRefreshHolder.setName("saml_refresh_token");
|
||||
samlRefreshHolder.setServlet(new SamlTokenRefreshServlet());
|
||||
contextHandler.addServlet(samlRefreshHolder, "/api/v1/saml/refresh");
|
||||
|
||||
// 5) SAML Logout
|
||||
ServletHolder samlLogoutHolder = new ServletHolder();
|
||||
samlLogoutHolder.setName("saml_logout_token");
|
||||
samlLogoutHolder.setServlet(
|
||||
new SamlLogoutServlet(
|
||||
catalogConfig.getAuthenticationConfiguration(),
|
||||
catalogConfig.getAuthorizerConfiguration()));
|
||||
contextHandler.addServlet(samlLogoutHolder, "/api/v1/saml/logout");
|
||||
}
|
||||
}
|
||||
|
||||
@ -443,6 +470,14 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
bootstrap.setConfigurationSourceProvider(
|
||||
new SubstitutingSourceProvider(
|
||||
bootstrap.getConfigurationSourceProvider(), new EnvironmentVariableSubstitutor(false)));
|
||||
|
||||
// Register custom filter factories
|
||||
bootstrap
|
||||
.getObjectMapper()
|
||||
.registerSubtypes(
|
||||
org.openmetadata.service.events.AuditOnlyFilterFactory.class,
|
||||
org.openmetadata.service.events.AuditExcludeFilterFactory.class);
|
||||
|
||||
bootstrap.addBundle(
|
||||
new SwaggerBundle<>() {
|
||||
@Override
|
||||
@ -451,15 +486,7 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
return catalogConfig.getSwaggerBundleConfig();
|
||||
}
|
||||
});
|
||||
bootstrap.addBundle(
|
||||
new HealthCheckBundle<>() {
|
||||
@Override
|
||||
protected HealthConfiguration getHealthConfiguration(
|
||||
final OpenMetadataApplicationConfig configuration) {
|
||||
return configuration.getHealthConfiguration();
|
||||
}
|
||||
});
|
||||
bootstrap.addBundle(MicrometerBundleSingleton.getInstance());
|
||||
|
||||
bootstrap.addBundle(
|
||||
new OMWebBundle<>() {
|
||||
@Override
|
||||
@ -612,6 +639,7 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
CollectionRegistry.getInstance()
|
||||
.registerResources(jdbi, environment, config, authorizer, authenticatorHandler, limits);
|
||||
environment.jersey().register(new JsonPatchProvider());
|
||||
environment.jersey().register(new JsonPatchMessageBodyReader());
|
||||
OMErrorPageHandler eph = new OMErrorPageHandler(config.getWebConfiguration());
|
||||
eph.addErrorPage(Response.Status.NOT_FOUND.getStatusCode(), "/");
|
||||
environment.getApplicationContext().setErrorHandler(eph);
|
||||
@ -634,24 +662,28 @@ public class OpenMetadataApplication extends Application<OpenMetadataApplication
|
||||
eioOptions.setAllowedCorsOrigins(null);
|
||||
WebSocketManager.WebSocketManagerBuilder.build(eioOptions);
|
||||
environment.getApplicationContext().setContextPath("/");
|
||||
FilterHolder socketAddressFilterHolder = new FilterHolder();
|
||||
socketAddressFilterHolder.setFilter(socketAddressFilter);
|
||||
environment
|
||||
.getApplicationContext()
|
||||
.addFilter(
|
||||
new FilterHolder(socketAddressFilter), pathSpec, EnumSet.of(DispatcherType.REQUEST));
|
||||
.addFilter(socketAddressFilterHolder, pathSpec, EnumSet.of(DispatcherType.REQUEST));
|
||||
environment.getApplicationContext().addServlet(new ServletHolder(new FeedServlet()), pathSpec);
|
||||
// Upgrade connection to websocket from Http
|
||||
try {
|
||||
WebSocketUpgradeFilter.configure(environment.getApplicationContext());
|
||||
NativeWebSocketServletContainerInitializer.configure(
|
||||
JettyWebSocketServletContainerInitializer.configure(
|
||||
environment.getApplicationContext(),
|
||||
(context, container) ->
|
||||
container.addMapping(
|
||||
new ServletPathSpec(pathSpec),
|
||||
(servletUpgradeRequest, servletUpgradeResponse) ->
|
||||
new JettyWebSocketHandler(
|
||||
WebSocketManager.getInstance().getEngineIoServer())));
|
||||
} catch (ServletException ex) {
|
||||
LOG.error("Websocket Upgrade Filter error : " + ex.getMessage());
|
||||
(servletContext, wsContainer) -> {
|
||||
wsContainer.setMaxTextMessageSize(65535);
|
||||
wsContainer.setMaxBinaryMessageSize(65535);
|
||||
|
||||
// Register endpoint using Jetty WebSocket API
|
||||
wsContainer.addMapping(
|
||||
pathSpec,
|
||||
(req, resp) ->
|
||||
new JettyWebSocketHandler(WebSocketManager.getInstance().getEngineIoServer()));
|
||||
});
|
||||
} catch (Exception ex) {
|
||||
LOG.error("Websocket configuration error: {}", ex.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -14,13 +14,12 @@
|
||||
package org.openmetadata.service;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.dropwizard.Configuration;
|
||||
import io.dropwizard.core.Configuration;
|
||||
import io.dropwizard.db.DataSourceFactory;
|
||||
import io.dropwizard.health.conf.HealthConfiguration;
|
||||
import io.federecio.dropwizard.swagger.SwaggerBundleConfiguration;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import java.util.Map;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.openmetadata.DefaultOperationalConfigProvider;
|
||||
@ -123,11 +122,6 @@ public class OpenMetadataApplicationConfig extends Configuration {
|
||||
@JsonProperty("fernetConfiguration")
|
||||
private FernetConfiguration fernetConfiguration;
|
||||
|
||||
@JsonProperty("health")
|
||||
@NotNull
|
||||
@Valid
|
||||
private HealthConfiguration healthConfiguration = new HealthConfiguration();
|
||||
|
||||
@JsonProperty("secretsManagerConfiguration")
|
||||
private SecretsManagerConfiguration secretsManagerConfiguration;
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.apps;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class AppException extends WebServiceException {
|
||||
|
||||
@ -6,13 +6,13 @@ import static org.openmetadata.service.apps.scheduler.AppScheduler.APP_INFO_KEY;
|
||||
import static org.openmetadata.service.apps.scheduler.AppScheduler.APP_NAME;
|
||||
|
||||
import io.dropwizard.configuration.ConfigurationException;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.api.configuration.apps.AppPrivateConfig;
|
||||
|
||||
@ -19,9 +19,9 @@ import static org.openmetadata.service.util.SubscriptionUtil.getClient;
|
||||
import static org.openmetadata.service.util.SubscriptionUtil.getTargetsForWebhookAlert;
|
||||
import static org.openmetadata.service.util.SubscriptionUtil.postWebhookMessage;
|
||||
|
||||
import jakarta.ws.rs.client.Client;
|
||||
import jakarta.ws.rs.client.Invocation;
|
||||
import java.util.List;
|
||||
import javax.ws.rs.client.Client;
|
||||
import javax.ws.rs.client.Invocation;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
@ -21,11 +21,11 @@ import static org.openmetadata.service.util.SubscriptionUtil.getClient;
|
||||
import static org.openmetadata.service.util.SubscriptionUtil.getTargetsForWebhookAlert;
|
||||
import static org.openmetadata.service.util.SubscriptionUtil.postWebhookMessage;
|
||||
|
||||
import jakarta.ws.rs.client.Client;
|
||||
import jakarta.ws.rs.client.Invocation;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.ws.rs.client.Client;
|
||||
import javax.ws.rs.client.Invocation;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
@ -20,9 +20,9 @@ import static org.openmetadata.service.util.SubscriptionUtil.getClient;
|
||||
import static org.openmetadata.service.util.SubscriptionUtil.getTargetsForWebhookAlert;
|
||||
import static org.openmetadata.service.util.SubscriptionUtil.postWebhookMessage;
|
||||
|
||||
import jakarta.ws.rs.client.Client;
|
||||
import jakarta.ws.rs.client.Invocation;
|
||||
import java.util.List;
|
||||
import javax.ws.rs.client.Client;
|
||||
import javax.ws.rs.client.Invocation;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
@ -23,9 +23,9 @@ import static org.openmetadata.service.util.SubscriptionUtil.postWebhookMessage;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import jakarta.ws.rs.client.Client;
|
||||
import jakarta.ws.rs.client.Invocation;
|
||||
import java.util.List;
|
||||
import javax.ws.rs.client.Client;
|
||||
import javax.ws.rs.client.Invocation;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
|
||||
@ -9,6 +9,7 @@ import static org.openmetadata.service.util.SubscriptionUtil.getAdminsData;
|
||||
import static org.openmetadata.service.util.Utilities.getMonthAndDateFromEpoch;
|
||||
import static org.openmetadata.service.util.email.TemplateConstants.DATA_INSIGHT_REPORT_TEMPLATE;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@ -18,7 +19,6 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.openmetadata.common.utils.CommonUtil;
|
||||
|
||||
@ -11,6 +11,7 @@ import static org.openmetadata.service.socket.WebSocketManager.SEARCH_INDEX_JOB_
|
||||
import static org.openmetadata.service.workflows.searchIndex.ReindexingUtil.ENTITY_TYPE_KEY;
|
||||
import static org.openmetadata.service.workflows.searchIndex.ReindexingUtil.isDataInsightIndex;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -24,7 +25,6 @@ import java.util.concurrent.Semaphore;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.exception.ExceptionUtils;
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package org.openmetadata.service.clients.pipeline;
|
||||
|
||||
import io.prometheus.client.Counter;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
import javax.ws.rs.core.Response;
|
||||
import org.openmetadata.schema.ServiceEntityInterface;
|
||||
import org.openmetadata.schema.entity.app.App;
|
||||
import org.openmetadata.schema.entity.app.AppMarketPlaceDefinition;
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.clients.pipeline;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@ -14,6 +14,7 @@
|
||||
package org.openmetadata.service.clients.pipeline.airflow;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
@ -27,7 +28,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.http.client.utils.URIBuilder;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package org.openmetadata.service.config;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import javax.validation.constraints.AssertTrue;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.AssertTrue;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@ -2,17 +2,17 @@ package org.openmetadata.service.config;
|
||||
|
||||
import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
|
||||
|
||||
import io.dropwizard.Configuration;
|
||||
import io.dropwizard.ConfiguredBundle;
|
||||
import io.dropwizard.setup.Bootstrap;
|
||||
import io.dropwizard.setup.Environment;
|
||||
import java.util.Collections;
|
||||
import io.dropwizard.core.Configuration;
|
||||
import io.dropwizard.core.ConfiguredBundle;
|
||||
import io.dropwizard.core.setup.Bootstrap;
|
||||
import io.dropwizard.core.setup.Environment;
|
||||
import jakarta.servlet.DispatcherType;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.servlet.DispatcherType;
|
||||
import javax.servlet.FilterRegistration;
|
||||
import org.eclipse.jetty.server.session.SessionHandler;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlets.HeaderFilter;
|
||||
|
||||
public abstract class OMWebBundle<T extends Configuration> implements ConfiguredBundle<T> {
|
||||
@ -75,15 +75,25 @@ public abstract class OMWebBundle<T extends Configuration> implements Configured
|
||||
|
||||
protected void configureHeaderFilter(
|
||||
Environment environment, String uriPath, String urlPattern, Map<String, String> headers) {
|
||||
|
||||
String headerConfig =
|
||||
headers.entrySet().stream()
|
||||
.map(entry -> "set " + entry.getKey() + ": " + entry.getValue())
|
||||
.collect(Collectors.joining(","));
|
||||
Map<String, String> filterConfig = Collections.singletonMap("headerConfig", headerConfig);
|
||||
FilterRegistration.Dynamic filter =
|
||||
environment.servlets().addFilter("header-filter-" + uriPath, HeaderFilter.class);
|
||||
filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, urlPattern);
|
||||
filter.setInitParameters(filterConfig);
|
||||
|
||||
FilterHolder holder = new FilterHolder(new HeaderFilter());
|
||||
holder.setName("header-filter-" + uriPath);
|
||||
holder.setInitParameter("headerConfig", headerConfig);
|
||||
|
||||
// Add the filter to Jetty's application context with the specified URL pattern
|
||||
// Note: ensure you have a session handler if needed
|
||||
if (environment.getApplicationContext().getSessionHandler() == null) {
|
||||
environment.getApplicationContext().setSessionHandler(new SessionHandler());
|
||||
}
|
||||
|
||||
environment
|
||||
.getApplicationContext()
|
||||
.addFilter(holder, urlPattern, EnumSet.of(DispatcherType.REQUEST));
|
||||
}
|
||||
|
||||
private String deriveUrlPattern(String uri) {
|
||||
|
||||
@ -2,7 +2,11 @@ package org.openmetadata.service.config;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.dropwizard.web.conf.WebConfiguration;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
public class OMWebConfiguration extends WebConfiguration {
|
||||
|
||||
@JsonProperty("referrer-policy")
|
||||
@ -16,40 +20,4 @@ public class OMWebConfiguration extends WebConfiguration {
|
||||
|
||||
@JsonProperty("pragma")
|
||||
private String pragma;
|
||||
|
||||
public OMWebConfiguration() {}
|
||||
|
||||
public ReferrerPolicyHeaderFactory getReferrerPolicyHeaderFactory() {
|
||||
return this.referrerPolicyHeaderFactory;
|
||||
}
|
||||
|
||||
public void setReferrerPolicyHeaderFactory(
|
||||
ReferrerPolicyHeaderFactory referrerPolicyHeaderFactory) {
|
||||
this.referrerPolicyHeaderFactory = referrerPolicyHeaderFactory;
|
||||
}
|
||||
|
||||
public PermissionPolicyHeaderFactory getPermissionPolicyHeaderFactory() {
|
||||
return this.permissionPolicyHeaderFactory;
|
||||
}
|
||||
|
||||
public String getCacheControl() {
|
||||
return this.cacheControl;
|
||||
}
|
||||
|
||||
public String getPragma() {
|
||||
return this.pragma;
|
||||
}
|
||||
|
||||
public void setCacheControl(String cacheControl) {
|
||||
this.cacheControl = cacheControl;
|
||||
}
|
||||
|
||||
public void setPragma(String pragma) {
|
||||
this.pragma = pragma;
|
||||
}
|
||||
|
||||
public void setPermissionPolicyHeaderFactory(
|
||||
PermissionPolicyHeaderFactory permissionPolicyHeaderFactory) {
|
||||
this.permissionPolicyHeaderFactory = permissionPolicyHeaderFactory;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package org.openmetadata.service.config;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package org.openmetadata.service.config;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import javax.validation.constraints.AssertTrue;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.AssertTrue;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
@ -13,9 +13,9 @@
|
||||
|
||||
package org.openmetadata.service.events;
|
||||
|
||||
import jakarta.ws.rs.container.ContainerRequestContext;
|
||||
import jakarta.ws.rs.container.ContainerResponseContext;
|
||||
import java.util.UUID;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.EntityInterface;
|
||||
import org.openmetadata.schema.EntityTimeSeriesInterface;
|
||||
@ -35,6 +35,7 @@ public class AuditEventHandler implements EventHandler {
|
||||
// Nothing to do
|
||||
}
|
||||
|
||||
@Override
|
||||
public Void process(
|
||||
ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
|
||||
int responseCode = responseContext.getStatus();
|
||||
|
||||
@ -4,7 +4,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import ch.qos.logback.core.filter.Filter;
|
||||
import ch.qos.logback.core.spi.FilterReply;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||
import io.dropwizard.logging.filter.FilterFactory;
|
||||
import io.dropwizard.logging.common.filter.FilterFactory;
|
||||
import org.slf4j.Marker;
|
||||
|
||||
@JsonTypeName("audit-exclude-filter-factory")
|
||||
|
||||
@ -4,7 +4,7 @@ import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||
import ch.qos.logback.core.filter.Filter;
|
||||
import ch.qos.logback.core.spi.FilterReply;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||
import io.dropwizard.logging.filter.FilterFactory;
|
||||
import io.dropwizard.logging.common.filter.FilterFactory;
|
||||
import org.slf4j.Marker;
|
||||
|
||||
@JsonTypeName("audit-only-filter-factory")
|
||||
|
||||
@ -15,10 +15,10 @@ package org.openmetadata.service.events;
|
||||
|
||||
import static org.openmetadata.service.formatter.util.FormatterUtil.getChangeEventFromResponseContext;
|
||||
|
||||
import jakarta.ws.rs.container.ContainerRequestContext;
|
||||
import jakarta.ws.rs.container.ContainerResponseContext;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import java.util.Optional;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.type.ChangeEvent;
|
||||
|
||||
@ -15,17 +15,18 @@ package org.openmetadata.service.events;
|
||||
|
||||
import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
|
||||
|
||||
import jakarta.ws.rs.container.ContainerRequestContext;
|
||||
import jakarta.ws.rs.container.ContainerResponseContext;
|
||||
import jakarta.ws.rs.container.ContainerResponseFilter;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import jakarta.ws.rs.ext.Provider;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.container.ContainerResponseFilter;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.service.OpenMetadataApplicationConfig;
|
||||
import org.openmetadata.service.security.JwtFilter;
|
||||
@ -85,7 +86,8 @@ public class EventFilter implements ContainerResponseFilter {
|
||||
if (JwtFilter.EXCLUDED_ENDPOINTS.stream()
|
||||
.noneMatch(endpoint -> uriInfo.getPath().contains(endpoint))) {
|
||||
ParallelStreamUtil.runAsync(
|
||||
() -> eventHandler.process(requestContext, responseContext), forkJoinPool);
|
||||
(Callable<Void>) () -> eventHandler.process(requestContext, responseContext),
|
||||
forkJoinPool);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ -13,8 +13,8 @@
|
||||
|
||||
package org.openmetadata.service.events;
|
||||
|
||||
import javax.ws.rs.container.ContainerRequestContext;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import jakarta.ws.rs.container.ContainerRequestContext;
|
||||
import jakarta.ws.rs.container.ContainerResponseContext;
|
||||
import org.openmetadata.service.OpenMetadataApplicationConfig;
|
||||
|
||||
public interface EventHandler {
|
||||
|
||||
@ -4,7 +4,7 @@ import static org.openmetadata.service.events.scheduled.ServicesStatusJobHandler
|
||||
import static org.openmetadata.service.events.scheduled.ServicesStatusJobHandler.UNHEALTHY_STATUS;
|
||||
|
||||
import io.micrometer.core.instrument.Counter;
|
||||
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
||||
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.service.Entity;
|
||||
import org.openmetadata.service.search.SearchHealthStatus;
|
||||
|
||||
@ -7,7 +7,7 @@ import static org.openmetadata.service.events.scheduled.ServicesStatusJobHandler
|
||||
import static org.openmetadata.service.events.scheduled.ServicesStatusJobHandler.JOB_CONTEXT_PIPELINE_SERVICE_CLIENT;
|
||||
|
||||
import io.micrometer.core.instrument.Counter;
|
||||
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
||||
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.sdk.PipelineServiceClientInterface;
|
||||
import org.quartz.Job;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.events.scheduled;
|
||||
|
||||
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
||||
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.api.configuration.pipelineServiceClient.PipelineServiceClientConfiguration;
|
||||
import org.openmetadata.sdk.PipelineServiceClientInterface;
|
||||
|
||||
@ -20,6 +20,7 @@ import static org.openmetadata.service.Entity.THREAD;
|
||||
import static org.openmetadata.service.apps.bundles.changeEvent.AbstractEventConsumer.OFFSET_EXTENSION;
|
||||
import static org.openmetadata.service.security.policyevaluator.CompiledRule.parseExpression;
|
||||
|
||||
import jakarta.ws.rs.BadRequestException;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -28,7 +29,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.ws.rs.BadRequestException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.common.utils.CommonUtil;
|
||||
import org.openmetadata.schema.api.events.AlertFilteringInput;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.schema.entity.app.AppExtension;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
|
||||
public class AuthenticationException extends WebServiceException {
|
||||
private static final String MESSAGE = "Authentication failed";
|
||||
|
||||
public AuthenticationException(String message) {
|
||||
super(Response.Status.UNAUTHORIZED, message);
|
||||
}
|
||||
|
||||
public AuthenticationException(String message, Throwable cause) {
|
||||
super(Response.Status.UNAUTHORIZED, message, cause);
|
||||
}
|
||||
}
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public final class BadRequestException extends WebServiceException {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class BulkLimitException extends WebServiceException {
|
||||
|
||||
@ -118,6 +118,9 @@ public final class CatalogExceptionMessage {
|
||||
}
|
||||
|
||||
public static String invalidName(String name) {
|
||||
if (name == null) {
|
||||
return "name must not be null";
|
||||
}
|
||||
return String.format("Invalid name %s", name);
|
||||
}
|
||||
|
||||
|
||||
@ -13,21 +13,22 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
|
||||
import static javax.ws.rs.core.Response.Status.BAD_REQUEST;
|
||||
import static javax.ws.rs.core.Response.Status.CONFLICT;
|
||||
import static javax.ws.rs.core.Response.Status.FORBIDDEN;
|
||||
import static javax.ws.rs.core.Response.Status.Family;
|
||||
import static javax.ws.rs.core.Response.Status.NOT_FOUND;
|
||||
import static javax.ws.rs.core.Response.Status.UNAUTHORIZED;
|
||||
import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
|
||||
import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST;
|
||||
import static jakarta.ws.rs.core.Response.Status.CONFLICT;
|
||||
import static jakarta.ws.rs.core.Response.Status.FORBIDDEN;
|
||||
import static jakarta.ws.rs.core.Response.Status.Family;
|
||||
import static jakarta.ws.rs.core.Response.Status.NOT_FOUND;
|
||||
import static jakarta.ws.rs.core.Response.Status.UNAUTHORIZED;
|
||||
|
||||
import io.dropwizard.jersey.errors.ErrorMessage;
|
||||
import jakarta.ws.rs.BadRequestException;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.ProcessingException;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.ext.ExceptionMapper;
|
||||
import java.sql.SQLIntegrityConstraintViolationException;
|
||||
import java.util.concurrent.ThreadLocalRandom;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.ProcessingException;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.ext.ExceptionMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.statement.UnableToExecuteStatementException;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
@ -44,8 +45,8 @@ public class CatalogGenericExceptionMapper implements ExceptionMapper<Throwable>
|
||||
LOG.debug(ex.getMessage());
|
||||
if (ex instanceof ProcessingException
|
||||
|| ex instanceof IllegalArgumentException
|
||||
|| ex instanceof javax.ws.rs.BadRequestException) {
|
||||
return getResponse(BadRequestException.of().getResponse(), ex);
|
||||
|| ex instanceof BadRequestException) {
|
||||
return getResponse(Response.status(Response.Status.BAD_REQUEST).build(), ex);
|
||||
} else if (ex instanceof UnableToExecuteStatementException) {
|
||||
if (ex.getCause() instanceof SQLIntegrityConstraintViolationException
|
||||
|| ex.getCause() instanceof PSQLException
|
||||
|
||||
@ -15,13 +15,13 @@ package org.openmetadata.service.exception;
|
||||
|
||||
import com.google.common.collect.Iterables;
|
||||
import io.dropwizard.jersey.errors.ErrorMessage;
|
||||
import jakarta.validation.ConstraintViolation;
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.ext.ExceptionMapper;
|
||||
import jakarta.ws.rs.ext.Provider;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import javax.validation.ConstraintViolation;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.ext.ExceptionMapper;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
/**
|
||||
* Dropwizard by default maps the JSON constraint violations to 422 Response code. This overrides that behavior by
|
||||
@ -38,6 +38,26 @@ public class ConstraintViolationExceptionMapper
|
||||
.map(
|
||||
constraintViolation -> {
|
||||
String name = Iterables.getLast(constraintViolation.getPropertyPath()).getName();
|
||||
// Map common parameter names to more descriptive names for query parameters
|
||||
if (name.matches("arg[3456]")) {
|
||||
// Multiple args can represent limit parameter depending on method signature
|
||||
name = "query param limit";
|
||||
} else if ("arg7".equals(name)) {
|
||||
name = "query param before";
|
||||
} else if ("arg8".equals(name)) {
|
||||
name = "query param after";
|
||||
} else if (name.startsWith("arg") && name.endsWith("Param")) {
|
||||
// Extract parameter name from method parameter names that end with "Param"
|
||||
String paramName =
|
||||
name.substring(0, name.length() - 5); // Remove "Param" suffix
|
||||
name = "query param " + paramName;
|
||||
} else if (name.contains("limit") || name.contains("Limit")) {
|
||||
name = "query param limit";
|
||||
} else if (name.contains("before") || name.contains("Before")) {
|
||||
name = "query param before";
|
||||
} else if (name.contains("after") || name.contains("After")) {
|
||||
name = "query param after";
|
||||
}
|
||||
return name + " " + constraintViolation.getMessage();
|
||||
})
|
||||
.toList();
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class CustomExceptionMessage extends WebServiceException {
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class EntityMaskException extends WebServiceException {
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class EntityNotFoundException extends WebServiceException {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.schema.tests.type.TestCaseResolutionStatusTypes;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
@ -12,7 +12,7 @@ public class IncidentManagerException extends WebServiceException {
|
||||
}
|
||||
|
||||
public IncidentManagerException(String message) {
|
||||
super(Response.Status.INTERNAL_SERVER_ERROR, ERROR_TYPE, message);
|
||||
super(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), ERROR_TYPE, message);
|
||||
}
|
||||
|
||||
public static IncidentManagerException invalidStatus(
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class IngestionPipelineDeploymentException extends WebServiceException {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class InvalidServiceConnectionException extends WebServiceException {
|
||||
|
||||
@ -15,11 +15,10 @@ package org.openmetadata.service.exception;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||
import io.dropwizard.jersey.errors.ErrorMessage;
|
||||
import javax.annotation.Priority;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.ext.ExceptionMapper;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
import jakarta.annotation.Priority;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.ext.ExceptionMapper;
|
||||
import jakarta.ws.rs.ext.Provider;
|
||||
|
||||
/**
|
||||
* Dropwizard by default maps the JSON payload format issues (invalid URI etc.) violations to 400 Response with no error
|
||||
@ -30,9 +29,9 @@ import javax.ws.rs.ext.Provider;
|
||||
@Priority(1) // Override the default JsonMappingExceptionMapper by setting the priority higher
|
||||
public class JsonMappingExceptionMapper implements ExceptionMapper<JsonMappingException> {
|
||||
@Override
|
||||
public Response toResponse(JsonMappingException exception) {
|
||||
final Response response = BadRequestException.of().getResponse();
|
||||
return Response.fromResponse(response)
|
||||
public jakarta.ws.rs.core.Response toResponse(JsonMappingException exception) {
|
||||
final jakarta.ws.rs.core.Response response = BadRequestException.of().getResponse();
|
||||
return jakarta.ws.rs.core.Response.status(response.getStatus())
|
||||
.type(MediaType.APPLICATION_JSON_TYPE)
|
||||
.entity(new ErrorMessage(response.getStatus(), exception.getLocalizedMessage()))
|
||||
.build();
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class LimitsException extends WebServiceException {
|
||||
|
||||
@ -2,10 +2,10 @@ package org.openmetadata.service.exception;
|
||||
|
||||
import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
|
||||
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.jetty.server.Dispatcher;
|
||||
import org.eclipse.jetty.server.Request;
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class ReflectionException extends WebServiceException {
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class SecretsManagerException extends WebServiceException {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class SystemSettingsException extends WebServiceException {
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class UnhandledServerException extends WebServiceException {
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package org.openmetadata.service.exception;
|
||||
|
||||
import jakarta.ws.rs.WebApplicationException;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
|
||||
public class WebServiceException extends WebApplicationException {
|
||||
public WebServiceException(Response.Status status, String message) {
|
||||
super(message, status);
|
||||
}
|
||||
|
||||
public WebServiceException(Response.Status status, String message, Throwable cause) {
|
||||
super(message, cause, status);
|
||||
}
|
||||
}
|
||||
@ -20,13 +20,13 @@ import static org.openmetadata.service.Entity.FIELD_EXTENSION;
|
||||
import static org.openmetadata.service.Entity.FIELD_NAME;
|
||||
import static org.openmetadata.service.formatter.util.FormatterUtil.getEntityLinkForFieldName;
|
||||
|
||||
import jakarta.json.JsonArray;
|
||||
import jakarta.json.JsonObject;
|
||||
import jakarta.json.JsonValue;
|
||||
import jakarta.json.stream.JsonParsingException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import javax.json.JsonArray;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonValue;
|
||||
import javax.json.stream.JsonParsingException;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.openmetadata.schema.entity.feed.FeedInfo;
|
||||
import org.openmetadata.schema.entity.feed.Thread;
|
||||
|
||||
@ -22,6 +22,8 @@ import static org.openmetadata.service.Entity.THREAD;
|
||||
import static org.openmetadata.service.formatter.factory.ParserFactory.getFieldParserObject;
|
||||
import static org.openmetadata.service.formatter.field.DefaultFieldFormatter.getFieldNameChange;
|
||||
|
||||
import jakarta.ws.rs.container.ContainerResponseContext;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
@ -29,8 +31,6 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import javax.ws.rs.container.ContainerResponseContext;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.EntityInterface;
|
||||
import org.openmetadata.schema.EntityTimeSeriesInterface;
|
||||
|
||||
@ -6,9 +6,9 @@ import static org.openmetadata.service.governance.workflows.Workflow.UPDATED_BY_
|
||||
import static org.openmetadata.service.governance.workflows.Workflow.WORKFLOW_RUNTIME_EXCEPTION;
|
||||
import static org.openmetadata.service.governance.workflows.WorkflowHandler.getProcessDefinitionKeyFromId;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import javax.json.JsonPatch;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.exception.ExceptionUtils;
|
||||
import org.flowable.common.engine.api.delegate.Expression;
|
||||
|
||||
@ -6,10 +6,10 @@ import static org.openmetadata.service.governance.workflows.Workflow.UPDATED_BY_
|
||||
import static org.openmetadata.service.governance.workflows.Workflow.WORKFLOW_RUNTIME_EXCEPTION;
|
||||
import static org.openmetadata.service.governance.workflows.WorkflowHandler.getProcessDefinitionKeyFromId;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import javax.json.JsonPatch;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.exception.ExceptionUtils;
|
||||
import org.flowable.common.engine.api.delegate.Expression;
|
||||
|
||||
@ -89,6 +89,11 @@ import com.google.common.util.concurrent.UncheckedExecutionException;
|
||||
import com.google.gson.Gson;
|
||||
import com.networknt.schema.JsonSchema;
|
||||
import com.networknt.schema.ValidationMessage;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.ws.rs.core.Response.Status;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.time.Instant;
|
||||
@ -120,11 +125,6 @@ import java.util.function.BiPredicate;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.Getter;
|
||||
import lombok.NonNull;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@ -7,6 +7,12 @@ import static org.openmetadata.service.util.jdbi.JdbiUtils.getAfterOffset;
|
||||
import static org.openmetadata.service.util.jdbi.JdbiUtils.getBeforeOffset;
|
||||
import static org.openmetadata.service.util.jdbi.JdbiUtils.getOffset;
|
||||
|
||||
import jakarta.json.Json;
|
||||
import jakarta.json.JsonObject;
|
||||
import jakarta.json.JsonObjectBuilder;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.json.JsonValue;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.beans.IntrospectionException;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@ -17,12 +23,6 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import javax.json.Json;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonObjectBuilder;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.json.JsonValue;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.Getter;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
import org.openmetadata.common.utils.CommonUtil;
|
||||
|
||||
@ -39,6 +39,10 @@ import static org.openmetadata.service.jdbi3.UserRepository.TEAMS_FIELD;
|
||||
import static org.openmetadata.service.util.EntityUtil.compareEntityReference;
|
||||
|
||||
import io.jsonwebtoken.lang.Collections;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response.Status;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.ArrayList;
|
||||
@ -48,10 +52,6 @@ import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@ -42,6 +42,8 @@ import static org.openmetadata.service.util.EntityUtil.termReferenceMatch;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.google.gson.Gson;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
@ -55,8 +57,6 @@ import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
@ -16,11 +16,11 @@ package org.openmetadata.service.jdbi3;
|
||||
import static org.openmetadata.schema.type.EventType.ENTITY_FIELDS_CHANGED;
|
||||
import static org.openmetadata.schema.type.EventType.ENTITY_UPDATED;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.jdbi3;
|
||||
|
||||
import static javax.ws.rs.core.Response.Status.OK;
|
||||
import static jakarta.ws.rs.core.Response.Status.OK;
|
||||
import static org.openmetadata.common.utils.CommonUtil.collectionOrDefault;
|
||||
import static org.openmetadata.common.utils.CommonUtil.listOrEmpty;
|
||||
import static org.openmetadata.common.utils.CommonUtil.nullOrDefault;
|
||||
@ -44,6 +44,8 @@ import static org.openmetadata.service.search.SearchUtils.isConnectedVia;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.opencsv.CSVWriter;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.io.StringWriter;
|
||||
import java.util.ArrayList;
|
||||
@ -54,8 +56,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Function;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.tuple.ImmutablePair;
|
||||
|
||||
@ -26,9 +26,9 @@ import static org.openmetadata.service.resources.tags.TagLabelUtil.addDerivedTag
|
||||
import static org.openmetadata.service.resources.tags.TagLabelUtil.checkMutuallyExclusive;
|
||||
import static org.openmetadata.service.util.EntityUtil.taskMatch;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.ws.rs.core.Response;
|
||||
import org.apache.commons.lang3.tuple.Triple;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
import org.openmetadata.schema.EntityInterface;
|
||||
|
||||
@ -25,12 +25,12 @@ import static org.openmetadata.service.security.policyevaluator.OperationContext
|
||||
import static org.openmetadata.service.util.EntityUtil.getRuleField;
|
||||
import static org.openmetadata.service.util.EntityUtil.ruleMatch;
|
||||
|
||||
import jakarta.ws.rs.BadRequestException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.ws.rs.BadRequestException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
import org.openmetadata.schema.entity.policies.Policy;
|
||||
|
||||
@ -6,9 +6,9 @@ import static org.openmetadata.schema.type.EventType.ENTITY_FIELDS_CHANGED;
|
||||
import static org.openmetadata.schema.type.EventType.ENTITY_UPDATED;
|
||||
import static org.openmetadata.service.Entity.USER;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.util.*;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.SneakyThrows;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
import org.openmetadata.schema.entity.data.Query;
|
||||
|
||||
@ -12,16 +12,16 @@ import static org.openmetadata.service.Entity.TEAM;
|
||||
import static org.openmetadata.service.Entity.USER;
|
||||
import static org.openmetadata.service.jdbi3.UserRepository.TEAMS_FIELD;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
|
||||
@ -6,13 +6,13 @@ import static org.openmetadata.schema.type.EventType.ENTITY_DELETED;
|
||||
import static org.openmetadata.schema.type.EventType.ENTITY_UPDATED;
|
||||
import static org.openmetadata.service.apps.bundles.insights.DataInsightsApp.getDataStreamName;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.json.JsonValue;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.json.JsonValue;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
|
||||
@ -35,6 +35,7 @@ import static org.openmetadata.service.util.LambdaExceptionUtil.ignoringComparat
|
||||
import static org.openmetadata.service.util.LambdaExceptionUtil.rethrowFunction;
|
||||
|
||||
import com.google.common.collect.Streams;
|
||||
import jakarta.json.JsonPatch;
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
@ -49,7 +50,6 @@ import java.util.UUID;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import javax.json.JsonPatch;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.csv.CSVPrinter;
|
||||
import org.apache.commons.csv.CSVRecord;
|
||||
|
||||
@ -43,6 +43,7 @@ import static org.openmetadata.service.exception.CatalogExceptionMessage.invalid
|
||||
import static org.openmetadata.service.exception.CatalogExceptionMessage.invalidParentCount;
|
||||
import static org.openmetadata.service.util.EntityUtil.*;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
@ -57,7 +58,6 @@ import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.csv.CSVPrinter;
|
||||
import org.apache.commons.csv.CSVRecord;
|
||||
|
||||
@ -18,6 +18,9 @@ import static org.openmetadata.service.exception.CatalogExceptionMessage.entityN
|
||||
import static org.openmetadata.service.security.mask.PIIMasker.maskSampleData;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -26,9 +29,6 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
|
||||
@ -4,6 +4,8 @@ import static org.openmetadata.common.utils.CommonUtil.nullOrEmpty;
|
||||
import static org.openmetadata.schema.type.EventType.ENTITY_UPDATED;
|
||||
import static org.openmetadata.service.Entity.getEntityReferenceByName;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.beans.BeanInfo;
|
||||
import java.beans.IntrospectionException;
|
||||
import java.beans.Introspector;
|
||||
@ -14,8 +16,6 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.SneakyThrows;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
import org.openmetadata.schema.EntityInterface;
|
||||
|
||||
@ -6,15 +6,15 @@ import static org.openmetadata.service.Entity.TEST_CASE_RESULT;
|
||||
import static org.openmetadata.service.Entity.TEST_DEFINITION;
|
||||
import static org.openmetadata.service.Entity.TEST_SUITE;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.SneakyThrows;
|
||||
import org.openmetadata.common.utils.CommonUtil;
|
||||
import org.openmetadata.schema.tests.ResultSummary;
|
||||
|
||||
@ -16,6 +16,11 @@ import static org.openmetadata.service.search.SearchUtils.getAggregationKeyValue
|
||||
import static org.openmetadata.service.search.SearchUtils.getAggregationObject;
|
||||
import static org.openmetadata.service.util.FullyQualifiedName.quoteName;
|
||||
|
||||
import jakarta.json.JsonArray;
|
||||
import jakarta.json.JsonObject;
|
||||
import jakarta.json.JsonValue;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -24,11 +29,6 @@ import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.json.JsonArray;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonValue;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
|
||||
@ -23,6 +23,8 @@ import static org.openmetadata.service.util.EntityUtil.customFieldMatch;
|
||||
import static org.openmetadata.service.util.EntityUtil.getCustomField;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import jakarta.validation.ConstraintViolationException;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
@ -31,8 +33,6 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.validation.ConstraintViolationException;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.tuple.Triple;
|
||||
import org.jdbi.v3.sqlobject.transaction.Transaction;
|
||||
|
||||
@ -23,11 +23,11 @@ import static org.openmetadata.service.Entity.PIPELINE;
|
||||
import static org.openmetadata.service.Entity.TABLE;
|
||||
import static org.openmetadata.service.util.EntityUtil.fieldUpdated;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.ws.rs.core.Response;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.mapper.RowMapper;
|
||||
import org.jdbi.v3.core.statement.StatementContext;
|
||||
|
||||
@ -27,6 +27,9 @@ import static org.openmetadata.service.Entity.TEAM;
|
||||
import static org.openmetadata.service.Entity.USER;
|
||||
import static org.openmetadata.service.util.EntityUtil.objectMatch;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@ -38,9 +41,6 @@ import java.util.TreeSet;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import javax.json.JsonPatch;
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.csv.CSVPrinter;
|
||||
import org.apache.commons.csv.CSVRecord;
|
||||
|
||||
@ -2,12 +2,12 @@ package org.openmetadata.service.jdbi3;
|
||||
|
||||
import static org.openmetadata.service.Entity.WEB_ANALYTIC_EVENT;
|
||||
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import javax.ws.rs.core.Response;
|
||||
import org.openmetadata.schema.analytics.WebAnalyticEvent;
|
||||
import org.openmetadata.schema.analytics.WebAnalyticEventData;
|
||||
import org.openmetadata.schema.analytics.type.WebAnalyticEventType;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.limits;
|
||||
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import lombok.Getter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.entity.app.App;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.openmetadata.service.limits;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.openmetadata.schema.configuration.LimitsConfiguration;
|
||||
import org.openmetadata.schema.system.LimitsConfig;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.openmetadata.service.limits;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.SecurityContext;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.SecurityContext;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.openmetadata.schema.system.LimitsConfig;
|
||||
import org.openmetadata.service.OpenMetadataApplicationConfig;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
This class should be removed once we migrate to Jakarta.
|
||||
HttpServletSseServerTransportProvider - Jakarta servlet-based MCP server transport
|
||||
*/
|
||||
|
||||
package org.openmetadata.service.mcp;
|
||||
@ -11,6 +11,12 @@ import io.modelcontextprotocol.spec.McpSchema;
|
||||
import io.modelcontextprotocol.spec.McpServerSession;
|
||||
import io.modelcontextprotocol.spec.McpServerTransport;
|
||||
import io.modelcontextprotocol.spec.McpServerTransportProvider;
|
||||
import jakarta.servlet.AsyncContext;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.annotation.WebServlet;
|
||||
import jakarta.servlet.http.HttpServlet;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
@ -18,12 +24,6 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import javax.servlet.AsyncContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import org.openmetadata.service.security.JwtFilter;
|
||||
import org.openmetadata.service.util.JsonUtils;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@ -2,13 +2,13 @@ package org.openmetadata.service.mcp;
|
||||
|
||||
import static org.openmetadata.service.socket.SocketAddressFilter.validatePrefixedTokenRequest;
|
||||
|
||||
import jakarta.servlet.Filter;
|
||||
import jakarta.servlet.FilterChain;
|
||||
import jakarta.servlet.ServletException;
|
||||
import jakarta.servlet.ServletRequest;
|
||||
import jakarta.servlet.ServletResponse;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import java.io.IOException;
|
||||
import javax.servlet.Filter;
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import org.openmetadata.service.security.JwtFilter;
|
||||
|
||||
public class McpAuthFilter implements Filter {
|
||||
|
||||
@ -3,16 +3,17 @@ package org.openmetadata.service.mcp;
|
||||
import static org.openmetadata.service.search.SearchUtil.searchMetadata;
|
||||
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import io.dropwizard.core.setup.Environment;
|
||||
import io.dropwizard.jetty.MutableServletContextHandler;
|
||||
import io.dropwizard.setup.Environment;
|
||||
import io.modelcontextprotocol.server.McpServerFeatures;
|
||||
import io.modelcontextprotocol.server.McpSyncServer;
|
||||
import io.modelcontextprotocol.spec.McpSchema;
|
||||
import jakarta.servlet.DispatcherType;
|
||||
import jakarta.servlet.Filter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import javax.servlet.DispatcherType;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
@ -66,7 +67,7 @@ public class McpServer {
|
||||
new JwtFilter(
|
||||
config.getAuthenticationConfiguration(), config.getAuthorizerConfiguration()));
|
||||
contextHandler.addFilter(
|
||||
new FilterHolder(authFilter), "/mcp/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
new FilterHolder((Filter) authFilter), "/mcp/*", EnumSet.of(DispatcherType.REQUEST));
|
||||
}
|
||||
|
||||
public void addTools(McpSyncServer server) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.openmetadata.service.mcp.tools;
|
||||
|
||||
import jakarta.json.JsonPatch;
|
||||
import java.util.Map;
|
||||
import javax.json.JsonPatch;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.EntityInterface;
|
||||
import org.openmetadata.schema.type.change.ChangeSource;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.migration;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
package org.openmetadata.service.migration;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.openmetadata.sdk.exception.WebServiceException;
|
||||
|
||||
public class MigrationValidationClientException extends WebServiceException {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package org.openmetadata.service.migration.context;
|
||||
|
||||
import javax.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package org.openmetadata.service.migration.utils.v120;
|
||||
|
||||
import javax.json.Json;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonObjectBuilder;
|
||||
import jakarta.json.Json;
|
||||
import jakarta.json.JsonObject;
|
||||
import jakarta.json.JsonObjectBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.Handle;
|
||||
import org.openmetadata.schema.entity.data.GlossaryTerm;
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
package org.openmetadata.service.migration.utils.v140;
|
||||
|
||||
import jakarta.json.Json;
|
||||
import jakarta.json.JsonArray;
|
||||
import jakarta.json.JsonArrayBuilder;
|
||||
import jakarta.json.JsonObject;
|
||||
import jakarta.json.JsonString;
|
||||
import jakarta.json.JsonValue;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.json.Json;
|
||||
import javax.json.JsonArray;
|
||||
import javax.json.JsonArrayBuilder;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonString;
|
||||
import javax.json.JsonValue;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.Handle;
|
||||
import org.json.JSONArray;
|
||||
|
||||
@ -3,15 +3,15 @@ package org.openmetadata.service.migration.utils.v150;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import jakarta.json.Json;
|
||||
import jakarta.json.JsonArray;
|
||||
import jakarta.json.JsonArrayBuilder;
|
||||
import jakarta.json.JsonObject;
|
||||
import jakarta.json.JsonObjectBuilder;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import javax.json.Json;
|
||||
import javax.json.JsonArray;
|
||||
import javax.json.JsonArrayBuilder;
|
||||
import javax.json.JsonObject;
|
||||
import javax.json.JsonObjectBuilder;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.Handle;
|
||||
import org.jdbi.v3.core.statement.UnableToExecuteStatementException;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package org.openmetadata.service.migration.utils.v159;
|
||||
|
||||
import jakarta.json.JsonObject;
|
||||
import java.util.UUID;
|
||||
import javax.json.JsonObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.Handle;
|
||||
import org.jdbi.v3.core.statement.Update;
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
package org.openmetadata.service.monitoring;
|
||||
|
||||
import io.micrometer.core.instrument.Counter;
|
||||
import io.micrometer.prometheus.PrometheusMeterRegistry;
|
||||
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.openmetadata.schema.entity.services.ingestionPipelines.IngestionPipeline;
|
||||
import org.openmetadata.schema.entity.services.ingestionPipelines.PipelineStatus;
|
||||
|
||||
@ -14,12 +14,13 @@
|
||||
package org.openmetadata.service.resources;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import io.dropwizard.setup.Environment;
|
||||
import io.dropwizard.core.setup.Environment;
|
||||
import io.github.classgraph.ClassGraph;
|
||||
import io.github.classgraph.ClassInfo;
|
||||
import io.github.classgraph.ClassInfoList;
|
||||
import io.github.classgraph.ScanResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.ws.rs.Path;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
@ -30,10 +31,8 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import javax.ws.rs.Path;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.openmetadata.schema.Function;
|
||||
import org.openmetadata.schema.type.CollectionDescriptor;
|
||||
@ -43,17 +42,19 @@ import org.openmetadata.service.limits.Limits;
|
||||
import org.openmetadata.service.security.Authorizer;
|
||||
import org.openmetadata.service.security.auth.AuthenticatorHandler;
|
||||
import org.openmetadata.service.util.ReflectionUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Collection registry is a registry of all the REST collections in the catalog. It is used for building REST endpoints
|
||||
* that anchor all the collections as follows: - .../api/v1 Provides information about all the collections in the
|
||||
* catalog - .../api/v1/collection-name provides sub collections or resources in that collection
|
||||
*/
|
||||
@Slf4j
|
||||
public final class CollectionRegistry {
|
||||
public static final List<String> PACKAGES = List.of("org.openmetadata", "io.collate");
|
||||
private static CollectionRegistry instance = null;
|
||||
private static volatile boolean initialized = false;
|
||||
private static final Logger LOG = LoggerFactory.getLogger(CollectionRegistry.class);
|
||||
|
||||
/** Map of collection endpoint path to collection details */
|
||||
private final Map<String, CollectionDetails> collectionMap = new LinkedHashMap<>();
|
||||
@ -205,9 +206,9 @@ public final class CollectionRegistry {
|
||||
if (a instanceof Path path) {
|
||||
// Use @Path annotation to compile href
|
||||
collectionInfo.withHref(URI.create(path.value()));
|
||||
} else if (a instanceof Api api) {
|
||||
// Use @Api annotation to get documentation about the collection
|
||||
collectionInfo.withDocumentation(api.value());
|
||||
} else if (a instanceof Tag tag) {
|
||||
// Use @Tag annotation to get documentation about the collection
|
||||
collectionInfo.withDocumentation(tag.description());
|
||||
} else if (a instanceof Collection collection) {
|
||||
// Use @Collection annotation to get initialization information for the class
|
||||
collectionInfo.withName(collection.name());
|
||||
@ -279,10 +280,10 @@ public final class CollectionRegistry {
|
||||
resource =
|
||||
clz.getDeclaredConstructor(Jdbi.class, Authorizer.class)
|
||||
.newInstance(jdbi, authorizer);
|
||||
} catch (NoSuchMethodException execp) {
|
||||
} catch (NoSuchMethodException except) {
|
||||
try {
|
||||
resource = clz.getDeclaredConstructor(Limits.class).newInstance(limits);
|
||||
} catch (NoSuchMethodException except) {
|
||||
} catch (NoSuchMethodException exception) {
|
||||
resource = Class.forName(resourceClass).getConstructor().newInstance();
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user