Merge
This commit is contained in:
commit
27e58d6259
@ -165,11 +165,6 @@ else
|
|||||||
JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%)
|
JAVADOC_CMD = $(JAVA_TOOLS_DIR)/javadoc $(JAVA_TOOLS_FLAGS:%=-J%)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
#always use the bootstrap javah until bug-ID 6889255 is fixed. These
|
|
||||||
#five lines should be removed as part of that fix:
|
|
||||||
JAVAH_CMD = $(JAVA_TOOLS_DIR)/javah \
|
|
||||||
$(JAVAHFLAGS)
|
|
||||||
|
|
||||||
# Override of what javac to use (see deploy workspace)
|
# Override of what javac to use (see deploy workspace)
|
||||||
ifdef JAVAC
|
ifdef JAVAC
|
||||||
JAVAC_CMD = $(JAVAC)
|
JAVAC_CMD = $(JAVAC)
|
||||||
|
@ -258,6 +258,7 @@ JAVA_JAVA_java = \
|
|||||||
java/util/ServiceConfigurationError.java \
|
java/util/ServiceConfigurationError.java \
|
||||||
java/util/Timer.java \
|
java/util/Timer.java \
|
||||||
java/util/TimerTask.java \
|
java/util/TimerTask.java \
|
||||||
|
java/util/Objects.java \
|
||||||
java/util/UUID.java \
|
java/util/UUID.java \
|
||||||
java/util/concurrent/AbstractExecutorService.java \
|
java/util/concurrent/AbstractExecutorService.java \
|
||||||
java/util/concurrent/ArrayBlockingQueue.java \
|
java/util/concurrent/ArrayBlockingQueue.java \
|
||||||
|
@ -25,11 +25,12 @@
|
|||||||
|
|
||||||
package com.sun.naming.internal;
|
package com.sun.naming.internal;
|
||||||
|
|
||||||
import java.applet.Applet;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
@ -112,6 +113,52 @@ public final class ResourceManager {
|
|||||||
private static final WeakHashMap urlFactoryCache = new WeakHashMap(11);
|
private static final WeakHashMap urlFactoryCache = new WeakHashMap(11);
|
||||||
private static final WeakReference NO_FACTORY = new WeakReference(null);
|
private static final WeakReference NO_FACTORY = new WeakReference(null);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A class to allow JNDI properties be specified as applet parameters
|
||||||
|
* without creating a static dependency on java.applet.
|
||||||
|
*/
|
||||||
|
private static class AppletParameter {
|
||||||
|
private static final Class<?> clazz = getClass("java.applet.Applet");
|
||||||
|
private static final Method getMethod =
|
||||||
|
getMethod(clazz, "getParameter", String.class);
|
||||||
|
private static Class<?> getClass(String name) {
|
||||||
|
try {
|
||||||
|
return Class.forName(name, true, null);
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private static Method getMethod(Class<?> clazz,
|
||||||
|
String name,
|
||||||
|
Class<?>... paramTypes)
|
||||||
|
{
|
||||||
|
if (clazz != null) {
|
||||||
|
try {
|
||||||
|
return clazz.getMethod(name, paramTypes);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
throw new AssertionError(e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of the applet's named parameter.
|
||||||
|
*/
|
||||||
|
static Object get(Object applet, String name) {
|
||||||
|
// if clazz is null then applet cannot be an Applet.
|
||||||
|
if (clazz == null || !clazz.isInstance(applet))
|
||||||
|
throw new ClassCastException(applet.getClass().getName());
|
||||||
|
try {
|
||||||
|
return getMethod.invoke(applet, name);
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
throw new AssertionError(e);
|
||||||
|
} catch (IllegalAccessException iae) {
|
||||||
|
throw new AssertionError(iae);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// There should be no instances of this class.
|
// There should be no instances of this class.
|
||||||
private ResourceManager() {
|
private ResourceManager() {
|
||||||
@ -143,7 +190,7 @@ public final class ResourceManager {
|
|||||||
if (env == null) {
|
if (env == null) {
|
||||||
env = new Hashtable(11);
|
env = new Hashtable(11);
|
||||||
}
|
}
|
||||||
Applet applet = (Applet)env.get(Context.APPLET);
|
Object applet = env.get(Context.APPLET);
|
||||||
|
|
||||||
// Merge property values from env param, applet params, and system
|
// Merge property values from env param, applet params, and system
|
||||||
// properties. The first value wins: there's no concatenation of
|
// properties. The first value wins: there's no concatenation of
|
||||||
@ -157,7 +204,7 @@ public final class ResourceManager {
|
|||||||
Object val = env.get(props[i]);
|
Object val = env.get(props[i]);
|
||||||
if (val == null) {
|
if (val == null) {
|
||||||
if (applet != null) {
|
if (applet != null) {
|
||||||
val = applet.getParameter(props[i]);
|
val = AppletParameter.get(applet, props[i]);
|
||||||
}
|
}
|
||||||
if (val == null) {
|
if (val == null) {
|
||||||
// Read system property.
|
// Read system property.
|
||||||
|
@ -209,7 +209,17 @@ public final class FilePermission extends Permission implements Serializable {
|
|||||||
cpath = AccessController.doPrivileged(new PrivilegedAction<String>() {
|
cpath = AccessController.doPrivileged(new PrivilegedAction<String>() {
|
||||||
public String run() {
|
public String run() {
|
||||||
try {
|
try {
|
||||||
return sun.security.provider.PolicyFile.canonPath(cpath);
|
String path = cpath;
|
||||||
|
if (cpath.endsWith("*")) {
|
||||||
|
// call getCanonicalPath with a path with wildcard character
|
||||||
|
// replaced to avoid calling it with paths that are
|
||||||
|
// intended to match all entries in a directory
|
||||||
|
path = path.substring(0, path.length()-1) + "-";
|
||||||
|
path = new File(path).getCanonicalPath();
|
||||||
|
return path.substring(0, path.length()-1) + "*";
|
||||||
|
} else {
|
||||||
|
return new File(path).getCanonicalPath();
|
||||||
|
}
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
return cpath;
|
return cpath;
|
||||||
}
|
}
|
||||||
|
@ -40,10 +40,17 @@ import java.io.ObjectStreamException;
|
|||||||
* Edition</i>, <a
|
* Edition</i>, <a
|
||||||
* href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9">§8.9</a>.
|
* href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.9">§8.9</a>.
|
||||||
*
|
*
|
||||||
|
* <p> Note that when using an enumeration type as the type of a set
|
||||||
|
* or as the type of the keys in a map, specialized and efficient
|
||||||
|
* {@linkplain java.util.EnumSet set} and {@linkplain
|
||||||
|
* java.util.EnumMap map} implementations are available.
|
||||||
|
*
|
||||||
* @param <E> The enum type subclass
|
* @param <E> The enum type subclass
|
||||||
* @author Josh Bloch
|
* @author Josh Bloch
|
||||||
* @author Neal Gafter
|
* @author Neal Gafter
|
||||||
* @see Class#getEnumConstants()
|
* @see Class#getEnumConstants()
|
||||||
|
* @see java.util.EnumSet
|
||||||
|
* @see java.util.EnumMap
|
||||||
* @since 1.5
|
* @since 1.5
|
||||||
*/
|
*/
|
||||||
public abstract class Enum<E extends Enum<E>>
|
public abstract class Enum<E extends Enum<E>>
|
||||||
|
@ -44,6 +44,8 @@ import java.lang.annotation.Annotation;
|
|||||||
* as Java Object Serialization or other persistence mechanisms, to
|
* as Java Object Serialization or other persistence mechanisms, to
|
||||||
* manipulate objects in a manner that would normally be prohibited.
|
* manipulate objects in a manner that would normally be prohibited.
|
||||||
*
|
*
|
||||||
|
* <p>By default, a reflected object is <em>not</em> accessible.
|
||||||
|
*
|
||||||
* @see Field
|
* @see Field
|
||||||
* @see Method
|
* @see Method
|
||||||
* @see Constructor
|
* @see Constructor
|
||||||
|
@ -412,7 +412,7 @@ public abstract class Path
|
|||||||
* dependent if {@code "a/b/../x"} would locate the same file as {@code "/a/x"}.
|
* dependent if {@code "a/b/../x"} would locate the same file as {@code "/a/x"}.
|
||||||
*
|
*
|
||||||
* @param other
|
* @param other
|
||||||
* the resulting path
|
* the path to relativize against this path
|
||||||
*
|
*
|
||||||
* @return the resulting relative path, or {@code null} if both paths are
|
* @return the resulting relative path, or {@code null} if both paths are
|
||||||
* equal
|
* equal
|
||||||
@ -1615,23 +1615,23 @@ public abstract class Path
|
|||||||
* Tests if the file referenced by this object is the same file referenced
|
* Tests if the file referenced by this object is the same file referenced
|
||||||
* by another object.
|
* by another object.
|
||||||
*
|
*
|
||||||
* <p> If this {@code FileRef} and the given {@code FileRef} are {@link
|
* <p> If this {@code Path} and the given {@code Path} are {@link
|
||||||
* #equals(Object) equal} then this method returns {@code true} without checking
|
* #equals(Object) equal} then this method returns {@code true} without checking
|
||||||
* if the file exists. If the {@code FileRef} and the given {@code FileRef}
|
* if the file exists. If the {@code Path} and the given {@code Path}
|
||||||
* are associated with different providers, or the given {@code FileRef} is
|
* are associated with different providers, or the given {@code Path} is
|
||||||
* {@code null} then this method returns {@code false}. Otherwise, this method
|
* {@code null} then this method returns {@code false}. Otherwise, this method
|
||||||
* checks if both {@code FileRefs} locate the same file, and depending on the
|
* checks if both {@code Paths} locate the same file, and depending on the
|
||||||
* implementation, may require to open or access both files.
|
* implementation, may require to open or access both files.
|
||||||
*
|
*
|
||||||
* <p> If the file system and files remain static, then this method implements
|
* <p> If the file system and files remain static, then this method implements
|
||||||
* an equivalence relation for non-null {@code FileRefs}.
|
* an equivalence relation for non-null {@code Paths}.
|
||||||
* <ul>
|
* <ul>
|
||||||
* <li>It is <i>reflexive</i>: for a non-null {@code FileRef} {@code f},
|
* <li>It is <i>reflexive</i>: for a non-null {@code Path} {@code f},
|
||||||
* {@code f.isSameFile(f)} should return {@code true}.
|
* {@code f.isSameFile(f)} should return {@code true}.
|
||||||
* <li>It is <i>symmetric</i>: for two non-null {@code FileRefs}
|
* <li>It is <i>symmetric</i>: for two non-null {@code Path}
|
||||||
* {@code f} and {@code g}, {@code f.isSameFile(g)} will equal
|
* {@code f} and {@code g}, {@code f.isSameFile(g)} will equal
|
||||||
* {@code g.isSameFile(f)}.
|
* {@code g.isSameFile(f)}.
|
||||||
* <li>It is <i>transitive</i>: for three {@code FileRefs}
|
* <li>It is <i>transitive</i>: for three {@code Paths}
|
||||||
* {@code f}, {@code g}, and {@code h}, if {@code f.isSameFile(g)} returns
|
* {@code f}, {@code g}, and {@code h}, if {@code f.isSameFile(g)} returns
|
||||||
* {@code true} and {@code g.isSameFile(h)} returns {@code true}, then
|
* {@code true} and {@code g.isSameFile(h)} returns {@code true}, then
|
||||||
* {@code f.isSameFile(h)} will return return {@code true}.
|
* {@code f.isSameFile(h)} will return return {@code true}.
|
||||||
|
156
jdk/src/share/classes/java/util/Objects.java
Normal file
156
jdk/src/share/classes/java/util/Objects.java
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Sun Microsystems, Inc. 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. Sun designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Sun in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package java.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class consists of {@code static} utility methods for operating
|
||||||
|
* on objects. These utilities include {@code null}-safe or {@code
|
||||||
|
* null}-tolerant methods for computing the hash code of an object,
|
||||||
|
* returning a string for an object, and comparing two objects.
|
||||||
|
*
|
||||||
|
* @since 1.7
|
||||||
|
*/
|
||||||
|
public class Objects {
|
||||||
|
private Objects() {
|
||||||
|
throw new AssertionError("No java.util.Objects instances for you!");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if the arguments are equal to each other
|
||||||
|
* and {@code false} otherwise.
|
||||||
|
* Consequently, if both arguments are {@code null}, {@code true}
|
||||||
|
* is returned and if exactly one argument is {@code null}, {@code
|
||||||
|
* false} is returned. Otherwise, equality is determined by using
|
||||||
|
* the {@link Object#equals equals} method of the first
|
||||||
|
* argument.
|
||||||
|
*
|
||||||
|
* @param a an object
|
||||||
|
* @param b an object to be compared with {@code a} for equality
|
||||||
|
* @return {@code true} if the arguments are equal to each other
|
||||||
|
* and {@code false} otherwise
|
||||||
|
* @see Object#equals(Object)
|
||||||
|
*/
|
||||||
|
public static boolean equals(Object a, Object b) {
|
||||||
|
return (a == b) || (a != null && a.equals(b));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the hash code of a non-{@code null} argument and 0 for
|
||||||
|
* a {@code null} argument.
|
||||||
|
*
|
||||||
|
* @param o an object
|
||||||
|
* @return the hash code of a non-{@code null} argument and 0 for
|
||||||
|
* a {@code null} argument
|
||||||
|
* @see Object#hashCode
|
||||||
|
*/
|
||||||
|
public static int hashCode(Object o) {
|
||||||
|
return o != null ? o.hashCode() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the result of calling {@code toString} for a non-{@code
|
||||||
|
* null} argument and {@code "null"} for a {@code null} argument.
|
||||||
|
*
|
||||||
|
* @param o an object
|
||||||
|
* @return the result of calling {@code toString} for a non-{@code
|
||||||
|
* null} argument and {@code "null"} for a {@code null} argument
|
||||||
|
* @see Object#toString
|
||||||
|
* @see String#valueOf(Object)
|
||||||
|
*/
|
||||||
|
public static String toString(Object o) {
|
||||||
|
return String.valueOf(o);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns 0 if the arguments are identical and {@code
|
||||||
|
* c.compare(a, b)} otherwise.
|
||||||
|
* Consequently, if both arguments are {@code null} 0
|
||||||
|
* is returned.
|
||||||
|
*
|
||||||
|
* <p>Note that if one of the arguments is {@code null}, a {@code
|
||||||
|
* NullPointerException} may or may not be thrown depending on
|
||||||
|
* what ordering policy, if any, the {@link Comparator Comparator}
|
||||||
|
* chooses to have for {@code null} values.
|
||||||
|
*
|
||||||
|
* @param <T> the type of the objects being compared
|
||||||
|
* @param a an object
|
||||||
|
* @param b an object to be compared with {@code a}
|
||||||
|
* @param c the {@code Comparator} to compare the first two arguments
|
||||||
|
* @return 0 if the arguments are identical and {@code
|
||||||
|
* c.compare(a, b)} otherwise.
|
||||||
|
* @see Comparable
|
||||||
|
* @see Comparator
|
||||||
|
*/
|
||||||
|
public static <T> int compare(T a, T b, Comparator<? super T> c) {
|
||||||
|
return (a == b) ? 0 : c.compare(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that the specified object reference is not {@code null}. This
|
||||||
|
* method is designed primarily for doing parameter validation in methods
|
||||||
|
* and constructors, as demonstrated below:
|
||||||
|
* <blockquote><pre>
|
||||||
|
* public Foo(Bar bar) {
|
||||||
|
* this.bar = Objects.nonNull(bar);
|
||||||
|
* }
|
||||||
|
* </pre></blockquote>
|
||||||
|
*
|
||||||
|
* @param obj the object reference to check for nullity
|
||||||
|
* @param <T> the type of the reference
|
||||||
|
* @return {@code obj} if not {@code null}
|
||||||
|
* @throws NullPointerException if {@code obj} is {@code null}
|
||||||
|
*/
|
||||||
|
public static <T> T nonNull(T obj) {
|
||||||
|
if (obj == null)
|
||||||
|
throw new NullPointerException();
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that the specified object reference is not {@code null} and
|
||||||
|
* throws a customized {@link NullPointerException} if it is. This method
|
||||||
|
* is designed primarily for doing parameter validation in methods and
|
||||||
|
* constructors with multiple parameters, as demonstrated below:
|
||||||
|
* <blockquote><pre>
|
||||||
|
* public Foo(Bar bar, Baz baz) {
|
||||||
|
* this.bar = Objects.nonNull(bar, "bar must not be null");
|
||||||
|
* this.baz = Objects.nonNull(baz, "baz must not be null");
|
||||||
|
* }
|
||||||
|
* </pre></blockquote>
|
||||||
|
*
|
||||||
|
* @param obj the object reference to check for nullity
|
||||||
|
* @param message detail message to be used in the event that a {@code
|
||||||
|
* NullPointerException} is thrown
|
||||||
|
* @param <T> the type of the reference
|
||||||
|
* @return {@code obj} if not {@code null}
|
||||||
|
* @throws NullPointerException if {@code obj} is {@code null}
|
||||||
|
*/
|
||||||
|
public static <T> T nonNull(T obj, String message) {
|
||||||
|
if (obj == null)
|
||||||
|
throw new NullPointerException(message);
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
}
|
@ -293,10 +293,8 @@ class JarVerifier {
|
|||||||
}
|
}
|
||||||
sfv.process(sigFileSigners);
|
sfv.process(sigFileSigners);
|
||||||
|
|
||||||
} catch (sun.security.pkcs.ParsingException pe) {
|
|
||||||
if (debug != null) debug.println("processEntry caught: "+pe);
|
|
||||||
// ignore and treat as unsigned
|
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
|
// e.g. sun.security.pkcs.ParsingException
|
||||||
if (debug != null) debug.println("processEntry caught: "+ioe);
|
if (debug != null) debug.println("processEntry caught: "+ioe);
|
||||||
// ignore and treat as unsigned
|
// ignore and treat as unsigned
|
||||||
} catch (SignatureException se) {
|
} catch (SignatureException se) {
|
||||||
|
@ -730,7 +730,7 @@ public class FloatingDecimal{
|
|||||||
* Thus we will need more than one digit if we're using
|
* Thus we will need more than one digit if we're using
|
||||||
* E-form
|
* E-form
|
||||||
*/
|
*/
|
||||||
if ( decExp <= -3 || decExp >= 8 ){
|
if ( decExp < -3 || decExp >= 8 ){
|
||||||
high = low = false;
|
high = low = false;
|
||||||
}
|
}
|
||||||
while( ! low && ! high ){
|
while( ! low && ! high ){
|
||||||
@ -783,7 +783,7 @@ public class FloatingDecimal{
|
|||||||
* Thus we will need more than one digit if we're using
|
* Thus we will need more than one digit if we're using
|
||||||
* E-form
|
* E-form
|
||||||
*/
|
*/
|
||||||
if ( decExp <= -3 || decExp >= 8 ){
|
if ( decExp < -3 || decExp >= 8 ){
|
||||||
high = low = false;
|
high = low = false;
|
||||||
}
|
}
|
||||||
while( ! low && ! high ){
|
while( ! low && ! high ){
|
||||||
@ -847,7 +847,7 @@ public class FloatingDecimal{
|
|||||||
* Thus we will need more than one digit if we're using
|
* Thus we will need more than one digit if we're using
|
||||||
* E-form
|
* E-form
|
||||||
*/
|
*/
|
||||||
if ( decExp <= -3 || decExp >= 8 ){
|
if ( decExp < -3 || decExp >= 8 ){
|
||||||
high = low = false;
|
high = low = false;
|
||||||
}
|
}
|
||||||
while( ! low && ! high ){
|
while( ! low && ! high ){
|
||||||
|
@ -31,6 +31,7 @@ import java.nio.channels.*;
|
|||||||
import java.net.*;
|
import java.net.*;
|
||||||
import javax.net.ssl.*;
|
import javax.net.ssl.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.logging.Logger;
|
||||||
import java.text.*;
|
import java.text.*;
|
||||||
import sun.net.www.MessageHeader;
|
import sun.net.www.MessageHeader;
|
||||||
import com.sun.net.httpserver.*;
|
import com.sun.net.httpserver.*;
|
||||||
@ -204,6 +205,21 @@ class ExchangeImpl {
|
|||||||
tmpout.write (bytes(statusLine, 0), 0, statusLine.length());
|
tmpout.write (bytes(statusLine, 0), 0, statusLine.length());
|
||||||
boolean noContentToSend = false; // assume there is content
|
boolean noContentToSend = false; // assume there is content
|
||||||
rspHdrs.set ("Date", df.format (new Date()));
|
rspHdrs.set ("Date", df.format (new Date()));
|
||||||
|
|
||||||
|
/* check for response type that is not allowed to send a body */
|
||||||
|
|
||||||
|
if ((rCode>=100 && rCode <200) /* informational */
|
||||||
|
||(rCode == 204) /* no content */
|
||||||
|
||(rCode == 304)) /* not modified */
|
||||||
|
{
|
||||||
|
if (contentLen != -1) {
|
||||||
|
Logger logger = server.getLogger();
|
||||||
|
String msg = "sendResponseHeaders: rCode = "+ rCode
|
||||||
|
+ ": forcing contentLen = -1";
|
||||||
|
logger.warning (msg);
|
||||||
|
}
|
||||||
|
contentLen = -1;
|
||||||
|
}
|
||||||
if (contentLen == 0) {
|
if (contentLen == 0) {
|
||||||
if (http10) {
|
if (http10) {
|
||||||
o.setWrappedStream (new UndefLengthOutputStream (this, ros));
|
o.setWrappedStream (new UndefLengthOutputStream (this, ros));
|
||||||
|
@ -1180,6 +1180,10 @@ public class HttpURLConnection extends java.net.HttpURLConnection {
|
|||||||
inputStream = http.getInputStream();
|
inputStream = http.getInputStream();
|
||||||
|
|
||||||
respCode = getResponseCode();
|
respCode = getResponseCode();
|
||||||
|
if (respCode == -1) {
|
||||||
|
disconnectInternal();
|
||||||
|
throw new IOException ("Invalid Http response");
|
||||||
|
}
|
||||||
if (respCode == HTTP_PROXY_AUTH) {
|
if (respCode == HTTP_PROXY_AUTH) {
|
||||||
if (streaming()) {
|
if (streaming()) {
|
||||||
disconnectInternal();
|
disconnectInternal();
|
||||||
|
@ -1832,8 +1832,9 @@ public class PolicyFile extends java.security.Policy {
|
|||||||
return canonCs;
|
return canonCs;
|
||||||
}
|
}
|
||||||
|
|
||||||
// public for java.io.FilePermission
|
// Wrapper to return a canonical path that avoids calling getCanonicalPath()
|
||||||
public static String canonPath(String path) throws IOException {
|
// with paths that are intended to match all entries in the directory
|
||||||
|
private static String canonPath(String path) throws IOException {
|
||||||
if (path.endsWith("*")) {
|
if (path.endsWith("*")) {
|
||||||
path = path.substring(0, path.length()-1) + "-";
|
path = path.substring(0, path.length()-1) + "-";
|
||||||
path = new File(path).getCanonicalPath();
|
path = new File(path).getCanonicalPath();
|
||||||
|
@ -210,7 +210,7 @@ final class SunEntries {
|
|||||||
* CertStores
|
* CertStores
|
||||||
*/
|
*/
|
||||||
map.put("CertStore.LDAP",
|
map.put("CertStore.LDAP",
|
||||||
"sun.security.provider.certpath.LDAPCertStore");
|
"sun.security.provider.certpath.ldap.LDAPCertStore");
|
||||||
map.put("CertStore.LDAP LDAPSchema", "RFC2587");
|
map.put("CertStore.LDAP LDAPSchema", "RFC2587");
|
||||||
map.put("CertStore.Collection",
|
map.put("CertStore.Collection",
|
||||||
"sun.security.provider.certpath.CollectionCertStore");
|
"sun.security.provider.certpath.CollectionCertStore");
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Sun Microsystems, Inc. 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. Sun designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Sun in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package sun.security.provider.certpath;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.InvalidAlgorithmParameterException;
|
||||||
|
import java.security.cert.CertStore;
|
||||||
|
import java.security.cert.X509CertSelector;
|
||||||
|
import java.security.cert.X509CRLSelector;
|
||||||
|
import javax.security.auth.x500.X500Principal;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper used by URICertStore when delegating to another CertStore to
|
||||||
|
* fetch certs and CRLs.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public interface CertStoreHelper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a CertStore using the given URI as parameters.
|
||||||
|
*/
|
||||||
|
CertStore getCertStore(URI uri)
|
||||||
|
throws NoSuchAlgorithmException, InvalidAlgorithmParameterException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps an existing X509CertSelector when needing to avoid DN matching
|
||||||
|
* issues.
|
||||||
|
*/
|
||||||
|
X509CertSelector wrap(X509CertSelector selector,
|
||||||
|
X500Principal certSubject,
|
||||||
|
String dn)
|
||||||
|
throws IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wraps an existing X509CRLSelector when needing to avoid DN matching
|
||||||
|
* issues.
|
||||||
|
*/
|
||||||
|
X509CRLSelector wrap(X509CRLSelector selector,
|
||||||
|
Collection<X500Principal> certIssuers,
|
||||||
|
String dn)
|
||||||
|
throws IOException;
|
||||||
|
}
|
@ -64,6 +64,8 @@ public final class OCSP {
|
|||||||
|
|
||||||
private static final Debug debug = Debug.getInstance("certpath");
|
private static final Debug debug = Debug.getInstance("certpath");
|
||||||
|
|
||||||
|
private static final int CONNECT_TIMEOUT = 15000; // 15 seconds
|
||||||
|
|
||||||
private OCSP() {}
|
private OCSP() {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -176,6 +178,8 @@ public final class OCSP {
|
|||||||
debug.println("connecting to OCSP service at: " + url);
|
debug.println("connecting to OCSP service at: " + url);
|
||||||
}
|
}
|
||||||
HttpURLConnection con = (HttpURLConnection)url.openConnection();
|
HttpURLConnection con = (HttpURLConnection)url.openConnection();
|
||||||
|
con.setConnectTimeout(CONNECT_TIMEOUT);
|
||||||
|
con.setReadTimeout(CONNECT_TIMEOUT);
|
||||||
con.setDoOutput(true);
|
con.setDoOutput(true);
|
||||||
con.setDoInput(true);
|
con.setDoInput(true);
|
||||||
con.setRequestMethod("POST");
|
con.setRequestMethod("POST");
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
|
|
||||||
package sun.security.provider.certpath;
|
package sun.security.provider.certpath;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.math.BigInteger;
|
import java.math.BigInteger;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
@ -335,10 +334,11 @@ class OCSPChecker extends PKIXCertPathChecker {
|
|||||||
(issuerCert, currCertImpl.getSerialNumberObject());
|
(issuerCert, currCertImpl.getSerialNumberObject());
|
||||||
response = OCSP.check(Collections.singletonList(certId), uri,
|
response = OCSP.check(Collections.singletonList(certId), uri,
|
||||||
responderCert, pkixParams.getDate());
|
responderCert, pkixParams.getDate());
|
||||||
} catch (IOException ioe) {
|
} catch (Exception e) {
|
||||||
// should allow this to pass if network failures are acceptable
|
// Wrap all exceptions in CertPathValidatorException so that
|
||||||
|
// we can fallback to CRLs, if enabled.
|
||||||
throw new CertPathValidatorException
|
throw new CertPathValidatorException
|
||||||
("Unable to send OCSP request", ioe);
|
("Unable to send OCSP request", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
RevocationStatus rs = (RevocationStatus) response.getSingleResponse(certId);
|
RevocationStatus rs = (RevocationStatus) response.getSingleResponse(certId);
|
||||||
|
@ -30,6 +30,8 @@ import java.io.IOException;
|
|||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
|
import java.security.AccessController;
|
||||||
|
import java.security.PrivilegedAction;
|
||||||
import java.security.InvalidAlgorithmParameterException;
|
import java.security.InvalidAlgorithmParameterException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.Provider;
|
import java.security.Provider;
|
||||||
@ -120,6 +122,32 @@ class URICertStore extends CertStoreSpi {
|
|||||||
private CertStore ldapCertStore;
|
private CertStore ldapCertStore;
|
||||||
private String ldapPath;
|
private String ldapPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Holder class to lazily load LDAPCertStoreHelper if present.
|
||||||
|
*/
|
||||||
|
private static class LDAP {
|
||||||
|
private static final String CERT_STORE_HELPER =
|
||||||
|
"sun.security.provider.certpath.ldap.LDAPCertStoreHelper";
|
||||||
|
private static final CertStoreHelper helper =
|
||||||
|
AccessController.doPrivileged(
|
||||||
|
new PrivilegedAction<CertStoreHelper>() {
|
||||||
|
public CertStoreHelper run() {
|
||||||
|
try {
|
||||||
|
Class<?> c = Class.forName(CERT_STORE_HELPER, true, null);
|
||||||
|
return (CertStoreHelper)c.newInstance();
|
||||||
|
} catch (ClassNotFoundException cnf) {
|
||||||
|
return null;
|
||||||
|
} catch (InstantiationException e) {
|
||||||
|
throw new AssertionError(e);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new AssertionError(e);
|
||||||
|
}
|
||||||
|
}});
|
||||||
|
static CertStoreHelper helper() {
|
||||||
|
return helper;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a URICertStore.
|
* Creates a URICertStore.
|
||||||
*
|
*
|
||||||
@ -135,9 +163,10 @@ class URICertStore extends CertStoreSpi {
|
|||||||
this.uri = ((URICertStoreParameters) params).uri;
|
this.uri = ((URICertStoreParameters) params).uri;
|
||||||
// if ldap URI, use an LDAPCertStore to fetch certs and CRLs
|
// if ldap URI, use an LDAPCertStore to fetch certs and CRLs
|
||||||
if (uri.getScheme().toLowerCase().equals("ldap")) {
|
if (uri.getScheme().toLowerCase().equals("ldap")) {
|
||||||
|
if (LDAP.helper() == null)
|
||||||
|
throw new NoSuchAlgorithmException("LDAP not present");
|
||||||
ldap = true;
|
ldap = true;
|
||||||
ldapCertStore =
|
ldapCertStore = LDAP.helper().getCertStore(uri);
|
||||||
LDAPCertStore.getInstance(LDAPCertStore.getParameters(uri));
|
|
||||||
ldapPath = uri.getPath();
|
ldapPath = uri.getPath();
|
||||||
// strip off leading '/'
|
// strip off leading '/'
|
||||||
if (ldapPath.charAt(0) == '/') {
|
if (ldapPath.charAt(0) == '/') {
|
||||||
@ -219,8 +248,7 @@ class URICertStore extends CertStoreSpi {
|
|||||||
if (ldap) {
|
if (ldap) {
|
||||||
X509CertSelector xsel = (X509CertSelector) selector;
|
X509CertSelector xsel = (X509CertSelector) selector;
|
||||||
try {
|
try {
|
||||||
xsel = new LDAPCertStore.LDAPCertSelector
|
xsel = LDAP.helper().wrap(xsel, xsel.getSubject(), ldapPath);
|
||||||
(xsel, xsel.getSubject(), ldapPath);
|
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
throw new CertStoreException(ioe);
|
throw new CertStoreException(ioe);
|
||||||
}
|
}
|
||||||
@ -340,7 +368,7 @@ class URICertStore extends CertStoreSpi {
|
|||||||
if (ldap) {
|
if (ldap) {
|
||||||
X509CRLSelector xsel = (X509CRLSelector) selector;
|
X509CRLSelector xsel = (X509CRLSelector) selector;
|
||||||
try {
|
try {
|
||||||
xsel = new LDAPCertStore.LDAPCRLSelector(xsel, null, ldapPath);
|
xsel = LDAP.helper().wrap(xsel, null, ldapPath);
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
throw new CertStoreException(ioe);
|
throw new CertStoreException(ioe);
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
* have any questions.
|
* have any questions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package sun.security.provider.certpath;
|
package sun.security.provider.certpath.ldap;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -46,6 +46,7 @@ import java.security.cert.*;
|
|||||||
import javax.security.auth.x500.X500Principal;
|
import javax.security.auth.x500.X500Principal;
|
||||||
|
|
||||||
import sun.misc.HexDumpEncoder;
|
import sun.misc.HexDumpEncoder;
|
||||||
|
import sun.security.provider.certpath.X509CertificatePair;
|
||||||
import sun.security.util.Cache;
|
import sun.security.util.Cache;
|
||||||
import sun.security.util.Debug;
|
import sun.security.util.Debug;
|
||||||
import sun.security.x509.X500Name;
|
import sun.security.x509.X500Name;
|
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Sun Microsystems, Inc. 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. Sun designates this
|
||||||
|
* particular file as subject to the "Classpath" exception as provided
|
||||||
|
* by Sun in the LICENSE file that accompanied this code.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package sun.security.provider.certpath.ldap;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.InvalidAlgorithmParameterException;
|
||||||
|
import java.security.cert.CertStore;
|
||||||
|
import java.security.cert.X509CertSelector;
|
||||||
|
import java.security.cert.X509CRLSelector;
|
||||||
|
import javax.security.auth.x500.X500Principal;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import sun.security.provider.certpath.CertStoreHelper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LDAP implementation of CertStoreHelper.
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class LDAPCertStoreHelper
|
||||||
|
implements CertStoreHelper
|
||||||
|
{
|
||||||
|
public LDAPCertStoreHelper() { }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CertStore getCertStore(URI uri)
|
||||||
|
throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
|
||||||
|
{
|
||||||
|
return LDAPCertStore.getInstance(LDAPCertStore.getParameters(uri));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public X509CertSelector wrap(X509CertSelector selector,
|
||||||
|
X500Principal certSubject,
|
||||||
|
String ldapDN)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
return new LDAPCertStore.LDAPCertSelector(selector, certSubject, ldapDN);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public X509CRLSelector wrap(X509CRLSelector selector,
|
||||||
|
Collection<X500Principal> certIssuers,
|
||||||
|
String ldapDN)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
return new LDAPCertStore.LDAPCRLSelector(selector, certIssuers, ldapDN);
|
||||||
|
}
|
||||||
|
}
|
@ -104,11 +104,11 @@ class SolarisAclFileAttributeView
|
|||||||
int uid;
|
int uid;
|
||||||
if (user.isSpecial()) {
|
if (user.isSpecial()) {
|
||||||
uid = -1;
|
uid = -1;
|
||||||
if (who.getName().equals(UnixUserPrincipals.SPECIAL_OWNER.getName()))
|
if (who == UnixUserPrincipals.SPECIAL_OWNER)
|
||||||
flags |= ACE_OWNER;
|
flags |= ACE_OWNER;
|
||||||
else if (who.getName().equals(UnixUserPrincipals.SPECIAL_GROUP.getName()))
|
else if (who == UnixUserPrincipals.SPECIAL_GROUP)
|
||||||
flags |= ACE_GROUP;
|
flags |= (ACE_GROUP | ACE_IDENTIFIER_GROUP);
|
||||||
else if (who.getName().equals(UnixUserPrincipals.SPECIAL_EVERYONE.getName()))
|
else if (who == UnixUserPrincipals.SPECIAL_EVERYONE)
|
||||||
flags |= ACE_EVERYONE;
|
flags |= ACE_EVERYONE;
|
||||||
else
|
else
|
||||||
throw new AssertionError("Unable to map special identifier");
|
throw new AssertionError("Unable to map special identifier");
|
||||||
@ -281,7 +281,7 @@ class SolarisAclFileAttributeView
|
|||||||
aceFlags.add(AclEntryFlag.DIRECTORY_INHERIT);
|
aceFlags.add(AclEntryFlag.DIRECTORY_INHERIT);
|
||||||
if ((flags & ACE_NO_PROPAGATE_INHERIT_ACE) > 0)
|
if ((flags & ACE_NO_PROPAGATE_INHERIT_ACE) > 0)
|
||||||
aceFlags.add(AclEntryFlag.NO_PROPAGATE_INHERIT);
|
aceFlags.add(AclEntryFlag.NO_PROPAGATE_INHERIT);
|
||||||
if ((flags & ACE_INHERIT_ONLY_ACE ) > 0)
|
if ((flags & ACE_INHERIT_ONLY_ACE) > 0)
|
||||||
aceFlags.add(AclEntryFlag.INHERIT_ONLY);
|
aceFlags.add(AclEntryFlag.INHERIT_ONLY);
|
||||||
|
|
||||||
// build the ACL entry and add it to the list
|
// build the ACL entry and add it to the list
|
||||||
|
@ -235,7 +235,8 @@ class UnixDirectoryStream
|
|||||||
@Override
|
@Override
|
||||||
public void remove() {
|
public void remove() {
|
||||||
if (isClosed) {
|
if (isClosed) {
|
||||||
throw new ClosedDirectoryStreamException();
|
throwAsConcurrentModificationException(new
|
||||||
|
ClosedDirectoryStreamException());
|
||||||
}
|
}
|
||||||
Path entry;
|
Path entry;
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
|
@ -179,7 +179,7 @@ class WindowsDirectoryStream
|
|||||||
synchronized (closeLock) {
|
synchronized (closeLock) {
|
||||||
if (!isOpen)
|
if (!isOpen)
|
||||||
throwAsConcurrentModificationException(new
|
throwAsConcurrentModificationException(new
|
||||||
IllegalStateException("Directory stream is closed"));
|
ClosedDirectoryStreamException());
|
||||||
try {
|
try {
|
||||||
name = FindNextFile(handle, findDataBuffer.address());
|
name = FindNextFile(handle, findDataBuffer.address());
|
||||||
if (name == null) {
|
if (name == null) {
|
||||||
@ -236,7 +236,8 @@ class WindowsDirectoryStream
|
|||||||
@Override
|
@Override
|
||||||
public void remove() {
|
public void remove() {
|
||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
throw new IllegalStateException("Directory stream is closed");
|
throwAsConcurrentModificationException(new
|
||||||
|
ClosedDirectoryStreamException());
|
||||||
}
|
}
|
||||||
Path entry;
|
Path entry;
|
||||||
synchronized (this) {
|
synchronized (this) {
|
||||||
|
93
jdk/test/com/sun/net/httpserver/bugs/B6886436.java
Normal file
93
jdk/test/com/sun/net/httpserver/bugs/B6886436.java
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Sun Microsystems, Inc. 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @bug 6886436
|
||||||
|
* @summary
|
||||||
|
*/
|
||||||
|
|
||||||
|
import com.sun.net.httpserver.*;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.*;
|
||||||
|
import java.util.logging.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
public class B6886436 {
|
||||||
|
|
||||||
|
public static void main (String[] args) throws Exception {
|
||||||
|
Logger logger = Logger.getLogger ("com.sun.net.httpserver");
|
||||||
|
ConsoleHandler c = new ConsoleHandler();
|
||||||
|
c.setLevel (Level.WARNING);
|
||||||
|
logger.addHandler (c);
|
||||||
|
logger.setLevel (Level.WARNING);
|
||||||
|
Handler handler = new Handler();
|
||||||
|
InetSocketAddress addr = new InetSocketAddress (0);
|
||||||
|
HttpServer server = HttpServer.create (addr, 0);
|
||||||
|
HttpContext ctx = server.createContext ("/test", handler);
|
||||||
|
ExecutorService executor = Executors.newCachedThreadPool();
|
||||||
|
server.setExecutor (executor);
|
||||||
|
server.start ();
|
||||||
|
|
||||||
|
URL url = new URL ("http://localhost:"+server.getAddress().getPort()+"/test/foo.html");
|
||||||
|
HttpURLConnection urlc = (HttpURLConnection)url.openConnection ();
|
||||||
|
try {
|
||||||
|
InputStream is = urlc.getInputStream();
|
||||||
|
while (is.read()!= -1) ;
|
||||||
|
is.close ();
|
||||||
|
urlc = (HttpURLConnection)url.openConnection ();
|
||||||
|
urlc.setReadTimeout (3000);
|
||||||
|
is = urlc.getInputStream();
|
||||||
|
while (is.read()!= -1);
|
||||||
|
is.close ();
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
server.stop(2);
|
||||||
|
executor.shutdown();
|
||||||
|
throw new RuntimeException ("Test failed");
|
||||||
|
}
|
||||||
|
server.stop(2);
|
||||||
|
executor.shutdown();
|
||||||
|
System.out.println ("OK");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean error = false;
|
||||||
|
|
||||||
|
static class Handler implements HttpHandler {
|
||||||
|
int invocation = 1;
|
||||||
|
public void handle (HttpExchange t)
|
||||||
|
throws IOException
|
||||||
|
{
|
||||||
|
InputStream is = t.getRequestBody();
|
||||||
|
Headers map = t.getRequestHeaders();
|
||||||
|
Headers rmap = t.getResponseHeaders();
|
||||||
|
while (is.read () != -1) ;
|
||||||
|
is.close();
|
||||||
|
// send a 204 response with an empty chunked body
|
||||||
|
t.sendResponseHeaders (204, 0);
|
||||||
|
t.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
jdk/test/java/lang/Double/ToString.java
Normal file
39
jdk/test/java/lang/Double/ToString.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Sun Microsystems, Inc. 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 4428022
|
||||||
|
* @summary Tests for Double.toString
|
||||||
|
* @author Andrew Haley <aph@redhat.com>
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ToString {
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
if (!Double.toString(0.001).equals("0.001"))
|
||||||
|
throw new RuntimeException("Double.toString(0.001) is not \"0.001\"");
|
||||||
|
if (!Double.toString(0.002).equals("0.002"))
|
||||||
|
throw new RuntimeException("Double.toString(0.001) is not \"0.002\"");
|
||||||
|
}
|
||||||
|
}
|
@ -49,6 +49,21 @@ public class GetSystemProperties {
|
|||||||
private static final String VALUE4 = "test.property.value4";
|
private static final String VALUE4 = "test.property.value4";
|
||||||
|
|
||||||
public static void main(String[] argv) throws Exception {
|
public static void main(String[] argv) throws Exception {
|
||||||
|
// Save a copy of the original system properties
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// replace the system Properties object for any modification
|
||||||
|
// in case jtreg caches a copy
|
||||||
|
System.setProperties(new Properties(props));
|
||||||
|
runTest();
|
||||||
|
} finally {
|
||||||
|
// restore original system properties
|
||||||
|
System.setProperties(props);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void runTest() throws Exception {
|
||||||
RuntimeMXBean mbean = ManagementFactory.getRuntimeMXBean();
|
RuntimeMXBean mbean = ManagementFactory.getRuntimeMXBean();
|
||||||
|
|
||||||
// Print all system properties
|
// Print all system properties
|
||||||
@ -88,7 +103,10 @@ public class GetSystemProperties {
|
|||||||
Map<String,String> props2 = mbean.getSystemProperties();
|
Map<String,String> props2 = mbean.getSystemProperties();
|
||||||
// expect the system properties returned should be
|
// expect the system properties returned should be
|
||||||
// same as the one before adding KEY3 and KEY4
|
// same as the one before adding KEY3 and KEY4
|
||||||
props1.equals(props2);
|
if (!props1.equals(props2)) {
|
||||||
|
throw new RuntimeException("Two copies of system properties " +
|
||||||
|
"are expected to be equal");
|
||||||
|
}
|
||||||
|
|
||||||
System.out.println("Test passed.");
|
System.out.println("Test passed.");
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,21 @@ import java.lang.management.RuntimeMXBean;
|
|||||||
public class PropertiesTest {
|
public class PropertiesTest {
|
||||||
private static int NUM_MYPROPS = 3;
|
private static int NUM_MYPROPS = 3;
|
||||||
public static void main(String[] argv) throws Exception {
|
public static void main(String[] argv) throws Exception {
|
||||||
Properties sysProps = System.getProperties();
|
// Save a copy of the original system properties
|
||||||
|
Properties props = System.getProperties();
|
||||||
|
|
||||||
|
try {
|
||||||
|
// replace the system Properties object for any modification
|
||||||
|
// in case jtreg caches a copy
|
||||||
|
System.setProperties(new Properties(props));
|
||||||
|
runTest(props.size());
|
||||||
|
} finally {
|
||||||
|
// restore original system properties
|
||||||
|
System.setProperties(props);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void runTest(int sysPropsCount) throws Exception {
|
||||||
// Create a new system properties using the old one
|
// Create a new system properties using the old one
|
||||||
// as the defaults
|
// as the defaults
|
||||||
Properties myProps = new Properties( System.getProperties() );
|
Properties myProps = new Properties( System.getProperties() );
|
||||||
@ -65,10 +78,10 @@ public class PropertiesTest {
|
|||||||
System.out.println(i++ + ": " + key + " : " + value);
|
System.out.println(i++ + ": " + key + " : " + value);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (props.size() != NUM_MYPROPS + sysProps.size()) {
|
if (props.size() != NUM_MYPROPS + sysPropsCount) {
|
||||||
throw new RuntimeException("Test Failed: " +
|
throw new RuntimeException("Test Failed: " +
|
||||||
"Expected number of properties = " +
|
"Expected number of properties = " +
|
||||||
NUM_MYPROPS + sysProps.size() +
|
NUM_MYPROPS + sysPropsCount +
|
||||||
" but found = " + props.size());
|
" but found = " + props.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
69
jdk/test/java/lang/reflect/DefaultAccessibility.java
Normal file
69
jdk/test/java/lang/reflect/DefaultAccessibility.java
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Sun Microsystems, Inc. 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 6648344
|
||||||
|
* @summary Test that default accessibility is false
|
||||||
|
* @author Joseph D. Darcy
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.lang.reflect.*;
|
||||||
|
|
||||||
|
public class DefaultAccessibility {
|
||||||
|
private DefaultAccessibility() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int f = 42;
|
||||||
|
|
||||||
|
public static void main(String... args) throws Exception {
|
||||||
|
Class<?> daClass = (new DefaultAccessibility()).getClass();
|
||||||
|
|
||||||
|
int elementCount = 0;
|
||||||
|
for(Constructor<?> ctor : daClass.getDeclaredConstructors()) {
|
||||||
|
elementCount++;
|
||||||
|
if (ctor.isAccessible())
|
||||||
|
throw new RuntimeException("Unexpected accessibility for constructor " +
|
||||||
|
ctor);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Method method : daClass.getDeclaredMethods()) {
|
||||||
|
elementCount++;
|
||||||
|
if (method.isAccessible())
|
||||||
|
throw new RuntimeException("Unexpected accessibility for method " +
|
||||||
|
method);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Field field : daClass.getDeclaredFields()) {
|
||||||
|
elementCount++;
|
||||||
|
if (field.isAccessible())
|
||||||
|
throw new RuntimeException("Unexpected accessibility for field " +
|
||||||
|
field);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (elementCount < 3)
|
||||||
|
throw new RuntimeException("Expected at least three members; only found " +
|
||||||
|
elementCount);
|
||||||
|
}
|
||||||
|
}
|
@ -154,8 +154,10 @@ public class Basic {
|
|||||||
stream.close();
|
stream.close();
|
||||||
|
|
||||||
// test IllegalStateException
|
// test IllegalStateException
|
||||||
|
dir.resolve(foo).createFile();
|
||||||
stream = dir.newDirectoryStream();
|
stream = dir.newDirectoryStream();
|
||||||
i = stream.iterator();
|
i = stream.iterator();
|
||||||
|
i.next();
|
||||||
try {
|
try {
|
||||||
stream.iterator();
|
stream.iterator();
|
||||||
throw new RuntimeException("IllegalStateException not thrown as expected");
|
throw new RuntimeException("IllegalStateException not thrown as expected");
|
||||||
@ -172,17 +174,26 @@ public class Basic {
|
|||||||
throw new RuntimeException("ConcurrentModificationException not thrown as expected");
|
throw new RuntimeException("ConcurrentModificationException not thrown as expected");
|
||||||
} catch (ConcurrentModificationException x) {
|
} catch (ConcurrentModificationException x) {
|
||||||
Throwable t = x.getCause();
|
Throwable t = x.getCause();
|
||||||
if (!(t instanceof IllegalStateException))
|
if (!(t instanceof ClosedDirectoryStreamException))
|
||||||
throw new RuntimeException("Cause is not IllegalStateException as expected");
|
throw new RuntimeException("Cause is not ClosedDirectoryStreamException as expected");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
i.next();
|
i.next();
|
||||||
throw new RuntimeException("IllegalStateException not thrown as expected");
|
throw new RuntimeException("ConcurrentModificationException not thrown as expected");
|
||||||
} catch (ConcurrentModificationException x) {
|
} catch (ConcurrentModificationException x) {
|
||||||
Throwable t = x.getCause();
|
Throwable t = x.getCause();
|
||||||
if (!(t instanceof IllegalStateException))
|
if (!(t instanceof ClosedDirectoryStreamException))
|
||||||
throw new RuntimeException("Cause is not IllegalStateException as expected");
|
throw new RuntimeException("Cause is not ClosedDirectoryStreamException as expected");
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
|
i.remove();
|
||||||
|
throw new RuntimeException("ConcurrentModificationException not thrown as expected");
|
||||||
|
} catch (ConcurrentModificationException x) {
|
||||||
|
Throwable t = x.getCause();
|
||||||
|
if (!(t instanceof ClosedDirectoryStreamException))
|
||||||
|
throw new RuntimeException("Cause is not ClosedDirectoryStreamException as expected");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
public static void main(String[] args) throws IOException {
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
* @summary Unit test for probeContentType method
|
* @summary Unit test for probeContentType method
|
||||||
* @library ..
|
* @library ..
|
||||||
* @build ContentType SimpleFileTypeDetector
|
* @build ContentType SimpleFileTypeDetector
|
||||||
* @run main ContentType
|
* @run main/othervm ContentType
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.nio.file.*;
|
import java.nio.file.*;
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
* @bug 6866804
|
* @bug 6866804
|
||||||
* @summary Unit test for java.nio.file.Path
|
* @summary Unit test for java.nio.file.Path
|
||||||
* @library ..
|
* @library ..
|
||||||
|
* @build CheckPermissions
|
||||||
|
* @run main/othervm CheckPermissions
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
@ -92,7 +92,6 @@ public class CopyAndMove {
|
|||||||
{
|
{
|
||||||
assertTrue(attrs1.isReadOnly() == attrs2.isReadOnly());
|
assertTrue(attrs1.isReadOnly() == attrs2.isReadOnly());
|
||||||
assertTrue(attrs1.isHidden() == attrs2.isHidden());
|
assertTrue(attrs1.isHidden() == attrs2.isHidden());
|
||||||
assertTrue(attrs1.isArchive() == attrs2.isArchive());
|
|
||||||
assertTrue(attrs1.isSystem() == attrs2.isSystem());
|
assertTrue(attrs1.isSystem() == attrs2.isSystem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* @test
|
/* @test
|
||||||
* @bug 4313887 6838333
|
* @bug 4313887 6838333 6891404
|
||||||
* @summary Unit test for java.nio.file.attribute.AclFileAttribueView
|
* @summary Unit test for java.nio.file.attribute.AclFileAttribueView
|
||||||
* @library ../..
|
* @library ../..
|
||||||
*/
|
*/
|
||||||
|
155
jdk/test/java/util/Objects/BasicObjectsTest.java
Normal file
155
jdk/test/java/util/Objects/BasicObjectsTest.java
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2009 Sun Microsystems, Inc. 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.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||||
|
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||||
|
* have any questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 6797535
|
||||||
|
* @summary Basic tests for methods in java.util.Objects
|
||||||
|
* @author Joseph D. Darcy
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class BasicObjectsTest {
|
||||||
|
public static void main(String... args) {
|
||||||
|
int errors = 0;
|
||||||
|
errors += testEquals();
|
||||||
|
errors += testHashCode();
|
||||||
|
errors += testToString();
|
||||||
|
errors += testCompare();
|
||||||
|
errors += testNonNull();
|
||||||
|
if (errors > 0 )
|
||||||
|
throw new RuntimeException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int testEquals() {
|
||||||
|
int errors = 0;
|
||||||
|
Object[] values = {null, "42", 42};
|
||||||
|
for(int i = 0; i < values.length; i++)
|
||||||
|
for(int j = 0; j < values.length; j++) {
|
||||||
|
boolean expected = (i == j);
|
||||||
|
Object a = values[i];
|
||||||
|
Object b = values[j];
|
||||||
|
boolean result = Objects.equals(a, b);
|
||||||
|
if (result != expected) {
|
||||||
|
errors++;
|
||||||
|
System.err.printf("When equating %s to %s, got %b instead of %b%n.",
|
||||||
|
a, b, result, expected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int testHashCode() {
|
||||||
|
int errors = 0;
|
||||||
|
errors += (Objects.hashCode(null) == 0 ) ? 0 : 1;
|
||||||
|
String s = "42";
|
||||||
|
errors += (Objects.hashCode(s) == s.hashCode() ) ? 0 : 1;
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int testToString() {
|
||||||
|
int errors = 0;
|
||||||
|
errors += ("null".equals(Objects.toString(null)) ) ? 0 : 1;
|
||||||
|
String s = "Some string";
|
||||||
|
errors += (s.equals(Objects.toString(s)) ) ? 0 : 1;
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int testCompare() {
|
||||||
|
int errors = 0;
|
||||||
|
String[] values = {"e. e. cummings", "zzz"};
|
||||||
|
String[] VALUES = {"E. E. Cummings", "ZZZ"};
|
||||||
|
errors += compareTest(null, null, 0);
|
||||||
|
for(int i = 0; i < values.length; i++) {
|
||||||
|
String a = values[i];
|
||||||
|
errors += compareTest(a, a, 0);
|
||||||
|
for(int j = 0; j < VALUES.length; j++) {
|
||||||
|
int expected = Integer.compare(i, j);
|
||||||
|
String b = VALUES[j];
|
||||||
|
errors += compareTest(a, b, expected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int compareTest(String a, String b, int expected) {
|
||||||
|
int errors = 0;
|
||||||
|
int result = Objects.compare(a, b, String.CASE_INSENSITIVE_ORDER);
|
||||||
|
if (Integer.signum(result) != Integer.signum(expected)) {
|
||||||
|
errors++;
|
||||||
|
System.err.printf("When comparing %s to %s, got %d instead of %d%n.",
|
||||||
|
a, b, result, expected);
|
||||||
|
}
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int testNonNull() {
|
||||||
|
int errors = 0;
|
||||||
|
String s;
|
||||||
|
|
||||||
|
// Test 1-arg variant
|
||||||
|
try {
|
||||||
|
s = Objects.nonNull("pants");
|
||||||
|
if (s != "pants") {
|
||||||
|
System.err.printf("1-arg non-null failed to return its arg");
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
System.err.printf("1-arg nonNull threw unexpected NPE");
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
s = Objects.nonNull(null);
|
||||||
|
System.err.printf("1-arg nonNull failed to throw NPE");
|
||||||
|
errors++;
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
// Expected
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test 2-arg variant
|
||||||
|
try {
|
||||||
|
s = Objects.nonNull("pants", "trousers");
|
||||||
|
if (s != "pants") {
|
||||||
|
System.err.printf("2-arg nonNull failed to return its arg");
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
System.err.printf("2-arg nonNull threw unexpected NPE");
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
s = Objects.nonNull(null, "pantaloons");
|
||||||
|
System.err.printf("2-arg nonNull failed to throw NPE");
|
||||||
|
errors++;
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
if (e.getMessage() != "pantaloons") {
|
||||||
|
System.err.printf("2-arg nonNull threw NPE w/ bad detail msg");
|
||||||
|
errors++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errors;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user