/meecrowave

Mirror of Apache OpenWebBeans meecrowave

Primary LanguageJavaApache License 2.0Apache-2.0

Apache Meecrowave

Apache Meecrowave is a small Microprofile server (JAX-RS + CDI + JSON) fully based on Apache products.

How to start

If you want to start with your first Hello World you have to add the following dependencies to your pom.xml.

 <properties>
    <meecrowave.version>1.2.3</meecrowave.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.meecrowave</groupId>
      <artifactId>meecrowave-specs-api</artifactId>
      <version>${meecrowave.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.meecrowave</groupId>
      <artifactId>meecrowave-core</artifactId>
      <version>${meecrowave.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.meecrowave</groupId>
      <artifactId>meecrowave-junit</artifactId>
      <version>${meecrowave.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

The project itself should be used with Java8 as the minimum JDK-version.

To work with the latest SNAPSHOT, you can clone the repo and make a mvn clean install.

Hello World - REST - trivial

Let´s start with an minimal REST Endpoint. The only result you can get is a Hello World. Additionally there is a class called HelloApplication to make sure your path will start with /api/

@Dependent
@ApplicationPath("api")
public class HelloApplication extends Application {
}

@Path("hello")
@ApplicationScoped
public class HelloEndpoint {

  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public String sayHi() {
    return "Hello World";
  }
}

You can start writing your first test , now. Using junit4, the test class should annotated with @RunWith(MonoMeecrowave.Runner.class) The Container start and stop will be managed for you. To have access to the dynamic data, like the random used port, use the the injected Meecrowave.Builder`.

The test-request itself is written like a normal request. This example is using the class javax.ws.rs.client.ClientBuilder.

@RunWith(MonoMeecrowave.Runner.class)
public class HelloEndpointTest {
  @ConfigurationInject
  private Meecrowave.Builder configuration;

  @Test
  public void hello() {
    final Client client = ClientBuilder.newClient();
    try {
      assertEquals("Hello World", client.target("http://localhost:" + configuration.getHttpPort())
                                        .path("api/hello")
                                        .request(APPLICATION_JSON_TYPE)
                                        .get(String.class));
    } finally {
      client.close();
    }
  }
}