Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[gyrex-dev] New topic in forum Gyrex, called Cannot set the request filter to my JaxRsApplication, by Sean Zhang

Title: Eclipse Community Forums
Subject: Cannot set the request filter to my JaxRsApplication Author: Sean Zhang Date: Tue, 28 July 2015 14:00
I have my own jaxrs application which extend JaxRsApplication, and I try to add customized container request filter, but It cannot work. Could you please help me to find out my mistake?

package com.octech.mamalianmeng.httpservice.application.base;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.core.Application;

import org.eclipse.gyrex.context.IRuntimeContext;
import org.eclipse.gyrex.http.jaxrs.JaxRsApplication;

import com.sun.jersey.api.core.DefaultResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.jersey.spi.container.ContainerRequestFilter;
import com.sun.jersey.spi.container.ContainerResponseFilter;

public abstract class AbstractMumUnionJaxRsApplication extends JaxRsApplication {

	public AbstractMumUnionJaxRsApplication(String id, IRuntimeContext context) {
		super(id, context);
	}

	protected Application createJaxRsApplication() {
		Application application = super.createJaxRsApplication();
		if (application.getClass().getName().equals(DefaultResourceConfig.class.getName())) {
			DefaultResourceConfig defaultResourceConfig = (DefaultResourceConfig) application;
			this.setContainerRequestFilters(defaultResourceConfig);
			this.setContainerResponseFilters(defaultResourceConfig);
			return defaultResourceConfig;
		} else {
			return application;
		}
	}
	
	/**
	 * 设置请求过滤器
	 * @param defaultResourceConfig
	 */
	private final void setContainerRequestFilters(DefaultResourceConfig defaultResourceConfig) {
		if (defaultResourceConfig == null) {
			return;
		}
		List<Class<?>> containerFilters = this.getContainerRequestFilters();
		if (containerFilters != null && containerFilters.size() > 0) {
			List<String> filters = new ArrayList<String>();
			if (defaultResourceConfig.getProperties().containsKey(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS)) {
				filters.add((String) defaultResourceConfig.getProperty(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS));
			}
			for (int i = 0; i < containerFilters.size(); i++) {
				if (ContainerRequestFilter.class.isAssignableFrom(containerFilters.get(i))) {
					filters.add(containerFilters.get(i).getName());
				}
			}
			defaultResourceConfig.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, filters.toArray());
		}
	}
	
	/**
	 * 设置相应过滤器
	 * @param defaultResourceConfig
	 */
	private final void setContainerResponseFilters(DefaultResourceConfig defaultResourceConfig) {
		if (defaultResourceConfig == null) {
			return ;
		}
		List<Class<?>> containerFilters = this.getContainerResponseFilters();
		if (containerFilters != null && containerFilters.size() > 0) {
			List<String> filters = new ArrayList<String>();
			if (defaultResourceConfig.getProperties().containsKey(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS)) {
				filters.add((String) defaultResourceConfig.getProperty(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS));
			}
			for(int i = 0; i < containerFilters.size(); i++) {
				if (ContainerResponseFilter.class.isAssignableFrom(containerFilters.get(i))) {
					filters.add(containerFilters.get(i).getName());
				}
			}
			defaultResourceConfig.getProperties().put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, filters.toArray());
		}
	}
	
	/**
	 * 返回请求过滤器的类数组,filter的执行顺序以加入list中的顺序为准
	 * @return
	 */
	protected abstract List<Class<?>> getContainerRequestFilters();
	
	/**
	 * 返回相应过滤器的类数组,filter的执行顺序以加入list中的顺序为准
	 * @return
	 */
	protected abstract List<Class<?>> getContainerResponseFilters();
}



package com.octech.mamalianmeng.httpservice.application;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.gyrex.context.IRuntimeContext;

import com.octech.mamalianmeng.httpservice.application.base.AbstractMumUnionJaxRsApplication;
import com.octech.mamalianmeng.httpservice.application.filter.AuthorizationFilter;
import com.octech.mamalianmeng.httpservice.resource.OrderServiceResource;

public class DefaultMumUnionJaxRsApplication extends AbstractMumUnionJaxRsApplication {

	public DefaultMumUnionJaxRsApplication(String id, IRuntimeContext context) {
		super(id, context);
	}

	@Override
	protected List<Class<?>> getContainerRequestFilters() {
		List<Class<?>> filters = new ArrayList<Class<?>>();
		filters.add(AuthorizationFilter.class);
		return filters;
	}

	@Override
	protected List<Class<?>> getContainerResponseFilters() {
		return Collections.emptyList();
	}
	
	@Override
	protected Set<Class<?>> getJaxRsClasses() {
		Set<Class<?>> classes = new HashSet<Class<?>>();
		classes.add(OrderServiceResource.class);
		return classes;
	}
}
[ Reply ][ Quote ][ View Topic/Message ][ Unsubscribe from this forum ]

Back to the top