1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.util;
20
21 import java.util.logging.Level;
22 import java.util.logging.Logger;
23
24 import javax.faces.context.ExternalContext;
25 import javax.servlet.http.HttpServletRequest;
26 import org.apache.myfaces.shared.util.ClassUtils;
27 import org.apache.myfaces.webapp.AbstractFacesInitializer;
28
29
30
31
32
33
34
35
36
37
38
39
40 public final class ExternalSpecifications
41 {
42 private static final Logger log = Logger.getLogger(ExternalSpecifications.class.getName());
43
44 private static Lazy<Boolean> beanValidationAvailable = new Lazy<>(() ->
45 {
46 boolean available;
47 try
48 {
49 try
50 {
51 available = ClassUtils.classForName("javax.validation.Validation") != null;
52 }
53 catch(ClassNotFoundException e)
54 {
55 available = false;
56 }
57
58 if (available)
59 {
60 try
61 {
62
63
64
65 _ValidationUtils.tryBuildDefaultValidatorFactory();
66 }
67 catch (Throwable t)
68 {
69
70 available = false;
71 }
72 }
73 }
74 catch (Throwable t)
75 {
76 log.log(Level.FINE, "Error loading class (could be normal)", t);
77 available = false;
78 }
79
80 log.info("MyFaces Core Bean Validation support " + (available ? "enabled" : "disabled"));
81
82 return available;
83 });
84
85 private static Lazy<Boolean> cdiAvailable = new Lazy<>(() ->
86 {
87 boolean available;
88 try
89 {
90 available = ClassUtils.classForName("javax.enterprise.inject.spi.BeanManager") != null;
91 }
92 catch (Throwable t)
93 {
94
95 available = false;
96 }
97
98 log.info("MyFaces Core CDI support " + (available ? "enabled" : "disabled"));
99
100 return available;
101 });
102
103 private static Lazy<Boolean> el3Available = new Lazy<>(() ->
104 {
105 boolean available;
106 try
107 {
108 available = ClassUtils.classForName("javax.el.StaticFieldELResolver") != null ;
109 }
110 catch (Throwable t)
111 {
112 available = false;
113 }
114 log.info("MyFaces Core EL 3.0 support " + (available ? "enabled" : "disabled"));
115
116 return available;
117 });
118
119 private static Lazy<Boolean> sevlet4Available = new Lazy<>(() ->
120 {
121 boolean available;
122 try
123 {
124 available = ClassUtils.classForName("javax.servlet.http.PushBuilder") != null
125 && HttpServletRequest.class.getMethod("newPushBuilder", (Class[]) null) != null;
126 }
127 catch (Throwable t)
128 {
129 available = false;
130 }
131 log.info("MyFaces Core Servlet 4.0 support " + (available ? "enabled" : "disabled"));
132
133 return available;
134 });
135
136
137
138
139
140
141
142
143 public static boolean isBeanValidationAvailable()
144 {
145 return beanValidationAvailable.get();
146 }
147
148 public static boolean isCDIAvailable(ExternalContext externalContext)
149 {
150 return cdiAvailable.get() &&
151 externalContext.getApplicationMap().containsKey(AbstractFacesInitializer.CDI_BEAN_MANAGER_INSTANCE);
152 }
153
154 public static boolean isEL3Available()
155 {
156 return el3Available.get();
157 }
158
159 public static boolean isServlet4Available()
160 {
161 return sevlet4Available.get();
162 }
163
164
165
166
167 private ExternalSpecifications()
168 {
169 }
170
171 }