Skip to content

Instantly share code, notes, and snippets.

@kpradeep12
Created September 29, 2018 03:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kpradeep12/cf61fe3889c51d404e8d576d4a9069ee to your computer and use it in GitHub Desktop.
Save kpradeep12/cf61fe3889c51d404e8d576d4a9069ee to your computer and use it in GitHub Desktop.
import j2html.tags.DomContent;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Member;
import java.util.stream.Stream;
import static j2html.TagCreator.*;
public class JavaAPI extends HttpServlet {
public static void main(String[] args) throws Exception {
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.addServlet(new ServletHolder(new JavaAPI()), "/api");
Server server = new Server(4000);
server.setHandler(context);
server.start();
server.join();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String clazz = request.getParameter("class");
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
try {
response.getWriter().println(content(Class.forName(clazz)));
} catch (ClassNotFoundException e) {
response.getWriter().println("Class not found: " + e.getMessage());
}
}
private static String content(Class<?> clazz) {
return html(
head(
title(clazz.getCanonicalName()),
link().withRel("stylesheet").withHref("https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css")
),
body(attrs(".container"),
h2(attrs(".text-center"), clazz.getCanonicalName()),
membersList("Fields", clazz.getDeclaredFields()),
membersList("Constructors", clazz.getDeclaredConstructors()),
membersList("Methods", clazz.getDeclaredMethods())
)
).render();
}
private static DomContent membersList(String header, Member[] members) {
return div(
h5(header),
ul(
Stream.of(members)
.map(member -> li(member.toString()))
.toArray(DomContent[]::new)
)
);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment