7072353: JNDI libraries do not build with javac -Xlint:all -Werror
Reviewed-by: xuelei
This commit is contained in:
parent
c7b1e7e929
commit
1fb6680207
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1999, 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
|
||||
@ -28,6 +28,8 @@
|
||||
#
|
||||
|
||||
BUILDDIR = ../../..
|
||||
SUBDIRS_MAKEFLAGS += JAVAC_MAX_WARNINGS=true
|
||||
SUBDIRS_MAKEFLAGS += JAVAC_WARNINGS_FATAL=true
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
SUBDIRS = toolkit cosnaming ldap rmi dns
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 1998, 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
|
||||
@ -28,6 +28,7 @@
|
||||
#
|
||||
|
||||
BUILDDIR = ../..
|
||||
JAVAC_MAX_WARNINGS = true
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -32,8 +32,6 @@ import java.util.NoSuchElementException;
|
||||
import java.util.Hashtable;
|
||||
|
||||
import org.omg.CosNaming.*;
|
||||
import org.omg.CosNaming.NamingContextPackage.*;
|
||||
import org.omg.CORBA.*;
|
||||
|
||||
/**
|
||||
* Implements the JNDI NamingEnumeration interface for COS
|
||||
@ -44,7 +42,8 @@ import org.omg.CORBA.*;
|
||||
* @author Rosanna Lee
|
||||
*/
|
||||
|
||||
final class CNBindingEnumeration implements NamingEnumeration {
|
||||
final class CNBindingEnumeration
|
||||
implements NamingEnumeration<javax.naming.Binding> {
|
||||
|
||||
private static final int DEFAULT_BATCHSIZE = 100;
|
||||
private BindingListHolder _bindingList; // list of bindings
|
||||
@ -52,105 +51,105 @@ final class CNBindingEnumeration implements NamingEnumeration {
|
||||
private int counter; // pointer in _bindingList
|
||||
private int batchsize = DEFAULT_BATCHSIZE; // how many to ask for each time
|
||||
private CNCtx _ctx; // ctx to list
|
||||
private Hashtable _env; // environment for getObjectInstance
|
||||
private Hashtable<?,?> _env; // environment for getObjectInstance
|
||||
private boolean more = false; // iterator done?
|
||||
private boolean isLookedUpCtx = false; // iterating on a context beneath this context ?
|
||||
|
||||
/**
|
||||
* Creates a CNBindingEnumeration object.
|
||||
* @param ctx Context to enumerate
|
||||
*/
|
||||
CNBindingEnumeration(CNCtx ctx, boolean isLookedUpCtx, Hashtable env) {
|
||||
// Get batch size to use
|
||||
String batch = (env != null ?
|
||||
(String)env.get(javax.naming.Context.BATCHSIZE) : null);
|
||||
if (batch != null) {
|
||||
try {
|
||||
batchsize = Integer.parseInt(batch);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IllegalArgumentException("Batch size not numeric: " + batch);
|
||||
/**
|
||||
* Creates a CNBindingEnumeration object.
|
||||
* @param ctx Context to enumerate
|
||||
*/
|
||||
CNBindingEnumeration(CNCtx ctx, boolean isLookedUpCtx, Hashtable<?,?> env) {
|
||||
// Get batch size to use
|
||||
String batch = (env != null ?
|
||||
(String)env.get(javax.naming.Context.BATCHSIZE) : null);
|
||||
if (batch != null) {
|
||||
try {
|
||||
batchsize = Integer.parseInt(batch);
|
||||
} catch (NumberFormatException e) {
|
||||
throw new IllegalArgumentException("Batch size not numeric: " + batch);
|
||||
}
|
||||
}
|
||||
_ctx = ctx;
|
||||
_ctx.incEnumCount();
|
||||
this.isLookedUpCtx = isLookedUpCtx;
|
||||
_env = env;
|
||||
_bindingList = new BindingListHolder();
|
||||
BindingIteratorHolder _bindingIterH = new BindingIteratorHolder();
|
||||
|
||||
// Perform listing and request that bindings be returned in _bindingIter
|
||||
// Upon return,_bindingList returns a zero length list
|
||||
_ctx._nc.list(0, _bindingList, _bindingIterH);
|
||||
|
||||
_bindingIter = _bindingIterH.value;
|
||||
|
||||
// Get first batch using _bindingIter
|
||||
if (_bindingIter != null) {
|
||||
more = _bindingIter.next_n(batchsize, _bindingList);
|
||||
} else {
|
||||
more = false;
|
||||
}
|
||||
counter = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next binding in the list.
|
||||
* @exception NamingException any naming exception.
|
||||
*/
|
||||
|
||||
public javax.naming.Binding next() throws NamingException {
|
||||
if (more && counter >= _bindingList.value.length) {
|
||||
getMore();
|
||||
}
|
||||
if (more && counter < _bindingList.value.length) {
|
||||
org.omg.CosNaming.Binding bndg = _bindingList.value[counter];
|
||||
counter++;
|
||||
return mapBinding(bndg);
|
||||
} else {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
}
|
||||
_ctx = ctx;
|
||||
_ctx.incEnumCount();
|
||||
this.isLookedUpCtx = isLookedUpCtx;
|
||||
_env = env;
|
||||
_bindingList = new BindingListHolder();
|
||||
BindingIteratorHolder _bindingIterH = new BindingIteratorHolder();
|
||||
|
||||
// Perform listing and request that bindings be returned in _bindingIter
|
||||
// Upon return,_bindingList returns a zero length list
|
||||
_ctx._nc.list(0, _bindingList, _bindingIterH);
|
||||
|
||||
_bindingIter = _bindingIterH.value;
|
||||
/**
|
||||
* Returns true or false depending on whether there are more bindings.
|
||||
* @return boolean value
|
||||
*/
|
||||
|
||||
// Get first batch using _bindingIter
|
||||
if (_bindingIter != null) {
|
||||
more = _bindingIter.next_n(batchsize, _bindingList);
|
||||
} else {
|
||||
more = false;
|
||||
public boolean hasMore() throws NamingException {
|
||||
// If there's more, check whether current bindingList has been exhausted,
|
||||
// and if so, try to get more.
|
||||
// If no more, just say so.
|
||||
return more ? (counter < _bindingList.value.length || getMore()) : false;
|
||||
}
|
||||
counter = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next binding in the list.
|
||||
* @exception NamingException any naming exception.
|
||||
*/
|
||||
/**
|
||||
* Returns true or false depending on whether there are more bindings.
|
||||
* Need to define this to satisfy the Enumeration api requirement.
|
||||
* @return boolean value
|
||||
*/
|
||||
|
||||
public java.lang.Object next() throws NamingException {
|
||||
if (more && counter >= _bindingList.value.length) {
|
||||
getMore();
|
||||
}
|
||||
if (more && counter < _bindingList.value.length) {
|
||||
org.omg.CosNaming.Binding bndg = _bindingList.value[counter];
|
||||
counter++;
|
||||
return mapBinding(bndg);
|
||||
} else {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
}
|
||||
public boolean hasMoreElements() {
|
||||
try {
|
||||
return hasMore();
|
||||
} catch (NamingException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns true or false depending on whether there are more bindings.
|
||||
* @return boolean value
|
||||
*/
|
||||
|
||||
public boolean hasMore() throws NamingException {
|
||||
// If there's more, check whether current bindingList has been exhausted,
|
||||
// and if so, try to get more.
|
||||
// If no more, just say so.
|
||||
return more ? (counter < _bindingList.value.length || getMore()) : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true or false depending on whether there are more bindings.
|
||||
* Need to define this to satisfy the Enumeration api requirement.
|
||||
* @return boolean value
|
||||
*/
|
||||
|
||||
public boolean hasMoreElements() {
|
||||
try {
|
||||
return hasMore();
|
||||
} catch (NamingException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Returns the next binding in the list.
|
||||
* @exception NoSuchElementException Thrown when the end of the
|
||||
* list is reached.
|
||||
*/
|
||||
|
||||
public java.lang.Object nextElement() {
|
||||
public javax.naming.Binding nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException ne) {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void close() throws NamingException {
|
||||
more = false;
|
||||
@ -197,7 +196,7 @@ final class CNBindingEnumeration implements NamingEnumeration {
|
||||
return more;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Constructs a JNDI Binding object from the COS Naming binding
|
||||
* object.
|
||||
* @exception NameNotFound No objects under the name.
|
||||
@ -232,5 +231,5 @@ final class CNBindingEnumeration implements NamingEnumeration {
|
||||
String fullName = CNNameParser.cosNameToInsString(comps);
|
||||
jbndg.setNameInNamespace(fullName);
|
||||
return jbndg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -30,7 +30,6 @@ import javax.naming.spi.NamingManager;
|
||||
import javax.naming.spi.ResolveResult;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.io.InputStream;
|
||||
@ -63,7 +62,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
public NamingContext _nc; // public for accessing underlying NamingContext
|
||||
private NameComponent[] _name = null;
|
||||
|
||||
Hashtable _env; // used by ExceptionMapper
|
||||
Hashtable<String, java.lang.Object> _env; // used by ExceptionMapper
|
||||
static final CNNameParser parser = new CNNameParser();
|
||||
|
||||
private static final String FED_PROP = "com.sun.jndi.cosnaming.federation";
|
||||
@ -82,11 +81,12 @@ public class CNCtx implements javax.naming.Context {
|
||||
* @param env Environment properties for initializing name service.
|
||||
* @exception NamingException Cannot initialize ORB or naming context.
|
||||
*/
|
||||
CNCtx(Hashtable env) throws NamingException {
|
||||
@SuppressWarnings("unchecked")
|
||||
CNCtx(Hashtable<?,?> env) throws NamingException {
|
||||
if (env != null) {
|
||||
env = (Hashtable) env.clone();
|
||||
env = (Hashtable<?,?>)env.clone();
|
||||
}
|
||||
_env = env;
|
||||
_env = (Hashtable<String, java.lang.Object>)env;
|
||||
federation = "true".equals(env != null ? env.get(FED_PROP) : null);
|
||||
initOrbAndRootContext(env);
|
||||
}
|
||||
@ -97,13 +97,14 @@ public class CNCtx implements javax.naming.Context {
|
||||
/**
|
||||
* This method is used by the iiop and iiopname URL Context factories.
|
||||
*/
|
||||
public static ResolveResult createUsingURL(String url, Hashtable env)
|
||||
@SuppressWarnings("unchecked")
|
||||
public static ResolveResult createUsingURL(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
CNCtx ctx = new CNCtx();
|
||||
if (env != null) {
|
||||
env = (Hashtable) env.clone();
|
||||
env = (Hashtable<?,?>) env.clone();
|
||||
}
|
||||
ctx._env = env;
|
||||
ctx._env = (Hashtable<String, java.lang.Object>)env;
|
||||
String rest = ctx.initUsingUrl(
|
||||
env != null ?
|
||||
(org.omg.CORBA.ORB) env.get("java.naming.corba.orb")
|
||||
@ -128,8 +129,8 @@ public class CNCtx implements javax.naming.Context {
|
||||
* @param name The name of this context relative to the root
|
||||
*/
|
||||
|
||||
CNCtx(ORB orb, OrbReuseTracker tracker, NamingContext nctx, Hashtable env,
|
||||
NameComponent[]name)
|
||||
CNCtx(ORB orb, OrbReuseTracker tracker, NamingContext nctx,
|
||||
Hashtable<String, java.lang.Object> env, NameComponent[]name)
|
||||
throws NamingException {
|
||||
if (orb == null || nctx == null)
|
||||
throw new ConfigurationException(
|
||||
@ -207,7 +208,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
* @exception NamingException When an error occurs while initializing the
|
||||
* ORB or the naming context.
|
||||
*/
|
||||
private void initOrbAndRootContext(Hashtable env) throws NamingException {
|
||||
private void initOrbAndRootContext(Hashtable<?,?> env) throws NamingException {
|
||||
org.omg.CORBA.ORB inOrb = null;
|
||||
String ncIor = null;
|
||||
|
||||
@ -240,7 +241,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
|
||||
// If name supplied in URL, resolve it to a NamingContext
|
||||
if (insName.length() > 0) {
|
||||
_name = parser.nameToCosName(parser.parse(insName));
|
||||
_name = CNNameParser.nameToCosName(parser.parse(insName));
|
||||
try {
|
||||
org.omg.CORBA.Object obj = _nc.resolve(_name);
|
||||
_nc = NamingContextHelper.narrow(obj);
|
||||
@ -271,7 +272,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
}
|
||||
|
||||
|
||||
private String initUsingUrl(ORB orb, String url, Hashtable env)
|
||||
private String initUsingUrl(ORB orb, String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
if (url.startsWith("iiop://") || url.startsWith("iiopname://")) {
|
||||
return initUsingIiopUrl(orb, url, env);
|
||||
@ -283,17 +284,14 @@ public class CNCtx implements javax.naming.Context {
|
||||
/**
|
||||
* Handles "iiop" and "iiopname" URLs (INS 98-10-11)
|
||||
*/
|
||||
private String initUsingIiopUrl(ORB defOrb, String url, Hashtable env)
|
||||
private String initUsingIiopUrl(ORB defOrb, String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
try {
|
||||
IiopUrl parsedUrl = new IiopUrl(url);
|
||||
|
||||
Vector addrs = parsedUrl.getAddresses();
|
||||
IiopUrl.Address addr;
|
||||
NamingException savedException = null;
|
||||
|
||||
for (int i = 0; i < addrs.size(); i++) {
|
||||
addr = (IiopUrl.Address)addrs.elementAt(i);
|
||||
for (IiopUrl.Address addr : parsedUrl.getAddresses()) {
|
||||
|
||||
try {
|
||||
if (defOrb != null) {
|
||||
@ -341,7 +339,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
/**
|
||||
* Initializes using "corbaname" URL (INS 99-12-03)
|
||||
*/
|
||||
private String initUsingCorbanameUrl(ORB orb, String url, Hashtable env)
|
||||
private String initUsingCorbanameUrl(ORB orb, String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
try {
|
||||
CorbanameUrl parsedUrl = new CorbanameUrl(url);
|
||||
@ -731,7 +729,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
// as per JNDI spec
|
||||
|
||||
if (leafNotFound(e, path[path.length-1])) {
|
||||
; // do nothing
|
||||
// do nothing
|
||||
} else {
|
||||
throw ExceptionMapper.mapException(e, this, path);
|
||||
}
|
||||
@ -829,7 +827,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
* with a non-null argument
|
||||
* @return a list of name-class objects as a NameClassEnumeration.
|
||||
*/
|
||||
public NamingEnumeration list(String name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(String name) throws NamingException {
|
||||
return list(new CompositeName(name));
|
||||
}
|
||||
|
||||
@ -840,9 +838,10 @@ public class CNCtx implements javax.naming.Context {
|
||||
* @exception NamingException All exceptions thrown by lookup
|
||||
* @return a list of name-class objects as a NameClassEnumeration.
|
||||
*/
|
||||
public NamingEnumeration list(Name name)
|
||||
@SuppressWarnings("unchecked")
|
||||
public NamingEnumeration<NameClassPair> list(Name name)
|
||||
throws NamingException {
|
||||
return listBindings(name);
|
||||
return (NamingEnumeration)listBindings(name);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -852,7 +851,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
* @exception NamingException all exceptions returned by lookup
|
||||
* @return a list of bindings as a BindingEnumeration.
|
||||
*/
|
||||
public NamingEnumeration listBindings(String name)
|
||||
public NamingEnumeration<javax.naming.Binding> listBindings(String name)
|
||||
throws NamingException {
|
||||
return listBindings(new CompositeName(name));
|
||||
}
|
||||
@ -864,7 +863,7 @@ public class CNCtx implements javax.naming.Context {
|
||||
* @exception NamingException all exceptions returned by lookup.
|
||||
* @return a list of bindings as a BindingEnumeration.
|
||||
*/
|
||||
public NamingEnumeration listBindings(Name name)
|
||||
public NamingEnumeration<javax.naming.Binding> listBindings(Name name)
|
||||
throws NamingException {
|
||||
if (_nc == null)
|
||||
throw new ConfigurationException(
|
||||
@ -1064,11 +1063,12 @@ public class CNCtx implements javax.naming.Context {
|
||||
* Returns the current environment.
|
||||
* @return Environment.
|
||||
*/
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
@SuppressWarnings("unchecked")
|
||||
public Hashtable<String, java.lang.Object> getEnvironment() throws NamingException {
|
||||
if (_env == null) {
|
||||
return new Hashtable(5, 0.75f);
|
||||
return new Hashtable<>(5, 0.75f);
|
||||
} else {
|
||||
return (Hashtable)_env.clone();
|
||||
return (Hashtable<String, java.lang.Object>)_env.clone();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1090,25 +1090,27 @@ public class CNCtx implements javax.naming.Context {
|
||||
* @param propVal The ORB.
|
||||
* @return the previous value of this property if any.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public java.lang.Object addToEnvironment(String propName,
|
||||
java.lang.Object propValue)
|
||||
throws NamingException {
|
||||
if (_env == null) {
|
||||
_env = new Hashtable(7, 0.75f);
|
||||
_env = new Hashtable<>(7, 0.75f);
|
||||
} else {
|
||||
// copy-on-write
|
||||
_env = (Hashtable)_env.clone();
|
||||
_env = (Hashtable<String, java.lang.Object>)_env.clone();
|
||||
}
|
||||
|
||||
return _env.put(propName, propValue);
|
||||
}
|
||||
|
||||
// Record change but do not reinitialize ORB
|
||||
@SuppressWarnings("unchecked")
|
||||
public java.lang.Object removeFromEnvironment(String propName)
|
||||
throws NamingException {
|
||||
if (_env != null && _env.get(propName) != null) {
|
||||
// copy-on-write
|
||||
_env = (Hashtable)_env.clone();
|
||||
_env = (Hashtable<String, java.lang.Object>)_env.clone();
|
||||
return _env.remove(propName);
|
||||
}
|
||||
return null;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -67,7 +67,7 @@ final public class CNNameParser implements NameParser {
|
||||
* @return a non-null CompoundName
|
||||
*/
|
||||
public Name parse(String name) throws NamingException {
|
||||
Vector comps = insStringToStringifiedComps(name);
|
||||
Vector<String> comps = insStringToStringifiedComps(name);
|
||||
return new CNCompoundName(comps.elements());
|
||||
}
|
||||
|
||||
@ -128,11 +128,11 @@ final public class CNNameParser implements NameParser {
|
||||
* each element of the vector contains a stringified form of
|
||||
* a NameComponent.
|
||||
*/
|
||||
private static Vector insStringToStringifiedComps(String str)
|
||||
private static Vector<String> insStringToStringifiedComps(String str)
|
||||
throws InvalidNameException {
|
||||
|
||||
int len = str.length();
|
||||
Vector components = new Vector(10);
|
||||
Vector<String> components = new Vector<>(10);
|
||||
char[] id = new char[len];
|
||||
char[] kind = new char[len];
|
||||
int idCount, kindCount;
|
||||
@ -306,7 +306,7 @@ final public class CNNameParser implements NameParser {
|
||||
* and stringifying code of the default CompoundName.
|
||||
*/
|
||||
static final class CNCompoundName extends CompoundName {
|
||||
CNCompoundName(Enumeration enum_) {
|
||||
CNCompoundName(Enumeration<String> enum_) {
|
||||
super(enum_, CNNameParser.mySyntax);
|
||||
}
|
||||
|
||||
@ -315,12 +315,12 @@ final public class CNNameParser implements NameParser {
|
||||
}
|
||||
|
||||
public Name getPrefix(int posn) {
|
||||
Enumeration comps = super.getPrefix(posn).getAll();
|
||||
Enumeration<String> comps = super.getPrefix(posn).getAll();
|
||||
return new CNCompoundName(comps);
|
||||
}
|
||||
|
||||
public Name getSuffix(int posn) {
|
||||
Enumeration comps = super.getSuffix(posn).getAll();
|
||||
Enumeration<String> comps = super.getSuffix(posn).getAll();
|
||||
return new CNCompoundName(comps);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -102,10 +102,10 @@ public final class ExceptionMapper {
|
||||
|
||||
private static final NamingException tryFed(NotFound e, CNCtx ctx,
|
||||
NameComponent[] inputName) throws NamingException {
|
||||
NameComponent[] rest = ((NotFound) e).rest_of_name;
|
||||
NameComponent[] rest = e.rest_of_name;
|
||||
|
||||
if (debug) {
|
||||
System.out.println(((NotFound)e).why.value());
|
||||
System.out.println(e.why.value());
|
||||
System.out.println(rest.length);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -68,7 +68,7 @@ public final class IiopUrl {
|
||||
static final private int DEFAULT_IIOPNAME_PORT = 9999;
|
||||
static final private int DEFAULT_IIOP_PORT = 900;
|
||||
static final private String DEFAULT_HOST = "localhost";
|
||||
private Vector addresses;
|
||||
private Vector<Address> addresses;
|
||||
private String stringName;
|
||||
|
||||
public static class Address {
|
||||
@ -149,7 +149,7 @@ public final class IiopUrl {
|
||||
}
|
||||
}
|
||||
|
||||
public Vector getAddresses() {
|
||||
public Vector<Address> getAddresses() {
|
||||
return addresses;
|
||||
}
|
||||
|
||||
@ -185,7 +185,7 @@ public final class IiopUrl {
|
||||
} else {
|
||||
stringName = UrlUtil.decode(url.substring(addrEnd+1));
|
||||
}
|
||||
addresses = new Vector(3);
|
||||
addresses = new Vector<>(3);
|
||||
if (oldFormat) {
|
||||
// Only one host:port part, not multiple
|
||||
addresses.addElement(
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -524,7 +524,7 @@ public class DnsClient {
|
||||
"\tResponse Q:" + resps);
|
||||
}
|
||||
byte[] pkt;
|
||||
if ((pkt = (byte[]) resps.get(xid)) != null) {
|
||||
if ((pkt = resps.get(xid)) != null) {
|
||||
checkResponseCode(new Header(pkt, pkt.length));
|
||||
synchronized (queuesLock) {
|
||||
resps.remove(xid);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -47,7 +47,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
|
||||
DnsName domain; // fully-qualified domain name of this context,
|
||||
// with a root (empty) label at position 0
|
||||
Hashtable environment;
|
||||
Hashtable<Object,Object> environment;
|
||||
private boolean envShared; // true if environment is possibly shared
|
||||
// and so must be copied on write
|
||||
private boolean parentIsDns; // was this DnsContext created by
|
||||
@ -95,14 +95,15 @@ public class DnsContext extends ComponentDirContext {
|
||||
* There must be at least one server.
|
||||
* The environment must not be null; it is cloned before being stored.
|
||||
*/
|
||||
public DnsContext(String domain, String[] servers, Hashtable environment)
|
||||
@SuppressWarnings("unchecked")
|
||||
public DnsContext(String domain, String[] servers, Hashtable<?,?> environment)
|
||||
throws NamingException {
|
||||
|
||||
this.domain = new DnsName(domain.endsWith(".")
|
||||
? domain
|
||||
: domain + ".");
|
||||
this.servers = servers;
|
||||
this.environment = (Hashtable) environment.clone();
|
||||
this.environment = (Hashtable<Object,Object>) environment.clone();
|
||||
envShared = false;
|
||||
parentIsDns = false;
|
||||
resolver = null;
|
||||
@ -154,14 +155,15 @@ public class DnsContext extends ComponentDirContext {
|
||||
/*
|
||||
* Override default with a noncloning version.
|
||||
*/
|
||||
protected Hashtable p_getEnvironment() {
|
||||
protected Hashtable<?,?> p_getEnvironment() {
|
||||
return environment;
|
||||
}
|
||||
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
return (Hashtable) environment.clone();
|
||||
public Hashtable<?,?> getEnvironment() throws NamingException {
|
||||
return (Hashtable<?,?>) environment.clone();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object addToEnvironment(String propName, Object propVal)
|
||||
throws NamingException {
|
||||
|
||||
@ -189,7 +191,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
return environment.put(propName, propVal);
|
||||
} else if (environment.get(propName) != propVal) {
|
||||
// copy on write
|
||||
environment = (Hashtable) environment.clone();
|
||||
environment = (Hashtable<Object,Object>) environment.clone();
|
||||
envShared = false;
|
||||
return environment.put(propName, propVal);
|
||||
} else {
|
||||
@ -197,6 +199,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object removeFromEnvironment(String propName)
|
||||
throws NamingException {
|
||||
|
||||
@ -222,7 +225,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
return environment.remove(propName);
|
||||
} else if (environment.get(propName) != null) {
|
||||
// copy-on-write
|
||||
environment = (Hashtable) environment.clone();
|
||||
environment = (Hashtable<Object,Object>) environment.clone();
|
||||
envShared = false;
|
||||
return environment.remove(propName);
|
||||
} else {
|
||||
@ -307,7 +310,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
return c_lookup(name, cont);
|
||||
}
|
||||
|
||||
public NamingEnumeration c_list(Name name, Continuation cont)
|
||||
public NamingEnumeration<NameClassPair> c_list(Name name, Continuation cont)
|
||||
throws NamingException {
|
||||
cont.setSuccess();
|
||||
try {
|
||||
@ -322,7 +325,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration c_listBindings(Name name, Continuation cont)
|
||||
public NamingEnumeration<Binding> c_listBindings(Name name, Continuation cont)
|
||||
throws NamingException {
|
||||
cont.setSuccess();
|
||||
try {
|
||||
@ -457,7 +460,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
new OperationNotSupportedException());
|
||||
}
|
||||
|
||||
public NamingEnumeration c_search(Name name,
|
||||
public NamingEnumeration<SearchResult> c_search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
@ -465,7 +468,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
throw new OperationNotSupportedException();
|
||||
}
|
||||
|
||||
public NamingEnumeration c_search(Name name,
|
||||
public NamingEnumeration<SearchResult> c_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
@ -473,7 +476,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
throw new OperationNotSupportedException();
|
||||
}
|
||||
|
||||
public NamingEnumeration c_search(Name name,
|
||||
public NamingEnumeration<SearchResult> c_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
@ -608,7 +611,7 @@ public class DnsContext extends ComponentDirContext {
|
||||
BasicAttributes attrs = new BasicAttributes(true);
|
||||
|
||||
for (int i = 0; i < rrs.answer.size(); i++) {
|
||||
ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
|
||||
ResourceRecord rr = rrs.answer.elementAt(i);
|
||||
int rrtype = rr.getType();
|
||||
int rrclass = rr.getRrclass();
|
||||
|
||||
@ -952,19 +955,14 @@ class CT {
|
||||
//----------
|
||||
|
||||
/*
|
||||
* An enumeration of name/classname pairs.
|
||||
*
|
||||
* Nodes that have children or that are zone cuts are returned with
|
||||
* classname DirContext. Other nodes are returned with classname
|
||||
* Object even though they are DirContexts as well, since this might
|
||||
* make the namespace easier to browse.
|
||||
* Common base class for NameClassPairEnumeration and BindingEnumeration.
|
||||
*/
|
||||
class NameClassPairEnumeration implements NamingEnumeration {
|
||||
abstract class BaseNameClassPairEnumeration<T> implements NamingEnumeration<T> {
|
||||
|
||||
protected Enumeration nodes; // nodes to be enumerated, or null if none
|
||||
protected Enumeration<NameNode> nodes; // nodes to be enumerated, or null if none
|
||||
protected DnsContext ctx; // context being enumerated
|
||||
|
||||
NameClassPairEnumeration(DnsContext ctx, Hashtable nodes) {
|
||||
BaseNameClassPairEnumeration(DnsContext ctx, Hashtable<String,NameNode> nodes) {
|
||||
this.ctx = ctx;
|
||||
this.nodes = (nodes != null)
|
||||
? nodes.elements()
|
||||
@ -974,12 +972,12 @@ class NameClassPairEnumeration implements NamingEnumeration {
|
||||
/*
|
||||
* ctx will be set to null when no longer needed by the enumeration.
|
||||
*/
|
||||
public void close() {
|
||||
public final void close() {
|
||||
nodes = null;
|
||||
ctx = null;
|
||||
}
|
||||
|
||||
public boolean hasMore() {
|
||||
public final boolean hasMore() {
|
||||
boolean more = ((nodes != null) && nodes.hasMoreElements());
|
||||
if (!more) {
|
||||
close();
|
||||
@ -987,11 +985,46 @@ class NameClassPairEnumeration implements NamingEnumeration {
|
||||
return more;
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
public final boolean hasMoreElements() {
|
||||
return hasMore();
|
||||
}
|
||||
|
||||
abstract public T next() throws NamingException;
|
||||
|
||||
public final T nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) {
|
||||
java.util.NoSuchElementException nsee =
|
||||
new java.util.NoSuchElementException();
|
||||
nsee.initCause(e);
|
||||
throw nsee;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* An enumeration of name/classname pairs.
|
||||
*
|
||||
* Nodes that have children or that are zone cuts are returned with
|
||||
* classname DirContext. Other nodes are returned with classname
|
||||
* Object even though they are DirContexts as well, since this might
|
||||
* make the namespace easier to browse.
|
||||
*/
|
||||
final class NameClassPairEnumeration
|
||||
extends BaseNameClassPairEnumeration<NameClassPair>
|
||||
implements NamingEnumeration<NameClassPair> {
|
||||
|
||||
NameClassPairEnumeration(DnsContext ctx, Hashtable<String,NameNode> nodes) {
|
||||
super(ctx, nodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NameClassPair next() throws NamingException {
|
||||
if (!hasMore()) {
|
||||
throw new java.util.NoSuchElementException();
|
||||
}
|
||||
NameNode nnode = (NameNode) nodes.nextElement();
|
||||
NameNode nnode = nodes.nextElement();
|
||||
String className = (nnode.isZoneCut() ||
|
||||
(nnode.getChildren() != null))
|
||||
? "javax.naming.directory.DirContext"
|
||||
@ -1005,28 +1038,15 @@ class NameClassPairEnumeration implements NamingEnumeration {
|
||||
ncp.setNameInNamespace(ctx.fullyQualify(cname).toString());
|
||||
return ncp;
|
||||
}
|
||||
|
||||
public boolean hasMoreElements() {
|
||||
return hasMore();
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) {
|
||||
throw (new java.util.NoSuchElementException(
|
||||
"javax.naming.NamingException was thrown: " +
|
||||
e.getMessage()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* An enumeration of Bindings.
|
||||
*/
|
||||
class BindingEnumeration extends NameClassPairEnumeration {
|
||||
final class BindingEnumeration extends BaseNameClassPairEnumeration<Binding>
|
||||
implements NamingEnumeration<Binding> {
|
||||
|
||||
BindingEnumeration(DnsContext ctx, Hashtable nodes) {
|
||||
BindingEnumeration(DnsContext ctx, Hashtable<String,NameNode> nodes) {
|
||||
super(ctx, nodes);
|
||||
}
|
||||
|
||||
@ -1035,11 +1055,12 @@ class BindingEnumeration extends NameClassPairEnumeration {
|
||||
// close();
|
||||
// }
|
||||
|
||||
public Object next() throws NamingException {
|
||||
@Override
|
||||
public Binding next() throws NamingException {
|
||||
if (!hasMore()) {
|
||||
throw (new java.util.NoSuchElementException());
|
||||
}
|
||||
NameNode nnode = (NameNode) nodes.nextElement();
|
||||
NameNode nnode = nodes.nextElement();
|
||||
|
||||
String label = nnode.getLabel();
|
||||
Name compName = (new DnsName()).add(label);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -59,7 +59,7 @@ public class DnsContextFactory implements InitialContextFactory {
|
||||
|
||||
public Context getInitialContext(Hashtable<?,?> env) throws NamingException {
|
||||
if (env == null) {
|
||||
env = new Hashtable(5);
|
||||
env = new Hashtable<>(5);
|
||||
}
|
||||
return urlToContext(getInitCtxUrl(env), env);
|
||||
}
|
||||
@ -75,7 +75,7 @@ public class DnsContextFactory implements InitialContextFactory {
|
||||
* components are overridden by "domain".
|
||||
*/
|
||||
public static DnsContext getContext(String domain,
|
||||
DnsUrl[] urls, Hashtable env)
|
||||
DnsUrl[] urls, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
String[] servers = serversForUrls(urls);
|
||||
@ -95,7 +95,7 @@ public class DnsContextFactory implements InitialContextFactory {
|
||||
).isEmpty();
|
||||
}
|
||||
|
||||
private static Context urlToContext(String url, Hashtable env)
|
||||
private static Context urlToContext(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
DnsUrl[] urls;
|
||||
@ -212,7 +212,7 @@ public class DnsContextFactory implements InitialContextFactory {
|
||||
* Reads environment to find URL(s) of initial context.
|
||||
* Default URL is "dns:".
|
||||
*/
|
||||
private static String getInitCtxUrl(Hashtable env) {
|
||||
private static String getInitCtxUrl(Hashtable<?,?> env) {
|
||||
String url = (String) env.get(Context.PROVIDER_URL);
|
||||
return ((url != null) ? url : DEFAULT_URL);
|
||||
}
|
||||
@ -223,34 +223,31 @@ public class DnsContextFactory implements InitialContextFactory {
|
||||
* @param oneIsEnough return output once there exists one ok
|
||||
* @return the filtered list, all non-permitted input removed
|
||||
*/
|
||||
private static List filterNameServers(List input, boolean oneIsEnough) {
|
||||
private static List<String> filterNameServers(List<String> input, boolean oneIsEnough) {
|
||||
SecurityManager security = System.getSecurityManager();
|
||||
if (security == null || input == null || input.isEmpty()) {
|
||||
return input;
|
||||
} else {
|
||||
List output = new ArrayList();
|
||||
for (Object o: input) {
|
||||
if (o instanceof String) {
|
||||
String platformServer = (String)o;
|
||||
int colon = platformServer.indexOf(':',
|
||||
platformServer.indexOf(']') + 1);
|
||||
List<String> output = new ArrayList<>();
|
||||
for (String platformServer: input) {
|
||||
int colon = platformServer.indexOf(':',
|
||||
platformServer.indexOf(']') + 1);
|
||||
|
||||
int p = (colon < 0)
|
||||
? DEFAULT_PORT
|
||||
: Integer.parseInt(
|
||||
platformServer.substring(colon + 1));
|
||||
String s = (colon < 0)
|
||||
? platformServer
|
||||
: platformServer.substring(0, colon);
|
||||
try {
|
||||
security.checkConnect(s, p);
|
||||
output.add(platformServer);
|
||||
if (oneIsEnough) {
|
||||
return output;
|
||||
}
|
||||
} catch (SecurityException se) {
|
||||
continue;
|
||||
int p = (colon < 0)
|
||||
? DEFAULT_PORT
|
||||
: Integer.parseInt(
|
||||
platformServer.substring(colon + 1));
|
||||
String s = (colon < 0)
|
||||
? platformServer
|
||||
: platformServer.substring(0, colon);
|
||||
try {
|
||||
security.checkConnect(s, p);
|
||||
output.add(platformServer);
|
||||
if (oneIsEnough) {
|
||||
return output;
|
||||
}
|
||||
} catch (SecurityException se) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return output;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -29,7 +29,6 @@ package com.sun.jndi.dns;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
|
||||
import javax.naming.*;
|
||||
|
||||
@ -111,7 +110,7 @@ public final class DnsName implements Name {
|
||||
// The labels of this domain name, as a list of strings. Index 0
|
||||
// corresponds to the leftmost (least significant) label: note that
|
||||
// this is the reverse of the ordering used by the Name interface.
|
||||
private ArrayList labels = new ArrayList();
|
||||
private ArrayList<String> labels = new ArrayList<>();
|
||||
|
||||
// The number of octets needed to carry this domain name in a DNS
|
||||
// packet. Equal to the sum of the lengths of each label, plus the
|
||||
@ -152,9 +151,7 @@ public final class DnsName implements Name {
|
||||
domain = n.domain;
|
||||
octets = n.octets;
|
||||
} else {
|
||||
Iterator iter = labels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
String label = (String) iter.next();
|
||||
for (String label: labels) {
|
||||
if (label.length() > 0) {
|
||||
octets += (short) (label.length() + 1);
|
||||
}
|
||||
@ -165,10 +162,8 @@ public final class DnsName implements Name {
|
||||
|
||||
public String toString() {
|
||||
if (domain == null) {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
Iterator iter = labels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
String label = (String) iter.next();
|
||||
StringBuilder buf = new StringBuilder();
|
||||
for (String label: labels) {
|
||||
if (buf.length() > 0 || label.length() == 0) {
|
||||
buf.append('.');
|
||||
}
|
||||
@ -183,9 +178,8 @@ public final class DnsName implements Name {
|
||||
* Does this domain name follow <em>host name</em> syntax?
|
||||
*/
|
||||
public boolean isHostName() {
|
||||
Iterator iter = labels.iterator();
|
||||
while (iter.hasNext()) {
|
||||
if (!isHostNameLabel((String) iter.next())) {
|
||||
for (String label: labels) {
|
||||
if (!isHostNameLabel(label)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -241,16 +235,16 @@ public final class DnsName implements Name {
|
||||
throw new ArrayIndexOutOfBoundsException();
|
||||
}
|
||||
int i = size() - pos - 1; // index of "pos" component in "labels"
|
||||
return (String) labels.get(i);
|
||||
return labels.get(i);
|
||||
}
|
||||
|
||||
public Enumeration getAll() {
|
||||
return new Enumeration() {
|
||||
public Enumeration<String> getAll() {
|
||||
return new Enumeration<String>() {
|
||||
int pos = 0;
|
||||
public boolean hasMoreElements() {
|
||||
return (pos < size());
|
||||
}
|
||||
public Object nextElement() {
|
||||
public String nextElement() {
|
||||
if (pos < size()) {
|
||||
return get(pos++);
|
||||
}
|
||||
@ -276,7 +270,7 @@ public final class DnsName implements Name {
|
||||
throw new ArrayIndexOutOfBoundsException();
|
||||
}
|
||||
int i = size() - pos - 1; // index of element to remove in "labels"
|
||||
String label = (String) labels.remove(i);
|
||||
String label = labels.remove(i);
|
||||
int len = label.length();
|
||||
if (len > 0) {
|
||||
octets -= (short) (len + 1);
|
||||
@ -530,7 +524,7 @@ public final class DnsName implements Name {
|
||||
/*
|
||||
* Append a label to buf, escaping as needed.
|
||||
*/
|
||||
private static void escape(StringBuffer buf, String label) {
|
||||
private static void escape(StringBuilder buf, String label) {
|
||||
for (int i = 0; i < label.length(); i++) {
|
||||
char c = label.charAt(i);
|
||||
if (c == '.' || c == '\\') {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -52,7 +52,7 @@ class NameNode {
|
||||
|
||||
private String label; // name of this node relative to its
|
||||
// parent, or null for root of a tree
|
||||
private Hashtable children = null; // child nodes
|
||||
private Hashtable<String,NameNode> children = null; // child nodes
|
||||
private boolean isZoneCut = false; // true if this node is a zone cut
|
||||
private int depth = 0; // depth in tree (0 for root)
|
||||
|
||||
@ -97,7 +97,7 @@ class NameNode {
|
||||
* Returns the children of this node, or null if there are none.
|
||||
* The caller must not modify the Hashtable returned.
|
||||
*/
|
||||
Hashtable getChildren() {
|
||||
Hashtable<String,NameNode> getChildren() {
|
||||
return children;
|
||||
}
|
||||
|
||||
@ -108,7 +108,7 @@ class NameNode {
|
||||
*/
|
||||
NameNode get(String key) {
|
||||
return (children != null)
|
||||
? (NameNode) children.get(key)
|
||||
? children.get(key)
|
||||
: null;
|
||||
}
|
||||
|
||||
@ -140,9 +140,9 @@ class NameNode {
|
||||
|
||||
NameNode child = null;
|
||||
if (node.children == null) {
|
||||
node.children = new Hashtable();
|
||||
node.children = new Hashtable<>();
|
||||
} else {
|
||||
child = (NameNode) node.children.get(key);
|
||||
child = node.children.get(key);
|
||||
}
|
||||
if (child == null) {
|
||||
child = newNameNode(label);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2007, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -125,8 +125,7 @@ class Resolver {
|
||||
}
|
||||
// Look for an SOA record giving the zone's top node.
|
||||
for (int i = 0; i < rrs.authority.size(); i++) {
|
||||
ResourceRecord rr = (ResourceRecord)
|
||||
rrs.authority.elementAt(i);
|
||||
ResourceRecord rr = rrs.authority.elementAt(i);
|
||||
if (rr.getType() == ResourceRecord.TYPE_SOA) {
|
||||
DnsName zone = rr.getName();
|
||||
if (fqdn.endsWith(zone)) {
|
||||
@ -152,7 +151,7 @@ class Resolver {
|
||||
ResourceRecords rrs = query(zone, rrclass, ResourceRecord.TYPE_SOA,
|
||||
recursion, false);
|
||||
for (int i = 0; i < rrs.answer.size(); i++) {
|
||||
ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
|
||||
ResourceRecord rr = rrs.answer.elementAt(i);
|
||||
if (rr.getType() == ResourceRecord.TYPE_SOA) {
|
||||
return rr;
|
||||
}
|
||||
@ -175,8 +174,7 @@ class Resolver {
|
||||
recursion, false);
|
||||
String[] ns = new String[rrs.answer.size()];
|
||||
for (int i = 0; i < ns.length; i++) {
|
||||
ResourceRecord rr = (ResourceRecord)
|
||||
rrs.answer.elementAt(i);
|
||||
ResourceRecord rr = rrs.answer.elementAt(i);
|
||||
if (rr.getType() != ResourceRecord.TYPE_NS) {
|
||||
throw new CommunicationException("Corrupted DNS message");
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2001, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -45,10 +45,10 @@ class ResourceRecords {
|
||||
// Four sections: question, answer, authority, additional.
|
||||
// The question section is treated as being made up of (shortened)
|
||||
// resource records, although this isn't technically how it's defined.
|
||||
Vector question = new Vector();
|
||||
Vector answer = new Vector();
|
||||
Vector authority = new Vector();
|
||||
Vector additional = new Vector();
|
||||
Vector<ResourceRecord> question = new Vector<>();
|
||||
Vector<ResourceRecord> answer = new Vector<>();
|
||||
Vector<ResourceRecord> authority = new Vector<>();
|
||||
Vector<ResourceRecord> additional = new Vector<>();
|
||||
|
||||
/*
|
||||
* True if these resource records are from a zone transfer. In
|
||||
@ -80,7 +80,7 @@ class ResourceRecords {
|
||||
if (answer.size() == 0) {
|
||||
return -1;
|
||||
}
|
||||
return ((ResourceRecord) answer.firstElement()).getType();
|
||||
return answer.firstElement().getType();
|
||||
}
|
||||
|
||||
/*
|
||||
@ -91,7 +91,7 @@ class ResourceRecords {
|
||||
if (answer.size() == 0) {
|
||||
return -1;
|
||||
}
|
||||
return ((ResourceRecord) answer.lastElement()).getType();
|
||||
return answer.lastElement().getType();
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -55,7 +55,7 @@ import java.util.Vector;
|
||||
|
||||
class ZoneNode extends NameNode {
|
||||
|
||||
private SoftReference contentsRef = null; // the zone's namespace
|
||||
private SoftReference<NameNode> contentsRef = null; // the zone's namespace
|
||||
private long serialNumber = -1; // the zone data's serial number
|
||||
private Date expiration = null; // time when the zone's data expires
|
||||
|
||||
@ -88,7 +88,7 @@ class ZoneNode extends NameNode {
|
||||
*/
|
||||
synchronized NameNode getContents() {
|
||||
return (contentsRef != null)
|
||||
? (NameNode) contentsRef.get()
|
||||
? contentsRef.get()
|
||||
: null;
|
||||
}
|
||||
|
||||
@ -130,7 +130,7 @@ class ZoneNode extends NameNode {
|
||||
NameNode newContents = new NameNode(null);
|
||||
|
||||
for (int i = 0; i < rrs.answer.size(); i++) {
|
||||
ResourceRecord rr = (ResourceRecord) rrs.answer.elementAt(i);
|
||||
ResourceRecord rr = rrs.answer.elementAt(i);
|
||||
DnsName n = rr.getName();
|
||||
|
||||
// Ignore resource records whose names aren't within the zone's
|
||||
@ -144,9 +144,9 @@ class ZoneNode extends NameNode {
|
||||
}
|
||||
}
|
||||
// The zone's SOA record is the first record in the answer section.
|
||||
ResourceRecord soa = (ResourceRecord) rrs.answer.firstElement();
|
||||
ResourceRecord soa = rrs.answer.firstElement();
|
||||
synchronized (this) {
|
||||
contentsRef = new SoftReference(newContents);
|
||||
contentsRef = new SoftReference<NameNode>(newContents);
|
||||
serialNumber = getSerialNumber(soa);
|
||||
setExpiration(getMinimumTtl(soa));
|
||||
return newContents;
|
||||
|
@ -0,0 +1,408 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 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
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
package com.sun.jndi.ldap;
|
||||
|
||||
import com.sun.jndi.toolkit.ctx.Continuation;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Vector;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.Attributes;
|
||||
import javax.naming.ldap.Control;
|
||||
|
||||
/**
|
||||
* Basic enumeration for NameClassPair, Binding, and SearchResults.
|
||||
*/
|
||||
|
||||
abstract class AbstractLdapNamingEnumeration<T extends NameClassPair>
|
||||
implements NamingEnumeration<T>, ReferralEnumeration<T> {
|
||||
|
||||
protected Name listArg;
|
||||
|
||||
private boolean cleaned = false;
|
||||
private LdapResult res;
|
||||
private LdapClient enumClnt;
|
||||
private Continuation cont; // used to fill in exceptions
|
||||
private Vector<LdapEntry> entries = null;
|
||||
private int limit = 0;
|
||||
private int posn = 0;
|
||||
protected LdapCtx homeCtx;
|
||||
private LdapReferralException refEx = null;
|
||||
private NamingException errEx = null;
|
||||
|
||||
/*
|
||||
* Record the next set of entries and/or referrals.
|
||||
*/
|
||||
AbstractLdapNamingEnumeration(LdapCtx homeCtx, LdapResult answer, Name listArg,
|
||||
Continuation cont) throws NamingException {
|
||||
|
||||
// These checks are to accommodate referrals and limit exceptions
|
||||
// which will generate an enumeration and defer the exception
|
||||
// to be thrown at the end of the enumeration.
|
||||
// All other exceptions are thrown immediately.
|
||||
// Exceptions shouldn't be thrown here anyhow because
|
||||
// process_return_code() is called before the constructor
|
||||
// is called, so these are just safety checks.
|
||||
|
||||
if ((answer.status != LdapClient.LDAP_SUCCESS) &&
|
||||
(answer.status != LdapClient.LDAP_SIZE_LIMIT_EXCEEDED) &&
|
||||
(answer.status != LdapClient.LDAP_TIME_LIMIT_EXCEEDED) &&
|
||||
(answer.status != LdapClient.LDAP_ADMIN_LIMIT_EXCEEDED) &&
|
||||
(answer.status != LdapClient.LDAP_REFERRAL) &&
|
||||
(answer.status != LdapClient.LDAP_PARTIAL_RESULTS)) {
|
||||
|
||||
// %%% need to deal with referral
|
||||
NamingException e = new NamingException(
|
||||
LdapClient.getErrorMessage(
|
||||
answer.status, answer.errorMessage));
|
||||
|
||||
throw cont.fillInException(e);
|
||||
}
|
||||
|
||||
// otherwise continue
|
||||
|
||||
res = answer;
|
||||
entries = answer.entries;
|
||||
limit = (entries == null) ? 0 : entries.size(); // handle empty set
|
||||
this.listArg = listArg;
|
||||
this.cont = cont;
|
||||
|
||||
if (answer.refEx != null) {
|
||||
refEx = answer.refEx;
|
||||
}
|
||||
|
||||
// Ensures that context won't get closed from underneath us
|
||||
this.homeCtx = homeCtx;
|
||||
homeCtx.incEnumCount();
|
||||
enumClnt = homeCtx.clnt; // remember
|
||||
}
|
||||
|
||||
@Override
|
||||
public final T nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) {
|
||||
// can't throw exception
|
||||
cleanup();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean hasMoreElements() {
|
||||
try {
|
||||
return hasMore();
|
||||
} catch (NamingException e) {
|
||||
// can't throw exception
|
||||
cleanup();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the next set of entries and/or referrals.
|
||||
*/
|
||||
private void getNextBatch() throws NamingException {
|
||||
|
||||
res = homeCtx.getSearchReply(enumClnt, res);
|
||||
if (res == null) {
|
||||
limit = posn = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
entries = res.entries;
|
||||
limit = (entries == null) ? 0 : entries.size(); // handle empty set
|
||||
posn = 0; // reset
|
||||
|
||||
// mimimize the number of calls to processReturnCode()
|
||||
// (expensive when batchSize is small and there are many results)
|
||||
if ((res.status != LdapClient.LDAP_SUCCESS) ||
|
||||
((res.status == LdapClient.LDAP_SUCCESS) &&
|
||||
(res.referrals != null))) {
|
||||
|
||||
try {
|
||||
// convert referrals into a chain of LdapReferralException
|
||||
homeCtx.processReturnCode(res, listArg);
|
||||
|
||||
} catch (LimitExceededException | PartialResultException e) {
|
||||
setNamingException(e);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// merge any newly received referrals with any current referrals
|
||||
if (res.refEx != null) {
|
||||
if (refEx == null) {
|
||||
refEx = res.refEx;
|
||||
} else {
|
||||
refEx = refEx.appendUnprocessedReferrals(res.refEx);
|
||||
}
|
||||
res.refEx = null; // reset
|
||||
}
|
||||
|
||||
if (res.resControls != null) {
|
||||
homeCtx.respCtls = res.resControls;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean more = true; // assume we have something to start with
|
||||
private boolean hasMoreCalled = false;
|
||||
|
||||
/*
|
||||
* Test if unprocessed entries or referrals exist.
|
||||
*/
|
||||
@Override
|
||||
public final boolean hasMore() throws NamingException {
|
||||
|
||||
if (hasMoreCalled) {
|
||||
return more;
|
||||
}
|
||||
|
||||
hasMoreCalled = true;
|
||||
|
||||
if (!more) {
|
||||
return false;
|
||||
} else {
|
||||
return (more = hasMoreImpl());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the next entry.
|
||||
*/
|
||||
@Override
|
||||
public final T next() throws NamingException {
|
||||
|
||||
if (!hasMoreCalled) {
|
||||
hasMore();
|
||||
}
|
||||
hasMoreCalled = false;
|
||||
return nextImpl();
|
||||
}
|
||||
|
||||
/*
|
||||
* Test if unprocessed entries or referrals exist.
|
||||
*/
|
||||
private boolean hasMoreImpl() throws NamingException {
|
||||
// when page size is supported, this
|
||||
// might generate an exception while attempting
|
||||
// to fetch the next batch to determine
|
||||
// whether there are any more elements
|
||||
|
||||
// test if the current set of entries has been processed
|
||||
if (posn == limit) {
|
||||
getNextBatch();
|
||||
}
|
||||
|
||||
// test if any unprocessed entries exist
|
||||
if (posn < limit) {
|
||||
return true;
|
||||
} else {
|
||||
|
||||
try {
|
||||
// try to process another referral
|
||||
return hasMoreReferrals();
|
||||
|
||||
} catch (LdapReferralException |
|
||||
LimitExceededException |
|
||||
PartialResultException e) {
|
||||
cleanup();
|
||||
throw e;
|
||||
|
||||
} catch (NamingException e) {
|
||||
cleanup();
|
||||
PartialResultException pre = new PartialResultException();
|
||||
pre.setRootCause(e);
|
||||
throw pre;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the next entry.
|
||||
*/
|
||||
private T nextImpl() throws NamingException {
|
||||
try {
|
||||
return nextAux();
|
||||
} catch (NamingException e) {
|
||||
cleanup();
|
||||
throw cont.fillInException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private T nextAux() throws NamingException {
|
||||
if (posn == limit) {
|
||||
getNextBatch(); // updates posn and limit
|
||||
}
|
||||
|
||||
if (posn >= limit) {
|
||||
cleanup();
|
||||
throw new NoSuchElementException("invalid enumeration handle");
|
||||
}
|
||||
|
||||
LdapEntry result = entries.elementAt(posn++);
|
||||
|
||||
// gets and outputs DN from the entry
|
||||
return createItem(result.DN, result.attributes, result.respCtls);
|
||||
}
|
||||
|
||||
protected final String getAtom(String dn) {
|
||||
// need to strip off all but lowest component of dn
|
||||
// so that is relative to current context (currentDN)
|
||||
try {
|
||||
Name parsed = new LdapName(dn);
|
||||
return parsed.get(parsed.size() - 1);
|
||||
} catch (NamingException e) {
|
||||
return dn;
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract T createItem(String dn, Attributes attrs,
|
||||
Vector<Control> respCtls) throws NamingException;
|
||||
|
||||
/*
|
||||
* Append the supplied (chain of) referrals onto the
|
||||
* end of the current (chain of) referrals.
|
||||
*/
|
||||
@Override
|
||||
public void appendUnprocessedReferrals(LdapReferralException ex) {
|
||||
if (refEx != null) {
|
||||
refEx = refEx.appendUnprocessedReferrals(ex);
|
||||
} else {
|
||||
refEx = ex.appendUnprocessedReferrals(refEx);
|
||||
}
|
||||
}
|
||||
|
||||
final void setNamingException(NamingException e) {
|
||||
errEx = e;
|
||||
}
|
||||
|
||||
protected abstract AbstractLdapNamingEnumeration<T> getReferredResults(
|
||||
LdapReferralContext refCtx) throws NamingException;
|
||||
|
||||
/*
|
||||
* Iterate through the URLs of a referral. If successful then perform
|
||||
* a search operation and merge the received results with the current
|
||||
* results.
|
||||
*/
|
||||
protected final boolean hasMoreReferrals() throws NamingException {
|
||||
|
||||
if ((refEx != null) &&
|
||||
(refEx.hasMoreReferrals() ||
|
||||
refEx.hasMoreReferralExceptions())) {
|
||||
|
||||
if (homeCtx.handleReferrals == LdapClient.LDAP_REF_THROW) {
|
||||
throw (NamingException)(refEx.fillInStackTrace());
|
||||
}
|
||||
|
||||
// process the referrals sequentially
|
||||
while (true) {
|
||||
|
||||
LdapReferralContext refCtx =
|
||||
(LdapReferralContext)refEx.getReferralContext(
|
||||
homeCtx.envprops, homeCtx.reqCtls);
|
||||
|
||||
try {
|
||||
|
||||
update(getReferredResults(refCtx));
|
||||
break;
|
||||
|
||||
} catch (LdapReferralException re) {
|
||||
|
||||
// record a previous exception
|
||||
if (errEx == null) {
|
||||
errEx = re.getNamingException();
|
||||
}
|
||||
refEx = re;
|
||||
continue;
|
||||
|
||||
} finally {
|
||||
// Make sure we close referral context
|
||||
refCtx.close();
|
||||
}
|
||||
}
|
||||
return hasMoreImpl();
|
||||
|
||||
} else {
|
||||
cleanup();
|
||||
|
||||
if (errEx != null) {
|
||||
throw errEx;
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Merge the entries and/or referrals from the supplied enumeration
|
||||
* with those of the current enumeration.
|
||||
*/
|
||||
protected void update(AbstractLdapNamingEnumeration<T> ne) {
|
||||
// Cleanup previous context first
|
||||
homeCtx.decEnumCount();
|
||||
|
||||
// New enum will have already incremented enum count and recorded clnt
|
||||
homeCtx = ne.homeCtx;
|
||||
enumClnt = ne.enumClnt;
|
||||
|
||||
// Do this to prevent referral enumeration (ne) from decrementing
|
||||
// enum count because we'll be doing that here from this
|
||||
// enumeration.
|
||||
ne.homeCtx = null;
|
||||
|
||||
// Record rest of information from new enum
|
||||
posn = ne.posn;
|
||||
limit = ne.limit;
|
||||
res = ne.res;
|
||||
entries = ne.entries;
|
||||
refEx = ne.refEx;
|
||||
listArg = ne.listArg;
|
||||
}
|
||||
|
||||
protected final void finalize() {
|
||||
cleanup();
|
||||
}
|
||||
|
||||
protected final void cleanup() {
|
||||
if (cleaned) return; // been there; done that
|
||||
|
||||
if(enumClnt != null) {
|
||||
enumClnt.clearSearchReply(res, homeCtx.reqCtls);
|
||||
}
|
||||
|
||||
enumClnt = null;
|
||||
cleaned = true;
|
||||
if (homeCtx != null) {
|
||||
homeCtx.decEnumCount();
|
||||
homeCtx = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void close() {
|
||||
cleanup();
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -94,12 +94,14 @@ public abstract class Ber {
|
||||
public static final int ASN_ENUMERATED = 0x0a;
|
||||
|
||||
final static class EncodeException extends IOException {
|
||||
private static final long serialVersionUID = -5247359637775781768L;
|
||||
EncodeException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
}
|
||||
|
||||
final static class DecodeException extends IOException {
|
||||
private static final long serialVersionUID = 8735036969244425583L;
|
||||
DecodeException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -74,7 +74,7 @@ class ClientId {
|
||||
this.hostname = hostname.toLowerCase(); // ignore case
|
||||
this.port = port;
|
||||
this.protocol = protocol;
|
||||
this.bindCtls = (bindCtls != null ? (Control[]) bindCtls.clone() : null);
|
||||
this.bindCtls = (bindCtls != null ? bindCtls.clone() : null);
|
||||
this.trace = trace;
|
||||
//
|
||||
// Needed for custom socket factory pooling
|
||||
@ -83,12 +83,12 @@ class ClientId {
|
||||
if ((socketFactory != null) &&
|
||||
!socketFactory.equals(LdapCtx.DEFAULT_SSL_FACTORY)) {
|
||||
try {
|
||||
Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
|
||||
Class objClass = Class.forName("java.lang.Object");
|
||||
Class<?> socketFactoryClass = Obj.helper.loadClass(socketFactory);
|
||||
Class<?> objClass = Class.forName("java.lang.Object");
|
||||
this.sockComparator = socketFactoryClass.getMethod(
|
||||
"compare", new Class[]{objClass, objClass});
|
||||
"compare", new Class<?>[]{objClass, objClass});
|
||||
Method getDefault =
|
||||
socketFactoryClass.getMethod("getDefault", new Class[]{});
|
||||
socketFactoryClass.getMethod("getDefault", new Class<?>[]{});
|
||||
this.factory = (SocketFactory) getDefault.invoke(null, new Object[]{});
|
||||
} catch (Exception e) {
|
||||
// Ignore it here, the same exceptions are/will be handled by
|
||||
|
@ -238,27 +238,22 @@ public final class Connection implements Runnable {
|
||||
throws NoSuchMethodException {
|
||||
|
||||
try {
|
||||
Class inetSocketAddressClass =
|
||||
Class<?> inetSocketAddressClass =
|
||||
Class.forName("java.net.InetSocketAddress");
|
||||
|
||||
Constructor inetSocketAddressCons =
|
||||
inetSocketAddressClass.getConstructor(new Class[]{
|
||||
Constructor<?> inetSocketAddressCons =
|
||||
inetSocketAddressClass.getConstructor(new Class<?>[]{
|
||||
String.class, int.class});
|
||||
|
||||
return inetSocketAddressCons.newInstance(new Object[]{
|
||||
host, new Integer(port)});
|
||||
|
||||
} catch (ClassNotFoundException e) {
|
||||
} catch (ClassNotFoundException |
|
||||
InstantiationException |
|
||||
InvocationTargetException |
|
||||
IllegalAccessException e) {
|
||||
throw new NoSuchMethodException();
|
||||
|
||||
} catch (InstantiationException e) {
|
||||
throw new NoSuchMethodException();
|
||||
|
||||
} catch (InvocationTargetException e) {
|
||||
throw new NoSuchMethodException();
|
||||
|
||||
} catch (IllegalAccessException e) {
|
||||
throw new NoSuchMethodException();
|
||||
}
|
||||
}
|
||||
|
||||
@ -280,9 +275,9 @@ public final class Connection implements Runnable {
|
||||
|
||||
// create the factory
|
||||
|
||||
Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
|
||||
Class<?> socketFactoryClass = Obj.helper.loadClass(socketFactory);
|
||||
Method getDefault =
|
||||
socketFactoryClass.getMethod("getDefault", new Class[]{});
|
||||
socketFactoryClass.getMethod("getDefault", new Class<?>[]{});
|
||||
Object factory = getDefault.invoke(null, new Object[]{});
|
||||
|
||||
// create the socket
|
||||
@ -293,10 +288,10 @@ public final class Connection implements Runnable {
|
||||
|
||||
try {
|
||||
createSocket = socketFactoryClass.getMethod("createSocket",
|
||||
new Class[]{});
|
||||
new Class<?>[]{});
|
||||
|
||||
Method connect = Socket.class.getMethod("connect",
|
||||
new Class[]{Class.forName("java.net.SocketAddress"),
|
||||
new Class<?>[]{Class.forName("java.net.SocketAddress"),
|
||||
int.class});
|
||||
Object endpoint = createInetSocketAddress(host, port);
|
||||
|
||||
@ -320,7 +315,7 @@ public final class Connection implements Runnable {
|
||||
|
||||
if (socket == null) {
|
||||
createSocket = socketFactoryClass.getMethod("createSocket",
|
||||
new Class[]{String.class, int.class});
|
||||
new Class<?>[]{String.class, int.class});
|
||||
|
||||
if (debug) {
|
||||
System.err.println("Connection: creating socket using " +
|
||||
@ -335,15 +330,15 @@ public final class Connection implements Runnable {
|
||||
if (connectTimeout > 0) {
|
||||
|
||||
try {
|
||||
Constructor socketCons =
|
||||
Socket.class.getConstructor(new Class[]{});
|
||||
Constructor<Socket> socketCons =
|
||||
Socket.class.getConstructor(new Class<?>[]{});
|
||||
|
||||
Method connect = Socket.class.getMethod("connect",
|
||||
new Class[]{Class.forName("java.net.SocketAddress"),
|
||||
new Class<?>[]{Class.forName("java.net.SocketAddress"),
|
||||
int.class});
|
||||
Object endpoint = createInetSocketAddress(host, port);
|
||||
|
||||
socket = (Socket) socketCons.newInstance(new Object[]{});
|
||||
socket = socketCons.newInstance(new Object[]{});
|
||||
|
||||
if (debug) {
|
||||
System.err.println("Connection: creating socket with " +
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -65,7 +65,7 @@ class DigestClientId extends SimpleClientId {
|
||||
DigestClientId(int version, String hostname, int port,
|
||||
String protocol, Control[] bindCtls, OutputStream trace,
|
||||
String socketFactory, String username,
|
||||
Object passwd, Hashtable env) {
|
||||
Object passwd, Hashtable<?,?> env) {
|
||||
|
||||
super(version, hostname, port, protocol, bindCtls, trace,
|
||||
socketFactory, username, passwd);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -25,7 +25,6 @@
|
||||
|
||||
package com.sun.jndi.ldap;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Vector;
|
||||
import java.util.EventObject;
|
||||
|
||||
@ -52,9 +51,9 @@ final class EventQueue implements Runnable {
|
||||
QueueElement next = null;
|
||||
QueueElement prev = null;
|
||||
EventObject event = null;
|
||||
Vector vector = null;
|
||||
Vector<NamingListener> vector = null;
|
||||
|
||||
QueueElement(EventObject event, Vector vector) {
|
||||
QueueElement(EventObject event, Vector<NamingListener> vector) {
|
||||
this.event = event;
|
||||
this.vector = vector;
|
||||
}
|
||||
@ -87,7 +86,7 @@ final class EventQueue implements Runnable {
|
||||
* are notified.
|
||||
* @param vector List of NamingListeners that will be notified of event.
|
||||
*/
|
||||
synchronized void enqueue(EventObject event, Vector vector) {
|
||||
synchronized void enqueue(EventObject event, Vector<NamingListener> vector) {
|
||||
QueueElement newElt = new QueueElement(event, vector);
|
||||
|
||||
if (head == null) {
|
||||
@ -133,7 +132,7 @@ final class EventQueue implements Runnable {
|
||||
try {
|
||||
while ((qe = dequeue()) != null) {
|
||||
EventObject e = qe.event;
|
||||
Vector v = qe.vector;
|
||||
Vector<NamingListener> v = qe.vector;
|
||||
|
||||
for (int i = 0; i < v.size(); i++) {
|
||||
|
||||
@ -145,12 +144,11 @@ final class EventQueue implements Runnable {
|
||||
// only enqueue events with listseners of the correct type.
|
||||
|
||||
if (e instanceof NamingEvent) {
|
||||
((NamingEvent)e).dispatch((NamingListener)v.elementAt(i));
|
||||
((NamingEvent)e).dispatch(v.elementAt(i));
|
||||
|
||||
// An exception occurred: if notify all naming listeners
|
||||
} else if (e instanceof NamingExceptionEvent) {
|
||||
((NamingExceptionEvent)e).dispatch(
|
||||
(NamingListener)v.elementAt(i));
|
||||
((NamingExceptionEvent)e).dispatch(v.elementAt(i));
|
||||
} else if (e instanceof UnsolicitedNotificationEvent) {
|
||||
((UnsolicitedNotificationEvent)e).dispatch(
|
||||
(UnsolicitedNotificationListener)v.elementAt(i));
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -27,11 +27,9 @@ package com.sun.jndi.ldap;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
import java.util.Enumeration;
|
||||
import java.util.EventObject;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
import javax.naming.event.*;
|
||||
import javax.naming.directory.SearchControls;
|
||||
import javax.naming.ldap.UnsolicitedNotificationListener;
|
||||
@ -120,12 +118,13 @@ final class EventSupport {
|
||||
/**
|
||||
* NamingEventNotifiers; hashed by search arguments;
|
||||
*/
|
||||
private Hashtable notifiers = new Hashtable(11);
|
||||
private Hashtable<NotifierArgs, NamingEventNotifier> notifiers =
|
||||
new Hashtable<>(11);
|
||||
|
||||
/**
|
||||
* List of unsolicited notification listeners.
|
||||
*/
|
||||
private Vector unsolicited = null;
|
||||
private Vector<UnsolicitedNotificationListener> unsolicited = null;
|
||||
|
||||
/**
|
||||
* Constructs EventSupport for ctx.
|
||||
@ -155,8 +154,7 @@ final class EventSupport {
|
||||
l instanceof NamespaceChangeListener) {
|
||||
NotifierArgs args = new NotifierArgs(nm, scope, l);
|
||||
|
||||
NamingEventNotifier notifier =
|
||||
(NamingEventNotifier) notifiers.get(args);
|
||||
NamingEventNotifier notifier = notifiers.get(args);
|
||||
if (notifier == null) {
|
||||
notifier = new NamingEventNotifier(this, ctx, args, l);
|
||||
notifiers.put(args, notifier);
|
||||
@ -167,10 +165,10 @@ final class EventSupport {
|
||||
if (l instanceof UnsolicitedNotificationListener) {
|
||||
// Add listener to this's list of unsolicited notifiers
|
||||
if (unsolicited == null) {
|
||||
unsolicited = new Vector(3);
|
||||
unsolicited = new Vector<>(3);
|
||||
}
|
||||
|
||||
unsolicited.addElement(l);
|
||||
unsolicited.addElement((UnsolicitedNotificationListener)l);
|
||||
}
|
||||
}
|
||||
|
||||
@ -185,8 +183,7 @@ final class EventSupport {
|
||||
l instanceof NamespaceChangeListener) {
|
||||
NotifierArgs args = new NotifierArgs(nm, filter, ctls, l);
|
||||
|
||||
NamingEventNotifier notifier =
|
||||
(NamingEventNotifier) notifiers.get(args);
|
||||
NamingEventNotifier notifier = notifiers.get(args);
|
||||
if (notifier == null) {
|
||||
notifier = new NamingEventNotifier(this, ctx, args, l);
|
||||
notifiers.put(args, notifier);
|
||||
@ -197,9 +194,9 @@ final class EventSupport {
|
||||
if (l instanceof UnsolicitedNotificationListener) {
|
||||
// Add listener to this's list of unsolicited notifiers
|
||||
if (unsolicited == null) {
|
||||
unsolicited = new Vector(3);
|
||||
unsolicited = new Vector<>(3);
|
||||
}
|
||||
unsolicited.addElement(l);
|
||||
unsolicited.addElement((UnsolicitedNotificationListener)l);
|
||||
}
|
||||
}
|
||||
|
||||
@ -207,15 +204,11 @@ final class EventSupport {
|
||||
* Removes <tt>l</tt> from all notifiers in this context.
|
||||
*/
|
||||
synchronized void removeNamingListener(NamingListener l) {
|
||||
Enumeration allnotifiers = notifiers.elements();
|
||||
NamingEventNotifier notifier;
|
||||
|
||||
if (debug) System.err.println("EventSupport removing listener");
|
||||
|
||||
// Go through list of notifiers, remove 'l' from each.
|
||||
// If 'l' is notifier's only listener, remove notifier too.
|
||||
while (allnotifiers.hasMoreElements()) {
|
||||
notifier = (NamingEventNotifier)allnotifiers.nextElement();
|
||||
for (NamingEventNotifier notifier : notifiers.values()) {
|
||||
if (notifier != null) {
|
||||
if (debug)
|
||||
System.err.println("EventSupport removing listener from notifier");
|
||||
@ -305,8 +298,8 @@ final class EventSupport {
|
||||
synchronized void cleanup() {
|
||||
if (debug) System.err.println("EventSupport clean up");
|
||||
if (notifiers != null) {
|
||||
for (Enumeration ns = notifiers.elements(); ns.hasMoreElements(); ) {
|
||||
((NamingEventNotifier) ns.nextElement()).stop();
|
||||
for (NamingEventNotifier notifier : notifiers.values()) {
|
||||
notifier.stop();
|
||||
}
|
||||
notifiers = null;
|
||||
}
|
||||
@ -328,7 +321,8 @@ final class EventSupport {
|
||||
* them to the registered listeners.
|
||||
* Package private; used by NamingEventNotifier to fire events
|
||||
*/
|
||||
synchronized void queueEvent(EventObject event, Vector vector) {
|
||||
synchronized void queueEvent(EventObject event,
|
||||
Vector<? extends NamingListener> vector) {
|
||||
if (eventQueue == null)
|
||||
eventQueue = new EventQueue();
|
||||
|
||||
@ -340,7 +334,9 @@ final class EventSupport {
|
||||
* of this event will not take effect until after the event is
|
||||
* delivered.
|
||||
*/
|
||||
Vector v = (Vector)vector.clone();
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
Vector<NamingListener> v =
|
||||
(Vector<NamingListener>)vector.clone();
|
||||
eventQueue.enqueue(event, v);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -26,8 +26,6 @@
|
||||
package com.sun.jndi.ldap;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
import javax.naming.*;
|
||||
@ -50,11 +48,12 @@ final class LdapAttribute extends BasicAttribute {
|
||||
// these two are used to reconstruct the baseCtx if this attribute has
|
||||
// been serialized (
|
||||
private String baseCtxURL;
|
||||
private Hashtable baseCtxEnv;
|
||||
private Hashtable<String, ? super String> baseCtxEnv;
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Object clone() {
|
||||
LdapAttribute attr = new LdapAttribute(this.attrID, baseCtx, rdn);
|
||||
attr.values = (Vector)values.clone();
|
||||
attr.values = (Vector<Object>)values.clone();
|
||||
return attr;
|
||||
}
|
||||
|
||||
@ -112,7 +111,7 @@ final class LdapAttribute extends BasicAttribute {
|
||||
private DirContext getBaseCtx() throws NamingException {
|
||||
if(baseCtx == null) {
|
||||
if (baseCtxEnv == null) {
|
||||
baseCtxEnv = new Hashtable(3);
|
||||
baseCtxEnv = new Hashtable<String, String>(3);
|
||||
}
|
||||
baseCtxEnv.put(Context.INITIAL_CONTEXT_FACTORY,
|
||||
"com.sun.jndi.ldap.LdapCtxFactory");
|
||||
@ -144,9 +143,10 @@ final class LdapAttribute extends BasicAttribute {
|
||||
* we are serialized. This must be called _before_ the object is
|
||||
* serialized!!!
|
||||
*/
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
private void setBaseCtxInfo() {
|
||||
Hashtable realEnv = null;
|
||||
Hashtable secureEnv = null;
|
||||
Hashtable<String, Object> realEnv = null;
|
||||
Hashtable<String, Object> secureEnv = null;
|
||||
|
||||
if (baseCtx != null) {
|
||||
realEnv = ((LdapCtx)baseCtx).envprops;
|
||||
@ -156,16 +156,14 @@ final class LdapAttribute extends BasicAttribute {
|
||||
if(realEnv != null && realEnv.size() > 0 ) {
|
||||
// remove any security credentials - otherwise the serialized form
|
||||
// would store them in the clear
|
||||
Enumeration keys = realEnv.keys();
|
||||
while(keys.hasMoreElements()) {
|
||||
String key = (String)keys.nextElement();
|
||||
for (String key : realEnv.keySet()){
|
||||
if (key.indexOf("security") != -1 ) {
|
||||
|
||||
//if we need to remove props, we must do it to a clone
|
||||
//of the environment. cloning is expensive, so we only do
|
||||
//it if we have to.
|
||||
if(secureEnv == null) {
|
||||
secureEnv = (Hashtable)realEnv.clone();
|
||||
secureEnv = (Hashtable<String, Object>)realEnv.clone();
|
||||
}
|
||||
secureEnv.remove(key);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -28,11 +28,13 @@ package com.sun.jndi.ldap;
|
||||
import java.util.Vector;
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
import javax.naming.ldap.Control;
|
||||
import javax.naming.spi.*;
|
||||
|
||||
import com.sun.jndi.toolkit.ctx.Continuation;
|
||||
|
||||
final class LdapBindingEnumeration extends LdapNamingEnumeration {
|
||||
final class LdapBindingEnumeration
|
||||
extends AbstractLdapNamingEnumeration<Binding> {
|
||||
|
||||
LdapBindingEnumeration(LdapCtx homeCtx, LdapResult answer, Name remain,
|
||||
Continuation cont) throws NamingException
|
||||
@ -40,8 +42,9 @@ final class LdapBindingEnumeration extends LdapNamingEnumeration {
|
||||
super(homeCtx, answer, remain, cont);
|
||||
}
|
||||
|
||||
protected NameClassPair
|
||||
createItem(String dn, Attributes attrs, Vector respCtls)
|
||||
@Override
|
||||
protected Binding
|
||||
createItem(String dn, Attributes attrs, Vector<Control> respCtls)
|
||||
throws NamingException {
|
||||
|
||||
Object obj = null;
|
||||
@ -85,9 +88,10 @@ final class LdapBindingEnumeration extends LdapNamingEnumeration {
|
||||
return binding;
|
||||
}
|
||||
|
||||
protected LdapNamingEnumeration
|
||||
getReferredResults(LdapReferralContext refCtx) throws NamingException{
|
||||
@Override
|
||||
protected LdapBindingEnumeration getReferredResults(
|
||||
LdapReferralContext refCtx) throws NamingException{
|
||||
// repeat the original operation at the new context
|
||||
return (LdapNamingEnumeration) refCtx.listBindings(listArg);
|
||||
return (LdapBindingEnumeration)refCtx.listBindings(listArg);
|
||||
}
|
||||
}
|
||||
|
@ -25,7 +25,6 @@
|
||||
|
||||
package com.sun.jndi.ldap;
|
||||
|
||||
import java.net.*;
|
||||
import java.io.*;
|
||||
import java.util.Vector;
|
||||
import java.util.Hashtable;
|
||||
@ -81,7 +80,8 @@ public final class LdapClient implements PooledConnection {
|
||||
static final boolean caseIgnore = true;
|
||||
|
||||
// Default list of binary attributes
|
||||
private static final Hashtable defaultBinaryAttrs = new Hashtable(23,0.75f);
|
||||
private static final Hashtable<String, Boolean> defaultBinaryAttrs =
|
||||
new Hashtable<>(23,0.75f);
|
||||
static {
|
||||
defaultBinaryAttrs.put("userpassword", Boolean.TRUE); //2.5.4.35
|
||||
defaultBinaryAttrs.put("javaserializeddata", Boolean.TRUE);
|
||||
@ -146,7 +146,7 @@ public final class LdapClient implements PooledConnection {
|
||||
|
||||
synchronized LdapResult
|
||||
authenticate(boolean initial, String name, Object pw, int version,
|
||||
String authMechanism, Control[] ctls, Hashtable env)
|
||||
String authMechanism, Control[] ctls, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
authenticateCalled = true;
|
||||
@ -516,8 +516,8 @@ public final class LdapClient implements PooledConnection {
|
||||
LdapResult search(String dn, int scope, int deref, int sizeLimit,
|
||||
int timeLimit, boolean attrsOnly, String attrs[],
|
||||
String filter, int batchSize, Control[] reqCtls,
|
||||
Hashtable binaryAttrs, boolean waitFirstReply,
|
||||
int replyQueueCapacity)
|
||||
Hashtable<String, Boolean> binaryAttrs,
|
||||
boolean waitFirstReply, int replyQueueCapacity)
|
||||
throws IOException, NamingException {
|
||||
|
||||
ensureOpen();
|
||||
@ -586,7 +586,7 @@ public final class LdapClient implements PooledConnection {
|
||||
* Retrieve the next batch of entries and/or referrals.
|
||||
*/
|
||||
LdapResult getSearchReply(int batchSize, LdapResult res,
|
||||
Hashtable binaryAttrs) throws IOException, NamingException {
|
||||
Hashtable<String, Boolean> binaryAttrs) throws IOException, NamingException {
|
||||
|
||||
ensureOpen();
|
||||
|
||||
@ -600,7 +600,7 @@ public final class LdapClient implements PooledConnection {
|
||||
}
|
||||
|
||||
private LdapResult getSearchReply(LdapRequest req,
|
||||
int batchSize, LdapResult res, Hashtable binaryAttrs)
|
||||
int batchSize, LdapResult res, Hashtable<String, Boolean> binaryAttrs)
|
||||
throws IOException, NamingException {
|
||||
|
||||
if (batchSize == 0)
|
||||
@ -610,7 +610,7 @@ public final class LdapClient implements PooledConnection {
|
||||
res.entries.setSize(0); // clear the (previous) set of entries
|
||||
} else {
|
||||
res.entries =
|
||||
new Vector(batchSize == Integer.MAX_VALUE ? 32 : batchSize);
|
||||
new Vector<>(batchSize == Integer.MAX_VALUE ? 32 : batchSize);
|
||||
}
|
||||
|
||||
if (res.referrals != null) {
|
||||
@ -660,7 +660,7 @@ public final class LdapClient implements PooledConnection {
|
||||
} else if ((seq == LDAP_REP_SEARCH_REF) && isLdapv3) {
|
||||
|
||||
// handle LDAPv3 search reference
|
||||
Vector URLs = new Vector(4);
|
||||
Vector<String> URLs = new Vector<>(4);
|
||||
|
||||
// %%% Although not strictly correct, some LDAP servers
|
||||
// encode the SEQUENCE OF tag in the SearchResultRef
|
||||
@ -676,7 +676,7 @@ public final class LdapClient implements PooledConnection {
|
||||
}
|
||||
|
||||
if (res.referrals == null) {
|
||||
res.referrals = new Vector(4);
|
||||
res.referrals = new Vector<>(4);
|
||||
}
|
||||
res.referrals.addElement(URLs);
|
||||
res.resControls = isLdapv3 ? parseControls(replyBer) : null;
|
||||
@ -700,7 +700,8 @@ public final class LdapClient implements PooledConnection {
|
||||
return res;
|
||||
}
|
||||
|
||||
private Attribute parseAttribute(BerDecoder ber, Hashtable binaryAttrs)
|
||||
private Attribute parseAttribute(BerDecoder ber,
|
||||
Hashtable<String, Boolean> binaryAttrs)
|
||||
throws IOException {
|
||||
|
||||
int len[] = new int[1];
|
||||
@ -742,7 +743,8 @@ public final class LdapClient implements PooledConnection {
|
||||
return len[0];
|
||||
}
|
||||
|
||||
private boolean isBinaryValued(String attrid, Hashtable binaryAttrs) {
|
||||
private boolean isBinaryValued(String attrid,
|
||||
Hashtable<String, Boolean> binaryAttrs) {
|
||||
String id = attrid.toLowerCase();
|
||||
|
||||
return ((id.indexOf(";binary") != -1) ||
|
||||
@ -763,7 +765,7 @@ public final class LdapClient implements PooledConnection {
|
||||
(replyBer.bytesLeft() > 0) &&
|
||||
(replyBer.peekByte() == LDAP_REP_REFERRAL)) {
|
||||
|
||||
Vector URLs = new Vector(4);
|
||||
Vector<String> URLs = new Vector<>(4);
|
||||
int[] seqlen = new int[1];
|
||||
|
||||
replyBer.parseSeq(seqlen);
|
||||
@ -775,18 +777,18 @@ public final class LdapClient implements PooledConnection {
|
||||
}
|
||||
|
||||
if (res.referrals == null) {
|
||||
res.referrals = new Vector(4);
|
||||
res.referrals = new Vector<>(4);
|
||||
}
|
||||
res.referrals.addElement(URLs);
|
||||
}
|
||||
}
|
||||
|
||||
// package entry point; used by Connection
|
||||
static Vector parseControls(BerDecoder replyBer) throws IOException {
|
||||
static Vector<Control> parseControls(BerDecoder replyBer) throws IOException {
|
||||
|
||||
// handle LDAPv3 controls (if present)
|
||||
if ((replyBer.bytesLeft() > 0) && (replyBer.peekByte() == LDAP_CONTROLS)) {
|
||||
Vector ctls = new Vector(4);
|
||||
Vector<Control> ctls = new Vector<>(4);
|
||||
String controlOID;
|
||||
boolean criticality = false; // default
|
||||
byte[] controlValue = null; // optional
|
||||
@ -957,7 +959,7 @@ public final class LdapClient implements PooledConnection {
|
||||
ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
|
||||
ber.encodeString(attr.getID(), isLdapv3);
|
||||
ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR | 1);
|
||||
NamingEnumeration enum_ = attr.getAll();
|
||||
NamingEnumeration<?> enum_ = attr.getAll();
|
||||
Object val;
|
||||
while (enum_.hasMore()) {
|
||||
val = enum_.next();
|
||||
@ -1007,9 +1009,10 @@ public final class LdapClient implements PooledConnection {
|
||||
ber.beginSeq(LDAP_REQ_ADD);
|
||||
ber.encodeString(entry.DN, isLdapv3);
|
||||
ber.beginSeq(Ber.ASN_SEQUENCE | Ber.ASN_CONSTRUCTOR);
|
||||
NamingEnumeration enum_ = entry.attributes.getAll();
|
||||
NamingEnumeration<? extends Attribute> enum_ =
|
||||
entry.attributes.getAll();
|
||||
while (enum_.hasMore()) {
|
||||
attr = (Attribute)enum_.next();
|
||||
attr = enum_.next();
|
||||
|
||||
// zero values is not permitted
|
||||
if (hasNoValue(attr)) {
|
||||
@ -1474,7 +1477,7 @@ public final class LdapClient implements PooledConnection {
|
||||
// removeUnsolicited() is invoked to remove an LdapCtx from this client.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
private Vector unsolicited = new Vector(3);
|
||||
private Vector<LdapCtx> unsolicited = new Vector<>(3);
|
||||
void addUnsolicited(LdapCtx ctx) {
|
||||
if (debug > 0) {
|
||||
System.err.println("LdapClient.addUnsolicited" + ctx);
|
||||
@ -1500,70 +1503,70 @@ public final class LdapClient implements PooledConnection {
|
||||
if (debug > 0) {
|
||||
System.err.println("LdapClient.processUnsolicited");
|
||||
}
|
||||
synchronized (unsolicited) {
|
||||
try {
|
||||
// Parse the response
|
||||
LdapResult res = new LdapResult();
|
||||
synchronized (unsolicited) {
|
||||
try {
|
||||
// Parse the response
|
||||
LdapResult res = new LdapResult();
|
||||
|
||||
ber.parseSeq(null); // init seq
|
||||
ber.parseInt(); // msg id; should be 0; ignored
|
||||
if (ber.parseByte() != LDAP_REP_EXTENSION) {
|
||||
throw new IOException(
|
||||
"Unsolicited Notification must be an Extended Response");
|
||||
}
|
||||
ber.parseLength();
|
||||
parseExtResponse(ber, res);
|
||||
|
||||
if (DISCONNECT_OID.equals(res.extensionId)) {
|
||||
// force closing of connection
|
||||
forceClose(pooled);
|
||||
}
|
||||
|
||||
if (unsolicited.size() > 0) {
|
||||
// Create an UnsolicitedNotification using the parsed data
|
||||
// Need a 'ctx' object because we want to use the context's
|
||||
// list of provider control factories.
|
||||
UnsolicitedNotification notice = new UnsolicitedResponseImpl(
|
||||
res.extensionId,
|
||||
res.extensionValue,
|
||||
res.referrals,
|
||||
res.status,
|
||||
res.errorMessage,
|
||||
res.matchedDN,
|
||||
(res.resControls != null) ?
|
||||
((LdapCtx)unsolicited.elementAt(0)).convertControls(res.resControls) :
|
||||
null);
|
||||
|
||||
// Fire UnsolicitedNotification events to listeners
|
||||
notifyUnsolicited(notice);
|
||||
|
||||
// If "disconnect" notification,
|
||||
// notify unsolicited listeners via NamingException
|
||||
if (DISCONNECT_OID.equals(res.extensionId)) {
|
||||
notifyUnsolicited(
|
||||
new CommunicationException("Connection closed"));
|
||||
ber.parseSeq(null); // init seq
|
||||
ber.parseInt(); // msg id; should be 0; ignored
|
||||
if (ber.parseByte() != LDAP_REP_EXTENSION) {
|
||||
throw new IOException(
|
||||
"Unsolicited Notification must be an Extended Response");
|
||||
}
|
||||
ber.parseLength();
|
||||
parseExtResponse(ber, res);
|
||||
|
||||
if (DISCONNECT_OID.equals(res.extensionId)) {
|
||||
// force closing of connection
|
||||
forceClose(pooled);
|
||||
}
|
||||
|
||||
if (unsolicited.size() > 0) {
|
||||
// Create an UnsolicitedNotification using the parsed data
|
||||
// Need a 'ctx' object because we want to use the context's
|
||||
// list of provider control factories.
|
||||
UnsolicitedNotification notice = new UnsolicitedResponseImpl(
|
||||
res.extensionId,
|
||||
res.extensionValue,
|
||||
res.referrals,
|
||||
res.status,
|
||||
res.errorMessage,
|
||||
res.matchedDN,
|
||||
(res.resControls != null) ?
|
||||
unsolicited.elementAt(0).convertControls(res.resControls) :
|
||||
null);
|
||||
|
||||
// Fire UnsolicitedNotification events to listeners
|
||||
notifyUnsolicited(notice);
|
||||
|
||||
// If "disconnect" notification,
|
||||
// notify unsolicited listeners via NamingException
|
||||
if (DISCONNECT_OID.equals(res.extensionId)) {
|
||||
notifyUnsolicited(
|
||||
new CommunicationException("Connection closed"));
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
if (unsolicited.size() == 0)
|
||||
return; // no one registered; ignore
|
||||
|
||||
NamingException ne = new CommunicationException(
|
||||
"Problem parsing unsolicited notification");
|
||||
ne.setRootCause(e);
|
||||
|
||||
notifyUnsolicited(ne);
|
||||
|
||||
} catch (NamingException e) {
|
||||
notifyUnsolicited(e);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
if (unsolicited.size() == 0)
|
||||
return; // no one registered; ignore
|
||||
|
||||
NamingException ne = new CommunicationException(
|
||||
"Problem parsing unsolicited notification");
|
||||
ne.setRootCause(e);
|
||||
|
||||
notifyUnsolicited(ne);
|
||||
|
||||
} catch (NamingException e) {
|
||||
notifyUnsolicited(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void notifyUnsolicited(Object e) {
|
||||
for (int i = 0; i < unsolicited.size(); i++) {
|
||||
((LdapCtx)unsolicited.elementAt(i)).fireUnsolicited(e);
|
||||
unsolicited.elementAt(i).fireUnsolicited(e);
|
||||
}
|
||||
if (e instanceof NamingException) {
|
||||
unsolicited.setSize(0); // no more listeners after exception
|
||||
@ -1584,7 +1587,7 @@ public final class LdapClient implements PooledConnection {
|
||||
static LdapClient getInstance(boolean usePool, String hostname, int port,
|
||||
String factory, int connectTimeout, int readTimeout, OutputStream trace,
|
||||
int version, String authMechanism, Control[] ctls, String protocol,
|
||||
String user, Object passwd, Hashtable env) throws NamingException {
|
||||
String user, Object passwd, Hashtable<?,?> env) throws NamingException {
|
||||
|
||||
if (usePool) {
|
||||
if (LdapPoolManager.isPoolingAllowed(factory, trace,
|
||||
|
@ -223,7 +223,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
String hostname = null; // host name of server (no brackets
|
||||
// for IPv6 literals)
|
||||
LdapClient clnt = null; // connection handle
|
||||
Hashtable envprops = null; // environment properties of context
|
||||
Hashtable<String, java.lang.Object> envprops = null; // environment properties of context
|
||||
int handleReferrals = DEFAULT_REFERRAL_MODE; // how referral is handled
|
||||
boolean hasLdapsScheme = false; // true if the context was created
|
||||
// using an LDAPS URL.
|
||||
@ -232,7 +232,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
|
||||
String currentDN; // DN of this context
|
||||
Name currentParsedDN; // DN of this context
|
||||
Vector respCtls = null; // Response controls read
|
||||
Vector<Control> respCtls = null; // Response controls read
|
||||
Control[] reqCtls = null; // Controls to be sent with each request
|
||||
|
||||
|
||||
@ -244,14 +244,14 @@ final public class LdapCtx extends ComponentDirContext
|
||||
private boolean netscapeSchemaBug = false; // workaround
|
||||
private Control[] bindCtls = null; // Controls to be sent with LDAP "bind"
|
||||
private int referralHopLimit = DEFAULT_REFERRAL_LIMIT; // max referral
|
||||
private Hashtable schemaTrees = null; // schema root of this context
|
||||
private Hashtable<String, DirContext> schemaTrees = null; // schema root of this context
|
||||
private int batchSize = DEFAULT_BATCH_SIZE; // batch size for search results
|
||||
private boolean deleteRDN = DEFAULT_DELETE_RDN; // delete the old RDN when modifying DN
|
||||
private boolean typesOnly = DEFAULT_TYPES_ONLY; // return attribute types (no values)
|
||||
private int derefAliases = DEFAULT_DEREF_ALIASES;// de-reference alias entries during searching
|
||||
private char addrEncodingSeparator = DEFAULT_REF_SEPARATOR; // encoding RefAddr
|
||||
|
||||
private Hashtable binaryAttrs = null; // attr values returned as byte[]
|
||||
private Hashtable<String, Boolean> binaryAttrs = null; // attr values returned as byte[]
|
||||
private int connectTimeout = -1; // no timeout value
|
||||
private int readTimeout = -1; // no timeout value
|
||||
private boolean waitForReply = true; // wait for search response
|
||||
@ -272,13 +272,15 @@ final public class LdapCtx extends ComponentDirContext
|
||||
|
||||
// -------------- Constructors -----------------------------------
|
||||
|
||||
public LdapCtx(String dn, String host, int port_number, Hashtable props,
|
||||
@SuppressWarnings("unchecked")
|
||||
public LdapCtx(String dn, String host, int port_number,
|
||||
Hashtable<?,?> props,
|
||||
boolean useSsl) throws NamingException {
|
||||
|
||||
this.useSsl = this.hasLdapsScheme = useSsl;
|
||||
|
||||
if (props != null) {
|
||||
envprops = (Hashtable) props.clone();
|
||||
envprops = (Hashtable<String, java.lang.Object>) props.clone();
|
||||
|
||||
// SSL env prop overrides the useSsl argument
|
||||
if ("ssl".equals(envprops.get(Context.SECURITY_PROTOCOL))) {
|
||||
@ -310,7 +312,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
this.useDefaultPortNumber = true;
|
||||
}
|
||||
|
||||
schemaTrees = new Hashtable(11, 0.75f);
|
||||
schemaTrees = new Hashtable<>(11, 0.75f);
|
||||
initEnv();
|
||||
try {
|
||||
connect(false);
|
||||
@ -557,9 +559,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
if (answer.resControls != null) {
|
||||
respCtls = appendVector(respCtls, answer.resControls);
|
||||
}
|
||||
} catch (NamingException ae) {
|
||||
addEx = ae;
|
||||
} catch (IOException ae) {
|
||||
} catch (NamingException | IOException ae) {
|
||||
addEx = ae;
|
||||
}
|
||||
|
||||
@ -918,19 +918,17 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
|
||||
// Parse string name into list of RDNs
|
||||
//List<Rdn> rdnList = (new LdapName(dn)).rdns();
|
||||
List rdnList = (new LdapName(dn)).getRdns();
|
||||
List<Rdn> rdnList = (new LdapName(dn)).getRdns();
|
||||
|
||||
// Get leaf RDN
|
||||
//Rdn rdn = rdnList.get(rdnList.size() - 1);
|
||||
Rdn rdn = (Rdn) rdnList.get(rdnList.size() - 1);
|
||||
Rdn rdn = rdnList.get(rdnList.size() - 1);
|
||||
Attributes nameAttrs = rdn.toAttributes();
|
||||
|
||||
// Add attributes of RDN to attrs if not already there
|
||||
NamingEnumeration enum_ = nameAttrs.getAll();
|
||||
NamingEnumeration<? extends Attribute> enum_ = nameAttrs.getAll();
|
||||
Attribute nameAttr;
|
||||
while (enum_.hasMore()) {
|
||||
nameAttr = (Attribute) enum_.next();
|
||||
nameAttr = enum_.next();
|
||||
|
||||
// If attrs already has the attribute, don't change or add to it
|
||||
if (attrs.get(nameAttr.getID()) == null) {
|
||||
@ -961,12 +959,12 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
|
||||
|
||||
private static boolean containsIgnoreCase(NamingEnumeration enumStr,
|
||||
private static boolean containsIgnoreCase(NamingEnumeration<String> enumStr,
|
||||
String str) throws NamingException {
|
||||
String strEntry;
|
||||
|
||||
while (enumStr.hasMore()) {
|
||||
strEntry = (String) enumStr.next();
|
||||
strEntry = enumStr.next();
|
||||
if (strEntry.equalsIgnoreCase(str)) {
|
||||
return true;
|
||||
}
|
||||
@ -993,7 +991,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
* Append the the second Vector onto the first Vector
|
||||
* (v2 must be non-null)
|
||||
*/
|
||||
private static Vector appendVector(Vector v1, Vector v2) {
|
||||
private static <T> Vector<T> appendVector(Vector<T> v1, Vector<T> v2) {
|
||||
if (v1 == null) {
|
||||
v1 = v2;
|
||||
} else {
|
||||
@ -1038,10 +1036,10 @@ final public class LdapCtx extends ComponentDirContext
|
||||
// found it but got no attributes
|
||||
attrs = new BasicAttributes(LdapClient.caseIgnore);
|
||||
} else {
|
||||
LdapEntry entry = (LdapEntry)answer.entries.elementAt(0);
|
||||
LdapEntry entry = answer.entries.elementAt(0);
|
||||
attrs = entry.attributes;
|
||||
|
||||
Vector entryCtls = entry.respCtls; // retrieve entry controls
|
||||
Vector<Control> entryCtls = entry.respCtls; // retrieve entry controls
|
||||
if (entryCtls != null) {
|
||||
appendVector(respCtls, entryCtls); // concatenate controls
|
||||
}
|
||||
@ -1097,7 +1095,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_list(Name name, Continuation cont)
|
||||
protected NamingEnumeration<NameClassPair> c_list(Name name, Continuation cont)
|
||||
throws NamingException {
|
||||
SearchControls cons = new SearchControls();
|
||||
String[] classAttrs = new String[2];
|
||||
@ -1170,7 +1168,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_listBindings(Name name, Continuation cont)
|
||||
protected NamingEnumeration<Binding> c_listBindings(Name name, Continuation cont)
|
||||
throws NamingException {
|
||||
|
||||
SearchControls cons = new SearchControls();
|
||||
@ -1198,7 +1196,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
|
||||
// process the referrals sequentially
|
||||
while (true) {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
LdapReferralContext refCtx =
|
||||
(LdapReferralContext)e.getReferralContext(envprops, bindCtls);
|
||||
|
||||
@ -1220,16 +1218,14 @@ final public class LdapCtx extends ComponentDirContext
|
||||
LdapBindingEnumeration res =
|
||||
new LdapBindingEnumeration(this, answer, name, cont);
|
||||
|
||||
res.setNamingException(
|
||||
(LimitExceededException)cont.fillInException(e));
|
||||
res.setNamingException(cont.fillInException(e));
|
||||
return res;
|
||||
|
||||
} catch (PartialResultException e) {
|
||||
LdapBindingEnumeration res =
|
||||
new LdapBindingEnumeration(this, answer, name, cont);
|
||||
|
||||
res.setNamingException(
|
||||
(PartialResultException)cont.fillInException(e));
|
||||
res.setNamingException(cont.fillInException(e));
|
||||
return res;
|
||||
|
||||
} catch (NamingException e) {
|
||||
@ -1337,9 +1333,9 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
|
||||
// get attributes from result
|
||||
LdapEntry entry = (LdapEntry) answer.entries.elementAt(0);
|
||||
LdapEntry entry = answer.entries.elementAt(0);
|
||||
|
||||
Vector entryCtls = entry.respCtls; // retrieve entry controls
|
||||
Vector<Control> entryCtls = entry.respCtls; // retrieve entry controls
|
||||
if (entryCtls != null) {
|
||||
appendVector(respCtls, entryCtls); // concatenate controls
|
||||
}
|
||||
@ -1398,10 +1394,10 @@ final public class LdapCtx extends ComponentDirContext
|
||||
int[] jmods = new int[attrs.size()];
|
||||
Attribute[] jattrs = new Attribute[attrs.size()];
|
||||
|
||||
NamingEnumeration ae = attrs.getAll();
|
||||
NamingEnumeration<? extends Attribute> ae = attrs.getAll();
|
||||
for(int i = 0; i < jmods.length && ae.hasMore(); i++) {
|
||||
jmods[i] = jmod_op;
|
||||
jattrs[i] = (Attribute)ae.next();
|
||||
jattrs[i] = ae.next();
|
||||
}
|
||||
|
||||
LdapResult answer = clnt.modify(newDN, jmods, jattrs, reqCtls);
|
||||
@ -1565,7 +1561,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
HierMemDirCtx objectClassCtx = new HierMemDirCtx();
|
||||
DirContext objectClassDef;
|
||||
String objectClassName;
|
||||
for (Enumeration objectClasses = objectClassAttr.getAll();
|
||||
for (Enumeration<?> objectClasses = objectClassAttr.getAll();
|
||||
objectClasses.hasMoreElements(); ) {
|
||||
objectClassName = (String)objectClasses.nextElement();
|
||||
// %%% Should we fail if not found, or just continue?
|
||||
@ -1591,7 +1587,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
private DirContext getSchemaTree(Name name) throws NamingException {
|
||||
String subschemasubentry = getSchemaEntry(name, true);
|
||||
|
||||
DirContext schemaTree = (DirContext)schemaTrees.get(subschemasubentry);
|
||||
DirContext schemaTree = schemaTrees.get(subschemasubentry);
|
||||
|
||||
if(schemaTree==null) {
|
||||
if(debug){System.err.println("LdapCtx: building new schema tree " + this);}
|
||||
@ -1621,7 +1617,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
false /*deref link */ );
|
||||
|
||||
Name sse = (new CompositeName()).add(subschemasubentry);
|
||||
NamingEnumeration results =
|
||||
NamingEnumeration<SearchResult> results =
|
||||
searchAux(sse, "(objectClass=subschema)", constraints,
|
||||
false, true, new Continuation());
|
||||
|
||||
@ -1629,7 +1625,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
throw new OperationNotSupportedException(
|
||||
"Cannot get read subschemasubentry: " + subschemasubentry);
|
||||
}
|
||||
SearchResult result = (SearchResult)results.next();
|
||||
SearchResult result = results.next();
|
||||
results.close();
|
||||
|
||||
Object obj = result.getObject();
|
||||
@ -1674,7 +1670,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
false /* returning obj */,
|
||||
false /* deref link */);
|
||||
|
||||
NamingEnumeration results;
|
||||
NamingEnumeration<SearchResult> results;
|
||||
try {
|
||||
results = searchAux(name, "objectclass=*", constraints, relative,
|
||||
true, new Continuation());
|
||||
@ -1695,7 +1691,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
"Requesting schema of nonexistent entry: " + name);
|
||||
}
|
||||
|
||||
SearchResult result = (SearchResult) results.next();
|
||||
SearchResult result = results.next();
|
||||
results.close();
|
||||
|
||||
Attribute schemaEntryAttr =
|
||||
@ -1720,7 +1716,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
// Set attributes to point to this context in case some one
|
||||
// asked for their schema
|
||||
void setParents(Attributes attrs, Name name) throws NamingException {
|
||||
NamingEnumeration ae = attrs.getAll();
|
||||
NamingEnumeration<? extends Attribute> ae = attrs.getAll();
|
||||
while(ae.hasMore()) {
|
||||
((LdapAttribute) ae.next()).setParent(this, name);
|
||||
}
|
||||
@ -1740,14 +1736,14 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
|
||||
// --------------------- Searches -----------------------------
|
||||
protected NamingEnumeration c_search(Name name,
|
||||
protected NamingEnumeration<SearchResult> c_search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
return c_search(name, matchingAttributes, null, cont);
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search(Name name,
|
||||
protected NamingEnumeration<SearchResult> c_search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
@ -1764,7 +1760,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
return c_search(name, filter, cons, cont);
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search(Name name,
|
||||
protected NamingEnumeration<SearchResult> c_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
@ -1773,7 +1769,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
waitForReply, cont);
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search(Name name,
|
||||
protected NamingEnumeration<SearchResult> c_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
@ -1790,7 +1786,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
|
||||
// Used by NamingNotifier
|
||||
NamingEnumeration searchAux(Name name,
|
||||
NamingEnumeration<SearchResult> searchAux(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
boolean relative,
|
||||
@ -1849,7 +1845,8 @@ final public class LdapCtx extends ComponentDirContext
|
||||
processReturnCode(answer, name);
|
||||
}
|
||||
return new LdapSearchEnumeration(this, answer,
|
||||
fullyQualifiedName(name), args, cont);
|
||||
fullyQualifiedName(name),
|
||||
args, cont);
|
||||
|
||||
} catch (LdapReferralException e) {
|
||||
if (handleReferrals == LdapClient.LDAP_REF_THROW)
|
||||
@ -1858,8 +1855,9 @@ final public class LdapCtx extends ComponentDirContext
|
||||
// process the referrals sequentially
|
||||
while (true) {
|
||||
|
||||
LdapReferralContext refCtx =
|
||||
(LdapReferralContext)e.getReferralContext(envprops, bindCtls);
|
||||
@SuppressWarnings("unchecked")
|
||||
LdapReferralContext refCtx = (LdapReferralContext)
|
||||
e.getReferralContext(envprops, bindCtls);
|
||||
|
||||
// repeat the original operation at the new context
|
||||
try {
|
||||
@ -2143,16 +2141,18 @@ final public class LdapCtx extends ComponentDirContext
|
||||
/**
|
||||
* Override with noncloning version.
|
||||
*/
|
||||
protected Hashtable p_getEnvironment() {
|
||||
protected Hashtable<String, Object> p_getEnvironment() {
|
||||
return envprops;
|
||||
}
|
||||
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Hashtable<String, Object> getEnvironment() throws NamingException {
|
||||
return (envprops == null
|
||||
? new Hashtable(5, 0.75f)
|
||||
: (Hashtable)envprops.clone());
|
||||
? new Hashtable<String, Object>(5, 0.75f)
|
||||
: (Hashtable<String, Object>)envprops.clone());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Object removeFromEnvironment(String propName)
|
||||
throws NamingException {
|
||||
|
||||
@ -2160,58 +2160,74 @@ final public class LdapCtx extends ComponentDirContext
|
||||
if (envprops == null || envprops.get(propName) == null) {
|
||||
return null;
|
||||
}
|
||||
switch (propName) {
|
||||
case REF_SEPARATOR:
|
||||
addrEncodingSeparator = DEFAULT_REF_SEPARATOR;
|
||||
break;
|
||||
case TYPES_ONLY:
|
||||
typesOnly = DEFAULT_TYPES_ONLY;
|
||||
break;
|
||||
case DELETE_RDN:
|
||||
deleteRDN = DEFAULT_DELETE_RDN;
|
||||
break;
|
||||
case DEREF_ALIASES:
|
||||
derefAliases = DEFAULT_DEREF_ALIASES;
|
||||
break;
|
||||
case Context.BATCHSIZE:
|
||||
batchSize = DEFAULT_BATCH_SIZE;
|
||||
break;
|
||||
case REFERRAL_LIMIT:
|
||||
referralHopLimit = DEFAULT_REFERRAL_LIMIT;
|
||||
break;
|
||||
case Context.REFERRAL:
|
||||
setReferralMode(null, true);
|
||||
break;
|
||||
case BINARY_ATTRIBUTES:
|
||||
setBinaryAttributes(null);
|
||||
break;
|
||||
case CONNECT_TIMEOUT:
|
||||
connectTimeout = -1;
|
||||
break;
|
||||
case READ_TIMEOUT:
|
||||
readTimeout = -1;
|
||||
break;
|
||||
case WAIT_FOR_REPLY:
|
||||
waitForReply = true;
|
||||
break;
|
||||
case REPLY_QUEUE_SIZE:
|
||||
replyQueueSize = -1;
|
||||
break;
|
||||
|
||||
if (propName.equals(REF_SEPARATOR)) {
|
||||
addrEncodingSeparator = DEFAULT_REF_SEPARATOR;
|
||||
} else if (propName.equals(TYPES_ONLY)) {
|
||||
typesOnly = DEFAULT_TYPES_ONLY;
|
||||
} else if (propName.equals(DELETE_RDN)) {
|
||||
deleteRDN = DEFAULT_DELETE_RDN;
|
||||
} else if (propName.equals(DEREF_ALIASES)) {
|
||||
derefAliases = DEFAULT_DEREF_ALIASES;
|
||||
} else if (propName.equals(Context.BATCHSIZE)) {
|
||||
batchSize = DEFAULT_BATCH_SIZE;
|
||||
} else if (propName.equals(REFERRAL_LIMIT)) {
|
||||
referralHopLimit = DEFAULT_REFERRAL_LIMIT;
|
||||
} else if (propName.equals(Context.REFERRAL)) {
|
||||
setReferralMode(null, true);
|
||||
} else if (propName.equals(BINARY_ATTRIBUTES)) {
|
||||
setBinaryAttributes(null);
|
||||
} else if (propName.equals(CONNECT_TIMEOUT)) {
|
||||
connectTimeout = -1;
|
||||
} else if (propName.equals(READ_TIMEOUT)) {
|
||||
readTimeout = -1;
|
||||
} else if (propName.equals(WAIT_FOR_REPLY)) {
|
||||
waitForReply = true;
|
||||
} else if (propName.equals(REPLY_QUEUE_SIZE)) {
|
||||
replyQueueSize = -1;
|
||||
// The following properties affect the connection
|
||||
|
||||
// The following properties affect the connection
|
||||
|
||||
} else if (propName.equals(Context.SECURITY_PROTOCOL)) {
|
||||
closeConnection(SOFT_CLOSE);
|
||||
// De-activate SSL and reset the context's url and port number
|
||||
if (useSsl && !hasLdapsScheme) {
|
||||
useSsl = false;
|
||||
url = null;
|
||||
if (useDefaultPortNumber) {
|
||||
port_number = DEFAULT_PORT;
|
||||
case Context.SECURITY_PROTOCOL:
|
||||
closeConnection(SOFT_CLOSE);
|
||||
// De-activate SSL and reset the context's url and port number
|
||||
if (useSsl && !hasLdapsScheme) {
|
||||
useSsl = false;
|
||||
url = null;
|
||||
if (useDefaultPortNumber) {
|
||||
port_number = DEFAULT_PORT;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (propName.equals(VERSION) ||
|
||||
propName.equals(SOCKET_FACTORY)) {
|
||||
closeConnection(SOFT_CLOSE);
|
||||
} else if(propName.equals(Context.SECURITY_AUTHENTICATION) ||
|
||||
propName.equals(Context.SECURITY_PRINCIPAL) ||
|
||||
propName.equals(Context.SECURITY_CREDENTIALS)) {
|
||||
sharable = false;
|
||||
break;
|
||||
case VERSION:
|
||||
case SOCKET_FACTORY:
|
||||
closeConnection(SOFT_CLOSE);
|
||||
break;
|
||||
case Context.SECURITY_AUTHENTICATION:
|
||||
case Context.SECURITY_PRINCIPAL:
|
||||
case Context.SECURITY_CREDENTIALS:
|
||||
sharable = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// Update environment; reconnection will use new props
|
||||
envprops = (Hashtable)envprops.clone();
|
||||
envprops = (Hashtable<String, Object>)envprops.clone();
|
||||
return envprops.remove(propName);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Object addToEnvironment(String propName, Object propVal)
|
||||
throws NamingException {
|
||||
|
||||
@ -2219,57 +2235,72 @@ final public class LdapCtx extends ComponentDirContext
|
||||
if (propVal == null) {
|
||||
return removeFromEnvironment(propName);
|
||||
}
|
||||
switch (propName) {
|
||||
case REF_SEPARATOR:
|
||||
setRefSeparator((String)propVal);
|
||||
break;
|
||||
case TYPES_ONLY:
|
||||
setTypesOnly((String)propVal);
|
||||
break;
|
||||
case DELETE_RDN:
|
||||
setDeleteRDN((String)propVal);
|
||||
break;
|
||||
case DEREF_ALIASES:
|
||||
setDerefAliases((String)propVal);
|
||||
break;
|
||||
case Context.BATCHSIZE:
|
||||
setBatchSize((String)propVal);
|
||||
break;
|
||||
case REFERRAL_LIMIT:
|
||||
setReferralLimit((String)propVal);
|
||||
break;
|
||||
case Context.REFERRAL:
|
||||
setReferralMode((String)propVal, true);
|
||||
break;
|
||||
case BINARY_ATTRIBUTES:
|
||||
setBinaryAttributes((String)propVal);
|
||||
break;
|
||||
case CONNECT_TIMEOUT:
|
||||
setConnectTimeout((String)propVal);
|
||||
break;
|
||||
case READ_TIMEOUT:
|
||||
setReadTimeout((String)propVal);
|
||||
break;
|
||||
case WAIT_FOR_REPLY:
|
||||
setWaitForReply((String)propVal);
|
||||
break;
|
||||
case REPLY_QUEUE_SIZE:
|
||||
setReplyQueueSize((String)propVal);
|
||||
break;
|
||||
|
||||
if (propName.equals(REF_SEPARATOR)) {
|
||||
setRefSeparator((String)propVal);
|
||||
} else if (propName.equals(TYPES_ONLY)) {
|
||||
setTypesOnly((String)propVal);
|
||||
} else if (propName.equals(DELETE_RDN)) {
|
||||
setDeleteRDN((String)propVal);
|
||||
} else if (propName.equals(DEREF_ALIASES)) {
|
||||
setDerefAliases((String)propVal);
|
||||
} else if (propName.equals(Context.BATCHSIZE)) {
|
||||
setBatchSize((String)propVal);
|
||||
} else if (propName.equals(REFERRAL_LIMIT)) {
|
||||
setReferralLimit((String)propVal);
|
||||
} else if (propName.equals(Context.REFERRAL)) {
|
||||
setReferralMode((String)propVal, true);
|
||||
} else if (propName.equals(BINARY_ATTRIBUTES)) {
|
||||
setBinaryAttributes((String)propVal);
|
||||
} else if (propName.equals(CONNECT_TIMEOUT)) {
|
||||
setConnectTimeout((String)propVal);
|
||||
} else if (propName.equals(READ_TIMEOUT)) {
|
||||
setReadTimeout((String)propVal);
|
||||
} else if (propName.equals(WAIT_FOR_REPLY)) {
|
||||
setWaitForReply((String)propVal);
|
||||
} else if (propName.equals(REPLY_QUEUE_SIZE)) {
|
||||
setReplyQueueSize((String)propVal);
|
||||
// The following properties affect the connection
|
||||
|
||||
// The following properties affect the connection
|
||||
|
||||
} else if (propName.equals(Context.SECURITY_PROTOCOL)) {
|
||||
closeConnection(SOFT_CLOSE);
|
||||
// Activate SSL and reset the context's url and port number
|
||||
if ("ssl".equals(propVal)) {
|
||||
useSsl = true;
|
||||
url = null;
|
||||
if (useDefaultPortNumber) {
|
||||
port_number = DEFAULT_SSL_PORT;
|
||||
case Context.SECURITY_PROTOCOL:
|
||||
closeConnection(SOFT_CLOSE);
|
||||
// Activate SSL and reset the context's url and port number
|
||||
if ("ssl".equals(propVal)) {
|
||||
useSsl = true;
|
||||
url = null;
|
||||
if (useDefaultPortNumber) {
|
||||
port_number = DEFAULT_SSL_PORT;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (propName.equals(VERSION) ||
|
||||
propName.equals(SOCKET_FACTORY)) {
|
||||
closeConnection(SOFT_CLOSE);
|
||||
} else if (propName.equals(Context.SECURITY_AUTHENTICATION) ||
|
||||
propName.equals(Context.SECURITY_PRINCIPAL) ||
|
||||
propName.equals(Context.SECURITY_CREDENTIALS)) {
|
||||
sharable = false;
|
||||
break;
|
||||
case VERSION:
|
||||
case SOCKET_FACTORY:
|
||||
closeConnection(SOFT_CLOSE);
|
||||
break;
|
||||
case Context.SECURITY_AUTHENTICATION:
|
||||
case Context.SECURITY_PRINCIPAL:
|
||||
case Context.SECURITY_CREDENTIALS:
|
||||
sharable = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// Update environment; reconnection will use new props
|
||||
envprops = (envprops == null
|
||||
? new Hashtable(5, 0.75f)
|
||||
: (Hashtable)envprops.clone());
|
||||
? new Hashtable<String, Object>(5, 0.75f)
|
||||
: (Hashtable<String, Object>)envprops.clone());
|
||||
return envprops.put(propName, propVal);
|
||||
}
|
||||
|
||||
@ -2380,15 +2411,19 @@ final public class LdapCtx extends ComponentDirContext
|
||||
private void setReferralMode(String ref, boolean update) {
|
||||
// First determine the referral mode
|
||||
if (ref != null) {
|
||||
if (ref.equals("follow")) {
|
||||
handleReferrals = LdapClient.LDAP_REF_FOLLOW;
|
||||
} else if (ref.equals("throw")) {
|
||||
handleReferrals = LdapClient.LDAP_REF_THROW;
|
||||
} else if (ref.equals("ignore")) {
|
||||
handleReferrals = LdapClient.LDAP_REF_IGNORE;
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
"Illegal value for " + Context.REFERRAL + " property.");
|
||||
switch (ref) {
|
||||
case "follow":
|
||||
handleReferrals = LdapClient.LDAP_REF_FOLLOW;
|
||||
break;
|
||||
case "throw":
|
||||
handleReferrals = LdapClient.LDAP_REF_THROW;
|
||||
break;
|
||||
case "ignore":
|
||||
handleReferrals = LdapClient.LDAP_REF_IGNORE;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException(
|
||||
"Illegal value for " + Context.REFERRAL + " property.");
|
||||
}
|
||||
} else {
|
||||
handleReferrals = DEFAULT_REFERRAL_MODE;
|
||||
@ -2411,17 +2446,22 @@ final public class LdapCtx extends ComponentDirContext
|
||||
*/
|
||||
private void setDerefAliases(String deref) {
|
||||
if (deref != null) {
|
||||
if (deref.equals("never")) {
|
||||
derefAliases = 0; // never de-reference aliases
|
||||
} else if (deref.equals("searching")) {
|
||||
derefAliases = 1; // de-reference aliases during searching
|
||||
} else if (deref.equals("finding")) {
|
||||
derefAliases = 2; // de-reference during name resolution
|
||||
} else if (deref.equals("always")) {
|
||||
derefAliases = 3; // always de-reference aliases
|
||||
} else {
|
||||
throw new IllegalArgumentException("Illegal value for " +
|
||||
DEREF_ALIASES + " property.");
|
||||
switch (deref) {
|
||||
case "never":
|
||||
derefAliases = 0; // never de-reference aliases
|
||||
break;
|
||||
case "searching":
|
||||
derefAliases = 1; // de-reference aliases during searching
|
||||
break;
|
||||
case "finding":
|
||||
derefAliases = 2; // de-reference during name resolution
|
||||
break;
|
||||
case "always":
|
||||
derefAliases = 3; // always de-reference aliases
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Illegal value for " +
|
||||
DEREF_ALIASES + " property.");
|
||||
}
|
||||
} else {
|
||||
derefAliases = DEFAULT_DEREF_ALIASES;
|
||||
@ -2514,8 +2554,10 @@ final public class LdapCtx extends ComponentDirContext
|
||||
* <ldapurls> ::= <separator> <ldapurl> | <ldapurls>
|
||||
* <separator> ::= ASCII linefeed character (0x0a)
|
||||
* <ldapurl> ::= LDAP URL format (RFC 1959)
|
||||
*
|
||||
* Returns a Vector of single-String Vectors.
|
||||
*/
|
||||
private static Vector extractURLs(String refString) {
|
||||
private static Vector<Vector<String>> extractURLs(String refString) {
|
||||
|
||||
int separator = 0;
|
||||
int urlCount = 0;
|
||||
@ -2526,17 +2568,21 @@ final public class LdapCtx extends ComponentDirContext
|
||||
urlCount++;
|
||||
}
|
||||
|
||||
Vector referrals = new Vector(urlCount);
|
||||
Vector<Vector<String>> referrals = new Vector<>(urlCount);
|
||||
int iURL;
|
||||
int i = 0;
|
||||
|
||||
separator = refString.indexOf('\n');
|
||||
iURL = separator + 1;
|
||||
while ((separator = refString.indexOf('\n', iURL)) >= 0) {
|
||||
referrals.addElement(refString.substring(iURL, separator));
|
||||
Vector<String> referral = new Vector<>(1);
|
||||
referral.addElement(refString.substring(iURL, separator));
|
||||
referrals.addElement(referral);
|
||||
iURL = separator + 1;
|
||||
}
|
||||
referrals.addElement(refString.substring(iURL));
|
||||
Vector<String> referral = new Vector<>(1);
|
||||
referral.addElement(refString.substring(iURL));
|
||||
referrals.addElement(referral);
|
||||
|
||||
return referrals;
|
||||
}
|
||||
@ -2549,7 +2595,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
if (attrIds == null) {
|
||||
binaryAttrs = null;
|
||||
} else {
|
||||
binaryAttrs = new Hashtable(11, 0.75f);
|
||||
binaryAttrs = new Hashtable<>(11, 0.75f);
|
||||
StringTokenizer tokens =
|
||||
new StringTokenizer(attrIds.toLowerCase(), " ");
|
||||
|
||||
@ -2601,11 +2647,12 @@ final public class LdapCtx extends ComponentDirContext
|
||||
*/
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public void reconnect(Control[] connCtls) throws NamingException {
|
||||
// Update environment
|
||||
envprops = (envprops == null
|
||||
? new Hashtable(5, 0.75f)
|
||||
: (Hashtable)envprops.clone());
|
||||
? new Hashtable<String, Object>(5, 0.75f)
|
||||
: (Hashtable<String, Object>)envprops.clone());
|
||||
|
||||
if (connCtls == null) {
|
||||
envprops.remove(BIND_CONTROLS);
|
||||
@ -2631,7 +2678,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
|
||||
// reset the cache before a new connection is established
|
||||
schemaTrees = new Hashtable(11, 0.75f);
|
||||
schemaTrees = new Hashtable<>(11, 0.75f);
|
||||
connect(startTLS);
|
||||
|
||||
} else if (!sharable || startTLS) {
|
||||
@ -2644,7 +2691,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
}
|
||||
// reset the cache before a new connection is established
|
||||
schemaTrees = new Hashtable(11, 0.75f);
|
||||
schemaTrees = new Hashtable<>(11, 0.75f);
|
||||
connect(startTLS);
|
||||
}
|
||||
|
||||
@ -2846,7 +2893,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
}
|
||||
|
||||
protected void processReturnCode(LdapResult res, Name resolvedName,
|
||||
Object resolvedObj, Name remainName, Hashtable envprops, String fullDN)
|
||||
Object resolvedObj, Name remainName, Hashtable<?,?> envprops, String fullDN)
|
||||
throws NamingException {
|
||||
|
||||
String msg = LdapClient.getErrorMessage(res.status, res.errorMessage);
|
||||
@ -2880,7 +2927,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
r = new LdapReferralException(resolvedName, resolvedObj,
|
||||
remainName, msg, envprops, fullDN, handleReferrals,
|
||||
reqCtls);
|
||||
r.setReferralInfo((Vector)res.referrals.elementAt(i), true);
|
||||
r.setReferralInfo(res.referrals.elementAt(i), true);
|
||||
|
||||
if (hopCount > 1) {
|
||||
r.setHopCount(hopCount);
|
||||
@ -2927,7 +2974,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
r = new LdapReferralException(resolvedName, resolvedObj, remainName,
|
||||
msg, envprops, fullDN, handleReferrals, reqCtls);
|
||||
// only one set of URLs is present
|
||||
r.setReferralInfo((Vector)res.referrals.elementAt(0), false);
|
||||
r.setReferralInfo(res.referrals.elementAt(0), false);
|
||||
|
||||
if (hopCount > 1) {
|
||||
r.setHopCount(hopCount);
|
||||
@ -2995,10 +3042,10 @@ final public class LdapCtx extends ComponentDirContext
|
||||
* If 1 referral and 0 entries is received then
|
||||
* assume name resolution has not yet completed.
|
||||
*/
|
||||
if (((res.entries == null) || (res.entries.size() == 0)) &&
|
||||
if (((res.entries == null) || (res.entries.isEmpty())) &&
|
||||
(res.referrals.size() == 1)) {
|
||||
|
||||
r.setReferralInfo((Vector)res.referrals, false);
|
||||
r.setReferralInfo(res.referrals, false);
|
||||
|
||||
// check the hop limit
|
||||
if (hopCount > referralHopLimit) {
|
||||
@ -3284,9 +3331,9 @@ final public class LdapCtx extends ComponentDirContext
|
||||
|
||||
/**
|
||||
* Narrow controls using own default factory and ControlFactory.
|
||||
* @param ctls A non-null Vector
|
||||
* @param ctls A non-null Vector<Control>
|
||||
*/
|
||||
Control[] convertControls(Vector ctls) throws NamingException {
|
||||
Control[] convertControls(Vector<Control> ctls) throws NamingException {
|
||||
int count = ctls.size();
|
||||
|
||||
if (count == 0) {
|
||||
@ -3298,12 +3345,12 @@ final public class LdapCtx extends ComponentDirContext
|
||||
for (int i = 0; i < count; i++) {
|
||||
// Try own factory first
|
||||
controls[i] = myResponseControlFactory.getControlInstance(
|
||||
(Control)ctls.elementAt(i));
|
||||
ctls.elementAt(i));
|
||||
|
||||
// Try assigned factories if own produced null
|
||||
if (controls[i] == null) {
|
||||
controls[i] = ControlFactory.getControlInstance(
|
||||
(Control)ctls.elementAt(i), this, envprops);
|
||||
ctls.elementAt(i), this, envprops);
|
||||
}
|
||||
}
|
||||
return controls;
|
||||
@ -3448,7 +3495,7 @@ final public class LdapCtx extends ComponentDirContext
|
||||
if (nm.size() > 1) {
|
||||
throw new InvalidNameException(
|
||||
"Target cannot span multiple namespaces: " + nm);
|
||||
} else if (nm.size() == 0) {
|
||||
} else if (nm.isEmpty()) {
|
||||
return "";
|
||||
} else {
|
||||
return nm.get(0);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -28,7 +28,6 @@ package com.sun.jndi.ldap;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
import java.util.Enumeration;
|
||||
import java.net.MalformedURLException;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
@ -119,9 +118,9 @@ final public class LdapCtxFactory implements ObjectFactory, InitialContextFactor
|
||||
int size = 0; // number of URLs
|
||||
String[] urls = new String[ref.size()];
|
||||
|
||||
Enumeration addrs = ref.getAll();
|
||||
Enumeration<RefAddr> addrs = ref.getAll();
|
||||
while (addrs.hasMoreElements()) {
|
||||
RefAddr addr = (RefAddr)addrs.nextElement();
|
||||
RefAddr addr = addrs.nextElement();
|
||||
|
||||
if ((addr instanceof StringRefAddr) &&
|
||||
addr.getType().equals(ADDRESS_TYPE)) {
|
||||
@ -145,7 +144,7 @@ final public class LdapCtxFactory implements ObjectFactory, InitialContextFactor
|
||||
|
||||
// ------------ Utilities used by other classes ----------------
|
||||
|
||||
public static DirContext getLdapCtxInstance(Object urlInfo, Hashtable env)
|
||||
public static DirContext getLdapCtxInstance(Object urlInfo, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
if (urlInfo instanceof String) {
|
||||
@ -158,7 +157,7 @@ final public class LdapCtxFactory implements ObjectFactory, InitialContextFactor
|
||||
}
|
||||
}
|
||||
|
||||
private static DirContext getUsingURL(String url, Hashtable env)
|
||||
private static DirContext getUsingURL(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
DirContext ctx = null;
|
||||
LdapURL ldapUrl = new LdapURL(url);
|
||||
@ -202,7 +201,7 @@ final public class LdapCtxFactory implements ObjectFactory, InitialContextFactor
|
||||
* If all URLs fail, throw one of the exceptions arbitrarily.
|
||||
* Not pretty, but potentially more informative than returning null.
|
||||
*/
|
||||
private static DirContext getUsingURLs(String[] urls, Hashtable env)
|
||||
private static DirContext getUsingURLs(String[] urls, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
NamingException ne = null;
|
||||
DirContext ctx = null;
|
||||
@ -221,8 +220,8 @@ final public class LdapCtxFactory implements ObjectFactory, InitialContextFactor
|
||||
/**
|
||||
* Used by Obj and obj/RemoteToAttrs too so must be public
|
||||
*/
|
||||
public static Attribute createTypeNameAttr(Class cl) {
|
||||
Vector v = new Vector(10);
|
||||
public static Attribute createTypeNameAttr(Class<?> cl) {
|
||||
Vector<String> v = new Vector<>(10);
|
||||
String[] types = getTypeNames(cl, v);
|
||||
if (types.length > 0) {
|
||||
BasicAttribute tAttr =
|
||||
@ -235,7 +234,7 @@ final public class LdapCtxFactory implements ObjectFactory, InitialContextFactor
|
||||
return null;
|
||||
}
|
||||
|
||||
private static String[] getTypeNames(Class currentClass, Vector v) {
|
||||
private static String[] getTypeNames(Class<?> currentClass, Vector<String> v) {
|
||||
|
||||
getClassesAux(currentClass, v);
|
||||
Class[] members = currentClass.getInterfaces();
|
||||
@ -244,13 +243,14 @@ final public class LdapCtxFactory implements ObjectFactory, InitialContextFactor
|
||||
}
|
||||
String[] ret = new String[v.size()];
|
||||
int i = 0;
|
||||
for (java.util.Enumeration e = v.elements(); e.hasMoreElements();) {
|
||||
ret[i++] = (String)e.nextElement();
|
||||
|
||||
for (String name : v) {
|
||||
ret[i++] = name;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private static void getClassesAux(Class currentClass, Vector v) {
|
||||
private static void getClassesAux(Class<?> currentClass, Vector<String> v) {
|
||||
if (!v.contains(currentClass.getName())) {
|
||||
v.addElement(currentClass.getName());
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -27,7 +27,7 @@ package com.sun.jndi.ldap;
|
||||
|
||||
import java.util.Vector;
|
||||
import javax.naming.directory.Attributes;
|
||||
import javax.naming.directory.Attribute;
|
||||
import javax.naming.ldap.Control;
|
||||
|
||||
/**
|
||||
* A holder for an LDAP entry read from an LDAP server.
|
||||
@ -38,14 +38,14 @@ import javax.naming.directory.Attribute;
|
||||
final class LdapEntry {
|
||||
String DN;
|
||||
Attributes attributes;
|
||||
Vector respCtls = null;
|
||||
Vector<Control> respCtls = null;
|
||||
|
||||
LdapEntry(String DN, Attributes attrs) {
|
||||
this.DN = DN;
|
||||
this.attributes = attrs;
|
||||
}
|
||||
|
||||
LdapEntry(String DN, Attributes attrs, Vector respCtls) {
|
||||
LdapEntry(String DN, Attributes attrs, Vector<Control> respCtls) {
|
||||
this.DN = DN;
|
||||
this.attributes = attrs;
|
||||
this.respCtls = respCtls;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -78,7 +78,7 @@ import javax.naming.directory.BasicAttributes;
|
||||
public final class LdapName implements Name {
|
||||
|
||||
private transient String unparsed; // if non-null, the DN in unparsed form
|
||||
private transient Vector rdns; // parsed name components
|
||||
private transient Vector<Rdn> rdns; // parsed name components
|
||||
private transient boolean valuesCaseSensitive = false;
|
||||
|
||||
/**
|
||||
@ -97,9 +97,10 @@ public final class LdapName implements Name {
|
||||
* Constructs an LDAP name given its parsed components and, optionally
|
||||
* (if "name" is not null), the unparsed DN.
|
||||
*/
|
||||
private LdapName(String name, Vector rdns) {
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
private LdapName(String name, Vector<Rdn> rdns) {
|
||||
unparsed = name;
|
||||
this.rdns = (Vector)rdns.clone();
|
||||
this.rdns = (Vector<Rdn>)rdns.clone();
|
||||
}
|
||||
|
||||
/*
|
||||
@ -107,9 +108,9 @@ public final class LdapName implements Name {
|
||||
* of "rdns" in the range [beg,end)) and, optionally
|
||||
* (if "name" is not null), the unparsed DN.
|
||||
*/
|
||||
private LdapName(String name, Vector rdns, int beg, int end) {
|
||||
private LdapName(String name, Vector<Rdn> rdns, int beg, int end) {
|
||||
unparsed = name;
|
||||
this.rdns = new Vector();
|
||||
this.rdns = new Vector<>();
|
||||
for (int i = beg; i < end; i++) {
|
||||
this.rdns.addElement(rdns.elementAt(i));
|
||||
}
|
||||
@ -130,7 +131,7 @@ public final class LdapName implements Name {
|
||||
if (i < rdns.size() - 1) {
|
||||
buf.append(',');
|
||||
}
|
||||
Rdn rdn = (Rdn)rdns.elementAt(i);
|
||||
Rdn rdn = rdns.elementAt(i);
|
||||
buf.append(rdn);
|
||||
}
|
||||
|
||||
@ -155,8 +156,8 @@ public final class LdapName implements Name {
|
||||
int minSize = Math.min(rdns.size(), that.rdns.size());
|
||||
for (int i = 0 ; i < minSize; i++) {
|
||||
// Compare a single pair of RDNs.
|
||||
Rdn rdn1 = (Rdn)rdns.elementAt(i);
|
||||
Rdn rdn2 = (Rdn)that.rdns.elementAt(i);
|
||||
Rdn rdn1 = rdns.elementAt(i);
|
||||
Rdn rdn2 = that.rdns.elementAt(i);
|
||||
|
||||
int diff = rdn1.compareTo(rdn2);
|
||||
if (diff != 0) {
|
||||
@ -172,7 +173,7 @@ public final class LdapName implements Name {
|
||||
|
||||
// For each RDN...
|
||||
for (int i = 0; i < rdns.size(); i++) {
|
||||
Rdn rdn = (Rdn)rdns.elementAt(i);
|
||||
Rdn rdn = rdns.elementAt(i);
|
||||
hash += rdn.hashCode();
|
||||
}
|
||||
return hash;
|
||||
@ -186,14 +187,14 @@ public final class LdapName implements Name {
|
||||
return rdns.isEmpty();
|
||||
}
|
||||
|
||||
public Enumeration getAll() {
|
||||
final Enumeration enum_ = rdns.elements();
|
||||
public Enumeration<String> getAll() {
|
||||
final Enumeration<Rdn> enum_ = rdns.elements();
|
||||
|
||||
return new Enumeration () {
|
||||
return new Enumeration<String>() {
|
||||
public boolean hasMoreElements() {
|
||||
return enum_.hasMoreElements();
|
||||
}
|
||||
public Object nextElement() {
|
||||
public String nextElement() {
|
||||
return enum_.nextElement().toString();
|
||||
}
|
||||
};
|
||||
@ -254,7 +255,7 @@ public final class LdapName implements Name {
|
||||
Rdn rdn;
|
||||
if (n instanceof LdapName) {
|
||||
LdapName ln = (LdapName)n;
|
||||
rdn = (Rdn)ln.rdns.elementAt(i - beg);
|
||||
rdn = ln.rdns.elementAt(i - beg);
|
||||
} else {
|
||||
String rdnString = n.get(i - beg);
|
||||
try {
|
||||
@ -286,9 +287,9 @@ public final class LdapName implements Name {
|
||||
rdns.insertElementAt(s.rdns.elementAt(i), pos++);
|
||||
}
|
||||
} else {
|
||||
Enumeration comps = suffix.getAll();
|
||||
Enumeration<String> comps = suffix.getAll();
|
||||
while (comps.hasMoreElements()) {
|
||||
DnParser p = new DnParser((String)comps.nextElement(),
|
||||
DnParser p = new DnParser(comps.nextElement(),
|
||||
valuesCaseSensitive);
|
||||
rdns.insertElementAt(p.getRdn(), pos++);
|
||||
}
|
||||
@ -406,9 +407,9 @@ public final class LdapName implements Name {
|
||||
/*
|
||||
* Parses the DN, returning a Vector of its RDNs.
|
||||
*/
|
||||
Vector getDn() throws InvalidNameException {
|
||||
Vector<Rdn> getDn() throws InvalidNameException {
|
||||
cur = 0;
|
||||
Vector rdns = new Vector(len / 3 + 10); // leave room for growth
|
||||
Vector<Rdn> rdns = new Vector<>(len / 3 + 10); // leave room for growth
|
||||
|
||||
if (len == 0) {
|
||||
return rdns;
|
||||
@ -595,7 +596,7 @@ public final class LdapName implements Name {
|
||||
* A vector of the TypeAndValue elements of this Rdn.
|
||||
* It is sorted to facilitate set operations.
|
||||
*/
|
||||
private final Vector tvs = new Vector();
|
||||
private final Vector<TypeAndValue> tvs = new Vector<>();
|
||||
|
||||
void add(TypeAndValue tv) {
|
||||
|
||||
@ -636,7 +637,7 @@ public final class LdapName implements Name {
|
||||
int minSize = Math.min(tvs.size(), that.tvs.size());
|
||||
for (int i = 0; i < minSize; i++) {
|
||||
// Compare a single pair of type/value pairs.
|
||||
TypeAndValue tv = (TypeAndValue)tvs.elementAt(i);
|
||||
TypeAndValue tv = tvs.elementAt(i);
|
||||
int diff = tv.compareTo(that.tvs.elementAt(i));
|
||||
if (diff != 0) {
|
||||
return diff;
|
||||
@ -662,7 +663,7 @@ public final class LdapName implements Name {
|
||||
Attribute attr;
|
||||
|
||||
for (int i = 0; i < tvs.size(); i++) {
|
||||
tv = (TypeAndValue) tvs.elementAt(i);
|
||||
tv = tvs.elementAt(i);
|
||||
if ((attr = attrs.get(tv.getType())) == null) {
|
||||
attrs.put(tv.getType(), tv.getUnescapedValue());
|
||||
} else {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -27,267 +27,25 @@ package com.sun.jndi.ldap;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
import javax.naming.spi.*;
|
||||
|
||||
import com.sun.jndi.toolkit.ctx.Continuation;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Vector;
|
||||
import javax.naming.ldap.LdapName;
|
||||
import javax.naming.ldap.Control;
|
||||
|
||||
/**
|
||||
* Basic enumeration for NameClassPair, Binding, and SearchResults.
|
||||
*/
|
||||
|
||||
class LdapNamingEnumeration implements NamingEnumeration, ReferralEnumeration {
|
||||
protected Name listArg;
|
||||
|
||||
private boolean cleaned = false;
|
||||
private LdapResult res;
|
||||
private LdapClient enumClnt;
|
||||
private Continuation cont; // used to fill in exceptions
|
||||
private Vector entries = null;
|
||||
private int limit = 0;
|
||||
private int posn = 0;
|
||||
protected LdapCtx homeCtx;
|
||||
private LdapReferralException refEx = null;
|
||||
private NamingException errEx = null;
|
||||
final class LdapNamingEnumeration
|
||||
extends AbstractLdapNamingEnumeration<NameClassPair> {
|
||||
|
||||
private static final String defaultClassName = DirContext.class.getName();
|
||||
|
||||
/*
|
||||
* Record the next set of entries and/or referrals.
|
||||
*/
|
||||
LdapNamingEnumeration(LdapCtx homeCtx, LdapResult answer, Name listArg,
|
||||
Continuation cont) throws NamingException {
|
||||
|
||||
// These checks are to accommodate referrals and limit exceptions
|
||||
// which will generate an enumeration and defer the exception
|
||||
// to be thrown at the end of the enumeration.
|
||||
// All other exceptions are thrown immediately.
|
||||
// Exceptions shouldn't be thrown here anyhow because
|
||||
// process_return_code() is called before the constructor
|
||||
// is called, so these are just safety checks.
|
||||
|
||||
if ((answer.status != LdapClient.LDAP_SUCCESS) &&
|
||||
(answer.status != LdapClient.LDAP_SIZE_LIMIT_EXCEEDED) &&
|
||||
(answer.status != LdapClient.LDAP_TIME_LIMIT_EXCEEDED) &&
|
||||
(answer.status != LdapClient.LDAP_ADMIN_LIMIT_EXCEEDED) &&
|
||||
(answer.status != LdapClient.LDAP_REFERRAL) &&
|
||||
(answer.status != LdapClient.LDAP_PARTIAL_RESULTS)) {
|
||||
|
||||
// %%% need to deal with referral
|
||||
NamingException e = new NamingException(
|
||||
LdapClient.getErrorMessage(
|
||||
answer.status, answer.errorMessage));
|
||||
|
||||
throw cont.fillInException(e);
|
||||
}
|
||||
|
||||
// otherwise continue
|
||||
|
||||
res = answer;
|
||||
entries = answer.entries;
|
||||
limit = (entries == null) ? 0 : entries.size(); // handle empty set
|
||||
this.listArg = listArg;
|
||||
this.cont = cont;
|
||||
|
||||
if (answer.refEx != null) {
|
||||
refEx = answer.refEx;
|
||||
}
|
||||
|
||||
// Ensures that context won't get closed from underneath us
|
||||
this.homeCtx = homeCtx;
|
||||
homeCtx.incEnumCount();
|
||||
enumClnt = homeCtx.clnt; // remember
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) {
|
||||
// can't throw exception
|
||||
cleanup();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasMoreElements() {
|
||||
try {
|
||||
return hasMore();
|
||||
} catch (NamingException e) {
|
||||
// can't throw exception
|
||||
cleanup();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the next set of entries and/or referrals.
|
||||
*/
|
||||
private void getNextBatch() throws NamingException {
|
||||
|
||||
res = homeCtx.getSearchReply(enumClnt, res);
|
||||
if (res == null) {
|
||||
limit = posn = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
entries = res.entries;
|
||||
limit = (entries == null) ? 0 : entries.size(); // handle empty set
|
||||
posn = 0; // reset
|
||||
|
||||
// mimimize the number of calls to processReturnCode()
|
||||
// (expensive when batchSize is small and there are many results)
|
||||
if ((res.status != LdapClient.LDAP_SUCCESS) ||
|
||||
((res.status == LdapClient.LDAP_SUCCESS) &&
|
||||
(res.referrals != null))) {
|
||||
|
||||
try {
|
||||
// convert referrals into a chain of LdapReferralException
|
||||
homeCtx.processReturnCode(res, listArg);
|
||||
|
||||
} catch (LimitExceededException e) {
|
||||
setNamingException(e);
|
||||
|
||||
} catch (PartialResultException e) {
|
||||
setNamingException(e);
|
||||
}
|
||||
}
|
||||
|
||||
// merge any newly received referrals with any current referrals
|
||||
if (res.refEx != null) {
|
||||
if (refEx == null) {
|
||||
refEx = res.refEx;
|
||||
} else {
|
||||
refEx = refEx.appendUnprocessedReferrals(res.refEx);
|
||||
}
|
||||
res.refEx = null; // reset
|
||||
}
|
||||
|
||||
if (res.resControls != null) {
|
||||
homeCtx.respCtls = res.resControls;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean more = true; // assume we have something to start with
|
||||
private boolean hasMoreCalled = false;
|
||||
|
||||
/*
|
||||
* Test if unprocessed entries or referrals exist.
|
||||
*/
|
||||
public boolean hasMore() throws NamingException {
|
||||
|
||||
if (hasMoreCalled) {
|
||||
return more;
|
||||
}
|
||||
|
||||
hasMoreCalled = true;
|
||||
|
||||
if (!more) {
|
||||
return false;
|
||||
} else {
|
||||
return (more = hasMoreImpl());
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the next entry.
|
||||
*/
|
||||
public Object next() throws NamingException {
|
||||
|
||||
if (!hasMoreCalled) {
|
||||
hasMore();
|
||||
}
|
||||
hasMoreCalled = false;
|
||||
return nextImpl();
|
||||
}
|
||||
|
||||
/*
|
||||
* Test if unprocessed entries or referrals exist.
|
||||
*/
|
||||
private boolean hasMoreImpl() throws NamingException {
|
||||
// when page size is supported, this
|
||||
// might generate an exception while attempting
|
||||
// to fetch the next batch to determine
|
||||
// whether there are any more elements
|
||||
|
||||
// test if the current set of entries has been processed
|
||||
if (posn == limit) {
|
||||
getNextBatch();
|
||||
}
|
||||
|
||||
// test if any unprocessed entries exist
|
||||
if (posn < limit) {
|
||||
return true;
|
||||
} else {
|
||||
|
||||
try {
|
||||
// try to process another referral
|
||||
return hasMoreReferrals();
|
||||
|
||||
} catch (LdapReferralException e) {
|
||||
cleanup();
|
||||
throw e;
|
||||
|
||||
} catch (LimitExceededException e) {
|
||||
cleanup();
|
||||
throw e;
|
||||
|
||||
} catch (PartialResultException e) {
|
||||
cleanup();
|
||||
throw e;
|
||||
|
||||
} catch (NamingException e) {
|
||||
cleanup();
|
||||
PartialResultException pre = new PartialResultException();
|
||||
pre.setRootCause(e);
|
||||
throw pre;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Retrieve the next entry.
|
||||
*/
|
||||
private Object nextImpl() throws NamingException {
|
||||
try {
|
||||
return nextAux();
|
||||
} catch (NamingException e) {
|
||||
cleanup();
|
||||
throw cont.fillInException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private Object nextAux() throws NamingException {
|
||||
if (posn == limit) {
|
||||
getNextBatch(); // updates posn and limit
|
||||
}
|
||||
|
||||
if (posn >= limit) {
|
||||
cleanup();
|
||||
throw new NoSuchElementException("invalid enumeration handle");
|
||||
}
|
||||
|
||||
LdapEntry result = (LdapEntry)entries.elementAt(posn++);
|
||||
|
||||
// gets and outputs DN from the entry
|
||||
return createItem(result.DN, result.attributes, result.respCtls);
|
||||
}
|
||||
|
||||
protected String getAtom(String dn) {
|
||||
String atom;
|
||||
// need to strip off all but lowest component of dn
|
||||
// so that is relative to current context (currentDN)
|
||||
try {
|
||||
Name parsed = new LdapName(dn);
|
||||
return parsed.get(parsed.size() - 1);
|
||||
} catch (NamingException e) {
|
||||
return dn;
|
||||
}
|
||||
Continuation cont) throws NamingException {
|
||||
super(homeCtx, answer, listArg, cont);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NameClassPair createItem(String dn, Attributes attrs,
|
||||
Vector respCtls) throws NamingException {
|
||||
Vector<Control> respCtls) throws NamingException {
|
||||
|
||||
Attribute attr;
|
||||
String className = null;
|
||||
@ -313,128 +71,10 @@ class LdapNamingEnumeration implements NamingEnumeration, ReferralEnumeration {
|
||||
return ncp;
|
||||
}
|
||||
|
||||
/*
|
||||
* Append the supplied (chain of) referrals onto the
|
||||
* end of the current (chain of) referrals.
|
||||
*/
|
||||
public void appendUnprocessedReferrals(LdapReferralException ex) {
|
||||
|
||||
if (refEx != null) {
|
||||
refEx = refEx.appendUnprocessedReferrals(ex);
|
||||
} else {
|
||||
refEx = ex.appendUnprocessedReferrals(refEx);
|
||||
}
|
||||
}
|
||||
|
||||
void setNamingException(NamingException e) {
|
||||
errEx = e;
|
||||
}
|
||||
|
||||
protected LdapNamingEnumeration
|
||||
getReferredResults(LdapReferralContext refCtx) throws NamingException {
|
||||
@Override
|
||||
protected LdapNamingEnumeration getReferredResults(
|
||||
LdapReferralContext refCtx) throws NamingException {
|
||||
// repeat the original operation at the new context
|
||||
return (LdapNamingEnumeration)refCtx.list(listArg);
|
||||
}
|
||||
|
||||
/*
|
||||
* Iterate through the URLs of a referral. If successful then perform
|
||||
* a search operation and merge the received results with the current
|
||||
* results.
|
||||
*/
|
||||
protected boolean hasMoreReferrals() throws NamingException {
|
||||
|
||||
if ((refEx != null) &&
|
||||
(refEx.hasMoreReferrals() ||
|
||||
refEx.hasMoreReferralExceptions())) {
|
||||
|
||||
if (homeCtx.handleReferrals == LdapClient.LDAP_REF_THROW) {
|
||||
throw (NamingException)(refEx.fillInStackTrace());
|
||||
}
|
||||
|
||||
// process the referrals sequentially
|
||||
while (true) {
|
||||
|
||||
LdapReferralContext refCtx =
|
||||
(LdapReferralContext)refEx.getReferralContext(
|
||||
homeCtx.envprops, homeCtx.reqCtls);
|
||||
|
||||
try {
|
||||
|
||||
update(getReferredResults(refCtx));
|
||||
break;
|
||||
|
||||
} catch (LdapReferralException re) {
|
||||
|
||||
// record a previous exception
|
||||
if (errEx == null) {
|
||||
errEx = re.getNamingException();
|
||||
}
|
||||
refEx = re;
|
||||
continue;
|
||||
|
||||
} finally {
|
||||
// Make sure we close referral context
|
||||
refCtx.close();
|
||||
}
|
||||
}
|
||||
return hasMoreImpl();
|
||||
|
||||
} else {
|
||||
cleanup();
|
||||
|
||||
if (errEx != null) {
|
||||
throw errEx;
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Merge the entries and/or referrals from the supplied enumeration
|
||||
* with those of the current enumeration.
|
||||
*/
|
||||
protected void update(LdapNamingEnumeration ne) {
|
||||
// Cleanup previous context first
|
||||
homeCtx.decEnumCount();
|
||||
|
||||
// New enum will have already incremented enum count and recorded clnt
|
||||
homeCtx = ne.homeCtx;
|
||||
enumClnt = ne.enumClnt;
|
||||
|
||||
// Do this to prevent referral enumeration (ne) from decrementing
|
||||
// enum count because we'll be doing that here from this
|
||||
// enumeration.
|
||||
ne.homeCtx = null;
|
||||
|
||||
// Record rest of information from new enum
|
||||
posn = ne.posn;
|
||||
limit = ne.limit;
|
||||
res = ne.res;
|
||||
entries = ne.entries;
|
||||
refEx = ne.refEx;
|
||||
listArg = ne.listArg;
|
||||
}
|
||||
|
||||
protected void finalize() {
|
||||
cleanup();
|
||||
}
|
||||
|
||||
protected void cleanup() {
|
||||
if (cleaned) return; // been there; done that
|
||||
|
||||
if(enumClnt != null) {
|
||||
enumClnt.clearSearchReply(res, homeCtx.reqCtls);
|
||||
}
|
||||
|
||||
enumClnt = null;
|
||||
cleaned = true;
|
||||
if (homeCtx != null) {
|
||||
homeCtx.decEnumCount();
|
||||
homeCtx = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void close() {
|
||||
cleanup();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -214,7 +214,7 @@ public final class LdapPoolManager {
|
||||
*
|
||||
*/
|
||||
static boolean isPoolingAllowed(String socketFactory, OutputStream trace,
|
||||
String authMech, String protocol, Hashtable env)
|
||||
String authMech, String protocol, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
if (trace != null && !debug
|
||||
@ -235,7 +235,7 @@ public final class LdapPoolManager {
|
||||
if ((socketFactory != null) &&
|
||||
!socketFactory.equals(LdapCtx.DEFAULT_SSL_FACTORY)) {
|
||||
try {
|
||||
Class socketFactoryClass = Obj.helper.loadClass(socketFactory);
|
||||
Class<?> socketFactoryClass = Obj.helper.loadClass(socketFactory);
|
||||
Class[] interfaces = socketFactoryClass.getInterfaces();
|
||||
for (int i = 0; i < interfaces.length; i++) {
|
||||
if (interfaces[i].getCanonicalName().equals(COMPARATOR)) {
|
||||
@ -294,7 +294,7 @@ public final class LdapPoolManager {
|
||||
static LdapClient getLdapClient(String host, int port, String socketFactory,
|
||||
int connTimeout, int readTimeout, OutputStream trace, int version,
|
||||
String authMech, Control[] ctls, String protocol, String user,
|
||||
Object passwd, Hashtable env) throws NamingException {
|
||||
Object passwd, Hashtable<?,?> env) throws NamingException {
|
||||
|
||||
// Create base identity for LdapClient
|
||||
ClientId id = null;
|
||||
@ -385,9 +385,9 @@ public final class LdapPoolManager {
|
||||
|
||||
private static final String getProperty(final String propName,
|
||||
final String defVal) {
|
||||
return (String) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<String>() {
|
||||
public String run() {
|
||||
try {
|
||||
return System.getProperty(propName, defVal);
|
||||
} catch (SecurityException e) {
|
||||
@ -399,9 +399,9 @@ public final class LdapPoolManager {
|
||||
|
||||
private static final int getInteger(final String propName,
|
||||
final int defVal) {
|
||||
Integer val = (Integer) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
Integer val = AccessController.doPrivileged(
|
||||
new PrivilegedAction<Integer>() {
|
||||
public Integer run() {
|
||||
try {
|
||||
return Integer.getInteger(propName, defVal);
|
||||
} catch (SecurityException e) {
|
||||
@ -414,9 +414,9 @@ public final class LdapPoolManager {
|
||||
|
||||
private static final long getLong(final String propName,
|
||||
final long defVal) {
|
||||
Long val = (Long) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
Long val = AccessController.doPrivileged(
|
||||
new PrivilegedAction<Long>() {
|
||||
public Long run() {
|
||||
try {
|
||||
return Long.getLong(propName, defVal);
|
||||
} catch (SecurityException e) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -52,7 +52,9 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
private int hopCount = 1;
|
||||
private NamingException previousEx = null;
|
||||
|
||||
LdapReferralContext(LdapReferralException ex, Hashtable env,
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
LdapReferralContext(LdapReferralException ex,
|
||||
Hashtable<?,?> env,
|
||||
Control[] connCtls,
|
||||
Control[] reqCtls,
|
||||
String nextName,
|
||||
@ -69,20 +71,21 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
|
||||
// Make copies of environment and connect controls for our own use.
|
||||
if (env != null) {
|
||||
env = (Hashtable) env.clone();
|
||||
env = (Hashtable<?,?>) env.clone();
|
||||
// Remove old connect controls from environment, unless we have new
|
||||
// ones that will override them anyway.
|
||||
if (connCtls == null) {
|
||||
env.remove(LdapCtx.BIND_CONTROLS);
|
||||
}
|
||||
} else if (connCtls != null) {
|
||||
env = new Hashtable(5);
|
||||
env = new Hashtable<String, Control[]>(5);
|
||||
}
|
||||
if (connCtls != null) {
|
||||
Control[] copiedCtls = new Control[connCtls.length];
|
||||
System.arraycopy(connCtls, 0, copiedCtls, 0, connCtls.length);
|
||||
// Add copied controls to environment, replacing any old ones.
|
||||
env.put(LdapCtx.BIND_CONTROLS, copiedCtls);
|
||||
((Hashtable<? super String, ? super Control[]>)env)
|
||||
.put(LdapCtx.BIND_CONTROLS, copiedCtls);
|
||||
}
|
||||
|
||||
while (true) {
|
||||
@ -260,24 +263,26 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
refCtx.rename(overrideName(oldName), toName(refEx.getNewRdn()));
|
||||
}
|
||||
|
||||
public NamingEnumeration list(String name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(String name) throws NamingException {
|
||||
return list(toName(name));
|
||||
}
|
||||
|
||||
public NamingEnumeration list(Name name) throws NamingException {
|
||||
@SuppressWarnings("unchecked")
|
||||
public NamingEnumeration<NameClassPair> list(Name name) throws NamingException {
|
||||
if (skipThisReferral) {
|
||||
throw (NamingException)
|
||||
((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
|
||||
}
|
||||
try {
|
||||
NamingEnumeration ne = null;
|
||||
NamingEnumeration<NameClassPair> ne = null;
|
||||
|
||||
if (urlScope != null && urlScope.equals("base")) {
|
||||
SearchControls cons = new SearchControls();
|
||||
cons.setReturningObjFlag(true);
|
||||
cons.setSearchScope(SearchControls.OBJECT_SCOPE);
|
||||
|
||||
ne = refCtx.search(overrideName(name), "(objectclass=*)", cons);
|
||||
ne = (NamingEnumeration)
|
||||
refCtx.search(overrideName(name), "(objectclass=*)", cons);
|
||||
|
||||
} else {
|
||||
ne = refCtx.list(overrideName(name));
|
||||
@ -318,25 +323,29 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(String name) throws NamingException {
|
||||
public NamingEnumeration<Binding> listBindings(String name) throws
|
||||
NamingException {
|
||||
return listBindings(toName(name));
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(Name name) throws NamingException {
|
||||
@SuppressWarnings("unchecked")
|
||||
public NamingEnumeration<Binding> listBindings(Name name) throws
|
||||
NamingException {
|
||||
if (skipThisReferral) {
|
||||
throw (NamingException)
|
||||
((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
|
||||
}
|
||||
|
||||
try {
|
||||
NamingEnumeration be = null;
|
||||
NamingEnumeration<Binding> be = null;
|
||||
|
||||
if (urlScope != null && urlScope.equals("base")) {
|
||||
SearchControls cons = new SearchControls();
|
||||
cons.setReturningObjFlag(true);
|
||||
cons.setSearchScope(SearchControls.OBJECT_SCOPE);
|
||||
|
||||
be = refCtx.search(overrideName(name), "(objectclass=*)", cons);
|
||||
be = (NamingEnumeration)refCtx.search(overrideName(name),
|
||||
"(objectclass=*)", cons);
|
||||
|
||||
} else {
|
||||
be = refCtx.listBindings(overrideName(name));
|
||||
@ -347,7 +356,7 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
// append (referrals from) the exception that generated this
|
||||
// context to the new search results, so that referral processing
|
||||
// can continue
|
||||
((ReferralEnumeration)be).appendUnprocessedReferrals(refEx);
|
||||
((ReferralEnumeration<Binding>)be).appendUnprocessedReferrals(refEx);
|
||||
|
||||
return (be);
|
||||
|
||||
@ -462,7 +471,7 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
return refCtx.removeFromEnvironment(propName);
|
||||
}
|
||||
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
public Hashtable<?,?> getEnvironment() throws NamingException {
|
||||
if (skipThisReferral) {
|
||||
throw (NamingException)
|
||||
((refEx.appendUnprocessedReferrals(null)).fillInStackTrace());
|
||||
@ -602,23 +611,23 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
return refCtx.getSchemaClassDefinition(overrideName(name));
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
Attributes matchingAttributes)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
return search(toName(name), SearchFilter.format(matchingAttributes),
|
||||
new SearchControls());
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
Attributes matchingAttributes)
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
return search(name, SearchFilter.format(matchingAttributes),
|
||||
new SearchControls());
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
SearchControls cons = new SearchControls();
|
||||
cons.setReturningAttributes(attributesToReturn);
|
||||
@ -627,9 +636,9 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
SearchControls cons = new SearchControls();
|
||||
cons.setReturningAttributes(attributesToReturn);
|
||||
@ -637,15 +646,15 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
return search(name, SearchFilter.format(matchingAttributes), cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
return search(toName(name), filter, cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
String filter,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filter,
|
||||
SearchControls cons) throws NamingException {
|
||||
|
||||
if (skipThisReferral) {
|
||||
@ -654,8 +663,10 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
}
|
||||
|
||||
try {
|
||||
NamingEnumeration se = refCtx.search(overrideName(name),
|
||||
overrideFilter(filter), overrideAttributesAndScope(cons));
|
||||
NamingEnumeration<SearchResult> se =
|
||||
refCtx.search(overrideName(name),
|
||||
overrideFilter(filter),
|
||||
overrideAttributesAndScope(cons));
|
||||
|
||||
refEx.setNameResolved(true);
|
||||
|
||||
@ -694,15 +705,15 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
return search(toName(name), filterExpr, filterArgs, cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons) throws NamingException {
|
||||
@ -713,7 +724,7 @@ final class LdapReferralContext implements DirContext, LdapContext {
|
||||
}
|
||||
|
||||
try {
|
||||
NamingEnumeration se;
|
||||
NamingEnumeration<SearchResult> se;
|
||||
|
||||
if (urlFilter != null) {
|
||||
se = refCtx.search(overrideName(name), urlFilter,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -26,7 +26,6 @@
|
||||
package com.sun.jndi.ldap;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.spi.*;
|
||||
import javax.naming.ldap.Control;
|
||||
|
||||
import java.util.Hashtable;
|
||||
@ -67,15 +66,16 @@ import java.util.Vector;
|
||||
*/
|
||||
final public class LdapReferralException extends
|
||||
javax.naming.ldap.LdapReferralException {
|
||||
private static final long serialVersionUID = 627059076356906399L;
|
||||
|
||||
// ----------- fields initialized in constructor ---------------
|
||||
private int handleReferrals;
|
||||
private Hashtable envprops;
|
||||
private Hashtable<?,?> envprops;
|
||||
private String nextName;
|
||||
private Control[] reqCtls;
|
||||
|
||||
// ----------- fields that have defaults -----------------------
|
||||
private Vector referrals = null; // alternatives,set by setReferralInfo()
|
||||
private Vector<?> referrals = null; // alternatives,set by setReferralInfo()
|
||||
private int referralIndex = 0; // index into referrals
|
||||
private int referralCount = 0; // count of referrals
|
||||
private boolean foundEntry = false; // will stop when entry is found
|
||||
@ -98,7 +98,7 @@ final public class LdapReferralException extends
|
||||
Object resolvedObj,
|
||||
Name remainingName,
|
||||
String explanation,
|
||||
Hashtable envprops,
|
||||
Hashtable<?,?> envprops,
|
||||
String nextName,
|
||||
int handleReferrals,
|
||||
Control[] reqCtls) {
|
||||
@ -210,7 +210,7 @@ final public class LdapReferralException extends
|
||||
/**
|
||||
* Sets referral information.
|
||||
*/
|
||||
void setReferralInfo(Vector referrals, boolean continuationRef) {
|
||||
void setReferralInfo(Vector<?> referrals, boolean continuationRef) {
|
||||
// %%% continuationRef is currently ignored
|
||||
|
||||
if (debug)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -28,6 +28,7 @@ package com.sun.jndi.ldap;
|
||||
import java.util.Vector;
|
||||
import javax.naming.directory.Attributes;
|
||||
import javax.naming.directory.BasicAttributes;
|
||||
import javax.naming.ldap.Control;
|
||||
|
||||
/**
|
||||
* %%% public for use by LdapSasl %%%
|
||||
@ -37,10 +38,11 @@ public final class LdapResult {
|
||||
public int status; // %%% public for use by LdapSasl
|
||||
String matchedDN;
|
||||
String errorMessage;
|
||||
Vector referrals = null;
|
||||
// Vector<String | Vector<String>>
|
||||
Vector<Vector<String>> referrals = null;
|
||||
LdapReferralException refEx = null;
|
||||
Vector entries = null;
|
||||
Vector resControls = null;
|
||||
Vector<LdapEntry> entries = null;
|
||||
Vector<Control> resControls = null;
|
||||
public byte[] serverCreds = null; // %%% public for use by LdapSasl
|
||||
String extensionId = null; // string OID
|
||||
byte[] extensionValue = null; // BER OCTET STRING
|
||||
@ -57,7 +59,7 @@ public final class LdapResult {
|
||||
switch (status) {
|
||||
case LdapClient.LDAP_COMPARE_TRUE:
|
||||
status = LdapClient.LDAP_SUCCESS;
|
||||
entries = new Vector(1,1);
|
||||
entries = new Vector<>(1,1);
|
||||
Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
|
||||
LdapEntry entry = new LdapEntry( name, attrs );
|
||||
entries.addElement(entry);
|
||||
@ -66,7 +68,7 @@ public final class LdapResult {
|
||||
|
||||
case LdapClient.LDAP_COMPARE_FALSE:
|
||||
status = LdapClient.LDAP_SUCCESS;
|
||||
entries = new Vector(0);
|
||||
entries = new Vector<>(0);
|
||||
successful = true;
|
||||
break;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -61,8 +61,9 @@ final class LdapSchemaCtx extends HierMemDirCtx {
|
||||
|
||||
private int objectType;
|
||||
|
||||
static DirContext createSchemaTree(Hashtable env, String subschemasubentry,
|
||||
LdapCtx schemaEntry, Attributes schemaAttrs, boolean netscapeBug)
|
||||
static DirContext createSchemaTree(Hashtable<String,Object> env,
|
||||
String subschemasubentry, LdapCtx schemaEntry,
|
||||
Attributes schemaAttrs, boolean netscapeBug)
|
||||
throws NamingException {
|
||||
try {
|
||||
LdapSchemaParser parser = new LdapSchemaParser(netscapeBug);
|
||||
@ -71,7 +72,7 @@ final class LdapSchemaCtx extends HierMemDirCtx {
|
||||
schemaEntry, parser);
|
||||
|
||||
LdapSchemaCtx root = new LdapSchemaCtx(SCHEMA_ROOT, env, allinfo);
|
||||
parser.LDAP2JNDISchema(schemaAttrs, root);
|
||||
LdapSchemaParser.LDAP2JNDISchema(schemaAttrs, root);
|
||||
return root;
|
||||
} catch (NamingException e) {
|
||||
schemaEntry.close(); // cleanup
|
||||
@ -80,7 +81,8 @@ final class LdapSchemaCtx extends HierMemDirCtx {
|
||||
}
|
||||
|
||||
// Called by createNewCtx
|
||||
private LdapSchemaCtx(int objectType, Hashtable environment, SchemaInfo info) {
|
||||
private LdapSchemaCtx(int objectType, Hashtable<String,Object> environment,
|
||||
SchemaInfo info) {
|
||||
super(environment, LdapClient.caseIgnore);
|
||||
|
||||
this.objectType = objectType;
|
||||
@ -223,9 +225,9 @@ final class LdapSchemaCtx extends HierMemDirCtx {
|
||||
final private static Attributes deepClone(Attributes orig)
|
||||
throws NamingException {
|
||||
BasicAttributes copy = new BasicAttributes(true);
|
||||
NamingEnumeration attrs = orig.getAll();
|
||||
NamingEnumeration<? extends Attribute> attrs = orig.getAll();
|
||||
while (attrs.hasMore()) {
|
||||
copy.put((Attribute)((Attribute)attrs.next()).clone());
|
||||
copy.put((Attribute)attrs.next().clone());
|
||||
}
|
||||
return copy;
|
||||
}
|
||||
@ -409,13 +411,14 @@ final class LdapSchemaCtx extends HierMemDirCtx {
|
||||
}
|
||||
}
|
||||
|
||||
private LdapCtx reopenEntry(Hashtable env) throws NamingException {
|
||||
private LdapCtx reopenEntry(Hashtable<?,?> env) throws NamingException {
|
||||
// Use subschemasubentry name as DN
|
||||
return new LdapCtx(schemaEntryName, host, port,
|
||||
env, hasLdapsScheme);
|
||||
}
|
||||
|
||||
synchronized void modifyAttributes(Hashtable env, ModificationItem[] mods)
|
||||
synchronized void modifyAttributes(Hashtable<?,?> env,
|
||||
ModificationItem[] mods)
|
||||
throws NamingException {
|
||||
if (schemaEntry == null) {
|
||||
schemaEntry = reopenEntry(env);
|
||||
@ -423,7 +426,7 @@ final class LdapSchemaCtx extends HierMemDirCtx {
|
||||
schemaEntry.modifyAttributes("", mods);
|
||||
}
|
||||
|
||||
synchronized void modifyAttributes(Hashtable env, int mod,
|
||||
synchronized void modifyAttributes(Hashtable<?,?> env, int mod,
|
||||
Attributes attrs) throws NamingException {
|
||||
if (schemaEntry == null) {
|
||||
schemaEntry = reopenEntry(env);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -27,7 +27,6 @@ package com.sun.jndi.ldap;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
@ -141,9 +140,9 @@ final class LdapSchemaParser {
|
||||
LdapSchemaCtx schemaRoot)
|
||||
throws NamingException {
|
||||
|
||||
NamingEnumeration objDescs;
|
||||
Attributes objDef;
|
||||
LdapSchemaCtx classDefTree;
|
||||
NamingEnumeration<?> objDescs;
|
||||
Attributes objDef;
|
||||
LdapSchemaCtx classDefTree;
|
||||
|
||||
// create the class def subtree
|
||||
Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
|
||||
@ -173,9 +172,9 @@ final class LdapSchemaParser {
|
||||
LdapSchemaCtx schemaRoot)
|
||||
throws NamingException {
|
||||
|
||||
NamingEnumeration attrDescs;
|
||||
Attributes attrDef;
|
||||
LdapSchemaCtx attrDefTree;
|
||||
NamingEnumeration<?> attrDescs;
|
||||
Attributes attrDef;
|
||||
LdapSchemaCtx attrDefTree;
|
||||
|
||||
// create the AttributeDef subtree
|
||||
Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
|
||||
@ -206,9 +205,9 @@ final class LdapSchemaParser {
|
||||
LdapSchemaCtx schemaRoot)
|
||||
throws NamingException {
|
||||
|
||||
NamingEnumeration syntaxDescs;
|
||||
Attributes syntaxDef;
|
||||
LdapSchemaCtx syntaxDefTree;
|
||||
NamingEnumeration<?> syntaxDescs;
|
||||
Attributes syntaxDef;
|
||||
LdapSchemaCtx syntaxDefTree;
|
||||
|
||||
// create the SyntaxDef subtree
|
||||
Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
|
||||
@ -239,9 +238,9 @@ final class LdapSchemaParser {
|
||||
LdapSchemaCtx schemaRoot)
|
||||
throws NamingException {
|
||||
|
||||
NamingEnumeration matchRuleDescs;
|
||||
Attributes matchRuleDef;
|
||||
LdapSchemaCtx matchRuleDefTree;
|
||||
NamingEnumeration<?> matchRuleDescs;
|
||||
Attributes matchRuleDef;
|
||||
LdapSchemaCtx matchRuleDefTree;
|
||||
|
||||
// create the MatchRuleDef subtree
|
||||
Attributes attrs = new BasicAttributes(LdapClient.caseIgnore);
|
||||
@ -519,8 +518,8 @@ final class LdapSchemaParser {
|
||||
final private static String[] readQDescrList(String string, int[] pos)
|
||||
throws NamingException {
|
||||
|
||||
int begin, end;
|
||||
Vector values = new Vector(5);
|
||||
int begin, end;
|
||||
Vector<String> values = new Vector<>(5);
|
||||
|
||||
if (debug) {
|
||||
System.err.println("ReadQDescrList: pos="+pos[0]);
|
||||
@ -553,7 +552,7 @@ final class LdapSchemaParser {
|
||||
|
||||
String[] answer = new String[values.size()];
|
||||
for (int i = 0; i < answer.length; i++) {
|
||||
answer[i] = (String)values.elementAt(i);
|
||||
answer[i] = values.elementAt(i);
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
@ -614,7 +613,7 @@ final class LdapSchemaParser {
|
||||
|
||||
int begin, cur, end;
|
||||
String oidName = null;
|
||||
Vector values = new Vector(5);
|
||||
Vector<String> values = new Vector<>(5);
|
||||
|
||||
if (debug) {
|
||||
System.err.println("ReadOIDList: pos="+pos[0]);
|
||||
@ -663,7 +662,7 @@ final class LdapSchemaParser {
|
||||
|
||||
String[] answer = new String[values.size()];
|
||||
for (int i = 0; i < answer.length; i++) {
|
||||
answer[i] = (String)values.elementAt(i);
|
||||
answer[i] = values.elementAt(i);
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
@ -843,10 +842,10 @@ final class LdapSchemaParser {
|
||||
String attrId = null;
|
||||
|
||||
// use enumeration because attribute ID is not known
|
||||
for (NamingEnumeration ae = attrs.getAll();
|
||||
for (NamingEnumeration<? extends Attribute> ae = attrs.getAll();
|
||||
ae.hasMoreElements(); ) {
|
||||
|
||||
attr = (Attribute)ae.next();
|
||||
attr = ae.next();
|
||||
attrId = attr.getID();
|
||||
|
||||
// skip those already processed
|
||||
@ -973,10 +972,10 @@ final class LdapSchemaParser {
|
||||
String attrId = null;
|
||||
|
||||
// use enumeration because attribute ID is not known
|
||||
for (NamingEnumeration ae = attrs.getAll();
|
||||
for (NamingEnumeration<? extends Attribute> ae = attrs.getAll();
|
||||
ae.hasMoreElements(); ) {
|
||||
|
||||
attr = (Attribute)ae.next();
|
||||
attr = ae.next();
|
||||
attrId = attr.getID();
|
||||
|
||||
// skip those already processed
|
||||
@ -1040,10 +1039,10 @@ final class LdapSchemaParser {
|
||||
String attrId = null;
|
||||
|
||||
// use enumeration because attribute ID is not known
|
||||
for (NamingEnumeration ae = attrs.getAll();
|
||||
for (NamingEnumeration<? extends Attribute> ae = attrs.getAll();
|
||||
ae.hasMoreElements(); ) {
|
||||
|
||||
attr = (Attribute)ae.next();
|
||||
attr = ae.next();
|
||||
attrId = attr.getID();
|
||||
|
||||
// skip those already processed
|
||||
@ -1117,10 +1116,10 @@ final class LdapSchemaParser {
|
||||
String attrId = null;
|
||||
|
||||
// use enumeration because attribute ID is not known
|
||||
for (NamingEnumeration ae = attrs.getAll();
|
||||
for (NamingEnumeration<? extends Attribute> ae = attrs.getAll();
|
||||
ae.hasMoreElements(); ) {
|
||||
|
||||
attr = (Attribute)ae.next();
|
||||
attr = ae.next();
|
||||
attrId = attr.getID();
|
||||
|
||||
// skip those already processed
|
||||
@ -1201,7 +1200,7 @@ final class LdapSchemaParser {
|
||||
qdList.append(WHSP);
|
||||
qdList.append(OID_LIST_BEGIN);
|
||||
|
||||
NamingEnumeration values = attr.getAll();
|
||||
NamingEnumeration<?> values = attr.getAll();
|
||||
|
||||
while(values.hasMore()) {
|
||||
qdList.append(WHSP);
|
||||
@ -1238,7 +1237,7 @@ final class LdapSchemaParser {
|
||||
oidList.append(WHSP);
|
||||
oidList.append(OID_LIST_BEGIN);
|
||||
|
||||
NamingEnumeration values = oidsAttr.getAll();
|
||||
NamingEnumeration<?> values = oidsAttr.getAll();
|
||||
oidList.append(WHSP);
|
||||
oidList.append(values.next());
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -34,7 +34,8 @@ import javax.naming.ldap.LdapName;
|
||||
|
||||
import com.sun.jndi.toolkit.ctx.Continuation;
|
||||
|
||||
final class LdapSearchEnumeration extends LdapNamingEnumeration {
|
||||
final class LdapSearchEnumeration
|
||||
extends AbstractLdapNamingEnumeration<SearchResult> {
|
||||
|
||||
private Name startName; // prefix of names of search results
|
||||
private LdapCtx.SearchArgs searchArgs = null;
|
||||
@ -52,9 +53,10 @@ final class LdapSearchEnumeration extends LdapNamingEnumeration {
|
||||
searchArgs = args;
|
||||
}
|
||||
|
||||
protected NameClassPair
|
||||
createItem(String dn, Attributes attrs, Vector respCtls)
|
||||
throws NamingException {
|
||||
@Override
|
||||
protected SearchResult createItem(String dn, Attributes attrs,
|
||||
Vector<Control> respCtls)
|
||||
throws NamingException {
|
||||
|
||||
Object obj = null;
|
||||
|
||||
@ -174,6 +176,7 @@ final class LdapSearchEnumeration extends LdapNamingEnumeration {
|
||||
return sr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void appendUnprocessedReferrals(LdapReferralException ex) {
|
||||
|
||||
// a referral has been followed so do not create relative names
|
||||
@ -181,14 +184,16 @@ final class LdapSearchEnumeration extends LdapNamingEnumeration {
|
||||
super.appendUnprocessedReferrals(ex);
|
||||
}
|
||||
|
||||
protected LdapNamingEnumeration
|
||||
getReferredResults(LdapReferralContext refCtx) throws NamingException {
|
||||
@Override
|
||||
protected LdapSearchEnumeration getReferredResults(
|
||||
LdapReferralContext refCtx) throws NamingException {
|
||||
// repeat the original operation at the new context
|
||||
return (LdapSearchEnumeration)
|
||||
refCtx.search(searchArgs.name, searchArgs.filter, searchArgs.cons);
|
||||
return (LdapSearchEnumeration)refCtx.search(
|
||||
searchArgs.name, searchArgs.filter, searchArgs.cons);
|
||||
}
|
||||
|
||||
protected void update(LdapNamingEnumeration ne) {
|
||||
@Override
|
||||
protected void update(AbstractLdapNamingEnumeration<SearchResult> ne) {
|
||||
super.update(ne);
|
||||
|
||||
// Update search-specific variables
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -50,12 +50,12 @@ import com.sun.jndi.toolkit.ctx.Continuation;
|
||||
final class NamingEventNotifier implements Runnable {
|
||||
private final static boolean debug = false;
|
||||
|
||||
private Vector namingListeners;
|
||||
private Vector<NamingListener> namingListeners;
|
||||
private Thread worker;
|
||||
private LdapCtx context;
|
||||
private EventContext eventSrc;
|
||||
private EventSupport support;
|
||||
private NamingEnumeration results;
|
||||
private NamingEnumeration<SearchResult> results;
|
||||
|
||||
// package private; used by EventSupport to remove it
|
||||
NotifierArgs info;
|
||||
@ -83,7 +83,7 @@ final class NamingEventNotifier implements Runnable {
|
||||
context = (LdapCtx)ctx.newInstance(new Control[]{psearch});
|
||||
eventSrc = ctx;
|
||||
|
||||
namingListeners = new Vector();
|
||||
namingListeners = new Vector<>();
|
||||
namingListeners.addElement(firstListener);
|
||||
|
||||
worker = Obj.helper.createThread(this);
|
||||
@ -124,7 +124,8 @@ final class NamingEventNotifier implements Runnable {
|
||||
// Change root of search results so that it will generate
|
||||
// names relative to the event context instead of that
|
||||
// named by nm
|
||||
((LdapSearchEnumeration)results).setStartName(context.currentParsedDN);
|
||||
((LdapSearchEnumeration)(NamingEnumeration)results)
|
||||
.setStartName(context.currentParsedDN);
|
||||
|
||||
SearchResult si;
|
||||
Control[] respctls;
|
||||
@ -132,7 +133,7 @@ final class NamingEventNotifier implements Runnable {
|
||||
long changeNum;
|
||||
|
||||
while (results.hasMore()) {
|
||||
si = (SearchResult)results.next();
|
||||
si = results.next();
|
||||
respctls = (si instanceof HasControls) ?
|
||||
((HasControls) si).getControls() : null;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -133,7 +133,7 @@ final class NotifierArgs {
|
||||
private int controlsCode() {
|
||||
if (controls == null) return 0;
|
||||
|
||||
int total = (int)controls.getTimeLimit() + (int)controls.getCountLimit() +
|
||||
int total = controls.getTimeLimit() + (int)controls.getCountLimit() +
|
||||
(controls.getDerefLinkFlag() ? 1 : 0) +
|
||||
(controls.getReturningObjFlag() ? 1 : 0);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -84,6 +84,7 @@ final class Obj {
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
@Deprecated
|
||||
private static final int REMOTE_LOC = 7;
|
||||
|
||||
// LDAP object classes to support Java objects
|
||||
@ -206,13 +207,13 @@ final class Obj {
|
||||
} else {
|
||||
StringTokenizer parser =
|
||||
new StringTokenizer((String)codebaseAttr.get());
|
||||
Vector vec = new Vector(10);
|
||||
Vector<String> vec = new Vector<>(10);
|
||||
while (parser.hasMoreTokens()) {
|
||||
vec.addElement(parser.nextToken());
|
||||
}
|
||||
String[] answer = new String[vec.size()];
|
||||
for (int i = 0; i < answer.length; i++) {
|
||||
answer[i] = (String)vec.elementAt(i);
|
||||
answer[i] = vec.elementAt(i);
|
||||
}
|
||||
return answer;
|
||||
}
|
||||
@ -410,10 +411,10 @@ final class Obj {
|
||||
* Temporary Vector for decoded RefAddr addresses - used to ensure
|
||||
* unordered addresses are correctly re-ordered.
|
||||
*/
|
||||
Vector refAddrList = new Vector();
|
||||
Vector<RefAddr> refAddrList = new Vector<>();
|
||||
refAddrList.setSize(attr.size());
|
||||
|
||||
for (NamingEnumeration vals = attr.getAll(); vals.hasMore(); ) {
|
||||
for (NamingEnumeration<?> vals = attr.getAll(); vals.hasMore(); ) {
|
||||
|
||||
val = (String)vals.next();
|
||||
|
||||
@ -488,7 +489,7 @@ final class Obj {
|
||||
|
||||
// Copy to real reference
|
||||
for (int i = 0; i < refAddrList.size(); i++) {
|
||||
ref.add((RefAddr)refAddrList.elementAt(i));
|
||||
ref.add(refAddrList.elementAt(i));
|
||||
}
|
||||
}
|
||||
|
||||
@ -502,9 +503,9 @@ final class Obj {
|
||||
|
||||
try {
|
||||
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
|
||||
ObjectOutputStream serial = new ObjectOutputStream(bytes);
|
||||
serial.writeObject(obj);
|
||||
serial.close();
|
||||
try (ObjectOutputStream serial = new ObjectOutputStream(bytes)) {
|
||||
serial.writeObject(obj);
|
||||
}
|
||||
|
||||
return (bytes.toByteArray());
|
||||
|
||||
@ -524,18 +525,14 @@ final class Obj {
|
||||
try {
|
||||
// Create ObjectInputStream for deserialization
|
||||
ByteArrayInputStream bytes = new ByteArrayInputStream(obj);
|
||||
ObjectInputStream deserial = (cl == null ?
|
||||
new ObjectInputStream(bytes) :
|
||||
new LoaderInputStream(bytes, cl));
|
||||
|
||||
try {
|
||||
try (ObjectInputStream deserial = cl == null ?
|
||||
new ObjectInputStream(bytes) :
|
||||
new LoaderInputStream(bytes, cl)) {
|
||||
return deserial.readObject();
|
||||
} catch (ClassNotFoundException e) {
|
||||
NamingException ne = new NamingException();
|
||||
ne.setRootCause(e);
|
||||
throw ne;
|
||||
} finally {
|
||||
deserial.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
NamingException ne = new NamingException();
|
||||
@ -549,7 +546,7 @@ final class Obj {
|
||||
*/
|
||||
static Attributes determineBindAttrs(
|
||||
char separator, Object obj, Attributes attrs, boolean cloned,
|
||||
Name name, Context ctx, Hashtable env)
|
||||
Name name, Context ctx, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
// Call state factories to convert object and attrs
|
||||
@ -582,10 +579,10 @@ final class Obj {
|
||||
|
||||
} else {
|
||||
// Get existing objectclass attribute
|
||||
objectClass = (Attribute)attrs.get("objectClass");
|
||||
objectClass = attrs.get("objectClass");
|
||||
if (objectClass == null && !attrs.isCaseIgnored()) {
|
||||
// %%% workaround
|
||||
objectClass = (Attribute)attrs.get("objectclass");
|
||||
objectClass = attrs.get("objectclass");
|
||||
}
|
||||
|
||||
// No objectclasses supplied, use "top" to start
|
||||
@ -614,8 +611,8 @@ final class Obj {
|
||||
classLoader = cl;
|
||||
}
|
||||
|
||||
protected Class resolveClass(ObjectStreamClass desc) throws IOException,
|
||||
ClassNotFoundException {
|
||||
protected Class<?> resolveClass(ObjectStreamClass desc) throws
|
||||
IOException, ClassNotFoundException {
|
||||
try {
|
||||
// %%% Should use Class.forName(desc.getName(), false, classLoader);
|
||||
// except we can't because that is only available on JDK1.2
|
||||
@ -625,15 +622,15 @@ final class Obj {
|
||||
}
|
||||
}
|
||||
|
||||
protected Class resolveProxyClass(String[] interfaces) throws
|
||||
protected Class<?> resolveProxyClass(String[] interfaces) throws
|
||||
IOException, ClassNotFoundException {
|
||||
ClassLoader nonPublicLoader = null;
|
||||
boolean hasNonPublicInterface = false;
|
||||
|
||||
// define proxy in class loader of non-public interface(s), if any
|
||||
Class[] classObjs = new Class[interfaces.length];
|
||||
Class<?>[] classObjs = new Class<>[interfaces.length];
|
||||
for (int i = 0; i < interfaces.length; i++) {
|
||||
Class cl = Class.forName(interfaces[i], false, classLoader);
|
||||
Class<?> cl = Class.forName(interfaces[i], false, classLoader);
|
||||
if ((cl.getModifiers() & Modifier.PUBLIC) == 0) {
|
||||
if (hasNonPublicInterface) {
|
||||
if (nonPublicLoader != cl.getClassLoader()) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -27,6 +27,6 @@ package com.sun.jndi.ldap;
|
||||
|
||||
import javax.naming.NamingEnumeration;
|
||||
|
||||
interface ReferralEnumeration extends NamingEnumeration {
|
||||
interface ReferralEnumeration<T> extends NamingEnumeration<T> {
|
||||
void appendUnprocessedReferrals(LdapReferralException ex);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -26,9 +26,7 @@
|
||||
package com.sun.jndi.ldap;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Hashtable;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Random;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.List;
|
||||
@ -39,8 +37,6 @@ import javax.naming.spi.NamingManager;
|
||||
import javax.naming.ldap.LdapName;
|
||||
import javax.naming.ldap.Rdn;
|
||||
|
||||
import com.sun.jndi.ldap.LdapURL;
|
||||
|
||||
/**
|
||||
* This class discovers the location of LDAP services by querying DNS.
|
||||
* See http://www.ietf.org/internet-drafts/draft-ietf-ldapext-locate-07.txt
|
||||
@ -78,10 +74,10 @@ class ServiceLocator {
|
||||
// process RDNs left-to-right
|
||||
//List<Rdn> rdnList = ldapName.getRdns();
|
||||
|
||||
List rdnList = ldapName.getRdns();
|
||||
List<Rdn> rdnList = ldapName.getRdns();
|
||||
for (int i = rdnList.size() - 1; i >= 0; i--) {
|
||||
//Rdn rdn = rdnList.get(i);
|
||||
Rdn rdn = (Rdn) rdnList.get(i);
|
||||
Rdn rdn = rdnList.get(i);
|
||||
|
||||
// single-valued RDN with a DC attribute
|
||||
if ((rdn.size() == 1) &&
|
||||
@ -117,7 +113,7 @@ class ServiceLocator {
|
||||
* @return An ordered list of hostports for the LDAP service or null if
|
||||
* the service has not been located.
|
||||
*/
|
||||
static String[] getLdapService(String domainName, Hashtable environment) {
|
||||
static String[] getLdapService(String domainName, Hashtable<?,?> environment) {
|
||||
|
||||
if (domainName == null || domainName.length() == 0) {
|
||||
return null;
|
||||
@ -252,7 +248,7 @@ class ServiceLocator {
|
||||
* See http://www.ietf.org/rfc/rfc2782.txt
|
||||
*/
|
||||
|
||||
static class SrvRecord implements Comparable {
|
||||
static class SrvRecord implements Comparable<SrvRecord> {
|
||||
|
||||
int priority;
|
||||
int weight;
|
||||
@ -284,8 +280,7 @@ static class SrvRecord implements Comparable {
|
||||
* Sort records in ascending order of priority value. For records with
|
||||
* equal priority move those with weight 0 to the top of the list.
|
||||
*/
|
||||
public int compareTo(Object o) {
|
||||
SrvRecord that = (SrvRecord) o;
|
||||
public int compareTo(SrvRecord that) {
|
||||
if (priority > that.priority) {
|
||||
return 1; // this > that
|
||||
} else if (priority < that.priority) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -54,9 +54,9 @@ class SimpleClientId extends ClientId {
|
||||
} else if (passwd instanceof String) {
|
||||
this.passwd = passwd;
|
||||
} else if (passwd instanceof byte[]) {
|
||||
this.passwd = (byte[]) ((byte[])passwd).clone();
|
||||
this.passwd = ((byte[])passwd).clone();
|
||||
} else if (passwd instanceof char[]) {
|
||||
this.passwd = (char[]) ((char[])passwd).clone();
|
||||
this.passwd = ((char[])passwd).clone();
|
||||
} else {
|
||||
this.passwd = passwd;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -41,7 +41,7 @@ final class UnsolicitedResponseImpl implements UnsolicitedNotification {
|
||||
private NamingException exception;
|
||||
private Control[] controls;
|
||||
|
||||
UnsolicitedResponseImpl(String oid, byte[] berVal, Vector ref,
|
||||
UnsolicitedResponseImpl(String oid, byte[] berVal, Vector<Vector<String>> ref,
|
||||
int status, String msg, String matchedDN, Control[] controls) {
|
||||
this.oid = oid;
|
||||
this.extensionValue = berVal;
|
||||
@ -50,7 +50,8 @@ final class UnsolicitedResponseImpl implements UnsolicitedNotification {
|
||||
int len = ref.size();
|
||||
referrals = new String[len];
|
||||
for (int i = 0; i < len; i++) {
|
||||
referrals[i] = (String)ref.elementAt(i);
|
||||
// ref is a list of single-String Vectors
|
||||
referrals[i] = ref.elementAt(i).elementAt(0);
|
||||
}
|
||||
}
|
||||
exception = LdapCtx.mapErrorCode(status, msg);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -72,7 +72,7 @@ abstract class VersionHelper {
|
||||
return urlArray;
|
||||
}
|
||||
|
||||
abstract Class loadClass(String className) throws ClassNotFoundException;
|
||||
abstract Class<?> loadClass(String className) throws ClassNotFoundException;
|
||||
|
||||
abstract Thread createThread(Runnable r);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -66,15 +66,15 @@ final class VersionHelper12 extends VersionHelper {
|
||||
}
|
||||
}
|
||||
|
||||
Class loadClass(String className) throws ClassNotFoundException {
|
||||
Class<?> loadClass(String className) throws ClassNotFoundException {
|
||||
ClassLoader cl = getContextClassLoader();
|
||||
return Class.forName(className, true, cl);
|
||||
}
|
||||
|
||||
private ClassLoader getContextClassLoader() {
|
||||
return (ClassLoader) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<ClassLoader>() {
|
||||
public ClassLoader run() {
|
||||
return Thread.currentThread().getContextClassLoader();
|
||||
}
|
||||
}
|
||||
@ -82,9 +82,9 @@ final class VersionHelper12 extends VersionHelper {
|
||||
}
|
||||
|
||||
Thread createThread(final Runnable r) {
|
||||
return (Thread) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<Thread>() {
|
||||
public Thread run() {
|
||||
return new Thread(r);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -27,16 +27,8 @@ package com.sun.jndi.ldap.ext;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.net.Socket;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import java.security.Principal;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.security.cert.CertificateException;
|
||||
@ -45,11 +37,9 @@ import javax.net.ssl.SSLSession;
|
||||
import javax.net.ssl.SSLSocket;
|
||||
import javax.net.ssl.SSLSocketFactory;
|
||||
import javax.net.ssl.SSLPeerUnverifiedException;
|
||||
import javax.net.ssl.SSLContext;
|
||||
import javax.net.ssl.HostnameVerifier;
|
||||
import sun.security.util.HostnameChecker;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.ldap.*;
|
||||
import com.sun.jndi.ldap.Connection;
|
||||
|
||||
@ -415,7 +405,7 @@ final public class StartTlsResponseImpl extends StartTlsResponse {
|
||||
// Use ciphersuite to determine whether Kerberos is active.
|
||||
if (session.getCipherSuite().startsWith("TLS_KRB5")) {
|
||||
Principal principal = getPeerPrincipal(session);
|
||||
if (!checker.match(hostname, principal)) {
|
||||
if (!HostnameChecker.match(hostname, principal)) {
|
||||
throw new SSLPeerUnverifiedException(
|
||||
"hostname of the kerberos principal:" + principal +
|
||||
" does not match the hostname:" + hostname);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -71,10 +71,10 @@ final class Connections implements PoolCallback {
|
||||
|
||||
final private int maxSize;
|
||||
final private int prefSize;
|
||||
final private List conns;
|
||||
final private List<ConnectionDesc> conns;
|
||||
|
||||
private boolean closed = false; // Closed for business
|
||||
private Reference ref; // maintains reference to id to prevent premature GC
|
||||
private Reference<Object> ref; // maintains reference to id to prevent premature GC
|
||||
|
||||
/**
|
||||
* @param id the identity (connection request) of the connections in the list
|
||||
@ -99,11 +99,11 @@ final class Connections implements PoolCallback {
|
||||
} else {
|
||||
this.prefSize = prefSize;
|
||||
}
|
||||
conns = new ArrayList(maxSize > 0 ? maxSize : DEFAULT_SIZE);
|
||||
conns = new ArrayList<>(maxSize > 0 ? maxSize : DEFAULT_SIZE);
|
||||
|
||||
// Maintain soft ref to id so that this Connections' entry in
|
||||
// Pool doesn't get GC'ed prematurely
|
||||
ref = new SoftReference(id);
|
||||
ref = new SoftReference<>(id);
|
||||
|
||||
d("init size=", initSize);
|
||||
d("max size=", maxSize);
|
||||
@ -186,7 +186,7 @@ final class Connections implements PoolCallback {
|
||||
// exceeds prefSize, then first look for an idle connection
|
||||
ConnectionDesc entry;
|
||||
for (int i = 0; i < size; i++) {
|
||||
entry = (ConnectionDesc) conns.get(i);
|
||||
entry = conns.get(i);
|
||||
if ((conn = entry.tryUse()) != null) {
|
||||
d("get(): use ", conn);
|
||||
td("Use ", conn);
|
||||
@ -239,7 +239,7 @@ final class Connections implements PoolCallback {
|
||||
td("Release ", conn);
|
||||
|
||||
// Get ConnectionDesc from list to get correct state info
|
||||
entry = (ConnectionDesc) conns.get(loc);
|
||||
entry = conns.get(loc);
|
||||
// Return connection to list, ready for reuse
|
||||
entry.release();
|
||||
}
|
||||
@ -291,10 +291,10 @@ final class Connections implements PoolCallback {
|
||||
* @return true if no more connections in list
|
||||
*/
|
||||
synchronized boolean expire(long threshold) {
|
||||
Iterator iter = conns.iterator();
|
||||
Iterator<ConnectionDesc> iter = conns.iterator();
|
||||
ConnectionDesc entry;
|
||||
while (iter.hasNext()) {
|
||||
entry = (ConnectionDesc) iter.next();
|
||||
entry = iter.next();
|
||||
if (entry.expire(threshold)) {
|
||||
d("expire(): removing ", entry);
|
||||
td("Expired ", entry);
|
||||
@ -333,7 +333,7 @@ final class Connections implements PoolCallback {
|
||||
|
||||
ConnectionDesc entry;
|
||||
for (int i = 0; i < len; i++) {
|
||||
entry = (ConnectionDesc) conns.get(i);
|
||||
entry = conns.get(i);
|
||||
use += entry.getUseCount();
|
||||
switch (entry.getState()) {
|
||||
case ConnectionDesc.BUSY:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 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
|
||||
@ -55,11 +55,12 @@ import java.lang.ref.ReferenceQueue;
|
||||
* reference to Connections used for closing (which in turn terminates
|
||||
* the Connection thread) it by monitoring the ReferenceQueue.
|
||||
*/
|
||||
class ConnectionsWeakRef extends WeakReference {
|
||||
class ConnectionsWeakRef extends WeakReference<ConnectionsRef> {
|
||||
|
||||
private final Connections conns;
|
||||
|
||||
ConnectionsWeakRef (ConnectionsRef connsRef, ReferenceQueue queue) {
|
||||
ConnectionsWeakRef (ConnectionsRef connsRef,
|
||||
ReferenceQueue<? super ConnectionsRef> queue) {
|
||||
super(connsRef, queue);
|
||||
this.conns = connsRef.getConnections();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -30,7 +30,6 @@ import java.util.WeakHashMap;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import java.io.PrintStream;
|
||||
@ -83,17 +82,18 @@ final public class Pool {
|
||||
/*
|
||||
* Used for connections cleanup
|
||||
*/
|
||||
private static final ReferenceQueue queue = new ReferenceQueue();
|
||||
private static final Collection weakRefs =
|
||||
Collections.synchronizedList(new LinkedList());
|
||||
private static final ReferenceQueue<ConnectionsRef> queue =
|
||||
new ReferenceQueue<>();
|
||||
private static final Collection<Reference<ConnectionsRef>> weakRefs =
|
||||
Collections.synchronizedList(new LinkedList<Reference<ConnectionsRef>>());
|
||||
|
||||
final private int maxSize; // max num of identical conn per pool
|
||||
final private int prefSize; // preferred num of identical conn per pool
|
||||
final private int initSize; // initial number of identical conn to create
|
||||
final private Map map;
|
||||
final private Map<Object, ConnectionsRef> map;
|
||||
|
||||
public Pool(int initSize, int prefSize, int maxSize) {
|
||||
map = new WeakHashMap();
|
||||
map = new WeakHashMap<>();
|
||||
this.prefSize = prefSize;
|
||||
this.maxSize = maxSize;
|
||||
this.initSize = initSize;
|
||||
@ -135,7 +135,8 @@ final public class Pool {
|
||||
map.put(id, connsRef);
|
||||
|
||||
// Create a weak reference to ConnectionsRef
|
||||
Reference weakRef = new ConnectionsWeakRef(connsRef, queue);
|
||||
Reference<ConnectionsRef> weakRef =
|
||||
new ConnectionsWeakRef(connsRef, queue);
|
||||
|
||||
// Keep the weak reference through the element of a linked list
|
||||
weakRefs.add(weakRef);
|
||||
@ -148,7 +149,7 @@ final public class Pool {
|
||||
}
|
||||
|
||||
private Connections getConnections(Object id) {
|
||||
ConnectionsRef ref = (ConnectionsRef) map.get(id);
|
||||
ConnectionsRef ref = map.get(id);
|
||||
return (ref != null) ? ref.getConnections() : null;
|
||||
}
|
||||
|
||||
@ -163,11 +164,10 @@ final public class Pool {
|
||||
*/
|
||||
public void expire(long threshold) {
|
||||
synchronized (map) {
|
||||
Collection coll = map.values();
|
||||
Iterator iter = coll.iterator();
|
||||
Iterator<ConnectionsRef> iter = map.values().iterator();
|
||||
Connections conns;
|
||||
while (iter.hasNext()) {
|
||||
conns = ((ConnectionsRef) (iter.next())).getConnections();
|
||||
conns = iter.next().getConnections();
|
||||
if (conns.expire(threshold)) {
|
||||
d("expire(): removing ", conns);
|
||||
iter.remove();
|
||||
@ -202,7 +202,6 @@ final public class Pool {
|
||||
|
||||
|
||||
public void showStats(PrintStream out) {
|
||||
Map.Entry entry;
|
||||
Object id;
|
||||
Connections conns;
|
||||
|
||||
@ -212,13 +211,9 @@ final public class Pool {
|
||||
out.println("initial pool size: " + initSize);
|
||||
out.println("current pool size: " + map.size());
|
||||
|
||||
Set entries = map.entrySet();
|
||||
Iterator iter = entries.iterator();
|
||||
|
||||
while (iter.hasNext()) {
|
||||
entry = (Map.Entry) iter.next();
|
||||
for (Map.Entry<Object, ConnectionsRef> entry : map.entrySet()) {
|
||||
id = entry.getKey();
|
||||
conns = ((ConnectionsRef) entry.getValue()).getConnections();
|
||||
conns = entry.getValue().getConnections();
|
||||
out.println(" " + id + ":" + conns.getStats());
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2002, 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
|
||||
@ -41,7 +41,7 @@ final public class PoolCleaner extends Thread {
|
||||
public PoolCleaner(long period, Pool[] pools) {
|
||||
super();
|
||||
this.period = period;
|
||||
this.pools = (Pool[]) pools.clone();
|
||||
this.pools = pools.clone();
|
||||
setDaemon(true);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -57,7 +57,7 @@ final class DefaultCallbackHandler implements CallbackHandler {
|
||||
if (cred instanceof String) {
|
||||
passwd = ((String)cred).toCharArray();
|
||||
} else if (cred instanceof char[]) {
|
||||
passwd = (char[])((char[])cred).clone();
|
||||
passwd = ((char[])cred).clone();
|
||||
} else if (cred != null) {
|
||||
// assume UTF-8 encoding
|
||||
String orig = new String((byte[])cred, "UTF8");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -89,9 +89,10 @@ final public class LdapSasl {
|
||||
* @param bindCtls The possibly null controls to accompany the bind
|
||||
* @return LdapResult containing status of the bind
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static LdapResult saslBind(LdapClient clnt, Connection conn,
|
||||
String server, String dn, Object pw,
|
||||
String authMech, Hashtable env, Control[] bindCtls)
|
||||
String authMech, Hashtable<?,?> env, Control[] bindCtls)
|
||||
throws IOException, NamingException {
|
||||
|
||||
SaslClient saslClnt = null;
|
||||
@ -112,7 +113,7 @@ final public class LdapSasl {
|
||||
try {
|
||||
// Create SASL client to use using SASL package
|
||||
saslClnt = Sasl.createSaslClient(
|
||||
mechs, authzId, "ldap", server, env, cbh);
|
||||
mechs, authzId, "ldap", server, (Hashtable<String, ?>)env, cbh);
|
||||
|
||||
if (saslClnt == null) {
|
||||
throw new AuthenticationNotSupportedException(authMech);
|
||||
@ -185,13 +186,13 @@ final public class LdapSasl {
|
||||
*/
|
||||
private static String[] getSaslMechanismNames(String str) {
|
||||
StringTokenizer parser = new StringTokenizer(str);
|
||||
Vector mechs = new Vector(10);
|
||||
Vector<String> mechs = new Vector<>(10);
|
||||
while (parser.hasMoreTokens()) {
|
||||
mechs.addElement(parser.nextToken());
|
||||
}
|
||||
String[] mechNames = new String[mechs.size()];
|
||||
for (int i = 0; i < mechs.size(); i++) {
|
||||
mechNames[i] = (String)mechs.elementAt(i);
|
||||
mechNames[i] = mechs.elementAt(i);
|
||||
}
|
||||
return mechNames;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -46,7 +46,7 @@ import javax.naming.spi.NamingManager;
|
||||
|
||||
public class RegistryContext implements Context, Referenceable {
|
||||
|
||||
private Hashtable environment;
|
||||
private Hashtable<String, Object> environment;
|
||||
private Registry registry;
|
||||
private String host;
|
||||
private int port;
|
||||
@ -67,10 +67,13 @@ public class RegistryContext implements Context, Referenceable {
|
||||
* Cloning of "env" is handled by caller; see comments within
|
||||
* RegistryContextFactory.getObjectInstance(), for example.
|
||||
*/
|
||||
public RegistryContext(String host, int port, Hashtable env)
|
||||
@SuppressWarnings("unchecked")
|
||||
public RegistryContext(String host, int port, Hashtable<?, ?> env)
|
||||
throws NamingException
|
||||
{
|
||||
environment = ((env == null) ? new Hashtable(5) : env);
|
||||
environment = (env == null)
|
||||
? new Hashtable<String, Object>(5)
|
||||
: (Hashtable<String, Object>) env;
|
||||
if (environment.get(SECURITY_MGR) != null) {
|
||||
installSecurityMgr();
|
||||
}
|
||||
@ -93,8 +96,9 @@ public class RegistryContext implements Context, Referenceable {
|
||||
* won't close the other).
|
||||
*/
|
||||
// %%% Alternatively, this could be done with a clone() method.
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
RegistryContext(RegistryContext ctx) {
|
||||
environment = (Hashtable)ctx.environment.clone();
|
||||
environment = (Hashtable<String, Object>)ctx.environment.clone();
|
||||
registry = ctx.registry;
|
||||
host = ctx.host;
|
||||
port = ctx.port;
|
||||
@ -195,7 +199,8 @@ public class RegistryContext implements Context, Referenceable {
|
||||
rename(new CompositeName(name), new CompositeName(newName));
|
||||
}
|
||||
|
||||
public NamingEnumeration list(Name name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(Name name) throws
|
||||
NamingException {
|
||||
if (!name.isEmpty()) {
|
||||
throw (new InvalidNameException(
|
||||
"RegistryContext: can only list \"\""));
|
||||
@ -208,11 +213,12 @@ public class RegistryContext implements Context, Referenceable {
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration list(String name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(String name) throws
|
||||
NamingException {
|
||||
return list(new CompositeName(name));
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(Name name)
|
||||
public NamingEnumeration<Binding> listBindings(Name name)
|
||||
throws NamingException
|
||||
{
|
||||
if (!name.isEmpty()) {
|
||||
@ -227,7 +233,8 @@ public class RegistryContext implements Context, Referenceable {
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(String name) throws NamingException {
|
||||
public NamingEnumeration<Binding> listBindings(String name) throws
|
||||
NamingException {
|
||||
return listBindings(new CompositeName(name));
|
||||
}
|
||||
|
||||
@ -290,8 +297,9 @@ public class RegistryContext implements Context, Referenceable {
|
||||
return environment.put(propName, propVal);
|
||||
}
|
||||
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
return (Hashtable)environment.clone();
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Hashtable<String, Object> getEnvironment() throws NamingException {
|
||||
return (Hashtable<String, Object>)environment.clone();
|
||||
}
|
||||
|
||||
public void close() {
|
||||
@ -483,11 +491,9 @@ class AtomicNameParser implements NameParser {
|
||||
|
||||
|
||||
/**
|
||||
* An enumeration of name / class-name pairs. Since we don't know anything
|
||||
* about the classes, each class name is returned as the generic
|
||||
* "java.lang.Object".
|
||||
* An enumeration of name / class-name pairs.
|
||||
*/
|
||||
class NameClassPairEnumeration implements NamingEnumeration {
|
||||
class NameClassPairEnumeration implements NamingEnumeration<NameClassPair> {
|
||||
private final String[] names;
|
||||
private int nextName; // index into "names"
|
||||
|
||||
@ -500,7 +506,7 @@ class NameClassPairEnumeration implements NamingEnumeration {
|
||||
return (nextName < names.length);
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
public NameClassPair next() throws NamingException {
|
||||
if (!hasMore()) {
|
||||
throw (new java.util.NoSuchElementException());
|
||||
}
|
||||
@ -518,7 +524,7 @@ class NameClassPairEnumeration implements NamingEnumeration {
|
||||
return hasMore();
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
public NameClassPair nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) { // should never happen
|
||||
@ -541,7 +547,7 @@ class NameClassPairEnumeration implements NamingEnumeration {
|
||||
* requested. The problem with that approach is that Binding.getObject()
|
||||
* cannot throw NamingException.
|
||||
*/
|
||||
class BindingEnumeration implements NamingEnumeration {
|
||||
class BindingEnumeration implements NamingEnumeration<Binding> {
|
||||
private RegistryContext ctx;
|
||||
private final String[] names;
|
||||
private int nextName; // index into "names"
|
||||
@ -564,7 +570,7 @@ class BindingEnumeration implements NamingEnumeration {
|
||||
return (nextName < names.length);
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
public Binding next() throws NamingException {
|
||||
if (!hasMore()) {
|
||||
throw (new java.util.NoSuchElementException());
|
||||
}
|
||||
@ -584,7 +590,7 @@ class BindingEnumeration implements NamingEnumeration {
|
||||
return hasMore();
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
public Binding nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -95,7 +95,7 @@ public class RegistryContextFactory
|
||||
return obj;
|
||||
}
|
||||
|
||||
private static Context URLToContext(String url, Hashtable env)
|
||||
private static Context URLToContext(String url, Hashtable<?,?> env)
|
||||
throws NamingException
|
||||
{
|
||||
rmiURLContextFactory factory = new rmiURLContextFactory();
|
||||
@ -108,7 +108,7 @@ public class RegistryContextFactory
|
||||
}
|
||||
}
|
||||
|
||||
private static Object URLsToObject(String[] urls, Hashtable env)
|
||||
private static Object URLsToObject(String[] urls, Hashtable<?,?> env)
|
||||
throws NamingException
|
||||
{
|
||||
rmiURLContextFactory factory = new rmiURLContextFactory();
|
||||
@ -119,7 +119,7 @@ public class RegistryContextFactory
|
||||
* Reads environment to find URL of initial context.
|
||||
* The default URL is "rmi:".
|
||||
*/
|
||||
private static String getInitCtxURL(Hashtable env) {
|
||||
private static String getInitCtxURL(Hashtable<?,?> env) {
|
||||
|
||||
final String defaultURL = "rmi:";
|
||||
|
||||
@ -152,9 +152,9 @@ public class RegistryContextFactory
|
||||
int size = 0; // number of URLs
|
||||
String[] urls = new String[ref.size()];
|
||||
|
||||
Enumeration addrs = ref.getAll();
|
||||
Enumeration<RefAddr> addrs = ref.getAll();
|
||||
while (addrs.hasMoreElements()) {
|
||||
RefAddr addr = (RefAddr)addrs.nextElement();
|
||||
RefAddr addr = addrs.nextElement();
|
||||
|
||||
if ((addr instanceof StringRefAddr) &&
|
||||
addr.getType().equals(ADDRESS_TYPE)) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -158,7 +158,7 @@ public class CorbaUtils {
|
||||
* Use all String properties from env for initializing ORB
|
||||
* @return A non-null ORB.
|
||||
*/
|
||||
public static ORB getOrb(String server, int port, Hashtable env) {
|
||||
public static ORB getOrb(String server, int port, Hashtable<?,?> env) {
|
||||
// See if we can get info from environment
|
||||
Properties orbProp;
|
||||
|
||||
@ -169,7 +169,7 @@ public class CorbaUtils {
|
||||
orbProp = (Properties) env.clone();
|
||||
} else {
|
||||
// Get all String properties
|
||||
Enumeration envProp;
|
||||
Enumeration<?> envProp;
|
||||
orbProp = new Properties();
|
||||
for (envProp = env.keys(); envProp.hasMoreElements();) {
|
||||
String key = (String)envProp.nextElement();
|
||||
@ -239,7 +239,7 @@ public class CorbaUtils {
|
||||
// Fields used for reflection of RMI-IIOP
|
||||
private static Method toStubMethod = null;
|
||||
private static Method connectMethod = null;
|
||||
private static Class corbaStubClass = null;
|
||||
private static Class<?> corbaStubClass = null;
|
||||
/**
|
||||
* Initializes reflection method handles for RMI-IIOP.
|
||||
* @exception ClassNotFoundException javax.rmi.CORBA.* not available
|
||||
@ -252,19 +252,19 @@ public class CorbaUtils {
|
||||
|
||||
try {
|
||||
connectMethod = corbaStubClass.getMethod("connect",
|
||||
new Class[] {org.omg.CORBA.ORB.class});
|
||||
new Class<>[] {org.omg.CORBA.ORB.class});
|
||||
} catch (NoSuchMethodException e) {
|
||||
throw new IllegalStateException(
|
||||
"No method definition for javax.rmi.CORBA.Stub.connect(org.omg.CORBA.ORB)");
|
||||
}
|
||||
|
||||
// Get javax.rmi.PortableRemoteObject method
|
||||
Class proClass = Class.forName("javax.rmi.PortableRemoteObject");
|
||||
// Get javax.rmi.PortableRemoteObject class
|
||||
Class<?> proClass = Class.forName("javax.rmi.PortableRemoteObject");
|
||||
|
||||
// Get javax.rmi.PortableRemoteObject(java.rmi.Remote) method
|
||||
// Get javax.rmi.PortableRemoteObject.toStub(java.rmi.Remote) method
|
||||
try {
|
||||
toStubMethod = proClass.getMethod("toStub",
|
||||
new Class[] {java.rmi.Remote.class});
|
||||
new Class<?>[] {java.rmi.Remote.class});
|
||||
|
||||
} catch (NoSuchMethodException e) {
|
||||
throw new IllegalStateException(
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -26,7 +26,6 @@
|
||||
package com.sun.jndi.toolkit.ctx;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.spi.ResolveResult;
|
||||
|
||||
/**
|
||||
* Clients: deal only with names for its own naming service
|
||||
@ -58,9 +57,9 @@ public abstract class AtomicContext extends ComponentContext {
|
||||
protected abstract Object a_lookupLink(String name, Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration a_list(
|
||||
protected abstract NamingEnumeration<NameClassPair> a_list(
|
||||
Continuation cont) throws NamingException;
|
||||
protected abstract NamingEnumeration a_listBindings(
|
||||
protected abstract NamingEnumeration<Binding> a_listBindings(
|
||||
Continuation cont) throws NamingException;
|
||||
protected abstract void a_bind(String name, Object obj, Continuation cont)
|
||||
throws NamingException;
|
||||
@ -193,12 +192,12 @@ public abstract class AtomicContext extends ComponentContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration a_list_nns(Continuation cont)
|
||||
protected NamingEnumeration<NameClassPair> a_list_nns(Continuation cont)
|
||||
throws NamingException {
|
||||
a_processJunction_nns(cont);
|
||||
return null;
|
||||
}
|
||||
protected NamingEnumeration a_listBindings_nns(Continuation cont)
|
||||
protected NamingEnumeration<Binding> a_listBindings_nns(Continuation cont)
|
||||
throws NamingException {
|
||||
a_processJunction_nns(cont);
|
||||
return null;
|
||||
@ -273,7 +272,7 @@ public abstract class AtomicContext extends ComponentContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_list(Name name,
|
||||
protected NamingEnumeration<NameClassPair> c_list(Name name,
|
||||
Continuation cont) throws NamingException {
|
||||
if (resolve_to_context(name, cont)) {
|
||||
return a_list(cont);
|
||||
@ -281,7 +280,7 @@ public abstract class AtomicContext extends ComponentContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_listBindings(Name name,
|
||||
protected NamingEnumeration<Binding> c_listBindings(Name name,
|
||||
Continuation cont) throws NamingException {
|
||||
if (resolve_to_context(name, cont)) {
|
||||
return a_listBindings(cont);
|
||||
@ -392,7 +391,7 @@ public abstract class AtomicContext extends ComponentContext {
|
||||
}
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_list_nns(Name name,
|
||||
protected NamingEnumeration<NameClassPair> c_list_nns(Name name,
|
||||
Continuation cont) throws NamingException {
|
||||
if (_contextType == _ATOMIC) {
|
||||
resolve_to_nns_and_continue(name, cont);
|
||||
@ -403,14 +402,14 @@ public abstract class AtomicContext extends ComponentContext {
|
||||
}
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_listBindings_nns(Name name,
|
||||
protected NamingEnumeration<Binding> c_listBindings_nns(Name name,
|
||||
Continuation cont) throws NamingException {
|
||||
if (_contextType == _ATOMIC) {
|
||||
resolve_to_nns_and_continue(name, cont);
|
||||
return null;
|
||||
} else {
|
||||
// use ComponentContext
|
||||
return super.c_list_nns(name, cont);
|
||||
return super.c_listBindings_nns(name, cont);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -27,7 +27,6 @@ package com.sun.jndi.toolkit.ctx;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
import javax.naming.spi.ResolveResult;
|
||||
|
||||
/**
|
||||
* Direct subclasses of AtomicDirContext must provide implementations for
|
||||
@ -79,20 +78,25 @@ public abstract class AtomicDirContext extends ComponentDirContext {
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration a_search(Attributes matchingAttributes,
|
||||
protected abstract NamingEnumeration<SearchResult> a_search(
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration a_search(String name,
|
||||
protected abstract NamingEnumeration<SearchResult> a_search(
|
||||
String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons, Continuation cont)
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration a_search(String name,
|
||||
protected abstract NamingEnumeration<SearchResult> a_search(
|
||||
String name,
|
||||
String filter,
|
||||
SearchControls cons, Continuation cont)
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract DirContext a_getSchema(Continuation cont)
|
||||
@ -163,7 +167,8 @@ public abstract class AtomicDirContext extends ComponentDirContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration a_search_nns(Attributes matchingAttributes,
|
||||
protected NamingEnumeration<SearchResult> a_search_nns(
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
@ -171,20 +176,20 @@ public abstract class AtomicDirContext extends ComponentDirContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration a_search_nns(String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> a_search_nns(String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
a_processJunction_nns(name, cont);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration a_search_nns(String name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> a_search_nns(String name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
a_processJunction_nns(name, cont);
|
||||
return null;
|
||||
@ -250,7 +255,7 @@ public abstract class AtomicDirContext extends ComponentDirContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search(Name name,
|
||||
protected NamingEnumeration<SearchResult> c_search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
@ -260,19 +265,21 @@ public abstract class AtomicDirContext extends ComponentDirContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons, Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> c_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
if (resolve_to_penultimate_context(name, cont))
|
||||
return a_search(name.toString(), filter, cons, cont);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons, Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> c_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
if (resolve_to_penultimate_context(name, cont))
|
||||
return a_search(name.toString(), filterExpr, filterArgs, cons, cont);
|
||||
@ -340,7 +347,8 @@ public abstract class AtomicDirContext extends ComponentDirContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search_nns(Name name,
|
||||
protected NamingEnumeration<SearchResult> c_search_nns(
|
||||
Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
@ -349,20 +357,21 @@ public abstract class AtomicDirContext extends ComponentDirContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search_nns(Name name,
|
||||
String filter,
|
||||
SearchControls cons, Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> c_search_nns(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
if (resolve_to_penultimate_context_nns(name, cont))
|
||||
return a_search_nns(name.toString(), filter, cons, cont);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search_nns(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> c_search_nns(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
if (resolve_to_penultimate_context_nns(name, cont))
|
||||
return a_search_nns(name.toString(), filterExpr, filterArgs,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -25,8 +25,6 @@
|
||||
|
||||
package com.sun.jndi.toolkit.ctx;
|
||||
|
||||
import java.util.Hashtable;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.spi.ResolveResult;
|
||||
|
||||
@ -57,9 +55,9 @@ public abstract class ComponentContext extends PartialCompositeContext {
|
||||
protected abstract Object c_lookupLink(Name name, Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration c_list(Name name,
|
||||
protected abstract NamingEnumeration<NameClassPair> c_list(Name name,
|
||||
Continuation cont) throws NamingException;
|
||||
protected abstract NamingEnumeration c_listBindings(Name name,
|
||||
protected abstract NamingEnumeration<Binding> c_listBindings(Name name,
|
||||
Continuation cont) throws NamingException;
|
||||
protected abstract void c_bind(Name name, Object obj, Continuation cont)
|
||||
throws NamingException;
|
||||
@ -237,13 +235,13 @@ public abstract class ComponentContext extends PartialCompositeContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_list_nns(Name name,
|
||||
protected NamingEnumeration<NameClassPair> c_list_nns(Name name,
|
||||
Continuation cont) throws NamingException {
|
||||
c_processJunction_nns(name, cont);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_listBindings_nns(Name name,
|
||||
protected NamingEnumeration<Binding> c_listBindings_nns(Name name,
|
||||
Continuation cont) throws NamingException {
|
||||
c_processJunction_nns(name, cont);
|
||||
return null;
|
||||
@ -495,7 +493,7 @@ public abstract class ComponentContext extends PartialCompositeContext {
|
||||
/* implementation for Resolver method */
|
||||
|
||||
protected ResolveResult p_resolveToClass(Name name,
|
||||
Class contextType,
|
||||
Class<?> contextType,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
|
||||
@ -556,9 +554,9 @@ public abstract class ComponentContext extends PartialCompositeContext {
|
||||
return ret;
|
||||
}
|
||||
|
||||
protected NamingEnumeration p_list(Name name, Continuation cont)
|
||||
protected NamingEnumeration<NameClassPair> p_list(Name name, Continuation cont)
|
||||
throws NamingException {
|
||||
NamingEnumeration ret = null;
|
||||
NamingEnumeration<NameClassPair> ret = null;
|
||||
HeadTail res = p_resolveIntermediate(name, cont);
|
||||
switch (res.getStatus()) {
|
||||
case TERMINAL_NNS_COMPONENT:
|
||||
@ -581,9 +579,9 @@ public abstract class ComponentContext extends PartialCompositeContext {
|
||||
return ret;
|
||||
}
|
||||
|
||||
protected NamingEnumeration p_listBindings(Name name, Continuation cont) throws
|
||||
protected NamingEnumeration<Binding> p_listBindings(Name name, Continuation cont) throws
|
||||
NamingException {
|
||||
NamingEnumeration ret = null;
|
||||
NamingEnumeration<Binding> ret = null;
|
||||
HeadTail res = p_resolveIntermediate(name, cont);
|
||||
switch (res.getStatus()) {
|
||||
case TERMINAL_NNS_COMPONENT:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -28,8 +28,6 @@ package com.sun.jndi.toolkit.ctx;
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
|
||||
import javax.naming.spi.ResolveResult;
|
||||
|
||||
/* Direct subclasses of ComponentDirContext must provide implementations for
|
||||
* the abstract c_ DirContext methods, and override the c_ Context methods
|
||||
* (which are no longer abstract because they have been overriden by
|
||||
@ -81,23 +79,26 @@ public abstract class ComponentDirContext extends PartialCompositeDirContext {
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration c_search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
protected abstract NamingEnumeration<SearchResult> c_search(
|
||||
Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration c_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected abstract NamingEnumeration<SearchResult> c_search(
|
||||
Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration c_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected abstract NamingEnumeration<SearchResult> c_search(
|
||||
Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract DirContext c_getSchema(Name name, Continuation cont)
|
||||
@ -172,29 +173,32 @@ public abstract class ComponentDirContext extends PartialCompositeDirContext {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search_nns(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> c_search_nns(
|
||||
Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
c_processJunction_nns(name, cont);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search_nns(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> c_search_nns(
|
||||
Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
c_processJunction_nns(name, cont);
|
||||
return null;
|
||||
}
|
||||
|
||||
protected NamingEnumeration c_search_nns(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> c_search_nns(
|
||||
Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
c_processJunction_nns(name, cont);
|
||||
return null;
|
||||
@ -345,13 +349,14 @@ public abstract class ComponentDirContext extends PartialCompositeDirContext {
|
||||
return answer;
|
||||
}
|
||||
|
||||
protected NamingEnumeration p_search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> p_search(
|
||||
Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
HeadTail res = p_resolveIntermediate(name, cont);
|
||||
NamingEnumeration answer = null;
|
||||
NamingEnumeration<SearchResult> answer = null;
|
||||
switch (res.getStatus()) {
|
||||
case TERMINAL_NNS_COMPONENT:
|
||||
answer = c_search_nns(res.getHead(), matchingAttributes,
|
||||
@ -371,12 +376,13 @@ public abstract class ComponentDirContext extends PartialCompositeDirContext {
|
||||
return answer;
|
||||
}
|
||||
|
||||
protected NamingEnumeration p_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons, Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> p_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
HeadTail res = p_resolveIntermediate(name, cont);
|
||||
NamingEnumeration answer = null;
|
||||
NamingEnumeration<SearchResult> answer = null;
|
||||
switch (res.getStatus()) {
|
||||
case TERMINAL_NNS_COMPONENT:
|
||||
answer = c_search_nns(res.getHead(), filter, cons, cont);
|
||||
@ -394,14 +400,14 @@ public abstract class ComponentDirContext extends PartialCompositeDirContext {
|
||||
return answer;
|
||||
}
|
||||
|
||||
protected NamingEnumeration p_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected NamingEnumeration<SearchResult> p_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException {
|
||||
HeadTail res = p_resolveIntermediate(name, cont);
|
||||
NamingEnumeration answer = null;
|
||||
NamingEnumeration<SearchResult> answer = null;
|
||||
switch (res.getStatus()) {
|
||||
case TERMINAL_NNS_COMPONENT:
|
||||
answer = c_search_nns(res.getHead(),
|
||||
|
@ -57,7 +57,7 @@ public class Continuation extends ResolveResult {
|
||||
* The environment used by the caller. Initialized by constructor and
|
||||
* used when filling out a CannotProceedException.
|
||||
*/
|
||||
protected Hashtable environment = null;
|
||||
protected Hashtable<?,?> environment = null;
|
||||
|
||||
/**
|
||||
* Indicates whether the Continuation instance indicates that the operation
|
||||
@ -94,7 +94,7 @@ public class Continuation extends ResolveResult {
|
||||
* @param environment The environment used by the caller. It is used
|
||||
* when setting the "environment" of a CannotProceedException.
|
||||
*/
|
||||
public Continuation(Name top, Hashtable environment) {
|
||||
public Continuation(Name top, Hashtable<?,?> environment) {
|
||||
super();
|
||||
starter = top;
|
||||
this.environment = environment;
|
||||
@ -154,8 +154,8 @@ public class Continuation extends ResolveResult {
|
||||
|
||||
if ((e instanceof CannotProceedException)) {
|
||||
CannotProceedException cpe = (CannotProceedException)e;
|
||||
Hashtable env = (environment == null ?
|
||||
new Hashtable(11) : (Hashtable)environment.clone());
|
||||
Hashtable<?,?> env = (environment == null ?
|
||||
new Hashtable<>(11) : (Hashtable<?,?>)environment.clone());
|
||||
cpe.setEnvironment(env);
|
||||
cpe.setAltNameCtx(resolvedContext);
|
||||
cpe.setAltName(relativeResolvedName);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -77,16 +77,16 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
|
||||
/* Equivalent to method in Resolver interface */
|
||||
protected abstract ResolveResult p_resolveToClass(Name name,
|
||||
Class contextType, Continuation cont) throws NamingException;
|
||||
Class<?> contextType, Continuation cont) throws NamingException;
|
||||
|
||||
/* Equivalent to methods in Context interface */
|
||||
protected abstract Object p_lookup(Name name, Continuation cont)
|
||||
throws NamingException;
|
||||
protected abstract Object p_lookupLink(Name name, Continuation cont)
|
||||
throws NamingException;
|
||||
protected abstract NamingEnumeration p_list(Name name,
|
||||
protected abstract NamingEnumeration<NameClassPair> p_list(Name name,
|
||||
Continuation cont) throws NamingException;
|
||||
protected abstract NamingEnumeration p_listBindings(Name name,
|
||||
protected abstract NamingEnumeration<Binding> p_listBindings(Name name,
|
||||
Continuation cont) throws NamingException;
|
||||
protected abstract void p_bind(Name name, Object obj, Continuation cont)
|
||||
throws NamingException;
|
||||
@ -115,7 +115,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
* The toolkit knows to clone when necessary.
|
||||
* @return The possibly null environment of the context.
|
||||
*/
|
||||
protected Hashtable p_getEnvironment() throws NamingException {
|
||||
protected Hashtable<?,?> p_getEnvironment() throws NamingException {
|
||||
return getEnvironment();
|
||||
}
|
||||
|
||||
@ -137,7 +137,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
throws NamingException
|
||||
{
|
||||
PartialCompositeContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
ResolveResult answer;
|
||||
Name nm = name;
|
||||
@ -168,7 +168,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
|
||||
public Object lookup(Name name) throws NamingException {
|
||||
PartialCompositeContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
Object answer;
|
||||
Name nm = name;
|
||||
@ -194,7 +194,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
public void bind(Name name, Object newObj) throws NamingException {
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
@ -216,7 +216,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
public void rebind(Name name, Object newObj) throws NamingException {
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
@ -238,7 +238,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
public void unbind(Name name) throws NamingException {
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
@ -262,7 +262,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
{
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = oldName;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(oldName, env);
|
||||
|
||||
try {
|
||||
@ -293,8 +293,8 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
{
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
NamingEnumeration answer;
|
||||
Hashtable env = p_getEnvironment();
|
||||
NamingEnumeration<NameClassPair> answer;
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
@ -322,8 +322,8 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
{
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
NamingEnumeration answer;
|
||||
Hashtable env = p_getEnvironment();
|
||||
NamingEnumeration<Binding> answer;
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
@ -347,7 +347,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
public void destroySubcontext(Name name) throws NamingException {
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
@ -371,7 +371,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
Context answer;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
@ -394,7 +394,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
|
||||
public Object lookupLink(Name name) throws NamingException {
|
||||
PartialCompositeContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
Object answer;
|
||||
Name nm = name;
|
||||
@ -421,7 +421,7 @@ public abstract class PartialCompositeContext implements Context, Resolver {
|
||||
PartialCompositeContext ctx = this;
|
||||
Name nm = name;
|
||||
NameParser answer;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
|
||||
try {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -29,7 +29,6 @@ import java.util.Hashtable;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.directory.*;
|
||||
import javax.naming.spi.NamingManager;
|
||||
import javax.naming.spi.DirectoryManager;
|
||||
|
||||
/*
|
||||
@ -83,23 +82,26 @@ public abstract class PartialCompositeDirContext
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration p_search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
protected abstract NamingEnumeration<SearchResult> p_search(
|
||||
Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration p_search(Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected abstract NamingEnumeration<SearchResult> p_search(
|
||||
Name name,
|
||||
String filter,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract NamingEnumeration p_search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
protected abstract NamingEnumeration<SearchResult> p_search(
|
||||
Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons,
|
||||
Continuation cont)
|
||||
throws NamingException;
|
||||
|
||||
protected abstract DirContext p_getSchema(Name name, Continuation cont)
|
||||
@ -130,7 +132,7 @@ public abstract class PartialCompositeDirContext
|
||||
public Attributes getAttributes(Name name, String[] attrIds)
|
||||
throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
Attributes answer;
|
||||
Name nm = name;
|
||||
@ -157,7 +159,7 @@ public abstract class PartialCompositeDirContext
|
||||
public void modifyAttributes(Name name, int mod_op, Attributes attrs)
|
||||
throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
Name nm = name;
|
||||
|
||||
@ -182,7 +184,7 @@ public abstract class PartialCompositeDirContext
|
||||
public void modifyAttributes(Name name, ModificationItem[] mods)
|
||||
throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
Name nm = name;
|
||||
|
||||
@ -207,7 +209,7 @@ public abstract class PartialCompositeDirContext
|
||||
public void bind(Name name, Object obj, Attributes attrs)
|
||||
throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
Name nm = name;
|
||||
|
||||
@ -232,7 +234,7 @@ public abstract class PartialCompositeDirContext
|
||||
public void rebind(Name name, Object obj, Attributes attrs)
|
||||
throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
Name nm = name;
|
||||
|
||||
@ -257,7 +259,7 @@ public abstract class PartialCompositeDirContext
|
||||
public DirContext createSubcontext(Name name, Attributes attrs)
|
||||
throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
DirContext answer;
|
||||
Name nm = name;
|
||||
@ -308,9 +310,9 @@ public abstract class PartialCompositeDirContext
|
||||
{
|
||||
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
NamingEnumeration answer;
|
||||
NamingEnumeration<SearchResult> answer;
|
||||
Name nm = name;
|
||||
|
||||
try {
|
||||
@ -347,9 +349,9 @@ public abstract class PartialCompositeDirContext
|
||||
{
|
||||
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
NamingEnumeration answer;
|
||||
NamingEnumeration<SearchResult> answer;
|
||||
Name nm = name;
|
||||
|
||||
try {
|
||||
@ -385,9 +387,9 @@ public abstract class PartialCompositeDirContext
|
||||
{
|
||||
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
NamingEnumeration answer;
|
||||
NamingEnumeration<SearchResult> answer;
|
||||
Name nm = name;
|
||||
|
||||
try {
|
||||
@ -411,7 +413,7 @@ public abstract class PartialCompositeDirContext
|
||||
|
||||
public DirContext getSchema(Name name) throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
DirContext answer;
|
||||
Name nm = name;
|
||||
@ -438,7 +440,7 @@ public abstract class PartialCompositeDirContext
|
||||
public DirContext getSchemaClassDefinition(Name name)
|
||||
throws NamingException {
|
||||
PartialCompositeDirContext ctx = this;
|
||||
Hashtable env = p_getEnvironment();
|
||||
Hashtable<?,?> env = p_getEnvironment();
|
||||
Continuation cont = new Continuation(name, env);
|
||||
DirContext answer;
|
||||
Name nm = name;
|
||||
@ -509,14 +511,14 @@ public abstract class PartialCompositeDirContext
|
||||
throw cont.fillInException(e);
|
||||
}
|
||||
|
||||
protected NamingEnumeration a_list(
|
||||
protected NamingEnumeration<NameClassPair> a_list(
|
||||
Continuation cont) throws NamingException {
|
||||
OperationNotSupportedException e = new
|
||||
OperationNotSupportedException();
|
||||
throw cont.fillInException(e);
|
||||
}
|
||||
|
||||
protected NamingEnumeration a_listBindings(
|
||||
protected NamingEnumeration<Binding> a_listBindings(
|
||||
Continuation cont) throws NamingException {
|
||||
OperationNotSupportedException e = new
|
||||
OperationNotSupportedException();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -56,19 +56,19 @@ public class ContainmentFilter implements AttrFilter {
|
||||
if (subset == null)
|
||||
return true; // an empty set is always a subset
|
||||
|
||||
NamingEnumeration m = subset.getAll();
|
||||
NamingEnumeration<? extends Attribute> m = subset.getAll();
|
||||
while (m.hasMore()) {
|
||||
if (superset == null) {
|
||||
return false; // contains nothing
|
||||
}
|
||||
Attribute target = (Attribute) m.next();
|
||||
Attribute target = m.next();
|
||||
Attribute fromSuper = superset.get(target.getID());
|
||||
if (fromSuper == null) {
|
||||
return false;
|
||||
} else {
|
||||
// check whether attribute values match
|
||||
if (target.size() > 0) {
|
||||
NamingEnumeration vals = target.getAll();
|
||||
NamingEnumeration<?> vals = target.getAll();
|
||||
while (vals.hasMore()) {
|
||||
if (!fromSuper.contains(vals.next())) {
|
||||
return false;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -33,10 +33,10 @@ import java.util.*;
|
||||
*
|
||||
* @author Jon Ruiz
|
||||
*/
|
||||
public class ContextEnumerator implements NamingEnumeration {
|
||||
public class ContextEnumerator implements NamingEnumeration<Binding> {
|
||||
|
||||
private static boolean debug = false;
|
||||
private NamingEnumeration children = null;
|
||||
private NamingEnumeration<Binding> children = null;
|
||||
private Binding currentChild = null;
|
||||
private boolean currentReturned = false;
|
||||
private Context root;
|
||||
@ -77,7 +77,7 @@ public class ContextEnumerator implements NamingEnumeration {
|
||||
}
|
||||
|
||||
// Subclass should override if it wants to avoid calling obj factory
|
||||
protected NamingEnumeration getImmediateChildren(Context ctx)
|
||||
protected NamingEnumeration<Binding> getImmediateChildren(Context ctx)
|
||||
throws NamingException {
|
||||
return ctx.listBindings("");
|
||||
}
|
||||
@ -101,7 +101,7 @@ public class ContextEnumerator implements NamingEnumeration {
|
||||
}
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
public Binding nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) {
|
||||
@ -109,7 +109,7 @@ public class ContextEnumerator implements NamingEnumeration {
|
||||
}
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
public Binding next() throws NamingException {
|
||||
if (!rootProcessed) {
|
||||
rootProcessed = true;
|
||||
return new Binding("", root.getClass().getName(),
|
||||
@ -132,7 +132,7 @@ public class ContextEnumerator implements NamingEnumeration {
|
||||
}
|
||||
|
||||
private Binding getNextChild() throws NamingException {
|
||||
Binding oldBinding = ((Binding)children.next());
|
||||
Binding oldBinding = children.next();
|
||||
Binding newBinding = null;
|
||||
|
||||
// if the name is relative, we need to add it to the name of this
|
||||
@ -192,7 +192,7 @@ public class ContextEnumerator implements NamingEnumeration {
|
||||
if(debug) {System.out.println("getNextDescedant: expanded case");}
|
||||
|
||||
// if the current child is expanded, use it's enumerator
|
||||
return (Binding)currentChildEnum.next();
|
||||
return currentChildEnum.next();
|
||||
|
||||
} else {
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -34,7 +34,7 @@ import javax.naming.directory.*;
|
||||
* @author Jon Ruiz
|
||||
*/
|
||||
public class DirSearch {
|
||||
public static NamingEnumeration search(DirContext ctx,
|
||||
public static NamingEnumeration<SearchResult> search(DirContext ctx,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn) throws NamingException {
|
||||
SearchControls cons = new SearchControls(
|
||||
@ -48,7 +48,7 @@ public class DirSearch {
|
||||
cons);
|
||||
}
|
||||
|
||||
public static NamingEnumeration search(DirContext ctx,
|
||||
public static NamingEnumeration<SearchResult> search(DirContext ctx,
|
||||
String filter, SearchControls cons) throws NamingException {
|
||||
|
||||
if (cons == null)
|
||||
@ -60,7 +60,7 @@ public class DirSearch {
|
||||
cons);
|
||||
}
|
||||
|
||||
public static NamingEnumeration search(DirContext ctx,
|
||||
public static NamingEnumeration<SearchResult> search(DirContext ctx,
|
||||
String filterExpr, Object[] filterArgs, SearchControls cons)
|
||||
throws NamingException {
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -42,8 +42,8 @@ public class HierMemDirCtx implements DirContext {
|
||||
static private final boolean debug = false;
|
||||
private static final NameParser defaultParser = new HierarchicalNameParser();
|
||||
|
||||
protected Hashtable myEnv;
|
||||
protected Hashtable bindings;
|
||||
protected Hashtable<String, Object> myEnv;
|
||||
protected Hashtable<Name, Object> bindings;
|
||||
protected Attributes attrs;
|
||||
protected boolean ignoreCase = false;
|
||||
protected NamingException readOnlyEx = null;
|
||||
@ -70,12 +70,12 @@ public class HierMemDirCtx implements DirContext {
|
||||
this(null, ignoreCase, false);
|
||||
}
|
||||
|
||||
public HierMemDirCtx(Hashtable environment, boolean ignoreCase) {
|
||||
public HierMemDirCtx(Hashtable<String, Object> environment, boolean ignoreCase) {
|
||||
this(environment, ignoreCase, false);
|
||||
}
|
||||
|
||||
protected HierMemDirCtx(Hashtable environment, boolean ignoreCase,
|
||||
boolean useFac) {
|
||||
protected HierMemDirCtx(Hashtable<String, Object> environment,
|
||||
boolean ignoreCase, boolean useFac) {
|
||||
myEnv = environment;
|
||||
this.ignoreCase = ignoreCase;
|
||||
init();
|
||||
@ -84,7 +84,7 @@ public class HierMemDirCtx implements DirContext {
|
||||
|
||||
private void init() {
|
||||
attrs = new BasicAttributes(ignoreCase);
|
||||
bindings = new Hashtable(11, 0.75f);
|
||||
bindings = new Hashtable<>(11, 0.75f);
|
||||
}
|
||||
|
||||
public Object lookup(String name) throws NamingException {
|
||||
@ -326,30 +326,30 @@ public class HierMemDirCtx implements DirContext {
|
||||
bindings.put(newname, oldBinding);
|
||||
}
|
||||
|
||||
public NamingEnumeration list(String name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(String name) throws NamingException {
|
||||
return list(myParser.parse(name));
|
||||
}
|
||||
|
||||
public NamingEnumeration list(Name name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(Name name) throws NamingException {
|
||||
HierMemDirCtx ctx = (HierMemDirCtx) doLookup(name, false);
|
||||
return ctx.doList();
|
||||
}
|
||||
|
||||
protected NamingEnumeration doList () throws NamingException {
|
||||
protected NamingEnumeration<NameClassPair> doList () throws NamingException {
|
||||
return new FlatNames(bindings.keys());
|
||||
}
|
||||
|
||||
|
||||
public NamingEnumeration listBindings(String name) throws NamingException {
|
||||
public NamingEnumeration<Binding> listBindings(String name) throws NamingException {
|
||||
return listBindings(myParser.parse(name));
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(Name name) throws NamingException {
|
||||
public NamingEnumeration<Binding> listBindings(Name name) throws NamingException {
|
||||
HierMemDirCtx ctx = (HierMemDirCtx)doLookup(name, false);
|
||||
return ctx.doListBindings(alwaysUseFactory);
|
||||
}
|
||||
|
||||
protected NamingEnumeration doListBindings(boolean useFactory)
|
||||
protected NamingEnumeration<Binding> doListBindings(boolean useFactory)
|
||||
throws NamingException {
|
||||
return new FlatBindings(bindings, myEnv, useFactory);
|
||||
}
|
||||
@ -447,28 +447,32 @@ public class HierMemDirCtx implements DirContext {
|
||||
return result;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Object addToEnvironment(String propName, Object propVal)
|
||||
throws NamingException {
|
||||
myEnv = (myEnv == null) ?
|
||||
new Hashtable(11, 0.75f) : (Hashtable)myEnv.clone();
|
||||
myEnv = (myEnv == null)
|
||||
? new Hashtable<String, Object>(11, 0.75f)
|
||||
: (Hashtable<String, Object>)myEnv.clone();
|
||||
|
||||
return myEnv.put(propName, propVal);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Object removeFromEnvironment(String propName)
|
||||
throws NamingException {
|
||||
if (myEnv == null)
|
||||
return null;
|
||||
|
||||
myEnv = (Hashtable)myEnv.clone();
|
||||
myEnv = (Hashtable<String, Object>)myEnv.clone();
|
||||
return myEnv.remove(propName);
|
||||
}
|
||||
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Hashtable<String, Object> getEnvironment() throws NamingException {
|
||||
if (myEnv == null) {
|
||||
return new Hashtable(5, 0.75f);
|
||||
return new Hashtable<>(5, 0.75f);
|
||||
} else {
|
||||
return (Hashtable)myEnv.clone();
|
||||
return (Hashtable<String, Object>)myEnv.clone();
|
||||
}
|
||||
}
|
||||
|
||||
@ -529,10 +533,10 @@ public class HierMemDirCtx implements DirContext {
|
||||
}
|
||||
|
||||
// turn it into a modification Enumeration and pass it on
|
||||
NamingEnumeration attrEnum = attrs.getAll();
|
||||
NamingEnumeration<? extends Attribute> attrEnum = attrs.getAll();
|
||||
ModificationItem[] mods = new ModificationItem[attrs.size()];
|
||||
for (int i = 0; i < mods.length && attrEnum.hasMoreElements(); i++) {
|
||||
mods[i] = new ModificationItem(mod_op, (Attribute)attrEnum.next());
|
||||
mods[i] = new ModificationItem(mod_op, attrEnum.next());
|
||||
}
|
||||
|
||||
modifyAttributes(name, mods);
|
||||
@ -564,7 +568,7 @@ public class HierMemDirCtx implements DirContext {
|
||||
|
||||
ModificationItem mod;
|
||||
Attribute existingAttr, modAttr;
|
||||
NamingEnumeration modVals;
|
||||
NamingEnumeration<?> modVals;
|
||||
|
||||
for (int i = 0; i < mods.length; i++) {
|
||||
mod = mods[i];
|
||||
@ -619,29 +623,29 @@ public class HierMemDirCtx implements DirContext {
|
||||
return orig;
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
Attributes matchingAttributes)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
return search(name, matchingAttributes, null);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
Attributes matchingAttributes)
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
return search(name, matchingAttributes, null);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
return search(myParser.parse(name), matchingAttributes,
|
||||
attributesToReturn);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
|
||||
HierMemDirCtx target = (HierMemDirCtx) doLookup(name, false);
|
||||
@ -656,9 +660,9 @@ public class HierMemDirCtx implements DirContext {
|
||||
false); // alwaysUseFactory ignored because objReturnFlag == false
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
DirContext target = (DirContext) doLookup(name, false);
|
||||
|
||||
@ -671,27 +675,27 @@ public class HierMemDirCtx implements DirContext {
|
||||
cons, this, myEnv, alwaysUseFactory);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
|
||||
String strfilter = SearchFilter.format(filterExpr, filterArgs);
|
||||
return search(name, strfilter, cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
return search(myParser.parse(name), filter, cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
return search(myParser.parse(name), filterExpr, filterArgs, cons);
|
||||
}
|
||||
@ -761,15 +765,17 @@ public class HierMemDirCtx implements DirContext {
|
||||
myParser = parser;
|
||||
}
|
||||
|
||||
// Class for enumerating name/class pairs
|
||||
private class FlatNames implements NamingEnumeration {
|
||||
Enumeration names;
|
||||
/*
|
||||
* Common base class for FlatNames and FlatBindings.
|
||||
*/
|
||||
private abstract class BaseFlatNames<T> implements NamingEnumeration<T> {
|
||||
Enumeration<Name> names;
|
||||
|
||||
FlatNames (Enumeration names) {
|
||||
BaseFlatNames (Enumeration<Name> names) {
|
||||
this.names = names;
|
||||
}
|
||||
|
||||
public boolean hasMoreElements() {
|
||||
public final boolean hasMoreElements() {
|
||||
try {
|
||||
return hasMore();
|
||||
} catch (NamingException e) {
|
||||
@ -777,11 +783,11 @@ public class HierMemDirCtx implements DirContext {
|
||||
}
|
||||
}
|
||||
|
||||
public boolean hasMore() throws NamingException {
|
||||
public final boolean hasMore() throws NamingException {
|
||||
return names.hasMoreElements();
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
public final T nextElement() {
|
||||
try {
|
||||
return next();
|
||||
} catch (NamingException e) {
|
||||
@ -789,32 +795,45 @@ public class HierMemDirCtx implements DirContext {
|
||||
}
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
Name name = (Name)names.nextElement();
|
||||
String className = bindings.get(name).getClass().getName();
|
||||
return new NameClassPair(name.toString(), className);
|
||||
}
|
||||
public abstract T next() throws NamingException;
|
||||
|
||||
public void close() {
|
||||
public final void close() {
|
||||
names = null;
|
||||
}
|
||||
}
|
||||
|
||||
// Class for enumerating bindings
|
||||
private final class FlatBindings extends FlatNames {
|
||||
private Hashtable bds;
|
||||
private Hashtable env;
|
||||
// Class for enumerating name/class pairs
|
||||
private final class FlatNames extends BaseFlatNames<NameClassPair> {
|
||||
FlatNames (Enumeration<Name> names) {
|
||||
super(names);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NameClassPair next() throws NamingException {
|
||||
Name name = names.nextElement();
|
||||
String className = bindings.get(name).getClass().getName();
|
||||
return new NameClassPair(name.toString(), className);
|
||||
}
|
||||
}
|
||||
|
||||
// Class for enumerating bindings
|
||||
private final class FlatBindings extends BaseFlatNames<Binding> {
|
||||
private Hashtable<Name, Object> bds;
|
||||
private Hashtable<String, Object> env;
|
||||
private boolean useFactory;
|
||||
|
||||
FlatBindings(Hashtable bindings, Hashtable env, boolean useFactory) {
|
||||
FlatBindings(Hashtable<Name, Object> bindings,
|
||||
Hashtable<String, Object> env,
|
||||
boolean useFactory) {
|
||||
super(bindings.keys());
|
||||
this.env = env;
|
||||
this.bds = bindings;
|
||||
this.useFactory = useFactory;
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
Name name = (Name)names.nextElement();
|
||||
@Override
|
||||
public Binding next() throws NamingException {
|
||||
Name name = names.nextElement();
|
||||
|
||||
HierMemDirCtx obj = (HierMemDirCtx)bds.get(name);
|
||||
|
||||
@ -849,7 +868,7 @@ public class HierMemDirCtx implements DirContext {
|
||||
super(context, scope, contextName, returnSelf);
|
||||
}
|
||||
|
||||
protected NamingEnumeration getImmediateChildren(Context ctx)
|
||||
protected NamingEnumeration<Binding> getImmediateChildren(Context ctx)
|
||||
throws NamingException {
|
||||
return ((HierMemDirCtx)ctx).doListBindings(false);
|
||||
}
|
||||
@ -872,14 +891,14 @@ final class HierarchicalName extends CompoundName {
|
||||
|
||||
// Creates an empty name
|
||||
HierarchicalName() {
|
||||
super(new Enumeration() {
|
||||
public boolean hasMoreElements() {return false;}
|
||||
public Object nextElement() {throw new NoSuchElementException();}
|
||||
},
|
||||
HierarchicalNameParser.mySyntax);
|
||||
super(new Enumeration<String>() {
|
||||
public boolean hasMoreElements() {return false;}
|
||||
public String nextElement() {throw new NoSuchElementException();}
|
||||
},
|
||||
HierarchicalNameParser.mySyntax);
|
||||
}
|
||||
|
||||
HierarchicalName(Enumeration comps, Properties syntax) {
|
||||
HierarchicalName(Enumeration<String> comps, Properties syntax) {
|
||||
super(comps, syntax);
|
||||
}
|
||||
|
||||
@ -907,12 +926,12 @@ final class HierarchicalName extends CompoundName {
|
||||
}
|
||||
|
||||
public Name getPrefix(int posn) {
|
||||
Enumeration comps = super.getPrefix(posn).getAll();
|
||||
Enumeration<String> comps = super.getPrefix(posn).getAll();
|
||||
return (new HierarchicalName(comps, mySyntax));
|
||||
}
|
||||
|
||||
public Name getSuffix(int posn) {
|
||||
Enumeration comps = super.getSuffix(posn).getAll();
|
||||
Enumeration<String> comps = super.getSuffix(posn).getAll();
|
||||
return (new HierarchicalName(comps, mySyntax));
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -47,16 +47,17 @@ import javax.naming.spi.DirectoryManager;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Hashtable;
|
||||
|
||||
final public class LazySearchEnumerationImpl implements NamingEnumeration {
|
||||
private NamingEnumeration candidates;
|
||||
final public class LazySearchEnumerationImpl
|
||||
implements NamingEnumeration<SearchResult> {
|
||||
private NamingEnumeration<Binding> candidates;
|
||||
private SearchResult nextMatch = null;
|
||||
private SearchControls cons;
|
||||
private AttrFilter filter;
|
||||
private Context context;
|
||||
private Hashtable env;
|
||||
private Hashtable<String, Object> env;
|
||||
private boolean useFactory = true;
|
||||
|
||||
public LazySearchEnumerationImpl(NamingEnumeration candidates,
|
||||
public LazySearchEnumerationImpl(NamingEnumeration<Binding> candidates,
|
||||
AttrFilter filter, SearchControls cons) throws NamingException {
|
||||
this.candidates = candidates;
|
||||
this.filter = filter;
|
||||
@ -68,9 +69,10 @@ final public class LazySearchEnumerationImpl implements NamingEnumeration {
|
||||
}
|
||||
}
|
||||
|
||||
public LazySearchEnumerationImpl(NamingEnumeration candidates,
|
||||
public LazySearchEnumerationImpl(NamingEnumeration<Binding> candidates,
|
||||
AttrFilter filter, SearchControls cons,
|
||||
Context ctx, Hashtable env, boolean useFactory) throws NamingException {
|
||||
Context ctx, Hashtable<String, Object> env, boolean useFactory)
|
||||
throws NamingException {
|
||||
|
||||
this.candidates = candidates;
|
||||
this.filter = filter;
|
||||
@ -86,9 +88,9 @@ final public class LazySearchEnumerationImpl implements NamingEnumeration {
|
||||
}
|
||||
|
||||
|
||||
public LazySearchEnumerationImpl(NamingEnumeration candidates,
|
||||
public LazySearchEnumerationImpl(NamingEnumeration<Binding> candidates,
|
||||
AttrFilter filter, SearchControls cons,
|
||||
Context ctx, Hashtable env) throws NamingException {
|
||||
Context ctx, Hashtable<String, Object> env) throws NamingException {
|
||||
this(candidates, filter, cons, ctx, env, true);
|
||||
}
|
||||
|
||||
@ -105,7 +107,7 @@ final public class LazySearchEnumerationImpl implements NamingEnumeration {
|
||||
}
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
public SearchResult nextElement() {
|
||||
try {
|
||||
return findNextMatch(true);
|
||||
} catch (NamingException e) {
|
||||
@ -113,7 +115,7 @@ final public class LazySearchEnumerationImpl implements NamingEnumeration {
|
||||
}
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
public SearchResult next() throws NamingException {
|
||||
// find and remove from list
|
||||
return (findNextMatch(true));
|
||||
}
|
||||
@ -138,7 +140,7 @@ final public class LazySearchEnumerationImpl implements NamingEnumeration {
|
||||
Object obj;
|
||||
Attributes targetAttrs;
|
||||
while (candidates.hasMore()) {
|
||||
next = (Binding)candidates.next();
|
||||
next = candidates.next();
|
||||
obj = next.getObject();
|
||||
if (obj instanceof DirContext) {
|
||||
targetAttrs = ((DirContext)(obj)).getAttributes("");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -203,11 +203,11 @@ public class SearchFilter implements AttrFilter {
|
||||
* A class for dealing with compound filters ("and" & "or" filters).
|
||||
*/
|
||||
final class CompoundFilter implements StringFilter {
|
||||
private Vector subFilters;
|
||||
private Vector<StringFilter> subFilters;
|
||||
private boolean polarity;
|
||||
|
||||
CompoundFilter(boolean polarity) {
|
||||
subFilters = new Vector();
|
||||
subFilters = new Vector<>();
|
||||
this.polarity = polarity;
|
||||
}
|
||||
|
||||
@ -223,7 +223,7 @@ public class SearchFilter implements AttrFilter {
|
||||
|
||||
public boolean check(Attributes targetAttrs) throws NamingException {
|
||||
for(int i = 0; i<subFilters.size(); i++) {
|
||||
StringFilter filter = (StringFilter)subFilters.elementAt(i);
|
||||
StringFilter filter = subFilters.elementAt(i);
|
||||
if(filter.check(targetAttrs) != this.polarity) {
|
||||
return !polarity;
|
||||
}
|
||||
@ -330,7 +330,7 @@ public class SearchFilter implements AttrFilter {
|
||||
}
|
||||
|
||||
public boolean check(Attributes targetAttrs) {
|
||||
Enumeration candidates;
|
||||
Enumeration<?> candidates;
|
||||
|
||||
try {
|
||||
Attribute attr = targetAttrs.get(attrID);
|
||||
@ -441,15 +441,15 @@ public class SearchFilter implements AttrFilter {
|
||||
String answer;
|
||||
answer = "(& ";
|
||||
Attribute attr;
|
||||
for (NamingEnumeration e = attrs.getAll(); e.hasMore(); ) {
|
||||
attr = (Attribute)e.next();
|
||||
for (NamingEnumeration<? extends Attribute> e = attrs.getAll();
|
||||
e.hasMore(); ) {
|
||||
attr = e.next();
|
||||
if (attr.size() == 0 || (attr.size() == 1 && attr.get() == null)) {
|
||||
// only checking presence of attribute
|
||||
answer += "(" + attr.getID() + "=" + "*)";
|
||||
} else {
|
||||
for (NamingEnumeration ve = attr.getAll();
|
||||
ve.hasMore();
|
||||
) {
|
||||
for (NamingEnumeration<?> ve = attr.getAll();
|
||||
ve.hasMore(); ) {
|
||||
String val = getEncodedStringRep(ve.next());
|
||||
if (val != null) {
|
||||
answer += "(" + attr.getID() + "=" + val + ")";
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -48,11 +48,12 @@ import java.net.MalformedURLException;
|
||||
* @author Rosanna Lee
|
||||
*/
|
||||
abstract public class GenericURLContext implements Context {
|
||||
protected Hashtable myEnv = null;
|
||||
protected Hashtable<String, Object> myEnv = null;
|
||||
|
||||
public GenericURLContext(Hashtable env) {
|
||||
@SuppressWarnings("unchecked") // Expect Hashtable<String, Object>
|
||||
public GenericURLContext(Hashtable<?,?> env) {
|
||||
// context that is not tied to any specific URL
|
||||
myEnv = env; // copied on write
|
||||
myEnv = (Hashtable<String, Object>)env; // copied on write
|
||||
}
|
||||
|
||||
public void close() throws NamingException {
|
||||
@ -75,7 +76,7 @@ abstract public class GenericURLContext implements Context {
|
||||
* must be in sync wrt how URLs are parsed and returned.
|
||||
*/
|
||||
abstract protected ResolveResult getRootURLContext(String url,
|
||||
Hashtable env) throws NamingException;
|
||||
Hashtable<?,?> env) throws NamingException;
|
||||
|
||||
/**
|
||||
* Returns the suffix of the url. The result should be identical to
|
||||
@ -487,27 +488,31 @@ abstract public class GenericURLContext implements Context {
|
||||
return result;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Object removeFromEnvironment(String propName)
|
||||
throws NamingException {
|
||||
if (myEnv == null) {
|
||||
return null;
|
||||
}
|
||||
myEnv = (Hashtable)myEnv.clone();
|
||||
myEnv = (Hashtable<String, Object>)myEnv.clone();
|
||||
return myEnv.remove(propName);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Object addToEnvironment(String propName, Object propVal)
|
||||
throws NamingException {
|
||||
myEnv = (myEnv == null) ?
|
||||
new Hashtable(11, 0.75f) : (Hashtable)myEnv.clone();
|
||||
myEnv = (myEnv == null)
|
||||
? new Hashtable<String, Object>(11, 0.75f)
|
||||
: (Hashtable<String, Object>)myEnv.clone();
|
||||
return myEnv.put(propName, propVal);
|
||||
}
|
||||
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
@SuppressWarnings("unchecked") // clone()
|
||||
public Hashtable<String, Object> getEnvironment() throws NamingException {
|
||||
if (myEnv == null) {
|
||||
return new Hashtable(5, 0.75f);
|
||||
return new Hashtable<>(5, 0.75f);
|
||||
} else {
|
||||
return (Hashtable)myEnv.clone();
|
||||
return (Hashtable<String, Object>)myEnv.clone();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -50,7 +50,7 @@ import java.util.Hashtable;
|
||||
abstract public class GenericURLDirContext extends GenericURLContext
|
||||
implements DirContext {
|
||||
|
||||
protected GenericURLDirContext(Hashtable env) {
|
||||
protected GenericURLDirContext(Hashtable<?,?> env) {
|
||||
super(env);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -45,7 +45,7 @@ import com.sun.jndi.toolkit.url.GenericURLDirContext;
|
||||
|
||||
public class dnsURLContext extends GenericURLDirContext {
|
||||
|
||||
public dnsURLContext(Hashtable env) {
|
||||
public dnsURLContext(Hashtable<?,?> env) {
|
||||
super(env);
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ public class dnsURLContext extends GenericURLDirContext {
|
||||
* to the named DNS server, and returns the domain name as the
|
||||
* remaining name.
|
||||
*/
|
||||
protected ResolveResult getRootURLContext(String url, Hashtable env)
|
||||
protected ResolveResult getRootURLContext(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
DnsUrl dnsUrl;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -62,7 +62,7 @@ public class dnsURLContextFactory implements ObjectFactory {
|
||||
}
|
||||
}
|
||||
|
||||
private static Object getUsingURL(String url, Hashtable env)
|
||||
private static Object getUsingURL(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
dnsURLContext urlCtx = new dnsURLContext(env);
|
||||
@ -78,7 +78,7 @@ public class dnsURLContextFactory implements ObjectFactory {
|
||||
* If all URLs fail, throw one of the exceptions arbitrarily.
|
||||
* Not pretty, but potentially more informative than returning null.
|
||||
*/
|
||||
private static Object getUsingURLs(String[] urls, Hashtable env)
|
||||
private static Object getUsingURLs(String[] urls, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
|
||||
if (urls.length == 0) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -42,7 +42,7 @@ import com.sun.jndi.cosnaming.CorbanameUrl;
|
||||
public class iiopURLContext
|
||||
extends com.sun.jndi.toolkit.url.GenericURLContext {
|
||||
|
||||
iiopURLContext(Hashtable env) {
|
||||
iiopURLContext(Hashtable<?,?> env) {
|
||||
super(env);
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ public class iiopURLContext
|
||||
* context on for the ORB at 'localhost' on port 900,
|
||||
* and returns as the remaining name "rest/of/name".
|
||||
*/
|
||||
protected ResolveResult getRootURLContext(String name, Hashtable env)
|
||||
protected ResolveResult getRootURLContext(String name, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
return iiopURLContextFactory.getUsingURLIgnoreRest(name, env);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -68,12 +68,12 @@ public class iiopURLContextFactory implements ObjectFactory {
|
||||
* context on for the ORB at 'localhost' on port 900,
|
||||
* and returns as the remaining name "rest/of/name".
|
||||
*/
|
||||
static ResolveResult getUsingURLIgnoreRest(String url, Hashtable env)
|
||||
static ResolveResult getUsingURLIgnoreRest(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
return CNCtx.createUsingURL(url, env);
|
||||
}
|
||||
|
||||
private static Object getUsingURL(String url, Hashtable env)
|
||||
private static Object getUsingURL(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
ResolveResult res = getUsingURLIgnoreRest(url, env);
|
||||
|
||||
@ -85,7 +85,7 @@ public class iiopURLContextFactory implements ObjectFactory {
|
||||
}
|
||||
}
|
||||
|
||||
private static Object getUsingURLs(String[] urls, Hashtable env) {
|
||||
private static Object getUsingURLs(String[] urls, Hashtable<?,?> env) {
|
||||
for (int i = 0; i < urls.length; i++) {
|
||||
String url = urls[i];
|
||||
try {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -42,7 +42,7 @@ import com.sun.jndi.ldap.LdapURL;
|
||||
final public class ldapURLContext
|
||||
extends com.sun.jndi.toolkit.url.GenericURLDirContext {
|
||||
|
||||
ldapURLContext(Hashtable env) {
|
||||
ldapURLContext(Hashtable<?,?> env) {
|
||||
super(env);
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ final public class ldapURLContext
|
||||
* context on the server 'localhost' on port 389,
|
||||
* and returns as the remaining name "o=widget, c=us".
|
||||
*/
|
||||
protected ResolveResult getRootURLContext(String name, Hashtable env)
|
||||
protected ResolveResult getRootURLContext(String name, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
return ldapURLContextFactory.getUsingURLIgnoreRootDN(name, env);
|
||||
}
|
||||
@ -171,7 +171,8 @@ final public class ldapURLContext
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration list(String name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(String name)
|
||||
throws NamingException {
|
||||
if (LdapURL.hasQueryComponents(name)) {
|
||||
throw new InvalidNameException(name);
|
||||
} else {
|
||||
@ -179,7 +180,8 @@ final public class ldapURLContext
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration list(Name name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(Name name)
|
||||
throws NamingException {
|
||||
if (LdapURL.hasQueryComponents(name.get(0))) {
|
||||
throw new InvalidNameException(name.toString());
|
||||
} else {
|
||||
@ -187,7 +189,8 @@ final public class ldapURLContext
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(String name) throws NamingException {
|
||||
public NamingEnumeration<Binding> listBindings(String name)
|
||||
throws NamingException {
|
||||
if (LdapURL.hasQueryComponents(name)) {
|
||||
throw new InvalidNameException(name);
|
||||
} else {
|
||||
@ -195,7 +198,8 @@ final public class ldapURLContext
|
||||
}
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(Name name) throws NamingException {
|
||||
public NamingEnumeration<Binding> listBindings(Name name)
|
||||
throws NamingException {
|
||||
if (LdapURL.hasQueryComponents(name.get(0))) {
|
||||
throw new InvalidNameException(name.toString());
|
||||
} else {
|
||||
@ -447,7 +451,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when the LDAP URL has query components
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
|
||||
@ -459,7 +463,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when name has a single component
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
if (name.size() == 1) {
|
||||
@ -472,7 +476,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when the LDAP URL has query components
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
@ -485,7 +489,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when name has a single component
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
@ -500,7 +504,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when the LDAP URL has query components
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
@ -513,7 +517,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when name has a single component
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
@ -528,7 +532,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when the LDAP URL has query components
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
@ -542,7 +546,7 @@ final public class ldapURLContext
|
||||
}
|
||||
|
||||
// divert the search operation when name has a single component
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filterExpr,
|
||||
Object[] filterArgs,
|
||||
SearchControls cons)
|
||||
@ -559,7 +563,7 @@ final public class ldapURLContext
|
||||
|
||||
// Search using the LDAP URL in name.
|
||||
// LDAP URL query components override the search argments.
|
||||
private NamingEnumeration searchUsingURL(String name)
|
||||
private NamingEnumeration<SearchResult> searchUsingURL(String name)
|
||||
throws NamingException {
|
||||
|
||||
LdapURL url = new LdapURL(name);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -53,7 +53,7 @@ public class ldapURLContextFactory implements ObjectFactory {
|
||||
}
|
||||
}
|
||||
|
||||
static ResolveResult getUsingURLIgnoreRootDN(String url, Hashtable env)
|
||||
static ResolveResult getUsingURLIgnoreRootDN(String url, Hashtable<?,?> env)
|
||||
throws NamingException {
|
||||
LdapURL ldapUrl = new LdapURL(url);
|
||||
DirContext ctx = new LdapCtx("", ldapUrl.getHost(), ldapUrl.getPort(),
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -26,7 +26,6 @@
|
||||
package com.sun.jndi.url.rmi;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.rmi.registry.LocateRegistry;
|
||||
|
||||
import javax.naming.*;
|
||||
import javax.naming.spi.ResolveResult;
|
||||
@ -48,7 +47,7 @@ import com.sun.jndi.rmi.registry.RegistryContext;
|
||||
*/
|
||||
public class rmiURLContext extends GenericURLContext {
|
||||
|
||||
public rmiURLContext(Hashtable env) {
|
||||
public rmiURLContext(Hashtable<?,?> env) {
|
||||
super(env);
|
||||
}
|
||||
|
||||
@ -57,7 +56,7 @@ public class rmiURLContext extends GenericURLContext {
|
||||
* RMI registry, and returns the atomic object name as the
|
||||
* remaining name.
|
||||
*/
|
||||
protected ResolveResult getRootURLContext(String url, Hashtable env)
|
||||
protected ResolveResult getRootURLContext(String url, Hashtable<?,?> env)
|
||||
throws NamingException
|
||||
{
|
||||
if (!url.startsWith("rmi:")) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -63,7 +63,7 @@ public class rmiURLContextFactory implements ObjectFactory {
|
||||
}
|
||||
}
|
||||
|
||||
private static Object getUsingURL(String url, Hashtable env)
|
||||
private static Object getUsingURL(String url, Hashtable<?,?> env)
|
||||
throws NamingException
|
||||
{
|
||||
rmiURLContext urlCtx = new rmiURLContext(env);
|
||||
@ -79,7 +79,7 @@ public class rmiURLContextFactory implements ObjectFactory {
|
||||
* If all URLs fail, throw one of the exceptions arbitrarily.
|
||||
* Not pretty, but potentially more informative than returning null.
|
||||
*/
|
||||
private static Object getUsingURLs(String[] urls, Hashtable env)
|
||||
private static Object getUsingURLs(String[] urls, Hashtable<?,?> env)
|
||||
throws NamingException
|
||||
{
|
||||
if (urls.length == 0) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -37,7 +37,8 @@ import javax.naming.NamingException;
|
||||
|
||||
// no need to implement Enumeration since this is only for internal use
|
||||
public final class FactoryEnumeration {
|
||||
private List factories;
|
||||
// List<NamedWeakReference<Class | Object>>
|
||||
private List<NamedWeakReference<Object>> factories;
|
||||
private int posn = 0;
|
||||
private ClassLoader loader;
|
||||
|
||||
@ -59,7 +60,8 @@ public final class FactoryEnumeration {
|
||||
* @param factories A non-null list
|
||||
* @param loader The class loader of the list's contents
|
||||
*/
|
||||
FactoryEnumeration(List factories, ClassLoader loader) {
|
||||
FactoryEnumeration(List<NamedWeakReference<Object>> factories,
|
||||
ClassLoader loader) {
|
||||
this.factories = factories;
|
||||
this.loader = loader;
|
||||
}
|
||||
@ -67,7 +69,7 @@ public final class FactoryEnumeration {
|
||||
public Object next() throws NamingException {
|
||||
synchronized (factories) {
|
||||
|
||||
NamedWeakReference ref = (NamedWeakReference) factories.get(posn++);
|
||||
NamedWeakReference<Object> ref = factories.get(posn++);
|
||||
Object answer = ref.get();
|
||||
if ((answer != null) && !(answer instanceof Class)) {
|
||||
return answer;
|
||||
@ -81,7 +83,7 @@ public final class FactoryEnumeration {
|
||||
}
|
||||
// Instantiate Class to get factory
|
||||
answer = ((Class) answer).newInstance();
|
||||
ref = new NamedWeakReference(answer, className);
|
||||
ref = new NamedWeakReference<>(answer, className);
|
||||
factories.set(posn-1, ref); // replace Class object or null
|
||||
return answer;
|
||||
} catch (ClassNotFoundException e) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 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
|
||||
@ -33,11 +33,11 @@ package com.sun.naming.internal;
|
||||
*/
|
||||
|
||||
|
||||
class NamedWeakReference extends java.lang.ref.WeakReference {
|
||||
class NamedWeakReference<T> extends java.lang.ref.WeakReference<T> {
|
||||
|
||||
private final String name;
|
||||
|
||||
NamedWeakReference(Object referent, String name) {
|
||||
NamedWeakReference(T referent, String name) {
|
||||
super(referent);
|
||||
this.name = name;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -27,11 +27,9 @@ package com.sun.naming.internal;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URL;
|
||||
import java.lang.ref.WeakReference;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashMap;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
@ -89,7 +87,9 @@ public final class ResourceManager {
|
||||
* One from application resource files is keyed on the thread's
|
||||
* context class loader.
|
||||
*/
|
||||
private static final WeakHashMap propertiesCache = new WeakHashMap(11);
|
||||
// WeakHashMap<Class | ClassLoader, Hashtable>
|
||||
private static final WeakHashMap<Object, Hashtable<? super String, Object>>
|
||||
propertiesCache = new WeakHashMap<>(11);
|
||||
|
||||
/*
|
||||
* A cache of factory objects (ObjectFactory, StateFactory, ControlFactory).
|
||||
@ -99,7 +99,9 @@ public final class ResourceManager {
|
||||
* weakly referenced so as not to prevent GC of the class loader.
|
||||
* Used in getFactories().
|
||||
*/
|
||||
private static final WeakHashMap factoryCache = new WeakHashMap(11);
|
||||
private static final
|
||||
WeakHashMap<ClassLoader, Map<String, List<NamedWeakReference<Object>>>>
|
||||
factoryCache = new WeakHashMap<>(11);
|
||||
|
||||
/*
|
||||
* A cache of URL factory objects (ObjectFactory).
|
||||
@ -110,8 +112,11 @@ public final class ResourceManager {
|
||||
* NO_FACTORY if a previous search revealed no factory. Used in
|
||||
* getFactory().
|
||||
*/
|
||||
private static final WeakHashMap urlFactoryCache = new WeakHashMap(11);
|
||||
private static final WeakReference NO_FACTORY = new WeakReference(null);
|
||||
private static final
|
||||
WeakHashMap<ClassLoader, Map<String, WeakReference<Object>>>
|
||||
urlFactoryCache = new WeakHashMap<>(11);
|
||||
private static final WeakReference<Object> NO_FACTORY =
|
||||
new WeakReference<>(null);
|
||||
|
||||
/**
|
||||
* A class to allow JNDI properties be specified as applet parameters
|
||||
@ -152,10 +157,9 @@ public final class ResourceManager {
|
||||
throw new ClassCastException(applet.getClass().getName());
|
||||
try {
|
||||
return getMethod.invoke(applet, name);
|
||||
} catch (InvocationTargetException e) {
|
||||
} catch (InvocationTargetException |
|
||||
IllegalAccessException e) {
|
||||
throw new AssertionError(e);
|
||||
} catch (IllegalAccessException iae) {
|
||||
throw new AssertionError(iae);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -183,12 +187,14 @@ public final class ResourceManager {
|
||||
* @throws NamingException if an error occurs while reading a
|
||||
* resource file
|
||||
*/
|
||||
public static Hashtable getInitialEnvironment(Hashtable env)
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Hashtable<?, ?> getInitialEnvironment(
|
||||
Hashtable<?, ?> env)
|
||||
throws NamingException
|
||||
{
|
||||
String[] props = VersionHelper.PROPS; // system/applet properties
|
||||
if (env == null) {
|
||||
env = new Hashtable(11);
|
||||
env = new Hashtable<>(11);
|
||||
}
|
||||
Object applet = env.get(Context.APPLET);
|
||||
|
||||
@ -213,14 +219,14 @@ public final class ResourceManager {
|
||||
: helper.getJndiProperty(i);
|
||||
}
|
||||
if (val != null) {
|
||||
env.put(props[i], val);
|
||||
((Hashtable<String, Object>)env).put(props[i], val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Merge the above with the values read from all application
|
||||
// resource files. Colon-separated lists are concatenated.
|
||||
mergeTables(env, getApplicationResources());
|
||||
mergeTables((Hashtable<Object, Object>)env, getApplicationResources());
|
||||
return env;
|
||||
}
|
||||
|
||||
@ -244,7 +250,7 @@ public final class ResourceManager {
|
||||
* @throws NamingException if an error occurs while reading the provider
|
||||
* resource file.
|
||||
*/
|
||||
public static String getProperty(String propName, Hashtable env,
|
||||
public static String getProperty(String propName, Hashtable<?,?> env,
|
||||
Context ctx, boolean concat)
|
||||
throws NamingException {
|
||||
|
||||
@ -305,8 +311,8 @@ public final class ResourceManager {
|
||||
* @see javax.naming.spi.DirectoryManager#getStateToBind
|
||||
* @see javax.naming.ldap.ControlFactory#getControlInstance
|
||||
*/
|
||||
public static FactoryEnumeration getFactories(String propName, Hashtable env,
|
||||
Context ctx) throws NamingException {
|
||||
public static FactoryEnumeration getFactories(String propName,
|
||||
Hashtable<?,?> env, Context ctx) throws NamingException {
|
||||
|
||||
String facProp = getProperty(propName, env, ctx, true);
|
||||
if (facProp == null)
|
||||
@ -315,17 +321,18 @@ public final class ResourceManager {
|
||||
// Cache is based on context class loader and property val
|
||||
ClassLoader loader = helper.getContextClassLoader();
|
||||
|
||||
Map perLoaderCache = null;
|
||||
Map<String, List<NamedWeakReference<Object>>> perLoaderCache = null;
|
||||
synchronized (factoryCache) {
|
||||
perLoaderCache = (Map) factoryCache.get(loader);
|
||||
perLoaderCache = factoryCache.get(loader);
|
||||
if (perLoaderCache == null) {
|
||||
perLoaderCache = new HashMap(11);
|
||||
perLoaderCache = new HashMap<>(11);
|
||||
factoryCache.put(loader, perLoaderCache);
|
||||
}
|
||||
}
|
||||
|
||||
synchronized (perLoaderCache) {
|
||||
List factories = (List) perLoaderCache.get(facProp);
|
||||
List<NamedWeakReference<Object>> factories =
|
||||
perLoaderCache.get(facProp);
|
||||
if (factories != null) {
|
||||
// Cached list
|
||||
return factories.size() == 0 ? null
|
||||
@ -334,13 +341,13 @@ public final class ResourceManager {
|
||||
// Populate list with classes named in facProp; skipping
|
||||
// those that we cannot load
|
||||
StringTokenizer parser = new StringTokenizer(facProp, ":");
|
||||
factories = new ArrayList(5);
|
||||
factories = new ArrayList<>(5);
|
||||
while (parser.hasMoreTokens()) {
|
||||
try {
|
||||
// System.out.println("loading");
|
||||
String className = parser.nextToken();
|
||||
Class c = helper.loadClass(className, loader);
|
||||
factories.add(new NamedWeakReference(c, className));
|
||||
Class<?> c = helper.loadClass(className, loader);
|
||||
factories.add(new NamedWeakReference<Object>(c, className));
|
||||
} catch (Exception e) {
|
||||
// ignore ClassNotFoundException, IllegalArgumentException
|
||||
}
|
||||
@ -388,8 +395,9 @@ public final class ResourceManager {
|
||||
* @see javax.naming.spi.NamingManager#getURLContext
|
||||
* @see javax.naming.spi.NamingManager#getURLObject
|
||||
*/
|
||||
public static Object getFactory(String propName, Hashtable env, Context ctx,
|
||||
String classSuffix, String defaultPkgPrefix) throws NamingException {
|
||||
public static Object getFactory(String propName, Hashtable<?,?> env,
|
||||
Context ctx, String classSuffix, String defaultPkgPrefix)
|
||||
throws NamingException {
|
||||
|
||||
// Merge property with provider property and supplied default
|
||||
String facProp = getProperty(propName, env, ctx, true);
|
||||
@ -403,11 +411,11 @@ public final class ResourceManager {
|
||||
ClassLoader loader = helper.getContextClassLoader();
|
||||
String key = classSuffix + " " + facProp;
|
||||
|
||||
Map perLoaderCache = null;
|
||||
Map<String, WeakReference<Object>> perLoaderCache = null;
|
||||
synchronized (urlFactoryCache) {
|
||||
perLoaderCache = (Map) urlFactoryCache.get(loader);
|
||||
perLoaderCache = urlFactoryCache.get(loader);
|
||||
if (perLoaderCache == null) {
|
||||
perLoaderCache = new HashMap(11);
|
||||
perLoaderCache = new HashMap<>(11);
|
||||
urlFactoryCache.put(loader, perLoaderCache);
|
||||
}
|
||||
}
|
||||
@ -415,7 +423,7 @@ public final class ResourceManager {
|
||||
synchronized (perLoaderCache) {
|
||||
Object factory = null;
|
||||
|
||||
WeakReference factoryRef = (WeakReference) perLoaderCache.get(key);
|
||||
WeakReference<Object> factoryRef = perLoaderCache.get(key);
|
||||
if (factoryRef == NO_FACTORY) {
|
||||
return null;
|
||||
} else if (factoryRef != null) {
|
||||
@ -451,7 +459,7 @@ public final class ResourceManager {
|
||||
|
||||
// Cache it.
|
||||
perLoaderCache.put(key, (factory != null)
|
||||
? new WeakReference(factory)
|
||||
? new WeakReference<>(factory)
|
||||
: NO_FACTORY);
|
||||
return factory;
|
||||
}
|
||||
@ -468,16 +476,18 @@ public final class ResourceManager {
|
||||
*
|
||||
* @throws NamingException if an error occurs while reading the file.
|
||||
*/
|
||||
private static Hashtable getProviderResource(Object obj)
|
||||
private static Hashtable<? super String, Object>
|
||||
getProviderResource(Object obj)
|
||||
throws NamingException
|
||||
{
|
||||
if (obj == null) {
|
||||
return (new Hashtable(1));
|
||||
return (new Hashtable<>(1));
|
||||
}
|
||||
synchronized (propertiesCache) {
|
||||
Class c = obj.getClass();
|
||||
Class<?> c = obj.getClass();
|
||||
|
||||
Hashtable props = (Hashtable)propertiesCache.get(c);
|
||||
Hashtable<? super String, Object> props =
|
||||
propertiesCache.get(c);
|
||||
if (props != null) {
|
||||
return props;
|
||||
}
|
||||
@ -518,22 +528,23 @@ public final class ResourceManager {
|
||||
* @throws NamingException if an error occurs while reading a resource
|
||||
* file.
|
||||
*/
|
||||
private static Hashtable getApplicationResources() throws NamingException {
|
||||
private static Hashtable<? super String, Object> getApplicationResources()
|
||||
throws NamingException {
|
||||
|
||||
ClassLoader cl = helper.getContextClassLoader();
|
||||
|
||||
synchronized (propertiesCache) {
|
||||
Hashtable result = (Hashtable)propertiesCache.get(cl);
|
||||
Hashtable<? super String, Object> result = propertiesCache.get(cl);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
||||
try {
|
||||
NamingEnumeration resources =
|
||||
NamingEnumeration<InputStream> resources =
|
||||
helper.getResources(cl, APP_RESOURCE_FILE_NAME);
|
||||
while (resources.hasMore()) {
|
||||
Properties props = new Properties();
|
||||
props.load((InputStream)resources.next());
|
||||
props.load(resources.next());
|
||||
|
||||
if (result == null) {
|
||||
result = props;
|
||||
@ -563,7 +574,7 @@ public final class ResourceManager {
|
||||
throw ne;
|
||||
}
|
||||
if (result == null) {
|
||||
result = new Hashtable(11);
|
||||
result = new Hashtable<>(11);
|
||||
}
|
||||
propertiesCache.put(cl, result);
|
||||
return result;
|
||||
@ -577,11 +588,10 @@ public final class ResourceManager {
|
||||
* standard JNDI properties that specify colon-separated lists,
|
||||
* the values are concatenated and stored in props1.
|
||||
*/
|
||||
private static void mergeTables(Hashtable props1, Hashtable props2) {
|
||||
Enumeration keys = props2.keys();
|
||||
|
||||
while (keys.hasMoreElements()) {
|
||||
String prop = (String)keys.nextElement();
|
||||
private static void mergeTables(Hashtable<? super String, Object> props1,
|
||||
Hashtable<? super String, Object> props2) {
|
||||
for (Object key : props2.keySet()) {
|
||||
String prop = (String)key;
|
||||
Object val1 = props1.get(prop);
|
||||
if (val1 == null) {
|
||||
props1.put(prop, props2.get(prop));
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -29,7 +29,6 @@ import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Enumeration;
|
||||
import java.util.StringTokenizer;
|
||||
import java.util.Vector;
|
||||
|
||||
@ -78,13 +77,13 @@ public abstract class VersionHelper {
|
||||
return helper;
|
||||
}
|
||||
|
||||
public abstract Class loadClass(String className)
|
||||
public abstract Class<?> loadClass(String className)
|
||||
throws ClassNotFoundException;
|
||||
|
||||
abstract Class loadClass(String className, ClassLoader cl)
|
||||
abstract Class<?> loadClass(String className, ClassLoader cl)
|
||||
throws ClassNotFoundException;
|
||||
|
||||
public abstract Class loadClass(String className, String codebase)
|
||||
public abstract Class<?> loadClass(String className, String codebase)
|
||||
throws ClassNotFoundException, MalformedURLException;
|
||||
|
||||
/*
|
||||
@ -106,7 +105,7 @@ public abstract class VersionHelper {
|
||||
* Returns the resource of a given name associated with a particular
|
||||
* class (never null), or null if none can be found.
|
||||
*/
|
||||
abstract InputStream getResourceAsStream(Class c, String name);
|
||||
abstract InputStream getResourceAsStream(Class<?> c, String name);
|
||||
|
||||
/*
|
||||
* Returns an input stream for a file in <java.home>/lib,
|
||||
@ -122,7 +121,8 @@ public abstract class VersionHelper {
|
||||
* loader. Null represents the bootstrap class loader in some
|
||||
* Java implementations.
|
||||
*/
|
||||
abstract NamingEnumeration getResources(ClassLoader cl, String name)
|
||||
abstract NamingEnumeration<InputStream> getResources(
|
||||
ClassLoader cl, String name)
|
||||
throws IOException;
|
||||
|
||||
/*
|
||||
@ -137,13 +137,13 @@ public abstract class VersionHelper {
|
||||
throws MalformedURLException {
|
||||
// Parse codebase into separate URLs
|
||||
StringTokenizer parser = new StringTokenizer(codebase);
|
||||
Vector vec = new Vector(10);
|
||||
Vector<String> vec = new Vector<>(10);
|
||||
while (parser.hasMoreTokens()) {
|
||||
vec.addElement(parser.nextToken());
|
||||
}
|
||||
String[] url = new String[vec.size()];
|
||||
for (int i = 0; i < url.length; i++) {
|
||||
url[i] = (String)vec.elementAt(i);
|
||||
url[i] = vec.elementAt(i);
|
||||
}
|
||||
|
||||
URL[] urlArray = new URL[url.length];
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2006, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -35,7 +35,6 @@ import java.security.PrivilegedAction;
|
||||
import java.security.PrivilegedActionException;
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Hashtable;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Properties;
|
||||
|
||||
@ -58,7 +57,7 @@ final class VersionHelper12 extends VersionHelper {
|
||||
|
||||
VersionHelper12() {} // Disallow external from creating one of these.
|
||||
|
||||
public Class loadClass(String className) throws ClassNotFoundException {
|
||||
public Class<?> loadClass(String className) throws ClassNotFoundException {
|
||||
ClassLoader cl = getContextClassLoader();
|
||||
return Class.forName(className, true, cl);
|
||||
}
|
||||
@ -66,7 +65,7 @@ final class VersionHelper12 extends VersionHelper {
|
||||
/**
|
||||
* Package private.
|
||||
*/
|
||||
Class loadClass(String className, ClassLoader cl)
|
||||
Class<?> loadClass(String className, ClassLoader cl)
|
||||
throws ClassNotFoundException {
|
||||
return Class.forName(className, true, cl);
|
||||
}
|
||||
@ -75,7 +74,7 @@ final class VersionHelper12 extends VersionHelper {
|
||||
* @param className A non-null fully qualified class name.
|
||||
* @param codebase A non-null, space-separated list of URL strings.
|
||||
*/
|
||||
public Class loadClass(String className, String codebase)
|
||||
public Class<?> loadClass(String className, String codebase)
|
||||
throws ClassNotFoundException, MalformedURLException {
|
||||
ClassLoader cl;
|
||||
|
||||
@ -86,9 +85,9 @@ final class VersionHelper12 extends VersionHelper {
|
||||
}
|
||||
|
||||
String getJndiProperty(final int i) {
|
||||
return (String) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<String>() {
|
||||
public String run() {
|
||||
try {
|
||||
return System.getProperty(PROPS[i]);
|
||||
} catch (SecurityException e) {
|
||||
@ -103,9 +102,9 @@ final class VersionHelper12 extends VersionHelper {
|
||||
if (getSystemPropsFailed) {
|
||||
return null; // after one failure, don't bother trying again
|
||||
}
|
||||
Properties sysProps = (Properties) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
Properties sysProps = AccessController.doPrivileged(
|
||||
new PrivilegedAction<Properties>() {
|
||||
public Properties run() {
|
||||
try {
|
||||
return System.getProperties();
|
||||
} catch (SecurityException e) {
|
||||
@ -125,10 +124,10 @@ final class VersionHelper12 extends VersionHelper {
|
||||
return jProps;
|
||||
}
|
||||
|
||||
InputStream getResourceAsStream(final Class c, final String name) {
|
||||
return (InputStream) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
InputStream getResourceAsStream(final Class<?> c, final String name) {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<InputStream>() {
|
||||
public InputStream run() {
|
||||
return c.getResourceAsStream(name);
|
||||
}
|
||||
}
|
||||
@ -136,9 +135,9 @@ final class VersionHelper12 extends VersionHelper {
|
||||
}
|
||||
|
||||
InputStream getJavaHomeLibStream(final String filename) {
|
||||
return (InputStream) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<InputStream>() {
|
||||
public InputStream run() {
|
||||
try {
|
||||
String javahome = System.getProperty("java.home");
|
||||
if (javahome == null) {
|
||||
@ -155,14 +154,13 @@ final class VersionHelper12 extends VersionHelper {
|
||||
);
|
||||
}
|
||||
|
||||
NamingEnumeration getResources(final ClassLoader cl, final String name)
|
||||
throws IOException
|
||||
{
|
||||
Enumeration urls;
|
||||
NamingEnumeration<InputStream> getResources(final ClassLoader cl,
|
||||
final String name) throws IOException {
|
||||
Enumeration<URL> urls;
|
||||
try {
|
||||
urls = (Enumeration) AccessController.doPrivileged(
|
||||
new PrivilegedExceptionAction() {
|
||||
public Object run() throws IOException {
|
||||
urls = AccessController.doPrivileged(
|
||||
new PrivilegedExceptionAction<Enumeration<URL>>() {
|
||||
public Enumeration<URL> run() throws IOException {
|
||||
return (cl == null)
|
||||
? ClassLoader.getSystemResources(name)
|
||||
: cl.getResources(name);
|
||||
@ -176,9 +174,9 @@ final class VersionHelper12 extends VersionHelper {
|
||||
}
|
||||
|
||||
ClassLoader getContextClassLoader() {
|
||||
return (ClassLoader) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<ClassLoader>() {
|
||||
public ClassLoader run() {
|
||||
return Thread.currentThread().getContextClassLoader();
|
||||
}
|
||||
}
|
||||
@ -193,13 +191,13 @@ final class VersionHelper12 extends VersionHelper {
|
||||
* This is used to enumerate the resources under a foreign codebase.
|
||||
* This class is not MT-safe.
|
||||
*/
|
||||
class InputStreamEnumeration implements NamingEnumeration {
|
||||
class InputStreamEnumeration implements NamingEnumeration<InputStream> {
|
||||
|
||||
private final Enumeration urls;
|
||||
private final Enumeration<URL> urls;
|
||||
|
||||
private Object nextElement = null;
|
||||
private InputStream nextElement = null;
|
||||
|
||||
InputStreamEnumeration(Enumeration urls) {
|
||||
InputStreamEnumeration(Enumeration<URL> urls) {
|
||||
this.urls = urls;
|
||||
}
|
||||
|
||||
@ -207,13 +205,13 @@ final class VersionHelper12 extends VersionHelper {
|
||||
* Returns the next InputStream, or null if there are no more.
|
||||
* An InputStream that cannot be opened is skipped.
|
||||
*/
|
||||
private Object getNextElement() {
|
||||
private InputStream getNextElement() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
new PrivilegedAction<InputStream>() {
|
||||
public InputStream run() {
|
||||
while (urls.hasMoreElements()) {
|
||||
try {
|
||||
return ((URL)urls.nextElement()).openStream();
|
||||
return urls.nextElement().openStream();
|
||||
} catch (IOException e) {
|
||||
// skip this URL
|
||||
}
|
||||
@ -236,9 +234,9 @@ final class VersionHelper12 extends VersionHelper {
|
||||
return hasMore();
|
||||
}
|
||||
|
||||
public Object next() {
|
||||
public InputStream next() {
|
||||
if (hasMore()) {
|
||||
Object res = nextElement;
|
||||
InputStream res = nextElement;
|
||||
nextElement = null;
|
||||
return res;
|
||||
} else {
|
||||
@ -246,7 +244,7 @@ final class VersionHelper12 extends VersionHelper {
|
||||
}
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
public InputStream nextElement() {
|
||||
return next();
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -394,7 +394,7 @@ public class CompositeName implements Name {
|
||||
* If posn is outside the specified range.
|
||||
*/
|
||||
public Name getPrefix(int posn) {
|
||||
Enumeration comps = impl.getPrefix(posn);
|
||||
Enumeration<String> comps = impl.getPrefix(posn);
|
||||
return (new CompositeName(comps));
|
||||
}
|
||||
|
||||
@ -412,7 +412,7 @@ public class CompositeName implements Name {
|
||||
* If posn is outside the specified range.
|
||||
*/
|
||||
public Name getSuffix(int posn) {
|
||||
Enumeration comps = impl.getSuffix(posn);
|
||||
Enumeration<String> comps = impl.getSuffix(posn);
|
||||
return (new CompositeName(comps));
|
||||
}
|
||||
|
||||
@ -563,7 +563,7 @@ public class CompositeName implements Name {
|
||||
private void writeObject(java.io.ObjectOutputStream s)
|
||||
throws java.io.IOException {
|
||||
s.writeInt(size());
|
||||
Enumeration comps = getAll();
|
||||
Enumeration<String> comps = getAll();
|
||||
while (comps.hasMoreElements()) {
|
||||
s.writeObject(comps.nextElement());
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -376,7 +376,7 @@ public class CompoundName implements Name {
|
||||
* If posn is outside the specified range.
|
||||
*/
|
||||
public Name getPrefix(int posn) {
|
||||
Enumeration comps = impl.getPrefix(posn);
|
||||
Enumeration<String> comps = impl.getPrefix(posn);
|
||||
return (new CompoundName(comps, mySyntax));
|
||||
}
|
||||
|
||||
@ -396,7 +396,7 @@ public class CompoundName implements Name {
|
||||
* If posn is outside the specified range.
|
||||
*/
|
||||
public Name getSuffix(int posn) {
|
||||
Enumeration comps = impl.getSuffix(posn);
|
||||
Enumeration<String> comps = impl.getSuffix(posn);
|
||||
return (new CompoundName(comps, mySyntax));
|
||||
}
|
||||
|
||||
@ -557,7 +557,7 @@ public class CompoundName implements Name {
|
||||
throws java.io.IOException {
|
||||
s.writeObject(mySyntax);
|
||||
s.writeInt(size());
|
||||
Enumeration comps = getAll();
|
||||
Enumeration<String> comps = getAll();
|
||||
while (comps.hasMoreElements()) {
|
||||
s.writeObject(comps.nextElement());
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -232,10 +232,12 @@ public class InitialContext implements Context {
|
||||
* @see #InitialContext(boolean)
|
||||
* @since 1.3
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
protected void init(Hashtable<?,?> environment)
|
||||
throws NamingException
|
||||
{
|
||||
myProps = ResourceManager.getInitialEnvironment(environment);
|
||||
myProps = (Hashtable<Object,Object>)
|
||||
ResourceManager.getInitialEnvironment(environment);
|
||||
|
||||
if (myProps.get(Context.INITIAL_CONTEXT_FACTORY) != null) {
|
||||
// user has specified initial context factory; try to get it
|
||||
@ -265,6 +267,7 @@ public class InitialContext implements Context {
|
||||
* @see #lookup(Name)
|
||||
* @since 1.6
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T doLookup(Name name)
|
||||
throws NamingException {
|
||||
return (T) (new InitialContext()).lookup(name);
|
||||
@ -279,6 +282,7 @@ public class InitialContext implements Context {
|
||||
* @throws NamingException if a naming exception is encountered
|
||||
* @since 1.6
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T> T doLookup(String name)
|
||||
throws NamingException {
|
||||
return (T) (new InitialContext()).lookup(name);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2002, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -45,7 +45,7 @@ class NameImpl {
|
||||
private static final byte RIGHT_TO_LEFT = 2;
|
||||
private static final byte FLAT = 0;
|
||||
|
||||
private Vector components;
|
||||
private Vector<String> components;
|
||||
|
||||
private byte syntaxDirection = LEFT_TO_RIGHT;
|
||||
private String syntaxSeparator = "/";
|
||||
@ -97,7 +97,7 @@ class NameImpl {
|
||||
return (i);
|
||||
}
|
||||
|
||||
private final int extractComp(String name, int i, int len, Vector comps)
|
||||
private final int extractComp(String name, int i, int len, Vector<String> comps)
|
||||
throws InvalidNameException {
|
||||
String beginQuote;
|
||||
String endQuote;
|
||||
@ -270,7 +270,7 @@ class NameImpl {
|
||||
if (syntax != null) {
|
||||
recordNamingConvention(syntax);
|
||||
}
|
||||
components = new Vector();
|
||||
components = new Vector<>();
|
||||
}
|
||||
|
||||
NameImpl(Properties syntax, String n) throws InvalidNameException {
|
||||
@ -284,8 +284,8 @@ class NameImpl {
|
||||
i = extractComp(n, i, len, components);
|
||||
|
||||
String comp = rToL
|
||||
? (String)components.firstElement()
|
||||
: (String)components.lastElement();
|
||||
? components.firstElement()
|
||||
: components.lastElement();
|
||||
if (comp.length() >= 1) {
|
||||
compsAllEmpty = false;
|
||||
}
|
||||
@ -304,7 +304,7 @@ class NameImpl {
|
||||
}
|
||||
}
|
||||
|
||||
NameImpl(Properties syntax, Enumeration comps) {
|
||||
NameImpl(Properties syntax, Enumeration<String> comps) {
|
||||
this(syntax);
|
||||
|
||||
// %% comps could shrink in the middle.
|
||||
@ -455,9 +455,9 @@ class NameImpl {
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (syntaxDirection == RIGHT_TO_LEFT) {
|
||||
comp =
|
||||
stringifyComp((String) components.elementAt(size - 1 - i));
|
||||
stringifyComp(components.elementAt(size - 1 - i));
|
||||
} else {
|
||||
comp = stringifyComp((String) components.elementAt(i));
|
||||
comp = stringifyComp(components.elementAt(i));
|
||||
}
|
||||
if ((i != 0) && (syntaxSeparator != null))
|
||||
answer.append(syntaxSeparator);
|
||||
@ -474,12 +474,12 @@ class NameImpl {
|
||||
if ((obj != null) && (obj instanceof NameImpl)) {
|
||||
NameImpl target = (NameImpl)obj;
|
||||
if (target.size() == this.size()) {
|
||||
Enumeration mycomps = getAll();
|
||||
Enumeration comps = target.getAll();
|
||||
Enumeration<String> mycomps = getAll();
|
||||
Enumeration<String> comps = target.getAll();
|
||||
while (mycomps.hasMoreElements()) {
|
||||
// %% comps could shrink in the middle.
|
||||
String my = (String)mycomps.nextElement();
|
||||
String his = (String)comps.nextElement();
|
||||
String my = mycomps.nextElement();
|
||||
String his = comps.nextElement();
|
||||
if (syntaxTrimBlanks) {
|
||||
my = my.trim();
|
||||
his = his.trim();
|
||||
@ -543,22 +543,22 @@ class NameImpl {
|
||||
return (components.size());
|
||||
}
|
||||
|
||||
public Enumeration getAll() {
|
||||
public Enumeration<String> getAll() {
|
||||
return components.elements();
|
||||
}
|
||||
|
||||
public String get(int posn) {
|
||||
return ((String) components.elementAt(posn));
|
||||
return components.elementAt(posn);
|
||||
}
|
||||
|
||||
public Enumeration getPrefix(int posn) {
|
||||
public Enumeration<String> getPrefix(int posn) {
|
||||
if (posn < 0 || posn > size()) {
|
||||
throw new ArrayIndexOutOfBoundsException(posn);
|
||||
}
|
||||
return new NameImplEnumerator(components, 0, posn);
|
||||
}
|
||||
|
||||
public Enumeration getSuffix(int posn) {
|
||||
public Enumeration<String> getSuffix(int posn) {
|
||||
int cnt = size();
|
||||
if (posn < 0 || posn > cnt) {
|
||||
throw new ArrayIndexOutOfBoundsException(posn);
|
||||
@ -570,15 +570,15 @@ class NameImpl {
|
||||
return (components.isEmpty());
|
||||
}
|
||||
|
||||
public boolean startsWith(int posn, Enumeration prefix) {
|
||||
public boolean startsWith(int posn, Enumeration<String> prefix) {
|
||||
if (posn < 0 || posn > size()) {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
Enumeration mycomps = getPrefix(posn);
|
||||
Enumeration<String> mycomps = getPrefix(posn);
|
||||
while (mycomps.hasMoreElements()) {
|
||||
String my = (String)mycomps.nextElement();
|
||||
String his = (String)prefix.nextElement();
|
||||
String my = mycomps.nextElement();
|
||||
String his = prefix.nextElement();
|
||||
if (syntaxTrimBlanks) {
|
||||
my = my.trim();
|
||||
his = his.trim();
|
||||
@ -597,7 +597,7 @@ class NameImpl {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean endsWith(int posn, Enumeration suffix) {
|
||||
public boolean endsWith(int posn, Enumeration<String> suffix) {
|
||||
// posn is number of elements in suffix
|
||||
// startIndex is the starting position in this name
|
||||
// at which to start the comparison. It is calculated by
|
||||
@ -607,10 +607,10 @@ class NameImpl {
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
Enumeration mycomps = getSuffix(startIndex);
|
||||
Enumeration<String> mycomps = getSuffix(startIndex);
|
||||
while (mycomps.hasMoreElements()) {
|
||||
String my = (String)mycomps.nextElement();
|
||||
String his = (String)suffix.nextElement();
|
||||
String my = mycomps.nextElement();
|
||||
String his = suffix.nextElement();
|
||||
if (syntaxTrimBlanks) {
|
||||
my = my.trim();
|
||||
his = his.trim();
|
||||
@ -629,11 +629,11 @@ class NameImpl {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean addAll(Enumeration comps) throws InvalidNameException {
|
||||
public boolean addAll(Enumeration<String> comps) throws InvalidNameException {
|
||||
boolean added = false;
|
||||
while (comps.hasMoreElements()) {
|
||||
try {
|
||||
Object comp = comps.nextElement();
|
||||
String comp = comps.nextElement();
|
||||
if (size() > 0 && syntaxDirection == FLAT) {
|
||||
throw new InvalidNameException(
|
||||
"A flat name can only have a single component");
|
||||
@ -647,12 +647,12 @@ class NameImpl {
|
||||
return added;
|
||||
}
|
||||
|
||||
public boolean addAll(int posn, Enumeration comps)
|
||||
public boolean addAll(int posn, Enumeration<String> comps)
|
||||
throws InvalidNameException {
|
||||
boolean added = false;
|
||||
for (int i = posn; comps.hasMoreElements(); i++) {
|
||||
try {
|
||||
Object comp = comps.nextElement();
|
||||
String comp = comps.nextElement();
|
||||
if (size() > 0 && syntaxDirection == FLAT) {
|
||||
throw new InvalidNameException(
|
||||
"A flat name can only have a single component");
|
||||
@ -690,8 +690,8 @@ class NameImpl {
|
||||
|
||||
public int hashCode() {
|
||||
int hash = 0;
|
||||
for (Enumeration e = getAll(); e.hasMoreElements();) {
|
||||
String comp = (String)e.nextElement();
|
||||
for (Enumeration<String> e = getAll(); e.hasMoreElements();) {
|
||||
String comp = e.nextElement();
|
||||
if (syntaxTrimBlanks) {
|
||||
comp = comp.trim();
|
||||
}
|
||||
@ -706,12 +706,12 @@ class NameImpl {
|
||||
}
|
||||
|
||||
final
|
||||
class NameImplEnumerator implements Enumeration {
|
||||
Vector vector;
|
||||
class NameImplEnumerator implements Enumeration<String> {
|
||||
Vector<String> vector;
|
||||
int count;
|
||||
int limit;
|
||||
|
||||
NameImplEnumerator(Vector v, int start, int lim) {
|
||||
NameImplEnumerator(Vector<String> v, int start, int lim) {
|
||||
vector = v;
|
||||
count = start;
|
||||
limit = lim;
|
||||
@ -721,7 +721,7 @@ class NameImplEnumerator implements Enumeration {
|
||||
return count < limit;
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
public String nextElement() {
|
||||
if (count < limit) {
|
||||
return vector.elementAt(count++);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -120,7 +120,7 @@ public class Reference implements Cloneable, java.io.Serializable {
|
||||
*/
|
||||
public Reference(String className) {
|
||||
this.className = className;
|
||||
addrs = new Vector();
|
||||
addrs = new Vector<>();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -134,7 +134,7 @@ public class Reference implements Cloneable, java.io.Serializable {
|
||||
*/
|
||||
public Reference(String className, RefAddr addr) {
|
||||
this.className = className;
|
||||
addrs = new Vector();
|
||||
addrs = new Vector<>();
|
||||
addrs.addElement(addr);
|
||||
}
|
||||
|
||||
@ -225,7 +225,7 @@ public class Reference implements Cloneable, java.io.Serializable {
|
||||
int len = addrs.size();
|
||||
RefAddr addr;
|
||||
for (int i = 0; i < len; i++) {
|
||||
addr = (RefAddr) addrs.elementAt(i);
|
||||
addr = addrs.elementAt(i);
|
||||
if (addr.getType().compareTo(addrType) == 0)
|
||||
return addr;
|
||||
}
|
||||
@ -241,7 +241,7 @@ public class Reference implements Cloneable, java.io.Serializable {
|
||||
* range.
|
||||
*/
|
||||
public RefAddr get(int posn) {
|
||||
return ((RefAddr) addrs.elementAt(posn));
|
||||
return addrs.elementAt(posn);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -331,8 +331,8 @@ public class Reference implements Cloneable, java.io.Serializable {
|
||||
// ignore factory information
|
||||
if (target.className.equals(this.className) &&
|
||||
target.size() == this.size()) {
|
||||
Enumeration mycomps = getAll();
|
||||
Enumeration comps = target.getAll();
|
||||
Enumeration<RefAddr> mycomps = getAll();
|
||||
Enumeration<RefAddr> comps = target.getAll();
|
||||
while (mycomps.hasMoreElements())
|
||||
if (!(mycomps.nextElement().equals(comps.nextElement())))
|
||||
return false;
|
||||
@ -350,7 +350,7 @@ public class Reference implements Cloneable, java.io.Serializable {
|
||||
*/
|
||||
public int hashCode() {
|
||||
int hash = className.hashCode();
|
||||
for (Enumeration e = getAll(); e.hasMoreElements();)
|
||||
for (Enumeration<RefAddr> e = getAll(); e.hasMoreElements();)
|
||||
hash += e.nextElement().hashCode();
|
||||
return hash;
|
||||
}
|
||||
@ -382,7 +382,7 @@ public class Reference implements Cloneable, java.io.Serializable {
|
||||
public Object clone() {
|
||||
Reference r = new Reference(className, classFactory, classFactoryLocation);
|
||||
Enumeration<RefAddr> a = getAll();
|
||||
r.addrs = new Vector();
|
||||
r.addrs = new Vector<>();
|
||||
|
||||
while (a.hasMoreElements())
|
||||
r.addrs.addElement(a.nextElement());
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -91,6 +91,7 @@ public class BasicAttribute implements Attribute {
|
||||
*/
|
||||
protected boolean ordered = false;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object clone() {
|
||||
BasicAttribute attr;
|
||||
try {
|
||||
@ -98,7 +99,7 @@ public class BasicAttribute implements Attribute {
|
||||
} catch (CloneNotSupportedException e) {
|
||||
attr = new BasicAttribute(attrID, ordered);
|
||||
}
|
||||
attr.values = (Vector)values.clone();
|
||||
attr.values = (Vector<Object>)values.clone();
|
||||
return attr;
|
||||
}
|
||||
|
||||
@ -149,7 +150,7 @@ public class BasicAttribute implements Attribute {
|
||||
}
|
||||
} else {
|
||||
// order is not relevant; check for existence
|
||||
Enumeration theirs = target.getAll();
|
||||
Enumeration<?> theirs = target.getAll();
|
||||
while (theirs.hasMoreElements()) {
|
||||
if (find(theirs.nextElement()) < 0)
|
||||
return false;
|
||||
@ -215,7 +216,7 @@ public class BasicAttribute implements Attribute {
|
||||
answer.append("No values");
|
||||
} else {
|
||||
boolean start = true;
|
||||
for (Enumeration e = values.elements(); e.hasMoreElements(); ) {
|
||||
for (Enumeration<Object> e = values.elements(); e.hasMoreElements(); ) {
|
||||
if (!start)
|
||||
answer.append(", ");
|
||||
answer.append(e.nextElement());
|
||||
@ -254,7 +255,7 @@ public class BasicAttribute implements Attribute {
|
||||
*/
|
||||
public BasicAttribute(String id, boolean ordered) {
|
||||
attrID = id;
|
||||
values = new Vector();
|
||||
values = new Vector<>();
|
||||
this.ordered = ordered;
|
||||
}
|
||||
|
||||
@ -327,7 +328,7 @@ public class BasicAttribute implements Attribute {
|
||||
// For finding first element that has a null in JDK1.1 Vector.
|
||||
// In the Java 2 platform, can just replace this with Vector.indexOf(target);
|
||||
private int find(Object target) {
|
||||
Class cl;
|
||||
Class<?> cl;
|
||||
if (target == null) {
|
||||
int ct = values.size();
|
||||
for (int i = 0 ; i < ct ; i++) {
|
||||
@ -514,7 +515,7 @@ public class BasicAttribute implements Attribute {
|
||||
throws java.io.IOException, ClassNotFoundException {
|
||||
s.defaultReadObject(); // read in the attrID
|
||||
int n = s.readInt(); // number of values
|
||||
values = new Vector(n);
|
||||
values = new Vector<>(n);
|
||||
while (--n >= 0) {
|
||||
values.addElement(s.readObject());
|
||||
}
|
||||
@ -522,31 +523,31 @@ public class BasicAttribute implements Attribute {
|
||||
|
||||
|
||||
class ValuesEnumImpl implements NamingEnumeration<Object> {
|
||||
Enumeration list;
|
||||
Enumeration<Object> list;
|
||||
|
||||
ValuesEnumImpl() {
|
||||
list = values.elements();
|
||||
}
|
||||
ValuesEnumImpl() {
|
||||
list = values.elements();
|
||||
}
|
||||
|
||||
public boolean hasMoreElements() {
|
||||
return list.hasMoreElements();
|
||||
}
|
||||
public boolean hasMoreElements() {
|
||||
return list.hasMoreElements();
|
||||
}
|
||||
|
||||
public Object nextElement() {
|
||||
return(list.nextElement());
|
||||
}
|
||||
public Object nextElement() {
|
||||
return(list.nextElement());
|
||||
}
|
||||
|
||||
public Object next() throws NamingException {
|
||||
return list.nextElement();
|
||||
}
|
||||
public Object next() throws NamingException {
|
||||
return list.nextElement();
|
||||
}
|
||||
|
||||
public boolean hasMore() throws NamingException {
|
||||
return list.hasMoreElements();
|
||||
}
|
||||
public boolean hasMore() throws NamingException {
|
||||
return list.hasMoreElements();
|
||||
}
|
||||
|
||||
public void close() throws NamingException {
|
||||
list = null;
|
||||
}
|
||||
public void close() throws NamingException {
|
||||
list = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -78,7 +78,7 @@ public class BasicAttributes implements Attributes {
|
||||
// If ignoreCase is true, key is aways lowercase.
|
||||
// If ignoreCase is false, key is stored as supplied by put().
|
||||
// %%% Not declared "private" due to bug 4064984.
|
||||
transient Hashtable attrs = new Hashtable(11);
|
||||
transient Hashtable<String,Attribute> attrs = new Hashtable<>(11);
|
||||
|
||||
/**
|
||||
* Constructs a new instance of Attributes.
|
||||
@ -138,6 +138,7 @@ public class BasicAttributes implements Attributes {
|
||||
this.put(new BasicAttribute(attrID, val));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public Object clone() {
|
||||
BasicAttributes attrset;
|
||||
try {
|
||||
@ -145,7 +146,7 @@ public class BasicAttributes implements Attributes {
|
||||
} catch (CloneNotSupportedException e) {
|
||||
attrset = new BasicAttributes(ignoreCase);
|
||||
}
|
||||
attrset.attrs = (Hashtable)attrs.clone();
|
||||
attrset.attrs = (Hashtable<String,Attribute>)attrs.clone();
|
||||
return attrset;
|
||||
}
|
||||
|
||||
@ -158,7 +159,7 @@ public class BasicAttributes implements Attributes {
|
||||
}
|
||||
|
||||
public Attribute get(String attrID) {
|
||||
Attribute attr = (Attribute) attrs.get(
|
||||
Attribute attr = attrs.get(
|
||||
ignoreCase ? attrID.toLowerCase() : attrID);
|
||||
return (attr);
|
||||
}
|
||||
@ -180,12 +181,12 @@ public class BasicAttributes implements Attributes {
|
||||
if (ignoreCase) {
|
||||
id = id.toLowerCase();
|
||||
}
|
||||
return (Attribute)attrs.put(id, attr);
|
||||
return attrs.put(id, attr);
|
||||
}
|
||||
|
||||
public Attribute remove(String attrID) {
|
||||
String id = (ignoreCase ? attrID.toLowerCase() : attrID);
|
||||
return (Attribute)attrs.remove(id);
|
||||
return attrs.remove(id);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -234,7 +235,7 @@ public class BasicAttributes implements Attributes {
|
||||
if (size() == target.size()) {
|
||||
Attribute their, mine;
|
||||
try {
|
||||
NamingEnumeration theirs = target.getAll();
|
||||
NamingEnumeration<?> theirs = target.getAll();
|
||||
while (theirs.hasMore()) {
|
||||
their = (Attribute)theirs.next();
|
||||
mine = get(their.getID());
|
||||
@ -268,7 +269,7 @@ public class BasicAttributes implements Attributes {
|
||||
public int hashCode() {
|
||||
int hash = (ignoreCase ? 1 : 0);
|
||||
try {
|
||||
NamingEnumeration all = getAll();
|
||||
NamingEnumeration<?> all = getAll();
|
||||
while (all.hasMore()) {
|
||||
hash += all.next().hashCode();
|
||||
}
|
||||
@ -286,7 +287,7 @@ public class BasicAttributes implements Attributes {
|
||||
throws java.io.IOException {
|
||||
s.defaultWriteObject(); // write out the ignoreCase flag
|
||||
s.writeInt(attrs.size());
|
||||
Enumeration attrEnum = attrs.elements();
|
||||
Enumeration<Attribute> attrEnum = attrs.elements();
|
||||
while (attrEnum.hasMoreElements()) {
|
||||
s.writeObject(attrEnum.nextElement());
|
||||
}
|
||||
@ -300,8 +301,8 @@ public class BasicAttributes implements Attributes {
|
||||
s.defaultReadObject(); // read in the ignoreCase flag
|
||||
int n = s.readInt(); // number of attributes
|
||||
attrs = (n >= 1)
|
||||
? new Hashtable(n * 2)
|
||||
: new Hashtable(2); // can't have initial size of 0 (grrr...)
|
||||
? new Hashtable<String,Attribute>(n * 2)
|
||||
: new Hashtable<String,Attribute>(2); // can't have initial size of 0 (grrr...)
|
||||
while (--n >= 0) {
|
||||
put((Attribute)s.readObject());
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -129,15 +129,16 @@ public class InitialLdapContext extends InitialDirContext implements LdapContext
|
||||
* @see #reconnect
|
||||
* @see LdapContext#reconnect
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public InitialLdapContext(Hashtable<?,?> environment,
|
||||
Control[] connCtls)
|
||||
throws NamingException {
|
||||
super(true); // don't initialize yet
|
||||
|
||||
// Clone environment since caller owns it.
|
||||
Hashtable env = (environment == null)
|
||||
? new Hashtable(11)
|
||||
: (Hashtable)environment.clone();
|
||||
Hashtable<Object,Object> env = (environment == null)
|
||||
? new Hashtable<>(11)
|
||||
: (Hashtable<Object,Object>)environment.clone();
|
||||
|
||||
// Put connect controls into environment. Copy them first since
|
||||
// caller owns the array.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 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
|
||||
@ -104,9 +104,7 @@ import java.io.IOException;
|
||||
|
||||
public class LdapName implements Name {
|
||||
|
||||
// private transient ArrayList<Rdn> rdns; // parsed name components
|
||||
|
||||
private transient ArrayList rdns; // parsed name components
|
||||
private transient List<Rdn> rdns; // parsed name components
|
||||
private transient String unparsed; // if non-null, the DN in unparsed form
|
||||
private static final long serialVersionUID = -1595520034788997356L;
|
||||
|
||||
@ -144,14 +142,14 @@ public class LdapName implements Name {
|
||||
// "Invalid entries, list entries must be of type Rdn");
|
||||
// }
|
||||
|
||||
this.rdns = new ArrayList(rdns.size());
|
||||
this.rdns = new ArrayList<>(rdns.size());
|
||||
for (int i = 0; i < rdns.size(); i++) {
|
||||
Object obj = rdns.get(i);
|
||||
if (!(obj instanceof Rdn)) {
|
||||
throw new IllegalArgumentException("Entry:" + obj +
|
||||
" not a valid type;list entries must be of type Rdn");
|
||||
}
|
||||
this.rdns.add(obj);
|
||||
this.rdns.add((Rdn)obj);
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,14 +159,12 @@ public class LdapName implements Name {
|
||||
* (if "name" is not null), the unparsed DN.
|
||||
*
|
||||
*/
|
||||
// private LdapName(String name, List<Rdn> rdns, int beg, int end) {
|
||||
|
||||
private LdapName(String name, ArrayList rdns, int beg, int end) {
|
||||
private LdapName(String name, List<Rdn> rdns, int beg, int end) {
|
||||
unparsed = name;
|
||||
// this.rdns = rdns.subList(beg, end);
|
||||
|
||||
List sList = rdns.subList(beg, end);
|
||||
this.rdns = new ArrayList(sList);
|
||||
List<Rdn> sList = rdns.subList(beg, end);
|
||||
this.rdns = new ArrayList<>(sList);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -201,7 +197,7 @@ public class LdapName implements Name {
|
||||
* Each element of the enumeration is of class String.
|
||||
*/
|
||||
public Enumeration<String> getAll() {
|
||||
final Iterator iter = rdns.iterator();
|
||||
final Iterator<Rdn> iter = rdns.iterator();
|
||||
|
||||
return new Enumeration<String>() {
|
||||
public boolean hasMoreElements() {
|
||||
@ -234,7 +230,7 @@ public class LdapName implements Name {
|
||||
* specified range.
|
||||
*/
|
||||
public Rdn getRdn(int posn) {
|
||||
return (Rdn) rdns.get(posn);
|
||||
return rdns.get(posn);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -370,7 +366,7 @@ public class LdapName implements Name {
|
||||
doesListMatch(len1 - len2, len1, rdns));
|
||||
}
|
||||
|
||||
private boolean doesListMatch(int beg, int end, List rdns) {
|
||||
private boolean doesListMatch(int beg, int end, List<Rdn> rdns) {
|
||||
for (int i = beg; i < end; i++) {
|
||||
if (!this.rdns.get(i).equals(rdns.get(i - beg))) {
|
||||
return false;
|
||||
@ -457,10 +453,10 @@ public class LdapName implements Name {
|
||||
LdapName s = (LdapName) suffix;
|
||||
rdns.addAll(posn, s.rdns);
|
||||
} else {
|
||||
Enumeration comps = suffix.getAll();
|
||||
Enumeration<String> comps = suffix.getAll();
|
||||
while (comps.hasMoreElements()) {
|
||||
rdns.add(posn++,
|
||||
(new Rfc2253Parser((String) comps.nextElement()).
|
||||
(new Rfc2253Parser(comps.nextElement()).
|
||||
parseRdn()));
|
||||
}
|
||||
}
|
||||
@ -489,7 +485,7 @@ public class LdapName implements Name {
|
||||
throw new IllegalArgumentException("Entry:" + obj +
|
||||
" not a valid type;suffix list entries must be of type Rdn");
|
||||
}
|
||||
rdns.add(i + posn, obj);
|
||||
rdns.add(i + posn, (Rdn)obj);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@ -627,11 +623,11 @@ public class LdapName implements Name {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
int size = rdns.size();
|
||||
if ((size - 1) >= 0) {
|
||||
builder.append((Rdn) rdns.get(size - 1));
|
||||
builder.append(rdns.get(size - 1));
|
||||
}
|
||||
for (int next = size - 2; next >= 0; next--) {
|
||||
builder.append(',');
|
||||
builder.append((Rdn) rdns.get(next));
|
||||
builder.append(rdns.get(next));
|
||||
}
|
||||
unparsed = builder.toString();
|
||||
return unparsed;
|
||||
@ -672,8 +668,8 @@ public class LdapName implements Name {
|
||||
// Compare RDNs one by one for equality
|
||||
for (int i = 0; i < rdns.size(); i++) {
|
||||
// Compare a single pair of RDNs.
|
||||
Rdn rdn1 = (Rdn) rdns.get(i);
|
||||
Rdn rdn2 = (Rdn) that.rdns.get(i);
|
||||
Rdn rdn1 = rdns.get(i);
|
||||
Rdn rdn2 = that.rdns.get(i);
|
||||
if (!rdn1.equals(rdn2)) {
|
||||
return false;
|
||||
}
|
||||
@ -727,8 +723,8 @@ public class LdapName implements Name {
|
||||
int minSize = Math.min(rdns.size(), that.rdns.size());
|
||||
for (int i = 0; i < minSize; i++) {
|
||||
// Compare a single pair of RDNs.
|
||||
Rdn rdn1 = (Rdn)rdns.get(i);
|
||||
Rdn rdn2 = (Rdn)that.rdns.get(i);
|
||||
Rdn rdn1 = rdns.get(i);
|
||||
Rdn rdn2 = that.rdns.get(i);
|
||||
|
||||
int diff = rdn1.compareTo(rdn2);
|
||||
if (diff != 0) {
|
||||
@ -752,7 +748,7 @@ public class LdapName implements Name {
|
||||
|
||||
// For each RDN...
|
||||
for (int i = 0; i < rdns.size(); i++) {
|
||||
Rdn rdn = (Rdn) rdns.get(i);
|
||||
Rdn rdn = rdns.get(i);
|
||||
hash += rdn.hashCode();
|
||||
}
|
||||
return hash;
|
||||
@ -786,6 +782,6 @@ public class LdapName implements Name {
|
||||
private void parse() throws InvalidNameException {
|
||||
// rdns = (ArrayList<Rdn>) (new RFC2253Parser(unparsed)).getDN();
|
||||
|
||||
rdns = (ArrayList) (new Rfc2253Parser(unparsed)).parseDn();
|
||||
rdns = new Rfc2253Parser(unparsed).parseDn();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 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
|
||||
@ -104,8 +104,7 @@ import java.io.IOException;
|
||||
|
||||
public class Rdn implements Serializable, Comparable<Object> {
|
||||
|
||||
// private transient ArrayList<RdnEntry> entries;
|
||||
private transient ArrayList entries;
|
||||
private transient ArrayList<RdnEntry> entries;
|
||||
|
||||
// The common case.
|
||||
private static final int DEFAULT_SIZE = 1;
|
||||
@ -130,12 +129,12 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
if (attrSet.size() == 0) {
|
||||
throw new InvalidNameException("Attributes cannot be empty");
|
||||
}
|
||||
entries = new ArrayList(attrSet.size());
|
||||
NamingEnumeration attrs = attrSet.getAll();
|
||||
entries = new ArrayList<>(attrSet.size());
|
||||
NamingEnumeration<? extends Attribute> attrs = attrSet.getAll();
|
||||
try {
|
||||
for (int nEntries = 0; attrs.hasMore(); nEntries++) {
|
||||
RdnEntry entry = new RdnEntry();
|
||||
Attribute attr = (Attribute) attrs.next();
|
||||
Attribute attr = attrs.next();
|
||||
entry.type = attr.getID();
|
||||
entry.value = attr.get();
|
||||
entries.add(nEntries, entry);
|
||||
@ -161,7 +160,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
* parsing of the rdnString.
|
||||
*/
|
||||
public Rdn(String rdnString) throws InvalidNameException {
|
||||
entries = new ArrayList(DEFAULT_SIZE);
|
||||
entries = new ArrayList<>(DEFAULT_SIZE);
|
||||
(new Rfc2253Parser(rdnString)).parseRdn(this);
|
||||
}
|
||||
|
||||
@ -172,7 +171,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
* @param rdn The non-null Rdn to be copied.
|
||||
*/
|
||||
public Rdn(Rdn rdn) {
|
||||
entries = new ArrayList(rdn.entries.size());
|
||||
entries = new ArrayList<>(rdn.entries.size());
|
||||
entries.addAll(rdn.entries);
|
||||
}
|
||||
|
||||
@ -199,7 +198,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
"type or value cannot be empty, type:" + type +
|
||||
" value:" + value);
|
||||
}
|
||||
entries = new ArrayList(DEFAULT_SIZE);
|
||||
entries = new ArrayList<>(DEFAULT_SIZE);
|
||||
put(type, value);
|
||||
}
|
||||
|
||||
@ -210,7 +209,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
|
||||
// An empty constructor used by the parser
|
||||
Rdn() {
|
||||
entries = new ArrayList(DEFAULT_SIZE);
|
||||
entries = new ArrayList<>(DEFAULT_SIZE);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -257,7 +256,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
* @return The non-null attribute value.
|
||||
*/
|
||||
public Object getValue() {
|
||||
return ((RdnEntry) entries.get(0)).getValue();
|
||||
return entries.get(0).getValue();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -275,7 +274,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
* @return The non-null attribute type.
|
||||
*/
|
||||
public String getType() {
|
||||
return ((RdnEntry) entries.get(0)).getType();
|
||||
return entries.get(0).getType();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -329,8 +328,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
for (int i = 0; i < minSize; i++) {
|
||||
|
||||
// Compare a single pair of type/value pairs.
|
||||
int diff = ((RdnEntry) entries.get(i)).compareTo(
|
||||
that.entries.get(i));
|
||||
int diff = entries.get(i).compareTo(that.entries.get(i));
|
||||
if (diff != 0) {
|
||||
return diff;
|
||||
}
|
||||
@ -408,7 +406,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
public Attributes toAttributes() {
|
||||
Attributes attrs = new BasicAttributes(true);
|
||||
for (int i = 0; i < entries.size(); i++) {
|
||||
RdnEntry entry = (RdnEntry) entries.get(i);
|
||||
RdnEntry entry = entries.get(i);
|
||||
Attribute attr = attrs.put(entry.getType(), entry.getValue());
|
||||
if (attr != null) {
|
||||
attr.add(entry.getValue());
|
||||
@ -419,7 +417,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
}
|
||||
|
||||
|
||||
private static class RdnEntry implements Comparable {
|
||||
private static class RdnEntry implements Comparable<RdnEntry> {
|
||||
private String type;
|
||||
private Object value;
|
||||
|
||||
@ -435,12 +433,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
return value;
|
||||
}
|
||||
|
||||
public int compareTo(Object obj) {
|
||||
|
||||
// Any change here affecting equality must be
|
||||
// reflected in hashCode().
|
||||
RdnEntry that = (RdnEntry) obj;
|
||||
|
||||
public int compareTo(RdnEntry that) {
|
||||
int diff = type.toUpperCase().compareTo(
|
||||
that.type.toUpperCase());
|
||||
if (diff != 0) {
|
||||
@ -755,7 +748,7 @@ public class Rdn implements Serializable, Comparable<Object> {
|
||||
private void readObject(ObjectInputStream s)
|
||||
throws IOException, ClassNotFoundException {
|
||||
s.defaultReadObject();
|
||||
entries = new ArrayList(DEFAULT_SIZE);
|
||||
entries = new ArrayList<>(DEFAULT_SIZE);
|
||||
String unparsed = (String) s.readObject();
|
||||
try {
|
||||
(new Rfc2253Parser(unparsed)).parseRdn(this);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 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
|
||||
@ -54,14 +54,14 @@ final class Rfc2253Parser {
|
||||
*/
|
||||
// public List<Rdn> getDN() throws InvalidNameException {
|
||||
|
||||
List parseDn() throws InvalidNameException {
|
||||
List<Rdn> parseDn() throws InvalidNameException {
|
||||
cur = 0;
|
||||
|
||||
// ArrayList<Rdn> rdns =
|
||||
// new ArrayList<Rdn>(len / 3 + 10); // leave room for growth
|
||||
|
||||
ArrayList rdns =
|
||||
new ArrayList(len / 3 + 10); // leave room for growth
|
||||
ArrayList<Rdn> rdns =
|
||||
new ArrayList<>(len / 3 + 10); // leave room for growth
|
||||
|
||||
if (len == 0) {
|
||||
return rdns;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2000, 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
|
||||
@ -192,7 +192,7 @@ public class StartTlsRequest implements ExtendedRequest {
|
||||
}
|
||||
try {
|
||||
VersionHelper helper = VersionHelper.getVersionHelper();
|
||||
Class clas = helper.loadClass(
|
||||
Class<?> clas = helper.loadClass(
|
||||
"com.sun.jndi.ldap.ext.StartTlsResponseImpl");
|
||||
|
||||
resp = (StartTlsResponse) clas.newInstance();
|
||||
@ -226,19 +226,19 @@ public class StartTlsRequest implements ExtendedRequest {
|
||||
* Acquire the class loader associated with this thread.
|
||||
*/
|
||||
private final ClassLoader getContextClassLoader() {
|
||||
return (ClassLoader) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
return AccessController.doPrivileged(
|
||||
new PrivilegedAction<ClassLoader>() {
|
||||
public ClassLoader run() {
|
||||
return Thread.currentThread().getContextClassLoader();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
private final static boolean privilegedHasNext(final Iterator iter) {
|
||||
Boolean answer = (Boolean) AccessController.doPrivileged(
|
||||
new PrivilegedAction() {
|
||||
public Object run() {
|
||||
private final static boolean privilegedHasNext(final Iterator<StartTlsResponse> iter) {
|
||||
Boolean answer = AccessController.doPrivileged(
|
||||
new PrivilegedAction<Boolean>() {
|
||||
public Boolean run() {
|
||||
return Boolean.valueOf(iter.hasNext());
|
||||
}
|
||||
});
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -38,11 +38,11 @@ import javax.naming.*;
|
||||
|
||||
class ContinuationContext implements Context, Resolver {
|
||||
protected CannotProceedException cpe;
|
||||
protected Hashtable env;
|
||||
protected Hashtable<?,?> env;
|
||||
protected Context contCtx = null;
|
||||
|
||||
protected ContinuationContext(CannotProceedException cpe,
|
||||
Hashtable env) {
|
||||
Hashtable<?,?> env) {
|
||||
this.cpe = cpe;
|
||||
this.env = env;
|
||||
}
|
||||
@ -109,24 +109,24 @@ class ContinuationContext implements Context, Resolver {
|
||||
ctx.rename(name, newName);
|
||||
}
|
||||
|
||||
public NamingEnumeration list(Name name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(Name name) throws NamingException {
|
||||
Context ctx = getTargetContext();
|
||||
return ctx.list(name);
|
||||
}
|
||||
public NamingEnumeration list(String name) throws NamingException {
|
||||
public NamingEnumeration<NameClassPair> list(String name) throws NamingException {
|
||||
Context ctx = getTargetContext();
|
||||
return ctx.list(name);
|
||||
}
|
||||
|
||||
|
||||
public NamingEnumeration listBindings(Name name)
|
||||
public NamingEnumeration<Binding> listBindings(Name name)
|
||||
throws NamingException
|
||||
{
|
||||
Context ctx = getTargetContext();
|
||||
return ctx.listBindings(name);
|
||||
}
|
||||
|
||||
public NamingEnumeration listBindings(String name) throws NamingException {
|
||||
public NamingEnumeration<Binding> listBindings(String name) throws NamingException {
|
||||
Context ctx = getTargetContext();
|
||||
return ctx.listBindings(name);
|
||||
}
|
||||
@ -193,7 +193,7 @@ class ContinuationContext implements Context, Resolver {
|
||||
return ctx.removeFromEnvironment(propName);
|
||||
}
|
||||
|
||||
public Hashtable getEnvironment() throws NamingException {
|
||||
public Hashtable<?,?> getEnvironment() throws NamingException {
|
||||
Context ctx = getTargetContext();
|
||||
return ctx.getEnvironment();
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -38,6 +38,7 @@ import javax.naming.Context;
|
||||
import javax.naming.directory.DirContext;
|
||||
import javax.naming.directory.Attributes;
|
||||
import javax.naming.directory.SearchControls;
|
||||
import javax.naming.directory.SearchResult;
|
||||
import javax.naming.directory.ModificationItem;
|
||||
|
||||
/**
|
||||
@ -50,7 +51,7 @@ import javax.naming.directory.ModificationItem;
|
||||
|
||||
class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
|
||||
ContinuationDirContext(CannotProceedException cpe, Hashtable env) {
|
||||
ContinuationDirContext(CannotProceedException cpe, Hashtable<?,?> env) {
|
||||
super(cpe, env);
|
||||
}
|
||||
|
||||
@ -204,7 +205,7 @@ class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
res.getDirContext().createSubcontext(res.getString(), attrs);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
@ -213,7 +214,7 @@ class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
attributesToReturn);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes,
|
||||
String[] attributesToReturn)
|
||||
throws NamingException {
|
||||
@ -223,13 +224,13 @@ class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
attributesToReturn);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
DirContextNamePair res = getTargetContext(name);
|
||||
return res.getDirContext().search(res.getName(), matchingAttributes);
|
||||
}
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
Attributes matchingAttributes)
|
||||
throws NamingException {
|
||||
DirContextStringPair res = getTargetContext(name);
|
||||
@ -237,7 +238,7 @@ class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
matchingAttributes);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
@ -245,7 +246,7 @@ class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
return res.getDirContext().search(res.getName(), filter, cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filter,
|
||||
SearchControls cons)
|
||||
throws NamingException {
|
||||
@ -253,7 +254,7 @@ class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
return res.getDirContext().search(res.getString(), filter, cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(Name name,
|
||||
public NamingEnumeration<SearchResult> search(Name name,
|
||||
String filterExpr,
|
||||
Object[] args,
|
||||
SearchControls cons)
|
||||
@ -263,7 +264,7 @@ class ContinuationDirContext extends ContinuationContext implements DirContext {
|
||||
cons);
|
||||
}
|
||||
|
||||
public NamingEnumeration search(String name,
|
||||
public NamingEnumeration<SearchResult> search(String name,
|
||||
String filterExpr,
|
||||
Object[] args,
|
||||
SearchControls cons)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -84,15 +84,16 @@ public class DirectoryManager extends NamingManager {
|
||||
*
|
||||
* @see NamingManager#getContinuationContext(CannotProceedException)
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static DirContext getContinuationDirContext(
|
||||
CannotProceedException cpe) throws NamingException {
|
||||
|
||||
Hashtable env = cpe.getEnvironment();
|
||||
Hashtable<Object,Object> env = (Hashtable<Object,Object>)cpe.getEnvironment();
|
||||
if (env == null) {
|
||||
env = new Hashtable(7);
|
||||
env = new Hashtable<>(7);
|
||||
} else {
|
||||
// Make a (shallow) copy of the environment.
|
||||
env = (Hashtable) env.clone();
|
||||
env = (Hashtable<Object,Object>) env.clone();
|
||||
}
|
||||
env.put(CPE, cpe);
|
||||
|
||||
@ -217,7 +218,7 @@ public class DirectoryManager extends NamingManager {
|
||||
}
|
||||
|
||||
private static Object createObjectFromFactories(Object obj, Name name,
|
||||
Context nameCtx, Hashtable environment, Attributes attrs)
|
||||
Context nameCtx, Hashtable<?,?> environment, Attributes attrs)
|
||||
throws Exception {
|
||||
|
||||
FactoryEnumeration factories = ResourceManager.getFactories(
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1999, 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
|
||||
@ -139,7 +139,7 @@ public class NamingManager {
|
||||
throws IllegalAccessException,
|
||||
InstantiationException,
|
||||
MalformedURLException {
|
||||
Class clas = null;
|
||||
Class<?> clas = null;
|
||||
|
||||
// Try to use current class loader
|
||||
try {
|
||||
@ -172,7 +172,7 @@ public class NamingManager {
|
||||
* @return factory created; null if cannot create
|
||||
*/
|
||||
private static Object createObjectFromFactories(Object obj, Name name,
|
||||
Context nameCtx, Hashtable environment) throws Exception {
|
||||
Context nameCtx, Hashtable<?,?> environment) throws Exception {
|
||||
|
||||
FactoryEnumeration factories = ResourceManager.getFactories(
|
||||
Context.OBJECT_FACTORIES, environment, nameCtx);
|
||||
@ -349,7 +349,7 @@ public class NamingManager {
|
||||
* invoking a factory.
|
||||
*/
|
||||
static Object processURLAddrs(Reference ref, Name name, Context nameCtx,
|
||||
Hashtable environment)
|
||||
Hashtable<?,?> environment)
|
||||
throws NamingException {
|
||||
|
||||
for (int i = 0; i < ref.size(); i++) {
|
||||
@ -368,7 +368,7 @@ public class NamingManager {
|
||||
}
|
||||
|
||||
private static Object processURL(Object refInfo, Name name,
|
||||
Context nameCtx, Hashtable environment)
|
||||
Context nameCtx, Hashtable<?,?> environment)
|
||||
throws NamingException {
|
||||
Object answer;
|
||||
|
||||
@ -427,7 +427,7 @@ public class NamingManager {
|
||||
* @see #getObjectInstance
|
||||
*/
|
||||
static Context getContext(Object obj, Name name, Context nameCtx,
|
||||
Hashtable environment) throws NamingException {
|
||||
Hashtable<?,?> environment) throws NamingException {
|
||||
Object answer;
|
||||
|
||||
if (obj instanceof Context) {
|
||||
@ -452,7 +452,7 @@ public class NamingManager {
|
||||
|
||||
// Used by ContinuationContext
|
||||
static Resolver getResolver(Object obj, Name name, Context nameCtx,
|
||||
Hashtable environment) throws NamingException {
|
||||
Hashtable<?,?> environment) throws NamingException {
|
||||
Object answer;
|
||||
|
||||
if (obj instanceof Resolver) {
|
||||
@ -585,7 +585,7 @@ public class NamingManager {
|
||||
*/
|
||||
private static Object getURLObject(String scheme, Object urlInfo,
|
||||
Name name, Context nameCtx,
|
||||
Hashtable environment)
|
||||
Hashtable<?,?> environment)
|
||||
throws NamingException {
|
||||
|
||||
// e.g. "ftpURLContextFactory"
|
||||
@ -771,15 +771,16 @@ public class NamingManager {
|
||||
* @return A non-null Context object for continuing the operation.
|
||||
* @exception NamingException If a naming exception occurred.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static Context getContinuationContext(CannotProceedException cpe)
|
||||
throws NamingException {
|
||||
|
||||
Hashtable env = cpe.getEnvironment();
|
||||
Hashtable<Object,Object> env = (Hashtable<Object,Object>)cpe.getEnvironment();
|
||||
if (env == null) {
|
||||
env = new Hashtable(7);
|
||||
env = new Hashtable<>(7);
|
||||
} else {
|
||||
// Make a (shallow) copy of the environment.
|
||||
env = (Hashtable) env.clone();
|
||||
env = (Hashtable<Object,Object>)env.clone();
|
||||
}
|
||||
env.put(CPE, cpe);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user