View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package javax.faces.component;
20  
21  import java.util.logging.Level;
22  import java.util.logging.Logger;
23  
24  /**
25   * <p>
26   * Package-private utility class for determining which specifications are available
27   * in the current process. See JIRA issue: http://issues.apache.org/jira/browse/MYFACES-2386
28   * </p>
29   *
30   * @author Jan-Kees van Andel
31   * @since 2.0
32   */
33  final class _ExternalSpecifications
34  {
35  
36      //private static final Log log = LogFactory.getLog(BeanValidator.class);
37      private static final Logger log = Logger.getLogger(_ExternalSpecifications.class.getName());
38  
39      private static volatile Boolean beanValidationAvailable;
40      //private static volatile Boolean unifiedELAvailable;
41  
42      /**
43       * This method determines if Bean Validation is present.
44       *
45       * Eager initialization is used for performance. This means Bean Validation binaries
46       * should not be added at runtime after this variable has been set.
47       * @return true if Bean Validation is available, false otherwise.
48       */
49      public static boolean isBeanValidationAvailable()
50      {
51          if (beanValidationAvailable == null)
52          {
53              try
54              {
55                  try
56                  {
57                      beanValidationAvailable = (Class.forName("javax.validation.Validation") != null);
58                  }
59                  catch (ClassNotFoundException e)
60                  {
61                      beanValidationAvailable = Boolean.FALSE;
62                  }
63                  
64                  if (beanValidationAvailable)
65                  {
66                      try
67                      {
68                          // Trial-error approach to check for Bean Validation impl existence.
69                          // If any Exception occurs here, we assume that Bean Validation is not available.
70                          // The cause may be anything, i.e. NoClassDef, config error...
71                          _ValidationUtils.tryBuildDefaultValidatorFactory();
72                      }
73                      catch (Throwable t)
74                      {
75                          log.log(Level.FINE, "Error initializing Bean Validation (could be normal)", t);
76                          beanValidationAvailable = false;
77                      }
78                  }
79              }
80              catch (Throwable t)
81              {
82                  log.log(Level.FINE, "Error loading class (could be normal)", t);
83                  beanValidationAvailable = false;
84              }
85  
86              log.info("MyFaces Bean Validation support " + (beanValidationAvailable ? "enabled" : "disabled"));
87          }
88          return beanValidationAvailable;
89      }
90  
91      /**
92       * This method determines if Unified EL is present.
93       *
94       * Eager initialization is used for performance. This means Unified EL binaries
95       * should not be added at runtime after this variable has been set.
96       * @return true if UEL is available, false otherwise.
97       */
98      /*
99      public static boolean isUnifiedELAvailable()
100     {
101         if (unifiedELAvailable == null)
102         {
103             try
104             {
105                 // Check if the UEL classes are available.
106                 // If the JSP EL classes are loaded first, UEL will not work
107                 // properly, hence it will be disabled.
108                 unifiedELAvailable = (
109                         Class.forName("javax.el.ValueReference") != null
110                      && Class.forName("javax.el.ValueExpression")
111                                 .getMethod("getValueReference", ELContext.class) != null
112                 );
113             }
114             catch (Throwable t)
115             {
116                 log.log(Level.FINE, "Error loading class (could be normal)", t);
117                 unifiedELAvailable = false;
118             }
119 
120             log.info("MyFaces Unified EL support " + (unifiedELAvailable ? "enabled" : "disabled"));
121         }
122         return unifiedELAvailable;
123     }*/
124 
125     /**
126      * this class should not be instantiated.
127      */
128     private _ExternalSpecifications()
129     {
130     }
131 
132 }