Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions avaje-jex-grizzly-spi/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>io.avaje</groupId>
<artifactId>avaje-jex-parent</artifactId>
<version>3.0-RC23</version>
</parent>
<version>0.1</version>
<artifactId>avaje-jex-grizzly-spi</artifactId>

<dependencies>

<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-jex</artifactId>
</dependency>

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-server</artifactId>
<version>4.1.0-M1</version>
</dependency>
<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-spi-service</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>

<dependency>
<groupId>io.avaje</groupId>
<artifactId>avaje-jex-test</artifactId>
<scope>test</scope>
</dependency>

</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.avaje.jex.grizzly.spi;

import com.sun.net.httpserver.HttpPrincipal;

sealed interface GrizzlyExchange permits GrizzlyHttpExchange, GrizzlyHttpsExchange {

HttpPrincipal getPrincipal();

void setPrincipal(HttpPrincipal principal);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package io.avaje.jex.grizzly.spi;

import java.io.IOException;
import java.io.UncheckedIOException;

import org.glassfish.grizzly.http.server.Request;
import org.glassfish.grizzly.http.server.Response;

import com.sun.net.httpserver.Filter.Chain;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;

final class GrizzlyHandler extends org.glassfish.grizzly.http.server.HttpHandler {

private final HttpContext httpContext;

private HttpHandler handler;

GrizzlyHandler(HttpContext httpContext, HttpHandler httpHandler) {
super(httpContext.getPath());
this.httpContext = httpContext;
this.handler = httpHandler;
}

@Override
public void service(Request request, Response response) {

try (HttpExchange exchange =
request.isSecure()
? new GrizzlyHttpsExchange(httpContext, request, response)
: new GrizzlyHttpExchange(httpContext, request, response)) {

new Chain(httpContext.getFilters(), handler).doFilter(exchange);

} catch (IOException ex) {
throw new UncheckedIOException(null);
}
}

public HttpHandler getHttpHandler() {
return handler;
}

public void setHttpHandler(HttpHandler handler) {
this.handler = handler;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package io.avaje.jex.grizzly.spi;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.sun.net.httpserver.Authenticator;
import com.sun.net.httpserver.Filter;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

final class GrizzlyHttpContext extends com.sun.net.httpserver.HttpContext {

private final GrizzlyHandler grizzlyHandler;
private final HttpServer server;

private final Map<String, Object> attributes = new HashMap<>();

private final List<Filter> filters = new ArrayList<>();

private Authenticator authenticator;

private String contextPath;

protected GrizzlyHttpContext(HttpServer server, String contextPath, HttpHandler handler) {
this.server = server;
this.grizzlyHandler = new GrizzlyHandler(this, handler);
this.contextPath = contextPath;
}

GrizzlyHandler getGrizzlyHandler() {
return grizzlyHandler;
}

@Override
public HttpHandler getHandler() {
return grizzlyHandler.getHttpHandler();
}

@Override
public void setHandler(HttpHandler h) {
grizzlyHandler.setHttpHandler(h);
}

@Override
public String getPath() {
return contextPath;
}

@Override
public HttpServer getServer() {
return server;
}

@Override
public Map<String, Object> getAttributes() {
return attributes;
}

@Override
public List<Filter> getFilters() {
return filters;
}

@Override
public Authenticator setAuthenticator(Authenticator auth) {
Authenticator previous = authenticator;
authenticator = auth;
return previous;
}

@Override
public Authenticator getAuthenticator() {
return authenticator;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
package io.avaje.jex.grizzly.spi;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.URI;

import org.glassfish.grizzly.http.server.Request;
import org.glassfish.grizzly.http.server.Response;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpPrincipal;

final class GrizzlyHttpExchange extends HttpExchange implements GrizzlyExchange {
private final GrizzlyHttpExchangeDelegate delegate;

public GrizzlyHttpExchange(HttpContext context, Request req, Response resp) {

delegate = new GrizzlyHttpExchangeDelegate(context, req, resp);
}

@Override
public int hashCode() {
return delegate.hashCode();
}

@Override
public Headers getRequestHeaders() {
return delegate.getRequestHeaders();
}

@Override
public Headers getResponseHeaders() {
return delegate.getResponseHeaders();
}

@Override
public URI getRequestURI() {
return delegate.getRequestURI();
}

@Override
public String getRequestMethod() {
return delegate.getRequestMethod();
}

@Override
public HttpContext getHttpContext() {
return delegate.getHttpContext();
}

@Override
public void close() {
delegate.close();
}

@Override
public boolean equals(Object obj) {
return delegate.equals(obj);
}

@Override
public InputStream getRequestBody() {
return delegate.getRequestBody();
}

@Override
public OutputStream getResponseBody() {
return delegate.getResponseBody();
}

@Override
public void sendResponseHeaders(int rCode, long responseLength) throws IOException {
delegate.sendResponseHeaders(rCode, responseLength);
}

@Override
public InetSocketAddress getRemoteAddress() {
return delegate.getRemoteAddress();
}

@Override
public int getResponseCode() {
return delegate.getResponseCode();
}

@Override
public InetSocketAddress getLocalAddress() {
return delegate.getLocalAddress();
}

@Override
public String getProtocol() {
return delegate.getProtocol();
}

@Override
public Object getAttribute(String name) {
return delegate.getAttribute(name);
}

@Override
public void setAttribute(String name, Object value) {
delegate.setAttribute(name, value);
}

@Override
public void setStreams(InputStream i, OutputStream o) {
delegate.setStreams(i, o);
}

@Override
public HttpPrincipal getPrincipal() {
return delegate.getPrincipal();
}

@Override
public void setPrincipal(HttpPrincipal principal) {
delegate.setPrincipal(principal);
}

@Override
public String toString() {
return delegate.toString();
}
}
Loading