1 package top.infra.jackson2;
2
3 import static com.google.common.collect.Lists.newLinkedList;
4
5 import com.fasterxml.jackson.databind.Module;
6
7 import org.springframework.core.Ordered;
8 import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
9
10 import java.lang.reflect.Field;
11 import java.util.List;
12
13
14
15
16 public interface Jackson2BuilderCustomizer extends Ordered {
17
18 void customize(Jackson2Properties properties, Jackson2ObjectMapperBuilder builder);
19
20 default boolean createXmlMapper(final Jackson2ObjectMapperBuilder builder) {
21 try {
22 final boolean result;
23 final Field fieldModules = builder.getClass().getDeclaredField("createXmlMapper");
24 fieldModules.setAccessible(true);
25 result = (boolean) fieldModules.get(builder);
26 return result;
27 } catch (final NoSuchFieldException | IllegalAccessException | IllegalArgumentException ex) {
28 return false;
29 }
30 }
31
32 default Boolean isXmlMapper(final Jackson2ObjectMapperBuilder builder) {
33 return this.createXmlMapper(builder);
34 }
35
36 default ClassLoader moduleClassLoader(final Jackson2ObjectMapperBuilder builder) {
37 try {
38 final ClassLoader result;
39 final Field fieldModuleClassLoader = builder.getClass().getDeclaredField("moduleClassLoader");
40 fieldModuleClassLoader.setAccessible(true);
41 result = (ClassLoader) fieldModuleClassLoader.get(builder);
42 return result;
43 } catch (final NoSuchFieldException | IllegalAccessException | IllegalArgumentException ex) {
44 return builder.getClass().getClassLoader();
45 }
46 }
47
48 @SuppressWarnings("unchecked")
49 default List<Module> modules(final Jackson2ObjectMapperBuilder builder) {
50 try {
51 final List<Module> result;
52 final Field fieldModules = builder.getClass().getDeclaredField("modules");
53 fieldModules.setAccessible(true);
54 result = (List<Module>) fieldModules.get(builder);
55 return newLinkedList(result);
56 } catch (final NoSuchFieldException | IllegalAccessException | IllegalArgumentException ex) {
57 return newLinkedList();
58 }
59 }
60 }