Skip to content

Commit

Permalink
Update to pytheas 1.29.0
Browse files Browse the repository at this point in the history
Manually add WebApplicationExceptionMapper to the admin resources Jersey config
  • Loading branch information
elandau committed Aug 8, 2016
1 parent 8401bef commit 6b62aa6
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 30 deletions.
4 changes: 2 additions & 2 deletions gradle.properties
Expand Up @@ -16,8 +16,8 @@
org.gradle.daemon=true

rxnetty_version=0.4.7
jersey_version=1.18.1
governator_version=1.9.3
jersey_version=1.19.1
governator_version=1.14.2
pytheas_version=1.29.0
apache_httpclient_version=4.2.1
eureka_version=1.1.151
Expand Up @@ -21,8 +21,9 @@ tasks.withType(Javadoc).each {

dependencies {
compile ('com.netflix.karyon:karyon-eureka:1.+')
testRuntime ('com.sun.jersey:jersey-core:1.18.1') { force = true }
compile project(':karyon2-admin')

testCompile 'org.slf4j:slf4j-log4j12:1.7.2'
}

eclipse {
Expand Down
Expand Up @@ -6,21 +6,22 @@
import com.netflix.config.ConfigurationManager;
import com.netflix.karyon.server.eureka.HealthCheckInvocationStrategy;
import com.netflix.karyon.server.eureka.SyncHealthCheckInvocationStrategy;
import netflix.admin.AdminConfigImpl;
import com.netflix.karyon.spi.HealthCheckHandler;

import org.apache.commons.configuration.AbstractConfiguration;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import javax.ws.rs.core.Response;
import java.lang.reflect.Field;

import static org.junit.Assert.assertEquals;
import netflix.admin.AdminConfigImpl;

public class HealthCheckResourceTest {
private AdminResourcesContainer container;
Expand Down Expand Up @@ -67,18 +68,14 @@ private void checkHealth(HealthCheckHandler healthCheckHandler, int respStatus)


private AdminResourcesContainer buildAdminResourcesContainer(final HealthCheckHandler healthCheckHandler) throws Exception {
AdminResourcesContainer container = new AdminResourcesContainer();
final Field injectorField = AdminResourcesContainer.class.getDeclaredField("appInjector");
final Injector appInjector = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(HealthCheckHandler.class).toInstance(healthCheckHandler);
bind(HealthCheckInvocationStrategy.class).to(SyncHealthCheckInvocationStrategy.class);
}
});
injectorField.setAccessible(true);
injectorField.set(container, appInjector);
return container;
return appInjector.getInstance(AdminResourcesContainer.class);
}

private HealthCheckHandler goodHealthHandler() {
Expand Down
@@ -0,0 +1,22 @@
#
# Copyright 2012 Netflix, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

log4j.rootLogger=INFO, console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d %-5p %c{1}:%L %x %m [%t]%n
log4j.logger.com.sun.jersey=TRACE
4 changes: 4 additions & 0 deletions karyon2-admin/build.gradle
Expand Up @@ -20,11 +20,15 @@ dependencies {
compile 'javax.ws.rs:jsr311-api:1.1.1'
compile 'javax.servlet:javax.servlet-api:3.0.1'
compile 'org.mortbay.jetty:jetty:6.1.26'
compile 'com.google.inject.extensions:guice-servlet:4.1.0'
compile 'com.sun.jersey.contribs:jersey-guice:${jersey_version}'
compile "com.sun.jersey:jersey-servlet:${jersey_version}"
compile "com.sun.jersey:jersey-server:${jersey_version}"
compile "com.netflix.pytheas:pytheas-core:${pytheas_version}"
compile "com.sun.jersey:jersey-core:${jersey_version}"
compile "com.sun.jersey:jersey-servlet:${jersey_version}"
compile "com.sun.jersey:jersey-server:${jersey_version}"
compile "com.sun.jersey:jersey-json:${jersey_version}"
runtime 'org.codehaus.jackson:jackson-mapper-asl:1.9.11'

testCompile "org.apache.httpcomponents:httpclient:${apache_httpclient_version}"
Expand Down
Expand Up @@ -22,22 +22,10 @@
import com.netflix.explorers.context.RequestContext;
import com.netflix.explorers.providers.ToJsonMethod;
import com.sun.jersey.api.view.Viewable;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.TemplateModelException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.MessageBodyWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
Expand All @@ -48,6 +36,21 @@
import java.util.HashMap;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.MessageBodyWriter;

import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.TemplateModelException;

public class AdminFreemarkerTemplateProvider implements MessageBodyWriter<Viewable> {
private static final Logger LOG = LoggerFactory.getLogger(AdminFreemarkerTemplateProvider.class);
private static final String ADMIN_CONSOLE_LAYOUT = "bootstrap";
Expand Down
Expand Up @@ -22,10 +22,9 @@
import com.google.inject.Module;
import com.google.inject.Singleton;
import com.google.inject.Stage;
import com.netflix.explorers.providers.FreemarkerTemplateProvider;
import com.netflix.explorers.providers.JsonMessageBodyWriter;
import com.netflix.governator.guice.LifecycleInjector;
import com.netflix.governator.lifecycle.LifecycleManager;
import com.sun.jersey.guice.JerseyServletModule;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
Expand Down Expand Up @@ -140,6 +139,7 @@ public void init() throws Exception {
AdminResourcesFilter arfTemplatesResources = adminResourceInjector.getInstance(AdminResourcesFilter.class);
arfTemplatesResources.setPackages(adminContainerConfig.jerseyViewableResourcePkgList());

logger.info("Admin templates context : {}", adminContainerConfig.templateResourceContext());
final Context adminTemplatesResHandler = new Context();
adminTemplatesResHandler.setContextPath(adminContainerConfig.templateResourceContext());
adminTemplatesResHandler.setSessionHandler(new SessionHandler());
Expand All @@ -154,8 +154,10 @@ public void init() throws Exception {
AdminResourcesFilter arfDataResources = adminResourceInjector.getInstance(AdminResourcesFilter.class);
arfDataResources.setPackages(jerseyPkgListForAjaxResources);

logger.info("Admin resources context : {}", adminContainerConfig.ajaxDataResourceContext());
final Context adminDataResHandler = new Context();
adminDataResHandler.setContextPath(adminContainerConfig.ajaxDataResourceContext());
adminDataResHandler.addFilter(LoggingFilter.class, "/*", Handler.DEFAULT);
adminDataResHandler.addFilter(new FilterHolder(adminResourceInjector.getInstance(RedirectFilter.class)), "/*", Handler.DEFAULT);
applyAdditionalFilters(adminDataResHandler, additionaFilters);
adminDataResHandler.addFilter(new FilterHolder(arfDataResources), "/*", Handler.DEFAULT);
Expand All @@ -173,6 +175,8 @@ public void init() throws Exception {

final Connector connector = server.getConnectors()[0];
serverPort = connector.getLocalPort();

logger.info("jetty started on port {}", serverPort);
}
} catch (Exception e) {
logger.error("Exception in building AdminResourcesContainer ", e);
Expand Down Expand Up @@ -204,6 +208,7 @@ private Module getAdditionalBindings() {
@Override
protected void configure() {
bind(AdminResourcesFilter.class);

if (! shouldShareResourcesWithParentInjector()) {
bind(AdminPageRegistry.class).toInstance(adminPageRegistry);
bind(AdminContainerConfig.class).toInstance(adminContainerConfig);
Expand Down
Expand Up @@ -3,21 +3,24 @@
import com.google.common.collect.Maps;
import com.google.inject.Injector;
import com.netflix.explorers.providers.FreemarkerTemplateProvider;
import com.netflix.explorers.providers.WebApplicationExceptionMapper;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.guice.spi.container.servlet.GuiceContainer;
import com.sun.jersey.spi.container.servlet.WebConfig;
import netflix.admin.AdminFreemarkerTemplateProvider;

import java.io.IOException;
import java.net.URI;
import java.util.Map;
import java.util.Set;

import javax.inject.Inject;
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.net.URI;
import java.util.Map;
import java.util.Set;

import netflix.admin.AdminFreemarkerTemplateProvider;

/**
* This class is a minimal simulation of GuiceFilter. Due to the number of
Expand Down Expand Up @@ -70,13 +73,16 @@ public int service(URI baseUri, URI requestUri, HttpServletRequest request, Http
protected ResourceConfig getDefaultResourceConfig(Map<String, Object> props,
WebConfig webConfig) throws ServletException {
props.put(PackagesResourceConfig.PROPERTY_PACKAGES, packages);
props.put(ResourceConfig.FEATURE_DISABLE_WADL, "false");

return new PackagesResourceConfig(props) {
@Override
public Set<Class<?>> getProviderClasses() {
Set<Class<?>> providers = super.getProviderClasses();
// remove conflicting provider if present
providers.remove(FreemarkerTemplateProvider.class);
providers.add(AdminFreemarkerTemplateProvider.class);
providers.add(WebApplicationExceptionMapper.class);
return providers;
}
};
Expand Down

0 comments on commit 6b62aa6

Please sign in to comment.