One possible solution is the Javassist <http://www.javassist.org/>.
Therefore, I can create a proxy on a class.
ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(Application.class);
factory.setFilter(
new MethodFilter() {
@Override
public boolean isHandled(Method method) {
return true;
}
}
);
MethodHandler handler = new MethodHandler() {
@Override
public Object invoke(Object self, Method thisMethod, Method
proceed, Object[] args) throws Throwable {
//the logic here
}
};
Application application = (Application) factory.create(new
Class<?>[0], new Object[0], handler);
That is possible, but it does not look good. I'll try another option. Also,
we need to include this library on the Server.
Thoughts?
On Thu, Mar 28, 2019 at 10:45 AM Otávio Gonçalves de Santana <
[email protected]> wrote:
> The InternalApplication is required, because, at RESTService it needs to
> add classes as a wrapper.
> My first thought is to create a proxy, however, Application is a class and
> not an interface.
>
> On Thu, Mar 28, 2019 at 9:43 AM Otávio Gonçalves de Santana <
> [email protected]> wrote:
>
>> Yes, there is this line that does not do this verification:
>>
>> application = !InternalApplication.class.isInstance(application) ? new
>> InternalApplication(application) : application;
>>
>>
>>
>> https://github.com/apache/tomee/blob/master/server/openejb-rest/src/main/java/org/apache/openejb/server/rest/RESTService.java#L224
>>
>> On Thu, Mar 28, 2019 at 1:07 AM Daniel Cunha <[email protected]>
>> wrote:
>>
>>> It is not injecting the config values for
>>> org.microprofileext.openapi.swaggerui.Templates and yes,
>>> using openejb.cxf-rs.cache-application=false the issue still happening.
>>> Interesting..
>>>
>>> Em qua, 27 de mar de 2019 às 18:24, Otávio Gonçalves de Santana <
>>> [email protected]> escreveu:
>>>
>>> > My maven configuration:
>>> >
>>> > <project xmlns="http://maven.apache.org/POM/4.0.0"
>>> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>> > xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
>>> > http://maven.apache.org/xsd/maven-4.0.0.xsd">
>>> > <modelVersion>4.0.0</modelVersion>
>>> >
>>> > <groupId>org.superbiz</groupId>
>>> > <artifactId>env-tomee</artifactId>
>>> > <packaging>war</packaging>
>>> >
>>> > <name>OpenEJB</name>
>>> > <description>OpenEJB :: Web Examples</description>
>>> > <version>0.0.1-SNAPSHOT</version>
>>> > <url>http://tomee.apache.org</url>
>>> >
>>> > <properties>
>>> >
>>> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
>>> > <tomee.version>8.0.0-M2</tomee.version>
>>> > </properties>
>>> >
>>> > <build>
>>> > <finalName>env-tomee</finalName>
>>> > <plugins>
>>> > <plugin>
>>> > <groupId>org.apache.maven.plugins</groupId>
>>> > <artifactId>maven-compiler-plugin</artifactId>
>>> > <version>3.5.1</version>
>>> > <configuration>
>>> > <source>1.8</source>
>>> > <target>1.8</target>
>>> > </configuration>
>>> > </plugin>
>>> > <plugin>
>>> > <groupId>org.apache.maven.plugins</groupId>
>>> > <artifactId>maven-war-plugin</artifactId>
>>> > <version>3.1.0</version>
>>> > </plugin>
>>> > </plugins>
>>> > </build>
>>> >
>>> > <repositories>
>>> > <repository>
>>> > <id>apache-m2-snapshot</id>
>>> > <name>Apache Snapshot Repository</name>
>>> > <url>
>>> https://repository.apache.org/content/groups/snapshots
>>> > </url>
>>> > <snapshots>
>>> > <enabled>true</enabled>
>>> > </snapshots>
>>> > </repository>
>>> > </repositories>
>>> >
>>> > <pluginRepositories>
>>> > <pluginRepository>
>>> > <id>apache.snapshots</id>
>>> > <url>http://repository.apache.org/snapshots/</url>
>>> > </pluginRepository>
>>> > </pluginRepositories>
>>> >
>>> > <dependencies>
>>> > <dependency>
>>> > <groupId>org.apache.tomee</groupId>
>>> > <artifactId>javaee-api</artifactId>
>>> > <version>8.0</version>
>>> > <scope>provided</scope>
>>> > </dependency>
>>> > <dependency>
>>> > <groupId>org.eclipse.microprofile.openapi</groupId>
>>> > <artifactId>microprofile-openapi-api</artifactId>
>>> > <version>1.1.2</version>
>>> > <scope>provided</scope>
>>> > </dependency>
>>> > <dependency>
>>> > <groupId>org.microprofile-ext.openapi-ext</groupId>
>>> > <artifactId>swagger-ui</artifactId>
>>> > <version>1.0.1</version>
>>> > </dependency>
>>> > </dependencies>
>>> > </project>
>>> >
>>> >
>>> > My code:
>>> >
>>> > @ApplicationPath("api")@OpenAPIDefinition(info = @Info(
>>> > title = "Example application",
>>> > version = "1.0.0",
>>> > contact = @Contact(
>>> > name = "Otavio",
>>> > email = "[email protected]",
>>> > url = "http://www.otaviojava.com.br")
>>> > ),
>>> > servers = {
>>> > @Server(url = "/example", description = "localhost")
>>> > }
>>> > )public class MVCApplication extends Application {
>>> > }
>>> >
>>> >
>>> @Path("envs")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)@Tag(name
>>> > = "Config Retrieval service", description = "Get the value for a
>>> > certain config")public class EnvironmentResource {
>>> >
>>> > @GET
>>> > @Operation(description = "Get the envs")
>>> > @APIResponses({
>>> > @APIResponse(responseCode = "200", description =
>>> > "Successful, returning the value")
>>> > })
>>> > public Map<String, String> getEnvs() {
>>> > return System.getenv();
>>> > }
>>> >
>>> > @GET
>>> > @Path("/{key}")
>>> > @Operation(description = "Get the value for this key")
>>> > @APIResponses({
>>> > @APIResponse(responseCode = "200", description =
>>> > "Successful, returning the value")
>>> > })
>>> > @Produces(MediaType.TEXT_PLAIN)
>>> > public Response getConfigValue(@PathParam("key") String key) {
>>> > return Response.ok(key).build();
>>> > }
>>> >
>>> > }
>>> >
>>> >
>>> > On Wed, Mar 27, 2019 at 5:11 PM Daniel Cunha <[email protected]>
>>> > wrote:
>>> >
>>> > > Can you guys push your sample?
>>> > >
>>> > > On Wed, Mar 27, 2019, 4:58 PM Otávio Gonçalves de Santana <
>>> > > [email protected]> wrote:
>>> > >
>>> > > > Hey Ivan.
>>> > > > I tried something, and I saw the same issue. It seems this by-pass
>>> does
>>> > > not
>>> > > > work.
>>> > > >
>>> > > > On Mon, Feb 11, 2019 at 11:18 AM Ivan Junckes Filho <
>>> > > [email protected]
>>> > > > >
>>> > > > wrote:
>>> > > >
>>> > > > > It didn't seem to work for me adding the property to
>>> > system.properties.
>>> > > > Any
>>> > > > > ideas what I am doing wrong?
>>> > > > >
>>> > > > > On Sat, Feb 9, 2019 at 10:21 AM Roberto Cortez <
>>> [email protected]>
>>> > > > > wrote:
>>> > > > >
>>> > > > > > Hi Ivan,
>>> > > > > >
>>> > > > > > Yes Romain is right, you should set
>>> > openejb.cxf-rs.cache-application
>>> > > =
>>> > > > > > false and it should work. We had to set that for the TCK to
>>> pass,
>>> > but
>>> > > > the
>>> > > > > > config never reached the final distribution. I did notice that
>>> and
>>> > > I’ve
>>> > > > > > added it in case a MP app is detected, but it was after M2 was
>>> > > > released.
>>> > > > > >
>>> > > > > > Cheers,
>>> > > > > > Roberto
>>> > > > > >
>>> > > > > > On 8 Feb 2019, at 21:06, Ivan Junckes Filho <
>>> [email protected]
>>> > >
>>> > > > > wrote:
>>> > > > > >
>>> > > > > > I will take a look thanks again Romain
>>> > > > > >
>>> > > > > > On Fri, Feb 8, 2019 at 4:38 PM Romain Manni-Bucau <
>>> > > > [email protected]
>>> > > > > >
>>> > > > > > wrote:
>>> > > > > >
>>> > > > > >> Hey, just recalled we had a flag about it,
>>> > > > > >>
>>> > > > > >> you can skip it setting openejb.cxf-rs.cache-application=false
>>> > > > > >>
>>> > > > > >> Romain Manni-Bucau
>>> > > > > >> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>>> > > > > >> <https://rmannibucau.metawerx.net/> | Old Blog
>>> > > > > >> <http://rmannibucau.wordpress.com> | Github <
>>> > > > > >> https://github.com/rmannibucau> |
>>> > > > > >> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
>>> > > > > >> <
>>> > > > > >>
>>> > > > >
>>> > > >
>>> > >
>>> >
>>> https://www.packtpub.com/application-development/java-ee-8-high-performance
>>> > > > > >> >
>>> > > > > >>
>>> > > > > >>
>>> > > > > >> Le ven. 8 févr. 2019 à 19:01, Ivan Junckes Filho <
>>> > > > [email protected]
>>> > > > > >
>>> > > > > >> a
>>> > > > > >> écrit :
>>> > > > > >>
>>> > > > > >> > Interesting, ok thanks Romain.
>>> > > > > >> >
>>> > > > > >> > On Fri, Feb 8, 2019 at 3:29 PM Romain Manni-Bucau <
>>> > > > > >> [email protected]>
>>> > > > > >> > wrote:
>>> > > > > >> >
>>> > > > > >> >> Hi Ivan,
>>> > > > > >> >>
>>> > > > > >> >> In a few cases - don't recall out of my head if it is all -
>>> > TomEE
>>> > > > > wraps
>>> > > > > >> >> user application in InternalApplication. IIRC it was for
>>> > caching
>>> > > > > >> reason -
>>> > > > > >> >> TomEE not being super cleanly aligned on CDI + to avoid to
>>> get
>>> > > > > multiple
>>> > > > > >> >> instances between runtime and deployment which can break
>>> user
>>> > > code.
>>> > > > > >> >> Enhancing TomEE to no do it anymore or not use a wrapper
>>> when
>>> > not
>>> > > > > >> needed
>>> > > > > >> >> can be a first step fixing that.
>>> > > > > >> >>
>>> > > > > >> >> Romain Manni-Bucau
>>> > > > > >> >> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>>> > > > > >> >> <https://rmannibucau.metawerx.net/> | Old Blog
>>> > > > > >> >> <http://rmannibucau.wordpress.com> | Github
>>> > > > > >> >> <https://github.com/rmannibucau> | LinkedIn
>>> > > > > >> >> <https://www.linkedin.com/in/rmannibucau> | Book
>>> > > > > >> >> <
>>> > > > > >>
>>> > > > >
>>> > > >
>>> > >
>>> >
>>> https://www.packtpub.com/application-development/java-ee-8-high-performance
>>> > > > > >> >
>>> > > > > >> >>
>>> > > > > >> >>
>>> > > > > >> >> Le ven. 8 févr. 2019 à 18:14, Ivan Junckes Filho <
>>> > > > > >> [email protected]>
>>> > > > > >> >> a écrit :
>>> > > > > >> >>
>>> > > > > >> >>> The @OpenAPIDefinition is not being picked up by the CDI
>>> > > extension
>>> > > > > >> >>> because it is only getting InternalApplication instead of
>>> > > picking
>>> > > > up
>>> > > > > >> my
>>> > > > > >> >>> custom Application config. Any ideas why?
>>> OpenAPIDefinition
>>> > > > configs
>>> > > > > >> are
>>> > > > > >> >>> therefore not showing up in the openapi doc.
>>> > > > > >> >>>
>>> > > > > >> >>>
>>> > > > > >> >>> @OpenAPIDefinition(info =
>>> > > > > >> >>> @Info(
>>> > > > > >> >>> title = "TEST",
>>> > > > > >> >>> version = "2.0",
>>> > > > > >> >>> description = "Pet Store App API",
>>> > > > > >> >>> license = @License(
>>> > > > > >> >>> name = "Apache 2.0",
>>> > > > > >> >>> url = "
>>> > > > > >> http://www.apache.org/licenses/LICENSE-2.0.html"),
>>> > > > > >> >>> contact = @Contact(
>>> > > > > >> >>> name = "PetStore API Support",
>>> > > > > >> >>> url = "
>>> > > > > >> https://github.com/eclipse/microprofile-open-api",
>>> > > > > >> >>> email = "[email protected]")
>>> > > > > >> >>> ),
>>> > > > > >> >>> security = @SecurityRequirement(name = "oauth2"),
>>> > > > > >> >>> servers = @Server(url = "/test/"))
>>> > > > > >> >>> @ApplicationPath("/api")
>>> > > > > >> >>> @LoginConfig(authMethod = "MP-JWT")
>>> > > > > >> >>> public class ApplicationConfiguration extends Application
>>> {
>>> > > > > >> >>>
>>> > > > > >> >>>
>>> > > > > >>
>>> > > > > >
>>> > > > > >
>>> > > > >
>>> > > >
>>> > >
>>> >
>>>
>>>
>>> --
>>> Daniel "soro" Cunha
>>> https://twitter.com/dvlc_
>>>
>>