Minijax
Lightweight Jakarta EE
- Fast and simple JAX-RS, JSON, WebSockets, JPA, dependency injection
- Code to standard Java and Java EE API's as much as possible
- Minimal dependencies, setup, configuration, and hassle
Getting Started
<dependency>
<groupId>org.minijax</groupId>
<artifactId>minijax-undertow</artifactId>
<version>0.5.9</version>
</dependency>
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import org.minijax.Minijax;
@Path("/")
public class Hello {
@GET
public static String hello() {
return "Hello world!";
}
public static void main(String[] args) {
new Minijax()
.register(Hello.class)
.start();
}
}
Dependency Injection
Minijax uses the JSR-330 standard for dependency injection. It recognizes standard annotations such as @Provider
and @Inject
.
package com.example;
import jakarta.inject.Inject;
import jakarta.ws.rs.DefaultValue;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.ext.Provider;
import org.minijax.Minijax;
public class HelloInjection {
public interface MyService {
String shout(String str);
}
@Provider
public class MyServiceImpl implements MyService {
@Override
public String shout(final String str) {
return str.toUpperCase();
}
}
@Path("/")
public class MyResource {
@Inject
private MyService service;
@GET
public String get(@QueryParam("name") @DefaultValue("friend") final String name) {
return "Hello " + service.shout(name);
}
}
public static void main(final String[] args) {
new Minijax()
.packages("com.example")
.start();
}
}
Testing
Minijax provides a rich set of testing features that integrate with standard testing libraries such as JUnit and Mockito.
package com.example;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.minijax.rs.test.MinijaxTest;
import com.example.HelloInjection.MyResource;
import com.example.HelloInjection.MyService;
class HelloInjectionTest extends MinijaxTest {
@BeforeEach
public void setUp() {
final MyService mockService = mock(MyService.class);
when(mockService.shout(eq("friend"))).thenReturn("FRIEND");
when(mockService.shout(eq("cody"))).thenReturn("CODY");
bind(mockService, MyService.class);
register(MyResource.class);
}
@Test
void testDefault() {
assertEquals("Hello FRIEND", target("/").request().get(String.class));
}
@Test
void testQueryString() {
assertEquals("Hello CODY", target("/?name=cody").request().get(String.class));
}
}
Learn more
- Motivation - Why use Minijax?
- Getting Started Tutorial - 5 minute tutorial
- Sample Applications - Demonstrating Minijax capabilities
- Supported Java EE standards - Overview of supported API's