< prev index next >

src/java.xml.bind/share/classes/com/sun/xml/internal/bind/v2/ClassFactory.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -85,29 +85,20 @@
         Constructor<T> cons = null;
         WeakReference<Constructor> consRef = m.get(clazz);
         if(consRef!=null)
             cons = consRef.get();
         if(cons==null) {
+            if (System.getSecurityManager() == null) {
+                cons = tryGetDeclaredConstructor(clazz);
+            } else {
             cons = AccessController.doPrivileged(new PrivilegedAction<Constructor<T>>() {
                 @Override
                 public Constructor<T> run() {
-                    try {
-                        return clazz.getDeclaredConstructor(emptyClass);
-                    } catch (NoSuchMethodException e) {
-                        logger.log(Level.INFO,"No default constructor found on "+clazz,e);
-                        NoSuchMethodError exp;
-                        if(clazz.getDeclaringClass()!=null && !Modifier.isStatic(clazz.getModifiers())) {
-                            exp = new NoSuchMethodError(Messages.NO_DEFAULT_CONSTRUCTOR_IN_INNER_CLASS
-                                                                .format(clazz.getName()));
-                        } else {
-                            exp = new NoSuchMethodError(e.getMessage());
-                        }
-                        exp.initCause(e);
-                        throw exp;
-                    }
+                        return tryGetDeclaredConstructor(clazz);
                 }
             });
+            }
 
             int classMod = clazz.getModifiers();
 
             if(!Modifier.isPublic(classMod) || !Modifier.isPublic(cons.getModifiers())) {
                 // attempt to make it work even if the constructor is not accessible

@@ -124,10 +115,27 @@
         }
 
         return cons.newInstance(emptyObject);
     }
 
+    private static <T> Constructor<T> tryGetDeclaredConstructor(Class<T> clazz) {
+        try {
+            return clazz.getDeclaredConstructor((Class<T>[])emptyClass);
+        } catch (NoSuchMethodException e) {
+            logger.log(Level.INFO,"No default constructor found on "+clazz,e);
+            NoSuchMethodError exp;
+            if(clazz.getDeclaringClass()!=null && !Modifier.isStatic(clazz.getModifiers())) {
+                exp = new NoSuchMethodError(Messages.NO_DEFAULT_CONSTRUCTOR_IN_INNER_CLASS
+                                                    .format(clazz.getName()));
+            } else {
+                exp = new NoSuchMethodError(e.getMessage());
+            }
+            exp.initCause(e);
+            throw exp;
+        }
+    }
+
     /**
      * The same as {@link #create0} but with an error handling to make
      * the instantiation error fatal.
      */
     public static <T> T create( Class<T> clazz ) {
< prev index next >