<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<document>
 <properties>
  <title>2.0 Release Notes</title>
  <author email="dev@commons.apache.org">Commons Documentation Team</author>
 </properties>
<body>

<section name="Lang 2.0 Release Notes">
<p>
These are the release notes and advice for upgrading Commons-Lang from
version 1.0 to version 2.0.
<source>
INTRODUCTION:

This document contains the release notes for this version of the Commons
Lang package. Commons Lang is a set of utility functions and reusable 
components that should be a help in any Java environment.

This release has involved a major clean and tidy exercise.
Javadoc and Tests are now much more thorough.
All methods should now be much clearer in what they do in unusual cases.


INCOMPATIBLE CHANGES:
Some StringUtils methods have changed functionality from 1.0:
    isEmpty()
    chomp(String)
    chomp(String,String)
    swapCase(String)
Numerous other methods have changed null handling to accept nulls gracefully.
As with all major version releases, check your code for incompatibilities.


NEW FEATURES:

Since the release of the 1.0 package the following classes have been added:

lang package:
    ArrayUtils
    BitField
    BooleanUtils
    CharRange (previously package scoped)
    ClassUtils
    StringEscapeUtils
    WordUtils
    IllegalClassException
    IncompleteArgumentException
    NotImplementedException
    NullArgumentException
    SerializationException
    UnhandledException
    Validate


math sub-package:
    IntRange
    LongRange
    Range
    DoubleRange
    JVMRandom
    NumberRange
    FloatRange
    NumberUtils
    Fraction
    RandomUtils

time sub-package: 
    DateFormatUtils
    FastDateFormat
    DateUtils
    StopWatch

Since the release of the 1.0 package the following classes have been changed:

lang:
    CharSet:
        Added factory method, equals and hashCode().
        Better defined and tested the set syntax.
    CharSetUtils:
        added keep method:  keep any characters specified in the CharSet string
    RandomStringUtils:
        random method:  overloaded to allow passing in of a Random class
    SerializationUtils:
        added empty constructor
    StringUtils:
        isEmpty() changed to not trim
        chomp() changed to be more like Perl.
        swapCase() no longer word based, but no difference if you pass in ASCII
        Various methods changed in the handling of null (less exceptions).
        Many new methods.
        Various methods deprecated.
    SystemUtils:
        isJavaVersionAtLeast(int) added. getJavaVersion() deprecated.
        host of new constants.

enum:
    Enum:
        getEnumClass(Class) added
    EnumUtils:
        Removed irrelevant Comparable/Serializable interfaces.

exception:
    NestableDelegate:
        Gained many new methods for dissecting an Exception.
    ExceptionUtils:
        Gained many new methods to improve handling of nested stack traces.
        
builder:
    ReflectionToStringBuilder:
        Handy class added for creating default toStrings.
    All other builder classes received a set of new methods.


BUG FIXES:

ID Sev Pri Plt Owner State Result Summary 
13367  [PATCH] StringUtil enhancement  
13391  Javadoc nit  
13771  Additional Lang Method Suggestions  
14306  NullPointerException in CompareToBuilder  
14357  static option for reversing the stacktrace  
14447  ToStringBuilder doesn't work well in subclasses  
14883  StringUtils.countMatches loops forever if substring empty  
14884  NumberRange inaccurate for Long, etc.  
14985  More flexibility for getRootCause in ExceptionUtils  
15154  SystemUtils.IS_JAVA_1_5 Javadoc is wrong  
15257  Hierarchy support in ToStringBuilder.reflectionToString()  
15438  ArrayUtils.contains()  
15439  Enum does not support inner sub-classes  
15986  Infinite loop in ToStringBuilder.reflectionToString for inne  
16076  Example in Javadoc for ToStringBuilder wrong for append.  
16193  Hierarchy support in EqualsBuilder.reflectionEquals()  
16202  typo in the javadoc example code  
16204  Infinite loop in StringUtils.replace(text, repl, with) + FIX  
16227  Added class hierachy support to CompareToBuilder.reflectionC  
16228  Added class hierachy support to HashCodeBuilder.reflectionHa  
16284  MethodUtils: Removed unused code/unused local vars.  
16341  No Javadoc for NestableDelegate  
16622  Removed compile warning in FastDateFormat  
16669  JavaDoc Errata  
16676  StackOverflow due to ToStringBuilder  
16689  ExceptionUtils new methods.  
16690  Specify initial size for Enum's HashMap.  
16787  Removed compile warning in ObjectUtils  
17250  [Lang] Should ToStringBuilder.reflectionToString handle arra  
17654  EnumUtils nit: The import java.io.Serializable is never used  
17882  Add join(..., char c) to StringUtils (and some performance f  
18077  StringUtils.chomp does not match Perl  
18723  RandomStringUtils infloops with length &lt; 1  
18836  test.lang fails if compiled with non iso-8859-1 locales  
18948  Resurrect the WordWrapUtils from commons-sandbox/utils  
19296  [Lang] What to do with FastDateFormat unused private constru  
19364  [Lang] time unit tests fail on Sundays  
19756  [lang] java.lang.ExceptionInInitializerError thrown by JVMRa  
19880  [lang] patch and test case fixing problem with RandomStringU  
20165  [LANG] SystemUtils does not play nice in an Applet  
20538  [lang] NumberUtils.isNumber allows illegal trailing characte  
20592  [lang] RandomStringUtils.randomAlpha methods omit 'z'  
20603  [lang] Make NestableDelegate methods public instead of packa  
20632  Refactored reflection feature of ToStringBuilder into new Re  
20652  StringUtils.chopNewLine - StringIndexOutOfBoundsException  
21021  [PATCH] reduce object creation in ToStringBuilder  
21068  [lang] [PATCH] NumberUtils min/max, BooleanUtils.xor, and Ar  
21099  [lang][PATCH] Unused field 'startFinal' in DateIterator  
21715  The javadoc says "Mac" instead of "OS/2"
21734  [PATCH] all NumberUtils.createXXX(String) methods handle null
21750  [lang] StringUtils javadoc and test enhancements
21758  [lang] lang.builder classes javadoc edits (mostly typo fixes)
21797  [lang] Add javadoc examples and tests for StringUtils
21809  [lang] maven-beta10 checkstyle problem
21904  NumberUtils.createBigDecimal("") NPE in Sun 1.3.1_08
21952  [lang] Improved tests, javadoc for CharSetUtils, StringEscapeUtils
22091  Adding tolerance to double[] search methods in ArrayUtils
22094  A small, but important javadoc fix for Fraction proper whole/numerator
22095  [lang] Javadoc, tests improvements for CharSet, CharSetUtils
22098  [lang] Improve util.Validate tests
22245  [lang] test.time fails in Japanese (non-us) locale.
22286  [lang] Missing @since tags
22367  Typo in documentation
22386  [lang] Improve javadoc and overflow behavior of Fraction


DEPRECATIONS:

lang:
    NumberRange:
        now deprecated, see math subpackage
    NumberUtils:
        now deprecated, see math subpackage


CHANGES:   [In 'diff' format]

Jar changes
===========
&gt; org.apache.commons.lang.math.Range
&gt; org.apache.commons.lang.math.FloatRange
&gt; org.apache.commons.lang.math.NumberUtils
&gt; org.apache.commons.lang.math.JVMRandom
&gt; org.apache.commons.lang.math.IntRange
&gt; org.apache.commons.lang.math.LongRange
&gt; org.apache.commons.lang.math.DoubleRange
&gt; org.apache.commons.lang.math.NumberRange
&gt; org.apache.commons.lang.math.Fraction
&gt; org.apache.commons.lang.math.RandomUtils
&gt; org.apache.commons.lang.time.FastDateFormat
&gt; org.apache.commons.lang.time.DateUtils$DateIterator
&gt; org.apache.commons.lang.time.DateUtils
&gt; org.apache.commons.lang.time.FastDateFormat$UnpaddedMonthField
&gt; org.apache.commons.lang.time.FastDateFormat$StringLiteral
&gt; org.apache.commons.lang.time.FastDateFormat$TwelveHourField
&gt; org.apache.commons.lang.time.FastDateFormat$NumberRule
&gt; org.apache.commons.lang.time.FastDateFormat$CharacterLiteral
&gt; org.apache.commons.lang.time.FastDateFormat$TimeZoneNumberRule
&gt; org.apache.commons.lang.time.FastDateFormat$TimeZoneNameRule
&gt; org.apache.commons.lang.time.DateFormatUtils
&gt; org.apache.commons.lang.time.FastDateFormat$TwoDigitMonthField
&gt; org.apache.commons.lang.time.DurationFormatUtils
&gt; org.apache.commons.lang.time.FastDateFormat$TimeZoneDisplayKey
&gt; org.apache.commons.lang.time.FastDateFormat$UnpaddedNumberField
&gt; org.apache.commons.lang.time.FastDateFormat$PaddedNumberField
&gt; org.apache.commons.lang.time.StopWatch
&gt; org.apache.commons.lang.time.FastDateFormat$TwentyFourHourField
&gt; org.apache.commons.lang.time.FastDateFormat$Rule
&gt; org.apache.commons.lang.time.FastDateFormat$TwoDigitNumberField
&gt; org.apache.commons.lang.time.FastDateFormat$TextField
&gt; org.apache.commons.lang.time.FastDateFormat$Pair
&gt; org.apache.commons.lang.time.FastDateFormat$TwoDigitYearField
&gt; org.apache.commons.lang.util.IdentifierUtils$StringNumericIdentifierFactory
&gt; org.apache.commons.lang.util.IdentifierUtils$StringSessionIdentifierFactory
&gt; org.apache.commons.lang.util.IdentifierUtils$LongNumericIdentifierFactory
&gt; org.apache.commons.lang.util.IdentifierUtils$StringAlphanumericIdentifierFactory
&gt; org.apache.commons.lang.util.Validate
&gt; org.apache.commons.lang.util.LongIdentifierFactory
&gt; org.apache.commons.lang.util.IdentifierUtils$1
&gt; org.apache.commons.lang.util.StringIdentifierFactory
&gt; org.apache.commons.lang.util.IdentifierUtils
&gt; org.apache.commons.lang.util.IdentifierFactory
&gt; org.apache.commons.lang.util.BitField
&gt; org.apache.commons.lang.Entities
&gt; org.apache.commons.lang.Entities$LookupEntityMap
&gt; org.apache.commons.lang.NotImplementedException
&gt; org.apache.commons.lang.NullArgumentException
&lt; org.apache.commons.lang.ObjectUtils$1
---
&gt; org.apache.commons.lang.StringPrintWriter
&gt; org.apache.commons.lang.UnhandledException
&gt; org.apache.commons.lang.Entities$HashEntityMap
&gt; org.apache.commons.lang.Entities$ArrayEntityMap
&gt; org.apache.commons.lang.Entities$EntityMap
&gt; org.apache.commons.lang.IntHashMap
&gt; org.apache.commons.lang.BooleanUtils
&gt; org.apache.commons.lang.IncompleteArgumentException
&gt; org.apache.commons.lang.Entities$PrimitiveEntityMap
&gt; org.apache.commons.lang.Entities$TreeEntityMap
&gt; org.apache.commons.lang.WordUtils
&gt; org.apache.commons.lang.StringEscapeUtils
&gt; org.apache.commons.lang.ArrayUtils
&gt; org.apache.commons.lang.Entities$BinaryEntityMap
&gt; org.apache.commons.lang.ClassUtils
&gt; org.apache.commons.lang.IntHashMap$Entry
&gt; org.apache.commons.lang.IllegalClassException
&gt; org.apache.commons.lang.builder.ReflectionToStringBuilder$1
&gt; org.apache.commons.lang.builder.ReflectionToStringBuilder
&gt; org.apache.commons.lang.Entities$MapIntMap


Class changes
=============
org.apache.commons.lang.enum.EnumUtils
--------------------
&lt; public abstract class org.apache.commons.lang.enum.EnumUtils extends java.lang.Object implements java.lang.Comparable, java.io.Serializable {
---
&gt; public class org.apache.commons.lang.enum.EnumUtils extends java.lang.Object {
&gt;     public org.apache.commons.lang.enum.EnumUtils();

org.apache.commons.lang.enum.Enum$Entry
--------------------
&gt;     final java.util.Map unmodifiableMap;
&gt;     final java.util.List unmodifiableList;

org.apache.commons.lang.enum.Enum
--------------------
&gt;     protected transient java.lang.String iToString;
&gt;     static java.lang.Class class$org$apache$commons$lang$enum$ValuedEnum;
&gt;     public java.lang.Class getEnumClass();

org.apache.commons.lang.enum.ValuedEnum
--------------------
&gt;     static {};

org.apache.commons.lang.StringUtils
--------------------
&gt;     public static final java.lang.String EMPTY;
&gt;     public static boolean isEmpty(java.lang.String);
&gt;     public static boolean isNotEmpty(java.lang.String);
&gt;     public static boolean isBlank(java.lang.String);
&gt;     public static boolean isNotBlank(java.lang.String);
&lt;     public static java.lang.String deleteSpaces(java.lang.String);
&lt;     public static java.lang.String deleteWhitespace(java.lang.String);
&lt;     public static boolean isNotEmpty(java.lang.String);
&lt;     public static boolean isEmpty(java.lang.String);
---
&gt;     public static java.lang.String trimToNull(java.lang.String);
&gt;     public static java.lang.String trimToEmpty(java.lang.String);
&gt;     public static java.lang.String strip(java.lang.String);
&gt;     public static java.lang.String stripToNull(java.lang.String);
&gt;     public static java.lang.String stripToEmpty(java.lang.String);
&gt;     public static java.lang.String strip(java.lang.String, java.lang.String);
&gt;     public static java.lang.String stripStart(java.lang.String, java.lang.String);
&gt;     public static java.lang.String stripEnd(java.lang.String, java.lang.String);
&gt;     public static java.lang.String stripAll(java.lang.String[])[];
&gt;     public static java.lang.String stripAll(java.lang.String[], java.lang.String)[];
&gt;     public static int indexOf(java.lang.String, char);
&gt;     public static int indexOf(java.lang.String, char, int);
&gt;     public static int indexOf(java.lang.String, java.lang.String);
&gt;     public static int indexOf(java.lang.String, java.lang.String, int);
&gt;     public static int lastIndexOf(java.lang.String, char);
&gt;     public static int lastIndexOf(java.lang.String, char, int);
&gt;     public static int lastIndexOf(java.lang.String, java.lang.String);
&gt;     public static int lastIndexOf(java.lang.String, java.lang.String, int);
&gt;     public static boolean contains(java.lang.String, char);
&gt;     public static boolean contains(java.lang.String, java.lang.String);
&gt;     public static int indexOfAny(java.lang.String, char[]);
&gt;     public static int indexOfAny(java.lang.String, java.lang.String);
&gt;     public static int indexOfAnyBut(java.lang.String, char[]);
&gt;     public static int indexOfAnyBut(java.lang.String, java.lang.String);
&gt;     public static boolean containsOnly(java.lang.String, char[]);
&gt;     public static boolean containsOnly(java.lang.String, java.lang.String);
&gt;     public static boolean containsNone(java.lang.String, char[]);
&gt;     public static boolean containsNone(java.lang.String, java.lang.String);
&gt;     public static java.lang.String substringBefore(java.lang.String, java.lang.String);
&gt;     public static java.lang.String substringAfter(java.lang.String, java.lang.String);
&gt;     public static java.lang.String substringBeforeLast(java.lang.String, java.lang.String);
&gt;     public static java.lang.String substringAfterLast(java.lang.String, java.lang.String);
&gt;     public static java.lang.String substringBetween(java.lang.String, java.lang.String);
&gt;     public static java.lang.String substringBetween(java.lang.String, java.lang.String, java.lang.String);
&gt;     public static java.lang.String getNestedString(java.lang.String, java.lang.String);
&gt;     public static java.lang.String getNestedString(java.lang.String, java.lang.String, java.lang.String);
&gt;     public static java.lang.String split(java.lang.String, char)[];
&gt;     public static java.lang.String join(java.lang.Object[]);
&gt;     public static java.lang.String join(java.lang.Object[], char);
&gt;     public static java.lang.String join(java.util.Iterator, char);
&gt;     public static java.lang.String deleteSpaces(java.lang.String);
&gt;     public static java.lang.String deleteWhitespace(java.lang.String);
&gt;     public static java.lang.String replaceChars(java.lang.String, char, char);
&gt;     public static java.lang.String replaceChars(java.lang.String, java.lang.String, java.lang.String);
&lt;     public static java.lang.String center(java.lang.String, int);
&lt;     public static java.lang.String center(java.lang.String, int, java.lang.String);
---
&gt;     public static java.lang.String overlay(java.lang.String, java.lang.String, int, int);
&gt;     public static java.lang.String rightPad(java.lang.String, int, char);
&gt;     public static java.lang.String leftPad(java.lang.String, int, char);
&lt;     public static java.lang.String strip(java.lang.String);
&lt;     public static java.lang.String strip(java.lang.String, java.lang.String);
&lt;     public static java.lang.String stripAll(java.lang.String[])[];
&lt;     public static java.lang.String stripAll(java.lang.String[], java.lang.String)[];
&lt;     public static java.lang.String stripEnd(java.lang.String, java.lang.String);
&lt;     public static java.lang.String stripStart(java.lang.String, java.lang.String);
---
&gt;     public static java.lang.String center(java.lang.String, int);
&gt;     public static java.lang.String center(java.lang.String, int, char);
&gt;     public static java.lang.String center(java.lang.String, int, java.lang.String);
&lt;     public static java.lang.String uncapitalise(java.lang.String);
---
&gt;     public static java.lang.String capitalize(java.lang.String);
&gt;     public static java.lang.String uncapitalize(java.lang.String);
&gt;     public static java.lang.String uncapitalise(java.lang.String);
&lt;     public static java.lang.String getNestedString(java.lang.String, java.lang.String);
&lt;     public static java.lang.String getNestedString(java.lang.String, java.lang.String, java.lang.String);
&gt;     public static boolean isWhitespace(java.lang.String);
&gt;     public static java.lang.String reverseDelimited(java.lang.String, char);
&gt;     public static java.lang.String abbreviate(java.lang.String, int);
&gt;     public static java.lang.String abbreviate(java.lang.String, int, int);
&gt;     public static java.lang.String difference(java.lang.String, java.lang.String);
&gt;     public static int differenceAt(java.lang.String, java.lang.String);
&lt;     public static boolean containsOnly(java.lang.String, char[]);
---
&gt;     static {};

org.apache.commons.lang.ObjectUtils
--------------------
&gt;     public static java.lang.StringBuffer appendIdentityToString(java.lang.StringBuffer, java.lang.Object);
&gt;     public static java.lang.String toString(java.lang.Object);
&gt;     public static java.lang.String toString(java.lang.Object, java.lang.String);
&lt;         org.apache.commons.lang.ObjectUtils.Null(org.apache.commons.lang.ObjectUtils$1);
---
&gt;         org.apache.commons.lang.ObjectUtils.Null();
&gt;         static {};

org.apache.commons.lang.exception.NestableDelegate
--------------------
&gt;     public static boolean topDown;
&gt;     public static boolean trimStackFrames;
&lt;     org.apache.commons.lang.exception.NestableDelegate(org.apache.commons.lang.exception.Nestable);
&lt;     java.lang.String getMessage(int);
&lt;     java.lang.String getMessage(java.lang.String);
&lt;     java.lang.String getMessages()[];
&lt;     java.lang.Throwable getThrowable(int);
&lt;     int getThrowableCount();
&lt;     java.lang.Throwable getThrowables()[];
&lt;     int indexOfThrowable(java.lang.Class, int);
---
&gt;     public org.apache.commons.lang.exception.NestableDelegate(org.apache.commons.lang.exception.Nestable);
&gt;     public java.lang.String getMessage(int);
&gt;     public java.lang.String getMessage(java.lang.String);
&gt;     public java.lang.String getMessages()[];
&gt;     public java.lang.Throwable getThrowable(int);
&gt;     public int getThrowableCount();
&gt;     public java.lang.Throwable getThrowables()[];
&gt;     public int indexOfThrowable(java.lang.Class, int);
&gt;     protected java.lang.String getStackFrames(java.lang.Throwable)[];
&gt;     protected void trimStackFrames(java.util.List);

org.apache.commons.lang.exception.ExceptionUtils
--------------------
&lt;     protected static final java.lang.String CAUSE_METHOD_NAMES[];
&lt;     protected static final java.lang.Object CAUSE_METHOD_PARAMS[];
---
&gt;     static final java.lang.String WRAPPED_MARKER;
&lt;     protected org.apache.commons.lang.exception.ExceptionUtils();
---
&gt;     public org.apache.commons.lang.exception.ExceptionUtils();
&gt;     public static void addCauseMethodName(java.lang.String);
&gt;     public static boolean isThrowableNested();
&gt;     public static boolean isNestedThrowable(java.lang.Throwable);
&gt;     public static void printRootCauseStackTrace(java.lang.Throwable);
&gt;     public static void printRootCauseStackTrace(java.lang.Throwable, java.io.PrintStream);
&gt;     public static void printRootCauseStackTrace(java.lang.Throwable, java.io.PrintWriter);
&gt;     public static java.lang.String getRootCauseStackTrace(java.lang.Throwable)[];
&gt;     public static void removeCommonFrames(java.util.List, java.util.List);
&gt;     public static java.lang.String getFullStackTrace(java.lang.Throwable);
&gt;     static java.util.List getStackFrameList(java.lang.Throwable);

org.apache.commons.lang.CharRange
--------------------
&lt; class org.apache.commons.lang.CharRange extends java.lang.Object {
---
&gt; public final class org.apache.commons.lang.CharRange extends java.lang.Object implements java.io.Serializable {
&gt;     public org.apache.commons.lang.CharRange(char,boolean);
&lt;     public org.apache.commons.lang.CharRange(java.lang.String,java.lang.String);
---
&gt;     public org.apache.commons.lang.CharRange(char,char,boolean);
&lt;     public void setStart(char);
&lt;     public void setEnd(char);
&lt;     public boolean isRange();
&lt;     public boolean inRange(char);
&lt;     public void setNegated(boolean);
---
&gt;     public boolean contains(char);
&gt;     public boolean contains(org.apache.commons.lang.CharRange);
&gt;     public boolean equals(java.lang.Object);
&gt;     public int hashCode();
&gt;     static {};

org.apache.commons.lang.ObjectUtils$1
--------------------
&lt; Compiled from ObjectUtils.java
&lt; class org.apache.commons.lang.ObjectUtils$1 extends java.lang.Object {
&lt; }
---
&gt; Class 'org.apache.commons.lang.ObjectUtils$1' has been removed

org.apache.commons.lang.ObjectUtils$Null
--------------------
&lt;     org.apache.commons.lang.ObjectUtils.Null(org.apache.commons.lang.ObjectUtils$1);
---
&gt;     org.apache.commons.lang.ObjectUtils.Null();
&gt;     static {};

org.apache.commons.lang.SystemUtils
--------------------
&gt;     public static final java.lang.String FILE_ENCODING;
&gt;     public static final java.lang.String JAVA_RUNTIME_NAME;
&gt;     public static final java.lang.String JAVA_RUNTIME_VERSION;
&gt;     public static final java.lang.String JAVA_VM_INFO;
&gt;     public static final java.lang.String USER_COUNTRY;
&gt;     public static final java.lang.String USER_LANGUAGE;
&gt;     public static final float JAVA_VERSION_FLOAT;
&gt;     public static final int JAVA_VERSION_INT;
&gt;     public static final boolean IS_OS_AIX;
&gt;     public static final boolean IS_OS_HP_UX;
&gt;     public static final boolean IS_OS_IRIX;
&gt;     public static final boolean IS_OS_LINUX;
&gt;     public static final boolean IS_OS_MAC;
&gt;     public static final boolean IS_OS_MAC_OSX;
&gt;     public static final boolean IS_OS_OS2;
&gt;     public static final boolean IS_OS_SOLARIS;
&gt;     public static final boolean IS_OS_SUN_OS;
&gt;     public static final boolean IS_OS_WINDOWS;
&gt;     public static final boolean IS_OS_WINDOWS_2000;
&gt;     public static final boolean IS_OS_WINDOWS_95;
&gt;     public static final boolean IS_OS_WINDOWS_98;
&gt;     public static final boolean IS_OS_WINDOWS_ME;
&gt;     public static final boolean IS_OS_WINDOWS_NT;
&gt;     public static final boolean IS_OS_WINDOWS_XP;
&gt;     public static boolean isJavaVersionAtLeast(int);

org.apache.commons.lang.SerializationUtils
--------------------
&gt;     public org.apache.commons.lang.SerializationUtils();

org.apache.commons.lang.RandomStringUtils
--------------------
&gt;     public static java.lang.String random(int, int, int, boolean, boolean, char[], java.util.Random);

org.apache.commons.lang.CharSet
--------------------
&lt; public class org.apache.commons.lang.CharSet extends java.lang.Object {
---
&gt; public class org.apache.commons.lang.CharSet extends java.lang.Object implements java.io.Serializable {
&gt;     public static final org.apache.commons.lang.CharSet EMPTY;
&gt;     public static final org.apache.commons.lang.CharSet ASCII_ALPHA;
&gt;     public static final org.apache.commons.lang.CharSet ASCII_ALPHA_LOWER;
&gt;     public static final org.apache.commons.lang.CharSet ASCII_ALPHA_UPPER;
&gt;     public static final org.apache.commons.lang.CharSet ASCII_NUMERIC;
&gt;     protected static final java.util.Map COMMON;
&gt;     public static org.apache.commons.lang.CharSet getInstance(java.lang.String);
&gt;     protected org.apache.commons.lang.CharSet(java.lang.String);
&lt;     public boolean contains(char);
&gt;     public org.apache.commons.lang.CharRange getCharRanges()[];
&gt;     public boolean contains(char);
&gt;     public boolean equals(java.lang.Object);
&gt;     public int hashCode();
&gt;     static {};

org.apache.commons.lang.CharSetUtils
--------------------
&gt;     public static java.lang.String keep(java.lang.String, java.lang.String);
&gt;     public static java.lang.String keep(java.lang.String, java.lang.String[]);

org.apache.commons.lang.builder.ToStringBuilder
--------------------
&lt;     public org.apache.commons.lang.builder.ToStringBuilder(java.lang.Object);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder(java.lang.Object,org.apache.commons.lang.builder.ToStringStyle);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder(java.lang.Object,org.apache.commons.lang.builder.ToStringStyle,java.lang.StringBuffer);
&lt;     public static void setDefaultStyle(org.apache.commons.lang.builder.ToStringStyle);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.Object);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object, boolean);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(long);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, long);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(int);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, int);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(short);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, short);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(char);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, char);
---
&gt;     public static java.lang.String reflectionToString(java.lang.Object, org.apache.commons.lang.builder.ToStringStyle, boolean, java.lang.Class);
&gt;     public static void setDefaultStyle(org.apache.commons.lang.builder.ToStringStyle);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder(java.lang.Object);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder(java.lang.Object,org.apache.commons.lang.builder.ToStringStyle);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder(java.lang.Object,org.apache.commons.lang.builder.ToStringStyle,java.lang.StringBuffer);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(boolean[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, byte);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(byte[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(char);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(char[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, double);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(double[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, float);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(boolean);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, boolean);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.Object[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object[], boolean);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(long[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, long[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, long[], boolean);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(float[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(int);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, int[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, int[], boolean);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(long);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(long[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.Object);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.Object[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(short);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, short[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, short[], boolean);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(char[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, char[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, char[], boolean);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(byte[]);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, boolean[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, boolean[], boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, byte);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(double[]);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, char);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, char[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, char[], boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, double);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(float[]);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, float);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(boolean[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, boolean[]);
&lt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, boolean[], boolean);
---
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, int);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, int[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, int[], boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, long);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, long[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, long[], boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object, boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, java.lang.Object[], boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, short);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, short[]);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder append(java.lang.String, short[], boolean);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder appendAsObjectToString(java.lang.Object);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder appendSuper(java.lang.String);
&gt;     public org.apache.commons.lang.builder.ToStringBuilder appendToString(java.lang.String);
&gt;     public org.apache.commons.lang.builder.ToStringStyle getStyle();
&gt;     public java.lang.Object getObject();

org.apache.commons.lang.builder.StandardToStringStyle
--------------------
&gt;     public boolean isUseShortClassName();
&gt;     public void setUseShortClassName(boolean);
&gt;     public boolean isFieldSeparatorAtStart();
&gt;     public void setFieldSeparatorAtStart(boolean);
&gt;     public boolean isFieldSeparatorAtEnd();
&gt;     public void setFieldSeparatorAtEnd(boolean);

org.apache.commons.lang.builder.ToStringStyle
--------------------
&gt;     public void appendSuper(java.lang.StringBuffer, java.lang.String);
&gt;     public void appendToString(java.lang.StringBuffer, java.lang.String);
&gt;     protected void removeLastFieldSeparator(java.lang.StringBuffer);
&gt;     protected void reflectionAppendArrayDetail(java.lang.StringBuffer, java.lang.String, java.lang.Object);
&gt;     protected boolean isUseShortClassName();
&gt;     protected void setUseShortClassName(boolean);
&gt;     protected boolean isFieldSeparatorAtStart();
&gt;     protected void setFieldSeparatorAtStart(boolean);
&gt;     protected boolean isFieldSeparatorAtEnd();
&gt;     protected void setFieldSeparatorAtEnd(boolean);

org.apache.commons.lang.builder.HashCodeBuilder
--------------------
&gt;     public static int reflectionHashCode(int, int, java.lang.Object, boolean, java.lang.Class);
&gt;     public org.apache.commons.lang.builder.HashCodeBuilder appendSuper(int);

org.apache.commons.lang.builder.CompareToBuilder
--------------------
&gt;     public static int reflectionCompare(java.lang.Object, java.lang.Object, boolean, java.lang.Class);
&gt;     public org.apache.commons.lang.builder.CompareToBuilder appendSuper(int);
&gt;     public org.apache.commons.lang.builder.CompareToBuilder append(java.lang.Object, java.lang.Object, java.util.Comparator);
&gt;     public org.apache.commons.lang.builder.CompareToBuilder append(java.lang.Object[], java.lang.Object[], java.util.Comparator);

org.apache.commons.lang.builder.EqualsBuilder
--------------------
&gt;     public static boolean reflectionEquals(java.lang.Object, java.lang.Object, boolean, java.lang.Class);
&gt;     public org.apache.commons.lang.builder.EqualsBuilder appendSuper(boolean);
</source>
</p>
</section>

</body>
</document>
