1 package org.apache.fulcrum.json.jackson;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Map;
23 import java.util.concurrent.ConcurrentHashMap;
24
25 import org.apache.avalon.framework.logger.LogEnabled;
26 import org.apache.avalon.framework.logger.Logger;
27
28 import com.fasterxml.jackson.databind.AnnotationIntrospector;
29 import com.fasterxml.jackson.databind.ObjectMapper;
30 import com.fasterxml.jackson.databind.ser.DefaultSerializerProvider;
31 import com.fasterxml.jackson.databind.ser.FilterProvider;
32 import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
33
34 public class CacheService implements LogEnabled {
35
36 AnnotationIntrospector primary;
37 Map<String, FilterProvider> filters = new ConcurrentHashMap<>();
38
39 private static Logger logger;
40
41 public CacheService(AnnotationIntrospector primary) {
42 this.primary = primary;
43 }
44
45 <T> void removeFilter(Class<T> filterClass, Boolean excludeType) {
46 if (filterClass == null)
47 return;
48 if (filters.containsKey(filterClass.getName())) {
49 logger.debug("removing filter: " + filterClass.getName());
50 removeCustomIntrospectorWithExternalFilterId(filterClass, excludeType);
51 SimpleFilterProvider smpfilter = (SimpleFilterProvider) filters
52 .get(filterClass.getName());
53 smpfilter.removeFilter(filterClass.getName());
54 filters.remove(filterClass.getName());
55 }
56 }
57
58 <T> void removeCustomIntrospectorWithExternalFilterId(
59 Class<T> externalFilterId, Boolean excludeType) {
60 if (primary instanceof SimpleNameIntrospector && externalFilterId != null) {
61 ((SimpleNameIntrospector) primary)
62 .removeFilteredClass(externalFilterId);
63 if (excludeType) {
64 ((SimpleNameIntrospector) primary)
65 .removeExternalFilterExcludeClass(externalFilterId);
66 }
67 }
68 }
69
70 void cleanSerializerCache(ObjectMapper mapper) {
71 if (mapper.getSerializerProvider() instanceof DefaultSerializerProvider) {
72 int cachedSerProvs = ((DefaultSerializerProvider) mapper
73 .getSerializerProvider()).cachedSerializersCount();
74 if (cachedSerProvs > 0) {
75
76
77
78 ((DefaultSerializerProvider) mapper.getSerializerProvider())
79 .flushCachedSerializers();
80 }
81 }
82 }
83
84 public Map<String, FilterProvider> getFilters() {
85 return filters;
86 }
87
88 public void setFilters(Map<String, FilterProvider> filters) {
89 this.filters = filters;
90 }
91
92 @Override
93 public void enableLogging(Logger logger) {
94 CacheService.logger = logger;
95 }
96
97 }