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 ]
|