Unfortunately, this approach does not work.
ProxyFactory proxyFactory = new ProxyFactory(); proxyFactory.setSuperclass(Application.class); proxyFactory.setFilter(new MethodFilter() { public boolean isHandled(Method m) { return !m.getName().equals("finalize"); } }); Class aClass = proxyFactory.createClass(); MethodHandler mi = new MethodHandler() { public Object invoke(Object self, Method m, Method proceed, Object[] args) throws Throwable { //wrap the getClass() return proceed.invoke(self, args); } }; Application foo = (Application)aClass.newInstance(); ((ProxyObject)foo).setHandler(mi); Class<? extends Application> aClass1 = foo.getClass(); I'll try another strategy. On Thu, Mar 28, 2019 at 2:39 PM Otávio Gonçalves de Santana < osant...@tomitribe.com> wrote: > 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 < > osant...@tomitribe.com> 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 < >> osant...@tomitribe.com> 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 <daniels...@apache.org> >>> 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 < >>>> osant...@tomitribe.com> 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 = "ota...@otavio.com", >>>> > 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 <daniels...@apache.org> >>>> > wrote: >>>> > >>>> > > Can you guys push your sample? >>>> > > >>>> > > On Wed, Mar 27, 2019, 4:58 PM Otávio Gonçalves de Santana < >>>> > > osant...@tomitribe.com> 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 < >>>> > > ivanjunc...@gmail.com >>>> > > > > >>>> > > > 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 < >>>> radcor...@yahoo.com> >>>> > > > > 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 < >>>> ivanjunc...@gmail.com >>>> > > >>>> > > > > wrote: >>>> > > > > > >>>> > > > > > I will take a look thanks again Romain >>>> > > > > > >>>> > > > > > On Fri, Feb 8, 2019 at 4:38 PM Romain Manni-Bucau < >>>> > > > rmannibu...@gmail.com >>>> > > > > > >>>> > > > > > 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 < >>>> > > > ivanjunc...@gmail.com >>>> > > > > > >>>> > > > > >> a >>>> > > > > >> écrit : >>>> > > > > >> >>>> > > > > >> > Interesting, ok thanks Romain. >>>> > > > > >> > >>>> > > > > >> > On Fri, Feb 8, 2019 at 3:29 PM Romain Manni-Bucau < >>>> > > > > >> rmannibu...@gmail.com> >>>> > > > > >> > 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 < >>>> > > > > >> ivanjunc...@gmail.com> >>>> > > > > >> >> 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 = "supp...@petstore.com") >>>> > > > > >> >>> ), >>>> > > > > >> >>> 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_ >>>> >>>