Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates to Helidon Common, Part 2 #4718

Merged
merged 54 commits into from
Aug 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
722daa4
Move OptionalMatcher and other JUnit features to common
tomas-langer Aug 10, 2022
a21bee3
Media types update (detectors, new types)
tomas-langer Aug 10, 2022
9fa2832
Use specific module instead of a bundle.
tomas-langer Aug 10, 2022
30ec40a
New data buffers to serve as base for HTTP stream processing
tomas-langer Aug 10, 2022
01daac8
New socket abstraction to handle peer information and read/writes.
tomas-langer Aug 10, 2022
9cad6cd
New URI abstraction to handle resource requests
tomas-langer Aug 10, 2022
1fad1ee
Updated HTTP common module
tomas-langer Aug 10, 2022
1173748
Updated common mapper module
tomas-langer Aug 10, 2022
10d49ac
BOM update
tomas-langer Aug 10, 2022
35bd283
Log cleanup (and remove deprecated method use)
tomas-langer Aug 10, 2022
7c9491e
HTTP module classes missed on first update
tomas-langer Aug 10, 2022
caec6f6
Switch reactive media types to new MediaType abstraction
tomas-langer Aug 10, 2022
3001bda
Remove coverage configuration
tomas-langer Aug 10, 2022
b2b2738
HTTP testing module
tomas-langer Aug 10, 2022
897d1db
WebClient refactored to new common.
tomas-langer May 3, 2022
e0a1e18
WebServer refactored to new common.
tomas-langer May 4, 2022
2e66bfd
WebClient refactored to new common (2nd part).
tomas-langer May 4, 2022
5b36328
DbClient refactored to new common.
tomas-langer May 4, 2022
a097bf8
grpc refactored to new common.
tomas-langer May 4, 2022
adebd63
Security refactored to new common.
tomas-langer May 4, 2022
028f348
MP refactored to new common.
tomas-langer May 4, 2022
5a69a9d
Integrations refactored to new common.
tomas-langer May 4, 2022
33c8671
Examples refactored to new common.
tomas-langer May 4, 2022
19f4eab
Tests and TCK refactored to new common.
tomas-langer May 4, 2022
d3aa5d9
SE Media refactored to new common.
tomas-langer May 4, 2022
27e3971
FT refactored to new common.
tomas-langer May 4, 2022
a820b24
Health refactored to new common.
tomas-langer May 4, 2022
dfdf6a8
Metrics refactored to new common.
tomas-langer May 4, 2022
be28c65
LRA and messaging refactored to new common.
tomas-langer May 4, 2022
b03b2f7
Scheduling refactored to new common.
tomas-langer May 4, 2022
ec38e96
GraphQL refactored to new common.
tomas-langer May 4, 2022
1c9fb47
OpenAPI refactored to new common.
tomas-langer May 4, 2022
38862f4
Application and Quickstarts refactored to new common.
tomas-langer May 4, 2022
8832492
GraalVM support refactored to new common.
tomas-langer May 4, 2022
9a62bf6
WebServer - fix test + related fixes
tomas-langer May 4, 2022
935bd02
Tests and checkstyle fixes for SE Media
tomas-langer May 4, 2022
9108581
Static content fixes.
tomas-langer May 4, 2022
fe542d3
Javadoc fixes.
tomas-langer May 4, 2022
12b72b8
Security integration fixes.
tomas-langer May 4, 2022
49e561f
Fixed test issues
tomas-langer May 5, 2022
b91edf6
Config changes for new media types
tomas-langer Aug 11, 2022
6a3ec8e
Build fixes (tests, copyright, checkstyle, spotbugs)
tomas-langer Aug 11, 2022
abacf2b
Checkstyle fixes
tomas-langer Aug 11, 2022
97090ef
Fix wrong module info
tomas-langer Aug 11, 2022
4e1e42c
Fix compilation issues.
tomas-langer Aug 11, 2022
6d1f243
Fix compilation issues.
tomas-langer Aug 11, 2022
7d7a7e7
Fix archetypes for new common.
tomas-langer Aug 11, 2022
333f48d
Fix native image test
tomas-langer Aug 11, 2022
6df84e3
Fixed javadoc refs
tomas-langer Aug 11, 2022
a06d928
Javadoc fix
tomas-langer Aug 11, 2022
d298042
Javadoc fixes.
tomas-langer Aug 11, 2022
02d8980
Remove transitive dependency.
tomas-langer Aug 12, 2022
34817b9
Missing module re-added to reactor.
tomas-langer Aug 12, 2022
b82c12f
Fix query param processing in Prometheus support
tomas-langer Aug 12, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,10 @@ We are pleased to announce Helidon 4.0.0 a major release that includes significa
- Introduction of `@Weight`, `Weighted` and `Weights` instead of `@Priority` and `Prioritized`, to base ordering on a double (allows to fit a component between any other two components), all modules using priority are refactored (except for MicroProfile where required by specifications).
- higher weight means a component is more important
- moved priority related types to MP config (as that is the lowest level MP module)
- replaces all instances in SE that use priority with weight (no dependency on Jakarta, predictible and easy to understand behavior)
- replaces all instances in SE that use priority with weight (no dependency on Jakarta, predictible and easy to understand behavior)
- Introduction of `MediaType` as the abstraction of any media type, as used by Config, static content and HTTP in general. See `MediaType` and `MediaTypes`
- `MapperManager` now supports mapping qualifiers
- new `helidon-common-parameters` module contains an abstraction of a container that has named values (one or more); this is used in path parameters, query parameters, form parameters etc.
- new `helidon-common-uri` module contains URI abstraction (path with possible parameters, query, and fragment)
- Header processing now uses `HeaderName` and `HeaderValue` types. This allows you to prepare constants with custom names and values that
are often reused. It also allows us to improve parsing speed of HTTP requests.
3 changes: 2 additions & 1 deletion applications/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.source>19</maven.compiler.source>
<maven.compiler.target>${maven.compiler.source}</maven.compiler.target>
<maven.compiler.release>${maven.compiler.source}</maven.compiler.release>
<version.plugin.compiler>3.8.1</version.plugin.compiler>
Expand Down Expand Up @@ -81,6 +81,7 @@
<systemPropertyVariables>
<java.util.logging.config.file>${project.build.outputDirectory}/logging.properties</java.util.logging.config.file>
</systemPropertyVariables>
<argLine>--enable-preview</argLine>
</configuration>
</plugin>
<plugin>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"
version="2.0"
bean-discovery-mode="annotated">
</beans>
<beans xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
https://jakarta.ee/xml/ns/jakartaee/beans_3_0.xsd"
version="3.0"
bean-discovery-mode="annotated">
</beans>
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package {{package}};

import io.helidon.common.http.Headers;
import io.helidon.common.http.Http;
import io.helidon.config.Config;
import io.helidon.microprofile.server.Server;
import io.helidon.webclient.WebClient;
import io.helidon.webclient.WebClientRequestBuilder;
import io.helidon.webclient.WebClientRequestHeaders;
import io.helidon.webclient.WebClientResponse;
import io.helidon.webclient.WebClientResponseHeaders;
import io.helidon.webserver.cors.CrossOriginConfig;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
Expand Down Expand Up @@ -49,55 +52,56 @@ public class TestCORS {
@Test
void testAnonymousGreetWithCors() {
WebClientRequestBuilder builder = client.get();
Headers headers = builder.headers();
headers.add("Origin", "http://foo.com");
headers.add("Host", "here.com");
WebClientRequestHeaders headers = builder.headers();
headers.set(Http.Header.ORIGIN, "http://foo.com");
headers.set(Http.Header.HOST, "here.com");

WebClientResponse r = getResponse(builder);
assertThat("HTTP response", r.status().code(), is(200));
String payload = fromPayload(r);
assertThat("HTTP response payload", payload, is("{\"message\":\"Hello World!\"}"));
headers = r.headers();
Optional<String> allowOrigin = headers.value(CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN);
assertThat("HTTP response payload", payload, is("{\"message\":\"Hello World!\"}"));
WebClientResponseHeaders resHeaders = r.headers();
Optional<String> allowOrigin = resHeaders.value(Http.Header.ACCESS_CONTROL_ALLOW_ORIGIN);
assertThat("Expected CORS header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN + " is present",
allowOrigin.isPresent(), is(true));
assertThat("CORS header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN, allowOrigin.get(), is("http://foo.com"));
assertThat("CORS header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN, allowOrigin.get(), is("*"));
}

@Test
void testCustomGreetingWithCors() {

WebClientRequestBuilder builder = client.method("OPTIONS");
Headers headers = builder.headers();
headers.add("Origin", "http://foo.com");
headers.add("Host", "here.com");
WebClientRequestHeaders headers = builder.headers();
headers.set(Http.Header.ORIGIN, "http://foo.com");
headers.set(Http.Header.HOST, "here.com");
headers.add("Access-Control-Request-Method", "PUT");

WebClientResponse r = builder.path("/simple-greet")
.submit()
.await();

assertThat("pre-flight status", r.status().code(), is(200));
Headers preflightResponseHeaders = r.headers();
List<String> allowMethods = preflightResponseHeaders.values(CrossOriginConfig.ACCESS_CONTROL_ALLOW_METHODS);
WebClientResponseHeaders responseHeaders = r.headers();
Headers preflightResponseHeaders = responseHeaders;
List<String> allowMethods = preflightResponseHeaders.values(Http.Header.ACCESS_CONTROL_ALLOW_METHODS);
assertThat("pre-flight response check for " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_METHODS,
allowMethods, is(not(empty())));
assertThat("Header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_METHODS, allowMethods, contains("PUT"));
List<String> allowOrigins = preflightResponseHeaders.values(CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN);
List<String> allowOrigins = preflightResponseHeaders.values(Http.Header.ACCESS_CONTROL_ALLOW_ORIGIN);
assertThat("pre-flight response check for " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN,
allowOrigins, is(not(empty())));
assertThat( "Header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN, allowOrigins, contains("http://foo.com"));

builder = client.put();
headers = builder.headers();
headers.add("Origin", "http://foo.com");
headers.add("Host", "here.com");
headers.set(Http.Header.ORIGIN, "http://foo.com");
headers.set(Http.Header.HOST, "here.com");
headers.addAll(preflightResponseHeaders);

r = putResponse("Cheers", builder);
assertThat("HTTP response3", r.status().code(), is(200));
headers = r.headers();
allowOrigins = headers.values(CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN);
responseHeaders = r.headers();
allowOrigins = headers.values(Http.Header.ACCESS_CONTROL_ALLOW_ORIGIN);
assertThat("Expected CORS header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN,
allowOrigins, is(not(empty())));
assertThat( "Header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN, allowOrigins, contains("http://foo.com"));
Expand All @@ -107,9 +111,9 @@ public class TestCORS {
@Test
void testGreetingChangeWithCorsAndOtherOrigin() {
WebClientRequestBuilder builder = client.put();
Headers headers = builder.headers();
headers.add("Origin", "http://other.com");
headers.add("Host", "here.com");
WebClientRequestHeaders headers = builder.headers();
headers.set(Http.Header.ORIGIN, "http://other.com");
headers.set(Http.Header.HOST, "here.com");

WebClientResponse r = putResponse("Ahoy", builder);
boolean isOverriding = Config.create().get("cors").exists();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@

package {{package}};

import java.nio.file.Path;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.ExecutorService;

import io.helidon.common.configurable.ThreadPoolSupplier;
import io.helidon.common.http.ContentDisposition;
import io.helidon.common.http.DataChunk;
import io.helidon.common.http.Http;
import io.helidon.common.http.MediaType;
import io.helidon.common.media.type.MediaTypes;
import io.helidon.common.reactive.IoMulti;
import io.helidon.media.multipart.ContentDisposition;
import io.helidon.media.multipart.ReadableBodyPart;
import io.helidon.webserver.ResponseHeaders;
import io.helidon.webserver.Routing;
import io.helidon.webserver.ServerRequest;
import io.helidon.webserver.ServerResponse;
import io.helidon.webserver.Service;

import jakarta.json.Json;
import jakarta.json.JsonArrayBuilder;
import jakarta.json.JsonBuilderFactory;

import java.nio.file.Path;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.ExecutorService;

/**
* File service.
*/
Expand Down Expand Up @@ -55,8 +56,8 @@ public final class FileService implements Service {
private void download(ServerRequest req, ServerResponse res) {
Path filePath = storage.lookup(req.path().param("fname"));
ResponseHeaders headers = res.headers();
headers.contentType(MediaType.APPLICATION_OCTET_STREAM);
headers.put(Http.Header.CONTENT_DISPOSITION, ContentDisposition.builder()
headers.contentType(MediaTypes.APPLICATION_OCTET_STREAM);
headers.set(Http.Header.CONTENT_DISPOSITION, ContentDisposition.builder()
.filename(filePath.getFileName().toString())
.build()
.toString());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,22 @@

package {{package}};

import io.helidon.common.http.MediaType;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.TimeUnit;

import io.helidon.common.http.Http;
import io.helidon.common.media.type.MediaTypes;
import io.helidon.media.jsonp.JsonpSupport;
import io.helidon.media.multipart.FileFormParams;
import io.helidon.media.multipart.MultiPartSupport;
import io.helidon.webclient.WebClient;
import io.helidon.webclient.WebClientResponse;
import io.helidon.webserver.WebServer;

import jakarta.json.JsonObject;
import jakarta.json.JsonString;
import org.hamcrest.Matchers;
Expand All @@ -18,13 +27,6 @@ import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.concurrent.TimeUnit;

import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
Expand Down Expand Up @@ -65,7 +67,7 @@ public class FileServiceTest {
Path file = Files.write( Files.createTempFile(null, null), "bar\n".getBytes(StandardCharsets.UTF_8));
WebClientResponse response = webClient
.post()
.contentType(MediaType.MULTIPART_FORM_DATA)
.contentType(MediaTypes.MULTIPART_FORM_DATA)
.submit(FileFormParams.builder()
.addFile("file[]", "foo.txt", file)
.build())
Expand All @@ -81,7 +83,7 @@ public class FileServiceTest {
WebClientResponse response = webClient
.post()
.queryParam("stream", "true")
.contentType(MediaType.MULTIPART_FORM_DATA)
.contentType(MediaTypes.MULTIPART_FORM_DATA)
.submit(FileFormParams.builder()
.addFile("file[]", "streamed-foo.txt", file)
.addFile("otherPart", "streamed-foo2.txt", file2)
Expand All @@ -95,7 +97,7 @@ public class FileServiceTest {
public void testList() {
WebClientResponse response = webClient
.get()
.contentType(MediaType.APPLICATION_JSON)
.contentType(MediaTypes.APPLICATION_JSON)
.request()
.await();
assertThat(response.status().code(), Matchers.is(200));
Expand All @@ -111,11 +113,11 @@ public class FileServiceTest {
WebClientResponse response = webClient
.get()
.path("foo.txt")
.accept(MediaType.APPLICATION_OCTET_STREAM)
.accept(MediaTypes.APPLICATION_OCTET_STREAM)
.request()
.await();
assertThat(response.status().code(), is(200));
assertThat(response.headers().first("Content-Disposition").orElse(null),
assertThat(response.headers().first(Http.Header.CONTENT_DISPOSITION).orElse(null),
containsString("filename=\"foo.txt\""));
byte[] bytes = response.content().as(byte[].class).await();
assertThat(new String(bytes, StandardCharsets.UTF_8), Matchers.is("bar\n"));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package {{package}};

import io.helidon.common.http.Headers;
import io.helidon.common.http.Http;
import io.helidon.config.Config;
import io.helidon.webclient.WebClient;
import io.helidon.webclient.WebClientRequestBuilder;
import io.helidon.webclient.WebClientRequestHeaders;
import io.helidon.webclient.WebClientResponse;
import io.helidon.webclient.WebClientResponseHeaders;
import io.helidon.webserver.WebServer;
import io.helidon.webserver.cors.CrossOriginConfig;
import org.junit.jupiter.api.AfterAll;
Expand Down Expand Up @@ -58,16 +61,16 @@ public class TestCORS {
@Test
void testAnonymousGreetWithCors() {
WebClientRequestBuilder builder = client.get();
Headers headers = builder.headers();
headers.add("Origin", "http://foo.com");
headers.add("Host", "here.com");
WebClientRequestHeaders headers = builder.headers();
headers.set(Http.Header.ORIGIN, "http://foo.com");
headers.set(Http.Header.HOST, "here.com");

WebClientResponse r = getResponse(builder);
assertThat("HTTP response", r.status().code(), is(200));
String payload = fromPayload(r);
assertThat("HTTP response payload", payload, is("Hello World!"));
headers = r.headers();
Optional<String> allowOrigin = headers.value(CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN);
WebClientResponseHeaders resHeaders = r.headers();
Optional<String> allowOrigin = resHeaders.value(Http.Header.ACCESS_CONTROL_ALLOW_ORIGIN);
assertThat("Expected CORS header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN + " is present",
allowOrigin.isPresent(), is(true));
assertThat("CORS header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN, allowOrigin.get(), is("*"));
Expand All @@ -77,36 +80,37 @@ public class TestCORS {
void testCustomGreetingWithCors() {

WebClientRequestBuilder builder = client.method("OPTIONS");
Headers headers = builder.headers();
headers.add("Origin", "http://foo.com");
headers.add("Host", "here.com");
WebClientRequestHeaders headers = builder.headers();
headers.set(Http.Header.ORIGIN, "http://foo.com");
headers.set(Http.Header.HOST, "here.com");
headers.add("Access-Control-Request-Method", "PUT");

WebClientResponse r = builder.path("/cors")
.submit()
.await();

assertThat("pre-flight status", r.status().code(), is(200));
Headers preflightResponseHeaders = r.headers();
List<String> allowMethods = preflightResponseHeaders.values(CrossOriginConfig.ACCESS_CONTROL_ALLOW_METHODS);
WebClientResponseHeaders responseHeaders = r.headers();
Headers preflightResponseHeaders = responseHeaders;
List<String> allowMethods = preflightResponseHeaders.values(Http.Header.ACCESS_CONTROL_ALLOW_METHODS);
assertThat("pre-flight response check for " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_METHODS,
allowMethods, is(not(empty())));
assertThat("Header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_METHODS, allowMethods, contains("PUT"));
List<String> allowOrigins = preflightResponseHeaders.values(CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN);
List<String> allowOrigins = preflightResponseHeaders.values(Http.Header.ACCESS_CONTROL_ALLOW_ORIGIN);
assertThat("pre-flight response check for " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN,
allowOrigins, is(not(empty())));
assertThat( "Header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN, allowOrigins, contains("http://foo.com"));

builder = client.put();
headers = builder.headers();
headers.add("Origin", "http://foo.com");
headers.add("Host", "here.com");
headers.set(Http.Header.ORIGIN, "http://foo.com");
headers.set(Http.Header.HOST, "here.com");
headers.addAll(preflightResponseHeaders);

r = putResponse("Cheers", builder);
assertThat("HTTP response3", r.status().code(), is(200));
headers = r.headers();
allowOrigins = headers.values(CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN);
responseHeaders = r.headers();
allowOrigins = headers.values(Http.Header.ACCESS_CONTROL_ALLOW_ORIGIN);
assertThat("Expected CORS header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN,
allowOrigins, is(not(empty())));
assertThat( "Header " + CrossOriginConfig.ACCESS_CONTROL_ALLOW_ORIGIN, allowOrigins, contains("http://foo.com"));
Expand All @@ -116,9 +120,9 @@ public class TestCORS {
@Test
void testGreetingChangeWithCorsAndOtherOrigin() {
WebClientRequestBuilder builder = client.put();
Headers headers = builder.headers();
headers.add("Origin", "http://other.com");
headers.add("Host", "here.com");
WebClientRequestHeaders headers = builder.headers();
headers.set(Http.Header.ORIGIN, "http://other.com");
headers.set(Http.Header.HOST, "here.com");

WebClientResponse r = putResponse("Ahoy", builder);
boolean isOverriding = Config.create().get("cors").exists();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;

import jakarta.annotation.Priority;

import io.helidon.common.Weight;
import io.helidon.dbclient.DbColumn;
import io.helidon.dbclient.DbMapper;
import io.helidon.dbclient.DbRow;
Expand All @@ -19,7 +18,7 @@ import io.helidon.dbclient.spi.DbMapperProvider;
*
* Pokemon, and Pokemon character names are trademarks of Nintendo.
*/
@Priority(1000)
@Weight(50)
public class PokemonMapperProvider implements DbMapperProvider {
private static final PokemonMapper MAPPER = new PokemonMapper();

Expand Down
Loading