:index-group: REST
:jbake-type: page
:jbake-status: status=published
= Simple REST with CDI

Defining a REST service is pretty easy, simply ad @Path annotation to a
class then define on methods the HTTP method to use (@GET, @POST, …).

== The REST service: @Path, @Produces, @Consumes

Here we have a simple REST, we annotate the class with `@Path("/greeting")` to indicate the route corresponding to the `GreetingService` class. We define `message()` as `@GET` and `lowerCase()` as `@POST` for this `/greeting` route and inject the` Greeting` class using the annotation `@Inject`. There, we have a service! Simple isn't it?

Actually lines:

[source,java]
----
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
@Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
----

are optional since it is the default configuration. And these lines can
be configured by method too if you need to be more precise.

[source,java]
----
@Path("/greeting")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public class GreetingService {

    @Inject
    Greeting greeting;

    @GET
    public Greet message() {
        return new Greet("Hi REST!");
    }

    @POST
    public Greet lowerCase(final Request message) {
        return new Greet(greeting.doSomething(message.getValue()));
    }

    @XmlRootElement // for xml only, useless for json (johnzon is the default)
    public static class Greet {
        private String message;

        public Greet(final String message) {
            this.message = message;
        }

        public Greet() {
            this(null);
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(final String message) {
            this.message = message;
        }
    }
}
----

== Testing

=== Test for the JAXRS service

The test uses the OpenEJB ApplicationComposer to make it trivial.

The idea is first to activate the jaxrs services. This is done using
@EnableServices annotation.

Then we create on the fly the application simply returning an object
representing the web.xml. Here we simply use it to define the context
root but you can use it to define your REST Application too. And to
complete the application definition we add @Classes annotation to define
the set of classes to use in this app.

Finally to test it we use cxf client API to call the REST service in
get() and post() methods.

NOTE: to show we use JSON or XML depending on the test method we
activated on EnableServices the attribute httpDebug which prints the
http messages in the logs.

[source,java]
----
package org.superbiz.rest;

import org.apache.cxf.jaxrs.client.WebClient;
import org.apache.johnzon.jaxrs.JohnzonProvider;
import org.apache.openejb.jee.WebApp;
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.testing.Classes;
import org.apache.openejb.testing.Configuration;
import org.apache.openejb.testing.EnableServices;
import org.apache.openejb.testing.Module;
import org.apache.openejb.testng.PropertiesBuilder;
import org.apache.openejb.util.NetworkUtil;
import org.junit.Test;
import org.junit.runner.RunWith;

import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.util.Properties;

import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;

@EnableServices(value = "jaxrs", httpDebug = true)
@RunWith(ApplicationComposer.class)
public class GreetingServiceTest {
    private int port;

    @Configuration
    public Properties randomPort() {
        port = NetworkUtil.getNextAvailablePort();
        return new PropertiesBuilder().p("httpejbd.port", Integer.toString(port)).build();
    }

    @Module
    @Classes(value = {GreetingService.class, Greeting.class}, cdi = true) // This enables the CDI magic
    public WebApp app() {
        return new WebApp().contextRoot("test");
    }

    @Test
    public void getXml() throws IOException {
        final String message = WebClient.create("http://localhost:" + port).path("/test/greeting/")
                .accept(MediaType.APPLICATION_XML_TYPE)
                .get(GreetingService.Greet.class).getMessage();
        assertEquals("Hi REST!", message);
    }

    @Test
    public void postXml() throws IOException {
        final String message = WebClient.create("http://localhost:" + port).path("/test/greeting/")
                .accept(MediaType.APPLICATION_XML_TYPE)
                .type(MediaType.APPLICATION_XML_TYPE)
                .post(new Request("Hi REST!"), GreetingService.Greet.class).getMessage();
        assertEquals("hi rest!", message);
    }

    @Test
    public void getJson() throws IOException {
        final String message = WebClient.create("http://localhost:" + port, asList(new JohnzonProvider<GreetingService.Greet>())).path("/test/greeting/")
                .accept(MediaType.APPLICATION_JSON_TYPE)
                .get(GreetingService.Greet.class).getMessage();
        assertEquals("Hi REST!", message);
    }

    @Test
    public void postJson() throws IOException {
        final String message = WebClient.create("http://localhost:" + port, asList(new JohnzonProvider<GreetingService.Greet>())).path("/test/greeting/")
                .accept(MediaType.APPLICATION_JSON_TYPE)
                .type(MediaType.APPLICATION_JSON_TYPE)
                .post(new Request("Hi REST!"), GreetingService.Greet.class).getMessage();
        assertEquals("hi rest!", message);
    }
}
----

#Running

Running the example is fairly simple. In the ``rest-cdi'' directory run:

[source,java]
----
$ mvn clean install
----

Which should create output like the following.

[source,java]
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.superbiz.rest.GreetingServiceTest
INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Succeeded in installing singleton service
INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Creating TransactionManager(id=Default Transaction Manager)
INFO - Creating SecurityService(id=Default Security Service)
INFO - Initializing network services
INFO - Creating ServerService(id=cxf-rs)
INFO - Creating ServerService(id=httpejbd)
INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9)
INFO - Using 'print=true'
FINE - Using default '.xml=false'
FINE - Using default 'stream.count=false'
INFO - Initializing network services
INFO -   ** Bound Services **
INFO -   NAME                 IP              PORT  
INFO -   httpejbd             127.0.0.1       44455 
INFO - -------
INFO - Ready!
INFO - Configuring enterprise application: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.rest.GreetingServiceTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Creating Container(id=Default Managed Container)
INFO - Using directory /tmp for stateful session passivation
INFO - Enterprise application "/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest" loaded.
INFO - Creating dedicated application classloader for GreetingServiceTest
INFO - Assembling app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.openejb.util.proxy.LocalBeanProxyFactory$Unsafe (file:/home/daniel/.m2/repository/org/apache/tomee/openejb-core/8.0.5-SNAPSHOT/openejb-core-8.0.5-SNAPSHOT.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of org.apache.openejb.util.proxy.LocalBeanProxyFactory$Unsafe
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
INFO - Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Some Principal APIs could not be loaded: org.eclipse.microprofile.jwt.JsonWebToken out of org.eclipse.microprofile.jwt.JsonWebToken not found
INFO - OpenWebBeans Container is starting...
INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
INFO - All injection points were validated successfully.
INFO - OpenWebBeans Container has started, it took 476 ms.
INFO - Using readers:
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@693b3e2
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@c68e0782
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@ef757da4
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@778a403d
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@7bca3240
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@2407e67e
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@b06cecc0
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@493b69a5
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@5dfe78fe
INFO - Using writers:
INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@5ec30d6b
INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@58b50d53
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@b06cecc0
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@7bca3240
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@693b3e2
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@c68e0782
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@ef757da4
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@778a403d
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@2407e67e
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@493b69a5
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@5dfe78fe
INFO - Using exception mappers:
INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@8dfc1000
INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@b734211e
INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@2716b807
INFO - REST Application: http://127.0.0.1:44455/test/         -> org.apache.openejb.server.rest.InternalApplication@e4c4de9b
INFO -      Service URI: http://127.0.0.1:44455/test/greeting -> Pojo org.superbiz.rest.GreetingService
INFO -               GET http://127.0.0.1:44455/test/greeting ->      Greet message()         
INFO -              POST http://127.0.0.1:44455/test/greeting ->      Greet lowerCase(Request)
INFO - Deployed Application(path=/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest)
FINE - ******************* REQUEST ******************
GET http://localhost:44455/test/greeting/
Accept=[application/xml]
Cache-Control=[no-cache]
User-Agent=[Apache-CXF/3.3.7]
Connection=[keep-alive]
Host=[localhost:44455]
Pragma=[no-cache]


**********************************************

FINE - HTTP/1.1 200 OK
Server: OpenEJB/8.0.5-SNAPSHOT Linux/5.0.0-23-generic (amd64)
Connection: close
Content-Length: 97
Date: Sun, 15 Nov 2020 20:48:49 GMT
Content-Type: application/xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><greet><message>Hi REST!</message></greet>
INFO - Undeploying app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Stopping network services
INFO - Stopping server services
INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Succeeded in installing singleton service
INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Creating TransactionManager(id=Default Transaction Manager)
INFO - Creating SecurityService(id=Default Security Service)
INFO - Initializing network services
INFO - Creating ServerService(id=cxf-rs)
INFO - Creating ServerService(id=httpejbd)
INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9)
INFO - Using 'print=true'
FINE - Using default '.xml=false'
FINE - Using default 'stream.count=false'
INFO - Initializing network services
INFO -   ** Bound Services **
INFO -   NAME                 IP              PORT  
INFO -   httpejbd             127.0.0.1       36735 
INFO - -------
INFO - Ready!
INFO - Configuring enterprise application: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.rest.GreetingServiceTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Creating Container(id=Default Managed Container)
INFO - Using directory /tmp for stateful session passivation
INFO - Enterprise application "/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest" loaded.
INFO - Creating dedicated application classloader for GreetingServiceTest
INFO - Assembling app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Some Principal APIs could not be loaded: org.eclipse.microprofile.jwt.JsonWebToken out of org.eclipse.microprofile.jwt.JsonWebToken not found
INFO - OpenWebBeans Container is starting...
INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
INFO - All injection points were validated successfully.
INFO - OpenWebBeans Container has started, it took 109 ms.
INFO - Using readers:
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@db2555f8
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@73151fc3
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@280eff60
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@e6d6d01c
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@9aa666e
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@de52b81d
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@2773d96d
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@5a199358
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@8b965c01
INFO - Using writers:
INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@7a775189
INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@b03af552
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@2773d96d
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@9aa666e
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@db2555f8
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@73151fc3
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@280eff60
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@e6d6d01c
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@de52b81d
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@5a199358
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@8b965c01
INFO - Using exception mappers:
INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@d855787e
INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@16616b4d
INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@874c811e
INFO - REST Application: http://127.0.0.1:36735/test/         -> org.apache.openejb.server.rest.InternalApplication@27131dcb
INFO -      Service URI: http://127.0.0.1:36735/test/greeting -> Pojo org.superbiz.rest.GreetingService
INFO -               GET http://127.0.0.1:36735/test/greeting ->      Greet message()         
INFO -              POST http://127.0.0.1:36735/test/greeting ->      Greet lowerCase(Request)
INFO - Deployed Application(path=/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest)
FINE - ******************* REQUEST ******************
POST http://localhost:36735/test/greeting/
Accept=[application/xml]
Cache-Control=[no-cache]
User-Agent=[Apache-CXF/3.3.7]
Connection=[keep-alive]
Host=[localhost:36735]
Pragma=[no-cache]
Content-Length=[97]
Content-Type=[application/xml]

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><request><value>Hi REST!</value></request>
**********************************************

FINE - HTTP/1.1 200 OK
Server: OpenEJB/8.0.5-SNAPSHOT Linux/5.0.0-23-generic (amd64)
Connection: close
Content-Length: 97
Date: Sun, 15 Nov 2020 20:48:50 GMT
Content-Type: application/xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><greet><message>hi rest!</message></greet>
INFO - Undeploying app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Stopping network services
INFO - Stopping server services
INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Succeeded in installing singleton service
INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Creating TransactionManager(id=Default Transaction Manager)
INFO - Creating SecurityService(id=Default Security Service)
INFO - Initializing network services
INFO - Creating ServerService(id=cxf-rs)
SEVERE - MBean Object org.apache.cxf.bus.extension.ExtensionManagerBus@85333fc register to MBeanServer failed : javax.management.InstanceAlreadyExistsException: org.apache.cxf:bus.id=openejb.cxf.bus,type=Bus,instance.id=139670524
INFO - Creating ServerService(id=httpejbd)
INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9)
INFO - Using 'print=true'
FINE - Using default '.xml=false'
FINE - Using default 'stream.count=false'
INFO - Initializing network services
INFO -   ** Bound Services **
INFO -   NAME                 IP              PORT  
INFO -   httpejbd             127.0.0.1       42019 
INFO - -------
INFO - Ready!
INFO - Configuring enterprise application: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.rest.GreetingServiceTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Creating Container(id=Default Managed Container)
INFO - Using directory /tmp for stateful session passivation
INFO - Enterprise application "/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest" loaded.
INFO - Creating dedicated application classloader for GreetingServiceTest
INFO - Assembling app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Some Principal APIs could not be loaded: org.eclipse.microprofile.jwt.JsonWebToken out of org.eclipse.microprofile.jwt.JsonWebToken not found
INFO - OpenWebBeans Container is starting...
INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
INFO - All injection points were validated successfully.
INFO - OpenWebBeans Container has started, it took 80 ms.
INFO - Using readers:
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@3f537f62
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@db539692
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@df3f15ad
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@ad292069
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@f8ae41f1
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@63f3092c
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@1988f4f7
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@77b845b1
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@76debaaf
INFO - Using writers:
INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@a74630bf
INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@abe4d74b
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@1988f4f7
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@f8ae41f1
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@3f537f62
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@db539692
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@df3f15ad
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@ad292069
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@63f3092c
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@77b845b1
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@76debaaf
INFO - Using exception mappers:
INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@3916141e
INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@dd2239cb
INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@d549b1a8
INFO - REST Application: http://127.0.0.1:42019/test/         -> org.apache.openejb.server.rest.InternalApplication@bbcd5d77
INFO -      Service URI: http://127.0.0.1:42019/test/greeting -> Pojo org.superbiz.rest.GreetingService
INFO -               GET http://127.0.0.1:42019/test/greeting ->      Greet message()         
INFO -              POST http://127.0.0.1:42019/test/greeting ->      Greet lowerCase(Request)
INFO - Deployed Application(path=/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest)
FINE - ******************* REQUEST ******************
GET http://localhost:42019/test/greeting/
Accept=[application/json]
Cache-Control=[no-cache]
User-Agent=[Apache-CXF/3.3.7]
Connection=[keep-alive]
Host=[localhost:42019]
Pragma=[no-cache]


**********************************************

FINE - HTTP/1.1 200 OK
Server: OpenEJB/8.0.5-SNAPSHOT Linux/5.0.0-23-generic (amd64)
Connection: close
Content-Length: 22
Date: Sun, 15 Nov 2020 20:48:51 GMT
Content-Type: application/json

{"message":"Hi REST!"}
INFO - Undeploying app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Stopping network services
INFO - Stopping server services
INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Succeeded in installing singleton service
INFO - Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
INFO - Creating TransactionManager(id=Default Transaction Manager)
INFO - Creating SecurityService(id=Default Security Service)
INFO - Initializing network services
INFO - Creating ServerService(id=cxf-rs)
SEVERE - MBean Object org.apache.cxf.bus.extension.ExtensionManagerBus@85333fc register to MBeanServer failed : javax.management.InstanceAlreadyExistsException: org.apache.cxf:bus.id=openejb.cxf.bus,type=Bus,instance.id=139670524
INFO - Creating ServerService(id=httpejbd)
INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9)
INFO - Using 'print=true'
FINE - Using default '.xml=false'
FINE - Using default 'stream.count=false'
INFO - Initializing network services
INFO -   ** Bound Services **
INFO -   NAME                 IP              PORT  
INFO -   httpejbd             127.0.0.1       33015 
INFO - -------
INFO - Ready!
INFO - Configuring enterprise application: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
INFO - Auto-creating a container for bean org.superbiz.rest.GreetingServiceTest: Container(type=MANAGED, id=Default Managed Container)
INFO - Creating Container(id=Default Managed Container)
INFO - Using directory /tmp for stateful session passivation
INFO - Enterprise application "/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest" loaded.
INFO - Creating dedicated application classloader for GreetingServiceTest
INFO - Assembling app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@1b048504
INFO - Some Principal APIs could not be loaded: org.eclipse.microprofile.jwt.JsonWebToken out of org.eclipse.microprofile.jwt.JsonWebToken not found
INFO - OpenWebBeans Container is starting...
INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
INFO - All injection points were validated successfully.
INFO - OpenWebBeans Container has started, it took 95 ms.
INFO - Using readers:
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@68b824ec
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@55233ec4
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@628c68e0
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@db9db667
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@3ae6d4db
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@8a500f50
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@d662719e
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@f142ede7
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@6c372f1e
INFO - Using writers:
INFO -      org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@38e7693a
INFO -      org.apache.cxf.jaxrs.nio.NioMessageBodyWriter@8d587dd5
INFO -      org.apache.cxf.jaxrs.provider.StringTextProvider@d662719e
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider@3ae6d4db
INFO -      org.apache.cxf.jaxrs.provider.PrimitiveTextProvider@68b824ec
INFO -      org.apache.cxf.jaxrs.provider.FormEncodingProvider@55233ec4
INFO -      org.apache.cxf.jaxrs.provider.MultipartProvider@628c68e0
INFO -      org.apache.cxf.jaxrs.provider.SourceProvider@db9db667
INFO -      org.apache.cxf.jaxrs.provider.JAXBElementProvider@8a500f50
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonbProvider@52f938e6
INFO -      org.apache.openejb.server.cxf.rs.johnzon.TomEEJsonpProvider@75f6fb76
INFO -      org.apache.cxf.jaxrs.provider.BinaryDataProvider@f142ede7
INFO -      org.apache.cxf.jaxrs.provider.DataSourceProvider@6c372f1e
INFO - Using exception mappers:
INFO -      org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper@c67a80b8
INFO -      org.apache.openejb.server.cxf.rs.EJBExceptionMapper@6ba782bb
INFO -      org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@20db75dc
INFO - REST Application: http://127.0.0.1:33015/test/         -> org.apache.openejb.server.rest.InternalApplication@cf272dee
INFO -      Service URI: http://127.0.0.1:33015/test/greeting -> Pojo org.superbiz.rest.GreetingService
INFO -               GET http://127.0.0.1:33015/test/greeting ->      Greet message()         
INFO -              POST http://127.0.0.1:33015/test/greeting ->      Greet lowerCase(Request)
INFO - Deployed Application(path=/home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest)
FINE - ******************* REQUEST ******************
POST http://localhost:33015/test/greeting/
Accept=[application/json]
Cache-Control=[no-cache]
User-Agent=[Apache-CXF/3.3.7]
Connection=[keep-alive]
Host=[localhost:33015]
Pragma=[no-cache]
Content-Length=[20]
Content-Type=[application/json]

{"value":"Hi REST!"}
**********************************************

FINE - HTTP/1.1 200 OK
Server: OpenEJB/8.0.5-SNAPSHOT Linux/5.0.0-23-generic (amd64)
Connection: close
Content-Length: 22
Date: Sun, 15 Nov 2020 20:48:51 GMT
Content-Type: application/json

{"message":"hi rest!"}
INFO - Undeploying app: /home/daniel/git/apache/tomee/examples/rest-cdi/GreetingServiceTest
INFO - Stopping network services
INFO - Stopping server services
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.706 sec

Results :

Tests run: 4, Failures: 0, Errors: 0, Skipped: 0

----
