Update the ApplicationPath, Path and Provider annotations to be stereotype annotations. Make the parameter annotations qualifiers. Added CDI as a required module. Signed-off-by: James R. Perkins <jperkins@ibm.com>
diff --git a/jaxrs-api/pom.xml b/jaxrs-api/pom.xml index 765f14b..522c6be 100644 --- a/jaxrs-api/pom.xml +++ b/jaxrs-api/pom.xml
@@ -86,6 +86,14 @@ <dependencies> <dependency> + <groupId>jakarta.enterprise</groupId> + <artifactId>jakarta.enterprise.cdi-api</artifactId> + </dependency> + <dependency> + <groupId>jakarta.inject</groupId> + <artifactId>jakarta.inject-api</artifactId> + </dependency> + <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <scope>test</scope>
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/ApplicationPath.java b/jaxrs-api/src/main/java/jakarta/ws/rs/ApplicationPath.java index f4ef062..b5743c1 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/ApplicationPath.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/ApplicationPath.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Stereotype; +import jakarta.enterprise.util.AnnotationLiteral; + /** * Identifies the application path that serves as the base URI for all resource URIs provided by * {@link jakarta.ws.rs.Path}. May only be applied to a subclass of {@link jakarta.ws.rs.core.Application}. @@ -40,6 +45,8 @@ @Documented @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) +@ApplicationScoped +@Stereotype public @interface ApplicationPath { /** @@ -55,4 +62,41 @@ * @return base URI. */ String value(); + + /** + * Supports inline instantiation of the {@link ApplicationPath} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<ApplicationPath> implements ApplicationPath { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default ApplicationPath literal + */ + public static final ApplicationPath INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a ApplicationPath annotation. + * + * @param value the base path value + * + * @return the new literal ApplicationPath + */ + public static ApplicationPath of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/BeanParam.java b/jaxrs-api/src/main/java/jakarta/ws/rs/BeanParam.java index 5c22a49..68f44c6 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/BeanParam.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/BeanParam.java
@@ -16,12 +16,16 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.util.AnnotationLiteral; +import jakarta.inject.Qualifier; + /** * The annotation that may be used to inject custom JAX-RS "parameter aggregator" value object into a resource class * field, property or resource method parameter. @@ -68,5 +72,22 @@ @Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Qualifier public @interface BeanParam { + + /** + * Supports inline instantiation of the {@link BeanParam} annotation. + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<BeanParam> implements BeanParam { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default BeanParam literal + */ + public static final BeanParam INSTANCE = new Literal(); + + private Literal() {} + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/CookieParam.java b/jaxrs-api/src/main/java/jakarta/ws/rs/CookieParam.java index 8ec0326..1d8f247 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/CookieParam.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/CookieParam.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.util.AnnotationLiteral; +import jakarta.enterprise.util.Nonbinding; +import jakarta.inject.Qualifier; + /** * Binds the value of a HTTP cookie to a resource method parameter, resource class field, or resource class bean * property. A default value can be specified using the {@link DefaultValue} annotation. @@ -55,6 +60,7 @@ @Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Qualifier public @interface CookieParam { /** @@ -63,5 +69,43 @@ * * @return HTTP cookie name. */ + @Nonbinding String value(); + + /** + * Supports inline instantiation of the {@link CookieParam} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<CookieParam> implements CookieParam { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default CookieParam literal + */ + public static final CookieParam INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a CookieParam annotation. + * + * @param value the cookie value + * + * @return the new literal cookie param + */ + public static CookieParam of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/FormParam.java b/jaxrs-api/src/main/java/jakarta/ws/rs/FormParam.java index 1df6ae1..8285a49 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/FormParam.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/FormParam.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.util.AnnotationLiteral; +import jakarta.enterprise.util.Nonbinding; +import jakarta.inject.Qualifier; + /** * Binds the value(s) of a form parameter contained within a request entity body to a resource method parameter. Values * are URL decoded unless this is disabled using the {@link Encoded} annotation. A default value can be specified using @@ -66,6 +71,7 @@ @Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Qualifier public @interface FormParam { /** @@ -76,5 +82,43 @@ * * @return form parameter name. */ + @Nonbinding String value(); + + /** + * Supports inline instantiation of the {@link FormParam} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<FormParam> implements FormParam { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default FormParam literal + */ + public static final FormParam INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a FormParam annotation. + * + * @param value the form value + * + * @return the new literal form param + */ + public static FormParam of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/HeaderParam.java b/jaxrs-api/src/main/java/jakarta/ws/rs/HeaderParam.java index 2bdc640..c046055 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/HeaderParam.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/HeaderParam.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.util.AnnotationLiteral; +import jakarta.enterprise.util.Nonbinding; +import jakarta.inject.Qualifier; + /** * Binds the value(s) of a HTTP header to a resource method parameter, resource class field, or resource class bean * property. A default value can be specified using the {@link DefaultValue} annotation. @@ -58,6 +63,7 @@ @Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Qualifier public @interface HeaderParam { /** @@ -66,5 +72,43 @@ * * @return HTTP header name. */ + @Nonbinding String value(); + + /** + * Supports inline instantiation of the {@link HeaderParam} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<HeaderParam> implements HeaderParam { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default HeaderParam literal + */ + public static final HeaderParam INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a HeaderParam annotation. + * + * @param value the header value + * + * @return the new literal header param + */ + public static HeaderParam of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/MatrixParam.java b/jaxrs-api/src/main/java/jakarta/ws/rs/MatrixParam.java index 1abd05e..62a584d 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/MatrixParam.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/MatrixParam.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.util.AnnotationLiteral; +import jakarta.enterprise.util.Nonbinding; +import jakarta.inject.Qualifier; + /** * Binds the value(s) of a URI matrix parameter to a resource method parameter, resource class field, or resource class * bean property. Values are URL decoded unless this is disabled using the {@link Encoded} annotation. A default value @@ -66,6 +71,7 @@ @Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Qualifier public @interface MatrixParam { /** @@ -76,5 +82,43 @@ * * @return URI matrix parameter name. */ + @Nonbinding String value(); + + /** + * Supports inline instantiation of the {@link MatrixParam} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<MatrixParam> implements MatrixParam { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default MatrixParam literal + */ + public static final MatrixParam INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a MatrixParam annotation. + * + * @param value the matrix value + * + * @return the new literal matrix param + */ + public static MatrixParam of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/Path.java b/jaxrs-api/src/main/java/jakarta/ws/rs/Path.java index 5245dc6..2f72263 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/Path.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/Path.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.context.RequestScoped; +import jakarta.enterprise.inject.Stereotype; +import jakarta.enterprise.util.AnnotationLiteral; + /** * Identifies the URI path that a resource class or class method will serve requests for. * @@ -65,6 +70,8 @@ @Target({ ElementType.TYPE, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@RequestScoped +@Stereotype public @interface Path { /** @@ -105,4 +112,41 @@ * @return URI template. */ String value(); + + /** + * Supports inline instantiation of the {@link Path} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<Path> implements Path { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default Path literal + */ + public static final Path INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a Path annotation. + * + * @param value the base path value + * + * @return the new literal Path + */ + public static Path of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/PathParam.java b/jaxrs-api/src/main/java/jakarta/ws/rs/PathParam.java index 93850e8..0b9775e 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/PathParam.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/PathParam.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.util.AnnotationLiteral; +import jakarta.enterprise.util.Nonbinding; +import jakarta.inject.Qualifier; + /** * Binds the value of a URI template parameter or a path segment containing the template parameter to a resource method * parameter, resource class field, or resource class bean property. The value is URL decoded unless this is disabled @@ -67,6 +72,7 @@ @Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Qualifier public @interface PathParam { /** @@ -80,5 +86,43 @@ * * @return resource URI template parameter name. */ + @Nonbinding String value(); + + /** + * Supports inline instantiation of the {@link PathParam} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<PathParam> implements PathParam { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default PathParam literal + */ + public static final PathParam INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a PathParam annotation. + * + * @param value the path value + * + * @return the new literal path param + */ + public static PathParam of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/QueryParam.java b/jaxrs-api/src/main/java/jakarta/ws/rs/QueryParam.java index 423258b..e737379 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/QueryParam.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/QueryParam.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.util.AnnotationLiteral; +import jakarta.enterprise.util.Nonbinding; +import jakarta.inject.Qualifier; + /** * Binds the value(s) of a HTTP query parameter to a resource method parameter, resource class field, or resource class * bean property. Values are URL decoded unless this is disabled using the {@link Encoded} annotation. A default value @@ -60,6 +65,7 @@ @Target({ ElementType.PARAMETER, ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented +@Qualifier public @interface QueryParam { /** @@ -70,5 +76,43 @@ * * @return HTTP query parameter name. */ + @Nonbinding String value(); + + /** + * Supports inline instantiation of the {@link QueryParam} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<QueryParam> implements QueryParam { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default QueryParam literal + */ + public static final QueryParam INSTANCE = of(""); + + private final String value; + + private Literal(final String value) { + this.value = value; + } + + /** + * Obtain the literal of a QueryParam annotation. + * + * @param value the query value + * + * @return the new literal query param + */ + public static QueryParam of(final String value) { + return new Literal(value); + } + + @Override + public String value() { + return value; + } + } }
diff --git a/jaxrs-api/src/main/java/jakarta/ws/rs/ext/Provider.java b/jaxrs-api/src/main/java/jakarta/ws/rs/ext/Provider.java index b8d1ae7..15c0762 100644 --- a/jaxrs-api/src/main/java/jakarta/ws/rs/ext/Provider.java +++ b/jaxrs-api/src/main/java/jakarta/ws/rs/ext/Provider.java
@@ -16,12 +16,17 @@ package jakarta.ws.rs.ext; +import java.io.Serial; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Stereotype; +import jakarta.enterprise.util.AnnotationLiteral; + /** * Marks an implementation of an extension interface that should be discoverable by JAX-RS runtime during a provider * scanning phase. @@ -33,5 +38,25 @@ @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented +@ApplicationScoped +@Stereotype public @interface Provider { + + /** + * Supports inline instantiation of the {@link Provider} annotation. + * + * @since 5.0 + */ + final class Literal extends AnnotationLiteral<Provider> implements Provider { + @Serial + private static final long serialVersionUID = 1L; + + /** + * Default Provider literal + */ + public static final Provider INSTANCE = new Literal(); + + private Literal() { + } + } }
diff --git a/jaxrs-api/src/main/java/module-info.java b/jaxrs-api/src/main/java/module-info.java index b0dd78b..4a659ae 100644 --- a/jaxrs-api/src/main/java/module-info.java +++ b/jaxrs-api/src/main/java/module-info.java
@@ -20,6 +20,8 @@ module jakarta.ws.rs { requires java.logging; + requires jakarta.cdi; + requires jakarta.inject; exports jakarta.ws.rs; exports jakarta.ws.rs.client;