1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.spi.impl;
20
21 import org.apache.myfaces.config.DefaultFacesConfigResourceProvider;
22 import org.apache.myfaces.shared.util.ClassUtils;
23 import org.apache.myfaces.spi.FacesConfigResourceProvider;
24 import org.apache.myfaces.spi.FacesConfigResourceProviderFactory;
25 import org.apache.myfaces.spi.ServiceProviderFinderFactory;
26
27 import javax.faces.FacesException;
28 import javax.faces.context.ExternalContext;
29 import java.lang.reflect.InvocationTargetException;
30 import java.security.AccessController;
31 import java.security.PrivilegedActionException;
32 import java.security.PrivilegedExceptionAction;
33 import java.util.List;
34 import java.util.logging.Level;
35 import java.util.logging.Logger;
36
37
38
39
40
41
42 public class DefaultFacesConfigResourceProviderFactory extends FacesConfigResourceProviderFactory
43 {
44 public static final String FACES_CONFIG_PROVIDER = FacesConfigResourceProvider.class.getName();
45
46 public static final String FACES_CONFIG_PROVIDER_LIST = FacesConfigResourceProvider.class.getName()+".LIST";
47
48 private Logger getLogger()
49 {
50 return Logger.getLogger(DefaultFacesConfigResourceProviderFactory.class.getName());
51 }
52
53 @Override
54 public FacesConfigResourceProvider createFacesConfigResourceProvider(
55 ExternalContext externalContext)
56 {
57 FacesConfigResourceProvider returnValue = null;
58 final ExternalContext extContext = externalContext;
59 try
60 {
61 if (System.getSecurityManager() != null)
62 {
63 returnValue = AccessController.doPrivileged(new PrivilegedExceptionAction<FacesConfigResourceProvider>()
64 {
65 public FacesConfigResourceProvider run() throws ClassNotFoundException,
66 NoClassDefFoundError,
67 InstantiationException,
68 IllegalAccessException,
69 InvocationTargetException,
70 PrivilegedActionException
71 {
72 return resolveFacesConfigResourceProviderFromService(extContext);
73 }
74 });
75 }
76 else
77 {
78 returnValue = resolveFacesConfigResourceProviderFromService(extContext);
79 }
80 }
81 catch (ClassNotFoundException e)
82 {
83
84 }
85 catch (NoClassDefFoundError e)
86 {
87
88 }
89 catch (InstantiationException e)
90 {
91 getLogger().log(Level.SEVERE, "", e);
92 }
93 catch (IllegalAccessException e)
94 {
95 getLogger().log(Level.SEVERE, "", e);
96 }
97 catch (InvocationTargetException e)
98 {
99 getLogger().log(Level.SEVERE, "", e);
100 }
101 catch (PrivilegedActionException e)
102 {
103 throw new FacesException(e);
104 }
105 return returnValue;
106 }
107
108 private FacesConfigResourceProvider resolveFacesConfigResourceProviderFromService(
109 ExternalContext externalContext) throws ClassNotFoundException,
110 NoClassDefFoundError,
111 InstantiationException,
112 IllegalAccessException,
113 InvocationTargetException,
114 PrivilegedActionException
115 {
116 List<String> classList = (List<String>) externalContext.getApplicationMap().get(FACES_CONFIG_PROVIDER_LIST);
117 if (classList == null)
118 {
119 classList = ServiceProviderFinderFactory.getServiceProviderFinder(externalContext).
120 getServiceProviderList(FACES_CONFIG_PROVIDER);
121 externalContext.getApplicationMap().put(FACES_CONFIG_PROVIDER_LIST, classList);
122 }
123
124 return ClassUtils.buildApplicationObject(FacesConfigResourceProvider.class, classList,
125 new DefaultFacesConfigResourceProvider());
126 }
127
128 }