[ 
https://issues.apache.org/jira/browse/OFBIZ-9692?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17227817#comment-17227817
 ] 

Jacques Le Roux commented on OFBIZ-9692:
----------------------------------------

Hi Michael, Julian,

Could you please explain the reason of this change in 
HttpRequestFileUpload.java (just for me to understand)? TIA
{code:java}
@@ -187,5 +192,34 @@
 
-                        // write the current buffer, except the last 2 bytes;
-                        if (i > 1) {
-                            fos.write(line, 0, i - 2);
+                            // write the current buffer, except the last 2 
bytes;
+                            if (i > 1) {
+                                fos.write(line, 0, i - 2);
+                            }
+
+                            oneByteLine = (i == 1); // we need to track 
on-byte lines differently
+
+                            i = waitingReadLine(in, line, 0, BUFFER_SIZE, 
requestLength);
+                            requestLength -= i;
+
+                            // the problem is the last line of the file content
+                            // contains the new line character.
+
+                            // if the line just read was the last line, we're 
done.
+                            // if not, we must write the last 2 bytes of the 
previous buffer
+                            // just assume that a one-byte line isn't the last 
line
+
+                            if (requestLength < 1) {
+                                bail = true;
+                            } else if (oneByteLine) {
+                                fos.write(lastTwoBytes, 0, 1); // we only 
saved one byte
+                            } else {
+                                fos.write(lastTwoBytes, 0, 2);
+                            }
+
+                            if (i > 1) {
+                                // save the last 2 bytes of the buffer
+                                lastTwoBytes[0] = line[i - 2];
+                                lastTwoBytes[1] = line[i - 1];
+                            } else {
+                                lastTwoBytes[0] = line[0]; // only save one 
byte
+                            }
                         }
{code}

> [FB] Package org.apache.ofbiz.base.util
> ---------------------------------------
>
>                 Key: OFBIZ-9692
>                 URL: https://issues.apache.org/jira/browse/OFBIZ-9692
>             Project: OFBiz
>          Issue Type: Sub-task
>          Components: base
>    Affects Versions: Trunk
>            Reporter: Julian Leichert
>            Assignee: Michael Brohl
>            Priority: Minor
>             Fix For: 17.12.01
>
>         Attachments: OFBIZ-9692_org.apache.ofbiz.base.util.patch
>
>
> Base64.java:-1, NM_FIELD_NAMING_CONVENTION
> - Nm: The field name org.apache.ofbiz.base.util.Base64.Base64EncMap doesn't 
> start with a lower case letter
> Names of fields that are not final should be in mixed case with a lowercase 
> first letter and the first letters of subsequent words capitalized.
> Base64.java:-1, NM_FIELD_NAMING_CONVENTION
> - Nm: The field name org.apache.ofbiz.base.util.Base64.Base64DecMap doesn't 
> start with a lower case letter
> Names of fields that are not final should be in mixed case with a lowercase 
> first letter and the first letters of subsequent words capitalized.
> Base64.java:113, PZLA_PREFER_ZERO_LENGTH_ARRAYS
> - PZLA: Should org.apache.ofbiz.base.util.Base64.base64Decode(byte[]) return 
> a zero length array rather than null?
> It is often a better design to return a length zero array rather than a null 
> reference to indicate that there are no results (i.e., an empty list of 
> results). This way, no explicit check for null is needed by clients of the 
> method.
> On the other hand, using null to indicate "there is no answer to this 
> question" is probably appropriate. For example, File.listFiles() returns an 
> empty list if given a directory containing no files, and returns null if the 
> file is not a directory.
> Base64.java:155, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.Base64.base64Decode(String): String.getBytes()
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> Base64.java:155, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.Base64.base64Decode(String): new String(byte[])
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> Base64.java:167, PZLA_PREFER_ZERO_LENGTH_ARRAYS
> - PZLA: Should org.apache.ofbiz.base.util.Base64.base64Encode(byte[]) return 
> a zero length array rather than null?
> It is often a better design to return a length zero array rather than a null 
> reference to indicate that there are no results (i.e., an empty list of 
> results). This way, no explicit check for null is needed by clients of the 
> method.
> On the other hand, using null to indicate "there is no answer to this 
> question" is probably appropriate. For example, File.listFiles() returns an 
> empty list if given a directory containing no files, and returns null if the 
> file is not a directory.
> Base64.java:208, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.Base64.base64Encode(String): String.getBytes()
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> Base64.java:208, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.Base64.base64Encode(String): new String(byte[])
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> DateRange.java:30, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.DateRange is Serializable; consider 
> declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> DateRange.java:30, SE_NO_SUITABLE_CONSTRUCTOR
> - Se: org.apache.ofbiz.base.util.DateRange is Serializable but its superclass 
> doesn't define an accessible void constructor
> This class implements the Serializable interface and its superclass does not. 
> When such an object is deserialized, the fields of the superclass need to be 
> initialized by invoking the void constructor of the superclass. Since the 
> superclass does not have one, serialization and deserialization will fail at 
> runtime.
> Debug.java:89, DM_CONVERT_CASE
> - Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
> org.apache.ofbiz.base.util.Debug.getLevelFromString(String)
> A String is being converted to upper or lowercase, using the platform's 
> default encoding. This may result in improper conversions when used with 
> international characters. Use the
> String.toUpperCase( Locale l )
> String.toLowerCase( Locale l )
> versions instead.
> FileUtil.java:206, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.FileUtil.getBufferedWriter(String, String): new 
> java.io.FileWriter(String)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> FileUtil.java:250, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.FileUtil.readTextFile(File, boolean): new 
> java.io.FileReader(File)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> FileUtil.java:389, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.FileUtil.containsString(String, String): new 
> java.io.FileReader(File)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> FileUtil.java:393, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of in, which is known to be non-null in 
> org.apache.ofbiz.base.util.FileUtil.containsString(String, String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> GroovyUtil.java:57, DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
> - DP: org.apache.ofbiz.base.util.GroovyUtil.() creates a 
> groovy.lang.GroovyClassLoader classloader, which should be performed within a 
> doPrivileged block
> This code creates a classloader, which needs permission if a security manage 
> is installed. If this code might be invoked by code that does not have 
> security permissions, then the classloader creation needs to occur inside a 
> doPrivileged block.
> GroovyUtil.java:171, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.GroovyUtil.getScriptClassFromLocation(String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> GroovyUtil.java:177, DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED, Priorität: 
> Normal
> DP: org.apache.ofbiz.base.util.GroovyUtil.loadClass(String) creates a 
> groovy.lang.GroovyClassLoader classloader, which should be performed within a 
> doPrivileged block
> This code creates a classloader, which needs permission if a security manage 
> is installed. If this code might be invoked by code that does not have 
> security permissions, then the classloader creation needs to occur inside a 
> doPrivileged block.
> GroovyUtil.java:184, DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
> - DP: org.apache.ofbiz.base.util.GroovyUtil.parseClass(InputStream, String) 
> creates a groovy.lang.GroovyClassLoader classloader, which should be 
> performed within a doPrivileged block
> This code creates a classloader, which needs permission if a security manage 
> is installed. If this code might be invoked by code that does not have 
> security permissions, then the classloader creation needs to occur inside a 
> doPrivileged block.
> GroovyUtil.java:194, DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
> - DP: org.apache.ofbiz.base.util.GroovyUtil.parseClass(String) creates a 
> groovy.lang.GroovyClassLoader classloader, which should be performed within a 
> doPrivileged block
> This code creates a classloader, which needs permission if a security manage 
> is installed. If this code might be invoked by code that does not have 
> security permissions, then the classloader creation needs to occur inside a 
> doPrivileged block.
> HttpClient.java:368, DM_CONVERT_CASE
> - Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
> org.apache.ofbiz.base.util.HttpClient.sendHttpRequest(String)
> A String is being converted to upper or lowercase, using the platform's 
> default encoding. This may result in improper conversions when used with 
> international characters. Use the
> String.toUpperCase( Locale l )
> String.toLowerCase( Locale l )
> versions instead.
> HttpClient.java:381, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.HttpClient.sendHttpRequest(String): new 
> java.io.InputStreamReader(InputStream)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> HttpClient.java:381, OS_OPEN_STREAM
> - OS: org.apache.ofbiz.base.util.HttpClient.sendHttpRequest(String) may fail 
> to close stream
> The method creates an IO stream object, does not assign it to any fields, 
> pass it to other methods that might close it, or return it, and does not 
> appear to close the stream on all paths out of the method.  This may result 
> in a file descriptor leak.  It is generally a good idea to use a finally 
> block to ensure that streams are closed.
> HttpClient.java:392, REC_CATCH_EXCEPTION,
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.HttpClient.sendHttpRequest(String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> HttpClient.java:479, OS_OPEN_STREAM_EXCEPTION_PATH
> - OS: org.apache.ofbiz.base.util.HttpClient.sendHttpRequestStream(String, 
> boolean) may fail to close stream on exception
> The method creates an IO stream object, does not assign it to any fields, 
> pass it to other methods, or return it, and does not appear to close it on 
> all possible exception paths out of the method.  This may result in a file 
> descriptor leak.  It is generally a good idea to use a finally block to 
> ensure that streams are closed.
> HttpClient.java:504, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.HttpClient.sendHttpRequestStream(String, boolean)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> HttpRequestFileUpload.java:59, NM_CONFUSING
> - Nm: Confusing to have methods 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.getFilename() and 
> org.apache.ofbiz.minilang.SimpleMethod.getFileName()
> The referenced methods have names that differ only by capitalization.
> HttpRequestFileUpload.java:63, NM_CONFUSING
> - Nm: Confusing to have methods 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.getFilepath() and 
> org.apache.ofbiz.webtools.labelmanager.LabelFile.getFilePath()
> The referenced methods have names that differ only by capitalization.
> HttpRequestFileUpload.java:118, DM_BOXED_PRIMITIVE_FOR_PARSING
> - Bx: Boxing/unboxing to parse a primitive 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest)
> A boxed primitive is created from a String, just to extract the unboxed 
> primitive value. It is more efficient to just call the static parseXXX method.
> HttpRequestFileUpload.java:133, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest):
>  new String(byte[], int, int)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> HttpRequestFileUpload.java:158, DLS_DEAD_LOCAL_STORE
> - DLS: Dead store to newLine in 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest)
> This instruction assigns a value to a local variable, but the value is not 
> read or used in any subsequent instruction. Often, this indicates an error, 
> because the value computed is never used.
> Note that Sun's javac compiler often generates dead stores for final local 
> variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
> eliminate these false positives.
> HttpRequestFileUpload.java:178, NP_NULL_PARAM_DEREF
> - NP: Null passed for nonnull parameter of new java.io.File(String) in 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest)
> This method call passes a null value for a non-null method parameter. Either 
> the parameter is annotated as a parameter that should always be non-null, or 
> analysis has shown that it will always be dereferenced.
> HttpRequestFileUpload.java:178, RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
> - RCN: Nullcheck of HttpRequestFileUpload.savePath at line 182 of value 
> previously dereferenced in 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest)
> A value is checked here to see whether it is null, but this value can't be 
> null because it was previously dereferenced and if it were null a null 
> pointer exception would have occurred at the earlier dereference. 
> Essentially, this code and the previous dereference disagree as to whether 
> this value is allowed to be null. Either the check is redundant or the 
> previous dereference is erroneous.
> HttpRequestFileUpload.java:180, RV_RETURN_VALUE_IGNORED_BAD_PRACTICE
> - RV: Exceptional return value of java.io.File.mkdirs() ignored in 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest)
> This method returns a value that is not checked. The return value should be 
> checked since it can indicate an unusual or unexpected function execution. 
> For example, the File.delete() method returns false if the file could not be 
> successfully deleted (rather than throwing an Exception). If you don't check 
> the result, you won't notice if the method invocation signals unexpected 
> behavior by returning an atypical return value.
> HttpRequestFileUpload.java:182, OS_OPEN_STREAM_EXCEPTION_PATH
> - OS: 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest) 
> may fail to close stream on exception
> The method creates an IO stream object, does not assign it to any fields, 
> pass it to other methods, or return it, and does not appear to close it on 
> all possible exception paths out of the method.  This may result in a file 
> descriptor leak.  It is generally a good idea to use a finally block to 
> ensure that streams are closed.
> HttpRequestFileUpload.java:182, OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
> - OBL: 
> org.apache.ofbiz.base.util.HttpRequestFileUpload.doUpload(HttpServletRequest) 
> may fail to clean up java.io.OutputStream on checked exception
> This method may fail to clean up (close, dispose of) a stream, database 
> object, or other resource requiring an explicit cleanup operation.
> In general, if a method opens a stream or other resource, the method should 
> use a try/finally block to ensure that the stream or resource is cleaned up 
> before the method returns.
> This bug pattern is essentially the same as the OS_OPEN_STREAM and 
> ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and 
> hopefully better) static analysis technique. We are interested is getting 
> feedback about the usefulness of this bug pattern. To send feedback, either:
> send email to [email protected]
> file a bug report: http://findbugs.sourceforge.net/reportingBugs.html
> In particular, the false-positive suppression heuristics for this bug pattern 
> have not been extensively tuned, so reports about false positives are helpful 
> to us.
> See Weimer and Necula, Finding and Preventing Run-Time Error Handling 
> Mistakes, for a description of the analysis technique.
> JNDIContextFactory.java:79, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of ic, which is known to be non-null in 
> org.apache.ofbiz.base.util.JNDIContextFactory.getInitialContext(String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> KeyStoreUtil.java:190, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.KeyStoreUtil.certToString(Certificate): new 
> String(byte[])
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> KeyStoreUtil.java:204, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.KeyStoreUtil.pemToCert(InputStream): new 
> java.io.InputStreamReader(InputStream)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> KeyStoreUtil.java:213, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.KeyStoreUtil.pemToCert(Reader): new 
> java.io.PrintStream(OutputStream)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> MessageString.java:36, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.MessageString is Serializable; consider 
> declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> MultiTrustManager.java:115, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of issuers, which is known to be non-null in 
> org.apache.ofbiz.base.util.MultiTrustManager.isTrusted(X509Certificate[])
> This method contains a redundant check of a known non-null value against the 
> constant null.
> ObjectInputStream.java:35, NM_SAME_SIMPLE_NAME_AS_SUPERCLASS
> - Nm: The class name org.apache.ofbiz.base.util.ObjectInputStream shadows the 
> simple name of the superclass java.io.ObjectInputStream
> This class has a simple name that is identical to that of its superclass, 
> except that its superclass is in a different package (e.g., alpha.Foo extends 
> beta.Foo). This can be exceptionally confusing, create lots of situations in 
> which you have to look at import statements to resolve references and creates 
> many opportunities to accidentally define methods that do not override 
> methods in their superclasses.
> ObjectType.java:121, DM_CONVERT_CASE
> - Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
> org.apache.ofbiz.base.util.ObjectType.loadClass(String, ClassLoader)
> A String is being converted to upper or lowercase, using the platform's 
> default encoding. This may result in improper conversions when used with 
> international characters. Use the
> String.toUpperCase( Locale l )
> String.toLowerCase( Locale l )
> versions instead.
> ObjectType.java:529, DE_MIGHT_IGNORE
> - DE: org.apache.ofbiz.base.util.ObjectType.simpleTypeConvert(Object, String, 
> String, TimeZone, Locale, boolean) might ignore 
> java.lang.ClassNotFoundException
> This method might ignore an exception.  In general, exceptions should be 
> handled or reported in some way, or they should be thrown out of the method.
> ObjectType.java:614, NP_BOOLEAN_RETURN_NULL
> - NP: org.apache.ofbiz.base.util.ObjectType.doRealCompare(Object, Object, 
> String, String, String, List, Locale, ClassLoader, boolean) has Boolean 
> return type and returns explicit null
> A method that returns either Boolean.TRUE, Boolean.FALSE or null is an 
> accident waiting to happen. This method can be invoked as though it returned 
> a value of type boolean, and the compiler will insert automatic unboxing of 
> the Boolean value. If a null value is returned, this will result in a 
> NullPointerException.
> ObjectType.java:806, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.ObjectType$NullObject is Serializable; 
> consider declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> RMIExtendedSocketFactory.java:69, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of octets, which is known to be non-null in new 
> org.apache.ofbiz.base.util.RMIExtendedSocketFactory(String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> SSLUtil.java:115, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of mgrs, which is known to be non-null in 
> org.apache.ofbiz.base.util.SSLUtil.isClientTrusted(X509Certificate[], String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> SSLUtil.java:138, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of newKeyManagers, which is known to be non-null 
> in org.apache.ofbiz.base.util.SSLUtil.getKeyManagers(String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> SSLUtil.java:269, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.SSLUtil$1.verify(String, SSLSession)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> ScriptUtil.java:140, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.ScriptUtil.compileScriptFile(String): new 
> java.io.InputStreamReader(InputStream)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> ScriptUtil.java:373, NP_LOAD_OF_KNOWN_NULL_VALUE
> - NP: Load of known null value in 
> org.apache.ofbiz.base.util.ScriptUtil.executeScript(String, String, 
> ScriptContext, Object[])
> The variable referenced at this point is known to be null due to an earlier 
> check against null. Although this is valid, it might be a mistake (perhaps 
> you intended to refer to a different variable, or perhaps the earlier check 
> to see if the variable is null should have been a check to see if it was 
> non-null).
> ScriptUtil.java:387, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.ScriptUtil.executeScript(String, String, 
> ScriptContext, Object[]): new java.io.FileReader(File)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> ScriptUtil.java:387, OBL_UNSATISFIED_OBLIGATION
> - OBL: org.apache.ofbiz.base.util.ScriptUtil.executeScript(String, String, 
> ScriptContext, Object[]) may fail to clean up java.io.Reader
> This method may fail to clean up (close, dispose of) a stream, database 
> object, or other resource requiring an explicit cleanup operation.
> In general, if a method opens a stream or other resource, the method should 
> use a try/finally block to ensure that the stream or resource is cleaned up 
> before the method returns.
> This bug pattern is essentially the same as the OS_OPEN_STREAM and 
> ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and 
> hopefully better) static analysis technique. We are interested is getting 
> feedback about the usefulness of this bug pattern. To send feedback, either:
> send email to [email protected]
> file a bug report: http://findbugs.sourceforge.net/reportingBugs.html
> In particular, the false-positive suppression heuristics for this bug pattern 
> have not been extensively tuned, so reports about false positives are helpful 
> to us.
> See Weimer and Necula, Finding and Preventing Run-Time Error Handling 
> Mistakes, for a description of the analysis technique.
> StringUtil.java:238, NP_NULL_PARAM_DEREF
> - NP: Null passed for nonnull parameter of java.net.URLDecoder.decode(String, 
> String) in org.apache.ofbiz.base.util.StringUtil.strToMap(String, String, 
> boolean, String)
> This method call passes a null value for a non-null method parameter. Either 
> the parameter is annotated as a parameter that should always be non-null, or 
> analysis has shown that it will always be dereferenced.
> StringUtil.java:238, NP_NULL_PARAM_DEREF
> - NP: Null passed for nonnull parameter of java.net.URLDecoder.decode(String, 
> String) in org.apache.ofbiz.base.util.StringUtil.strToMap(String, String, 
> boolean, String)
> This method call passes a null value for a non-null method parameter. Either 
> the parameter is annotated as a parameter that should always be non-null, or 
> analysis has shown that it will always be dereferenced.
> TimeDuration.java:29, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.TimeDuration is Serializable; consider 
> declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> TimeDuration.java:98, ICAST_INTEGER_MULTIPLY_CAST_TO_LONG, Priorität: Hoch
> - ICAST: Result of integer multiplication cast to long in new 
> org.apache.ofbiz.base.util.TimeDuration(Calendar, Calendar)
> This code performs integer multiply and then converts the result to a long, 
> as in:
>     long convertDaysToMilliseconds(int days) { return 1000*3600*24*days; }
> If the multiplication is done using long arithmetic, you can avoid the 
> possibility that the result will overflow. For example, you could fix the 
> above code to:
>     long convertDaysToMilliseconds(int days) { return 1000L*3600*24*days; }
> or
>     static final long MILLISECONDS_PER_DAY = 24L*3600*1000;
>     long convertDaysToMilliseconds(int days) { return days * 
> MILLISECONDS_PER_DAY; }
> TimeDuration.java:99, ICAST_IDIV_CAST_TO_DOUBLE
> - ICAST: Integral division result cast to double or float in new 
> org.apache.ofbiz.base.util.TimeDuration(Calendar, Calendar)
> This code casts the result of an integral division (e.g., int or long 
> division) operation to double or float. Doing division on integers truncates 
> the result to the integer value closest to zero. The fact that the result was 
> cast to double suggests that this precision should have been retained. What 
> was probably meant was to cast one or both of the operands to double before 
> performing the division. Here is an example:
> int x = 2;
> int y = 5;
> // Wrong: yields result 0.0
> double value1 =  x / y;
> // Right: yields result 0.4
> double value2 =  x / (double) y;
> TimeDuration.java:174, HE_EQUALS_USE_HASHCODE
> HE: org.apache.ofbiz.base.util.TimeDuration defines equals and uses 
> Object.hashCode()
> This class overrides equals(Object), but does not override hashCode(), and 
> inherits the implementation of hashCode() from java.lang.Object (which 
> returns the identity hash code, an arbitrary value assigned to the object by 
> the VM).  Therefore, the class is very likely to violate the invariant that 
> equal objects must have equal hashcodes.
> If you don't think instances of this class will ever be inserted into a 
> HashMap/HashTable, the recommended hashCode implementation to use is:
> public int hashCode() {
>   assert false : "hashCode not designed";
>   return 42; // any arbitrary constant will do
>   }
> TimeDuration.java:182, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.TimeDuration.equals(Object)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> TimeDuration.java:385, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.TimeDuration$NullDuration is Serializable; 
> consider declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> URLConnector.java:60, WA_NOT_IN_LOOP
> - Wa: Wait not in loop in 
> org.apache.ofbiz.base.util.URLConnector.openConnection(int)
> This method contains a call to java.lang.Object.wait() which is not in a 
> loop.  If the monitor is used for multiple conditions, the condition the 
> caller intended to wait for might not be the one that actually occurred.
> URLConnector.java:144, NO_NOTIFY_NOT_NOTIFYALL
> - No: Using notify rather than notifyAll in 
> org.apache.ofbiz.base.util.URLConnector$URLConnectorThread.run()
> This method calls notify() rather than notifyAll().  Java monitors are often 
> used for multiple conditions.  Calling notify() only wakes up one thread, 
> meaning that the thread woken up might not be the one waiting for the 
> condition that the caller just satisfied.
> UtilDateTime.java:117, DM_BOXED_PRIMITIVE_FOR_PARSING
> - Bx: Boxing/unboxing to parse a primitive 
> org.apache.ofbiz.base.util.UtilDateTime.formatInterval(double, int, Locale)
> A boxed primitive is created from a String, just to extract the unboxed 
> primitive value. It is more efficient to just call the static parseXXX method.
> UtilDateTime.java:566, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.UtilDateTime.toDate(String, String, String, 
> String, String, String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> UtilDateTime.java:686, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of dateString, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilDateTime.toDateTimeString(Date)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilDateTime.java:686, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of timeString, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilDateTime.toDateTimeString(Date)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilDateTime.java:1176, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.UtilDateTime$ImmutableDate is 
> Serializable; consider declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> UtilFormatOut.java:363, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.UtilFormatOut.makeString(Object): new 
> String(byte[])
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> RMIExtendedSocketFactory.java:69, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of octets, which is known to be non-null in new 
> org.apache.ofbiz.base.util.RMIExtendedSocketFactory(String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> SSLUtil.java:115, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of mgrs, which is known to be non-null in 
> org.apache.ofbiz.base.util.SSLUtil.isClientTrusted(X509Certificate[], String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> SSLUtil.java:138, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of newKeyManagers, which is known to be non-null 
> in org.apache.ofbiz.base.util.SSLUtil.getKeyManagers(String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> SSLUtil.java:269, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.SSLUtil$1.verify(String, SSLSession)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> ScriptUtil.java:140, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.ScriptUtil.compileScriptFile(String): new 
> java.io.InputStreamReader(InputStream)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> ScriptUtil.java:373, NP_LOAD_OF_KNOWN_NULL_VALUE
> - NP: Load of known null value in 
> org.apache.ofbiz.base.util.ScriptUtil.executeScript(String, String, 
> ScriptContext, Object[])
> The variable referenced at this point is known to be null due to an earlier 
> check against null. Although this is valid, it might be a mistake (perhaps 
> you intended to refer to a different variable, or perhaps the earlier check 
> to see if the variable is null should have been a check to see if it was 
> non-null).
> ScriptUtil.java:387, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.ScriptUtil.executeScript(String, String, 
> ScriptContext, Object[]): new java.io.FileReader(File)
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> ScriptUtil.java:387, OBL_UNSATISFIED_OBLIGATION
> - OBL: org.apache.ofbiz.base.util.ScriptUtil.executeScript(String, String, 
> ScriptContext, Object[]) may fail to clean up java.io.Reader
> This method may fail to clean up (close, dispose of) a stream, database 
> object, or other resource requiring an explicit cleanup operation.
> In general, if a method opens a stream or other resource, the method should 
> use a try/finally block to ensure that the stream or resource is cleaned up 
> before the method returns.
> This bug pattern is essentially the same as the OS_OPEN_STREAM and 
> ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and 
> hopefully better) static analysis technique. We are interested is getting 
> feedback about the usefulness of this bug pattern. To send feedback, either:
> send email to [email protected]
> file a bug report: http://findbugs.sourceforge.net/reportingBugs.html
> In particular, the false-positive suppression heuristics for this bug pattern 
> have not been extensively tuned, so reports about false positives are helpful 
> to us.
> See Weimer and Necula, Finding and Preventing Run-Time Error Handling 
> Mistakes, for a description of the analysis technique.
> StringUtil.java:238, NP_NULL_PARAM_DEREF
> - NP: Null passed for nonnull parameter of java.net.URLDecoder.decode(String, 
> String) in org.apache.ofbiz.base.util.StringUtil.strToMap(String, String, 
> boolean, String)
> This method call passes a null value for a non-null method parameter. Either 
> the parameter is annotated as a parameter that should always be non-null, or 
> analysis has shown that it will always be dereferenced.
> StringUtil.java:238, NP_NULL_PARAM_DEREF
> - NP: Null passed for nonnull parameter of java.net.URLDecoder.decode(String, 
> String) in org.apache.ofbiz.base.util.StringUtil.strToMap(String, String, 
> boolean, String)
> This method call passes a null value for a non-null method parameter. Either 
> the parameter is annotated as a parameter that should always be non-null, or 
> analysis has shown that it will always be dereferenced.
> TimeDuration.java:29, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.TimeDuration is Serializable; consider 
> declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> TimeDuration.java:98, ICAST_INTEGER_MULTIPLY_CAST_TO_LONG, Priorität: Hoch
> - ICAST: Result of integer multiplication cast to long in new 
> org.apache.ofbiz.base.util.TimeDuration(Calendar, Calendar)
> This code performs integer multiply and then converts the result to a long, 
> as in:
>     long convertDaysToMilliseconds(int days) { return 1000*3600*24*days; }
> If the multiplication is done using long arithmetic, you can avoid the 
> possibility that the result will overflow. For example, you could fix the 
> above code to:
>     long convertDaysToMilliseconds(int days) { return 1000L*3600*24*days; }
> or
>     static final long MILLISECONDS_PER_DAY = 24L*3600*1000;
>     long convertDaysToMilliseconds(int days) { return days * 
> MILLISECONDS_PER_DAY; }
> TimeDuration.java:99, ICAST_IDIV_CAST_TO_DOUBLE
> - ICAST: Integral division result cast to double or float in new 
> org.apache.ofbiz.base.util.TimeDuration(Calendar, Calendar)
> This code casts the result of an integral division (e.g., int or long 
> division) operation to double or float. Doing division on integers truncates 
> the result to the integer value closest to zero. The fact that the result was 
> cast to double suggests that this precision should have been retained. What 
> was probably meant was to cast one or both of the operands to double before 
> performing the division. Here is an example:
> int x = 2;
> int y = 5;
> // Wrong: yields result 0.0
> double value1 =  x / y;
> // Right: yields result 0.4
> double value2 =  x / (double) y;
> TimeDuration.java:174, HE_EQUALS_USE_HASHCODE
> HE: org.apache.ofbiz.base.util.TimeDuration defines equals and uses 
> Object.hashCode()
> This class overrides equals(Object), but does not override hashCode(), and 
> inherits the implementation of hashCode() from java.lang.Object (which 
> returns the identity hash code, an arbitrary value assigned to the object by 
> the VM).  Therefore, the class is very likely to violate the invariant that 
> equal objects must have equal hashcodes.
> If you don't think instances of this class will ever be inserted into a 
> HashMap/HashTable, the recommended hashCode implementation to use is:
> public int hashCode() {
>   assert false : "hashCode not designed";
>   return 42; // any arbitrary constant will do
>   }
> TimeDuration.java:182, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.TimeDuration.equals(Object)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> TimeDuration.java:385, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.TimeDuration$NullDuration is Serializable; 
> consider declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> URLConnector.java:60, WA_NOT_IN_LOOP
> - Wa: Wait not in loop in 
> org.apache.ofbiz.base.util.URLConnector.openConnection(int)
> This method contains a call to java.lang.Object.wait() which is not in a 
> loop.  If the monitor is used for multiple conditions, the condition the 
> caller intended to wait for might not be the one that actually occurred.
> URLConnector.java:144, NO_NOTIFY_NOT_NOTIFYALL
> - No: Using notify rather than notifyAll in 
> org.apache.ofbiz.base.util.URLConnector$URLConnectorThread.run()
> This method calls notify() rather than notifyAll().  Java monitors are often 
> used for multiple conditions.  Calling notify() only wakes up one thread, 
> meaning that the thread woken up might not be the one waiting for the 
> condition that the caller just satisfied.
> UtilDateTime.java:117, DM_BOXED_PRIMITIVE_FOR_PARSING
> - Bx: Boxing/unboxing to parse a primitive 
> org.apache.ofbiz.base.util.UtilDateTime.formatInterval(double, int, Locale)
> A boxed primitive is created from a String, just to extract the unboxed 
> primitive value. It is more efficient to just call the static parseXXX method.
> UtilDateTime.java:566, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.UtilDateTime.toDate(String, String, String, 
> String, String, String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> UtilDateTime.java:686, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of dateString, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilDateTime.toDateTimeString(Date)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilDateTime.java:686, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of timeString, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilDateTime.toDateTimeString(Date)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilDateTime.java:1176, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.UtilDateTime$ImmutableDate is 
> Serializable; consider declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> UtilFormatOut.java:363, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.UtilFormatOut.makeString(Object): new 
> String(byte[])
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> UtilJavaParse.java:158, RV_RETURN_VALUE_IGNORED
> - RV: Return value of String.substring(int, int) ignored in 
> org.apache.ofbiz.base.util.UtilJavaParse.findEndOfBlock(int, String)
> The return value of this method should be checked. One common cause of this 
> warning is to invoke a method on an immutable object, thinking that it 
> updates the object. For example, in the following code fragment,
> String dateString = getHeaderField(name);
> dateString.trim();
> the programmer seems to be thinking that the trim() method will update the 
> String referenced by dateString. But since Strings are immutable, the trim() 
> function returns a new String value, which is being ignored here. The code 
> should be corrected to:
> String dateString = getHeaderField(name);
> dateString = dateString.trim();
> UtilHttp.java:178, DLS_DEAD_LOCAL_STORE
> - DLS: Dead store to name in 
> org.apache.ofbiz.base.util.UtilHttp.getQueryStringOnlyParameterMap(String)
> This instruction assigns a value to a local variable, but the value is not 
> read or used in any subsequent instruction. Often, this indicates an error, 
> because the value computed is never used.
> Note that Sun's javac compiler often generates dead stores for final local 
> variables. Because FindBugs is a bytecode-based tool, there is no easy way to 
> eliminate these false positives.
> UtilHttp.java:1086, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of bos, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilHttp.streamContent(OutputStream, InputStream, 
> int)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilHttp.java:1150, RV_CHECK_FOR_POSITIVE_INDEXOF
> - RV: org.apache.ofbiz.base.util.UtilHttp.parseMultiFormData(Map) checks to 
> see if result of String.indexOf is positive
> The method invokes String.indexOf and checks to see if the result is positive 
> or non-positive. It is much more typical to check to see if the result is 
> negative or non-negative. It is positive only if the substring checked for 
> occurs at some place other than at the beginning of the String.
> UtilHttp.java:1152, WMI_WRONG_MAP_ITERATOR
> - WMI: org.apache.ofbiz.base.util.UtilHttp.parseMultiFormData(Map) makes 
> inefficient use of keySet iterator instead of entrySet iterator
> This method accesses the value of a Map entry, using a key that was retrieved 
> from a keySet iterator. It is more efficient to use an iterator on the 
> entrySet of the map, to avoid the Map.get(key) lookup.
> UtilHttp.java:1463, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.UtilHttp.getAllowAllHttpClient(String, String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> UtilJavaParse.java:158, RV_RETURN_VALUE_IGNORED
> - RV: Return value of String.substring(int, int) ignored in 
> org.apache.ofbiz.base.util.UtilJavaParse.findEndOfBlock(int, String)
> The return value of this method should be checked. One common cause of this 
> warning is to invoke a method on an immutable object, thinking that it 
> updates the object. For example, in the following code fragment,
> String dateString = getHeaderField(name);
> dateString.trim();
> the programmer seems to be thinking that the trim() method will update the 
> String referenced by dateString. But since Strings are immutable, the trim() 
> function returns a new String value, which is being ignored here. The code 
> should be corrected to:
> String dateString = getHeaderField(name);
> dateString = dateString.trim();
> UtilMisc.java:82, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.UtilMisc.compare(List, List)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> UtilMisc.java:389, DM_FP_NUMBER_CTOR
> - Bx: org.apache.ofbiz.base.util.UtilMisc.toDoubleObject(Object) invokes 
> inefficient new Double(double) constructor; use Double.valueOf(double) instead
> Using new Double(double) is guaranteed to always result in a new object 
> whereas Double.valueOf(double) allows caching of values to be done by the 
> compiler, class library, or JVM. Using of cached values avoids object 
> allocation and the code will be faster.
> Unless the class must be compatible with JVMs predating Java 1.5, use either 
> autoboxing or the valueOf() method when creating instances of Double and 
> Float.
> UtilMisc.java:453, DM_NUMBER_CTOR
> - Bx: org.apache.ofbiz.base.util.UtilMisc.toLongObject(Object) invokes 
> inefficient new Long(long) constructor; use Long.valueOf(long) instead
> Using new Integer(int) is guaranteed to always result in a new object whereas 
> Integer.valueOf(int) allows caching of values to be done by the compiler, 
> class library, or JVM. Using of cached values avoids object allocation and 
> the code will be faster.
> Values between -128 and 127 are guaranteed to have corresponding cached 
> instances and using valueOf is approximately 3.5 times faster than using 
> constructor. For values outside the constant range the performance of both 
> styles is the same.
> Unless the class must be compatible with JVMs predating Java 1.5, use either 
> autoboxing or the valueOf() method when creating instances of Long, Integer, 
> Short, Character, and Byte.
> UtilMisc.java:563, OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
> - OBL: org.apache.ofbiz.base.util.UtilMisc.copyFile(File, File) may fail to 
> clean up java.io.InputStream on checked exception
> This method may fail to clean up (close, dispose of) a stream, database 
> object, or other resource requiring an explicit cleanup operation.
> In general, if a method opens a stream or other resource, the method should 
> use a try/finally block to ensure that the stream or resource is cleaned up 
> before the method returns.
> This bug pattern is essentially the same as the OS_OPEN_STREAM and 
> ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and 
> hopefully better) static analysis technique. We are interested is getting 
> feedback about the usefulness of this bug pattern. To send feedback, either:
> send email to [email protected]
> file a bug report: http://findbugs.sourceforge.net/reportingBugs.html
> In particular, the false-positive suppression heuristics for this bug pattern 
> have not been extensively tuned, so reports about false positives are helpful 
> to us.
> See Weimer and Necula, Finding and Preventing Run-Time Error Handling 
> Mistakes, for a description of the analysis technique.
> UtilMisc.java:563, OS_OPEN_STREAM_EXCEPTION_PATH
> - OS: org.apache.ofbiz.base.util.UtilMisc.copyFile(File, File) may fail to 
> close stream on exception
> The method creates an IO stream object, does not assign it to any fields, 
> pass it to other methods, or return it, and does not appear to close it on 
> all possible exception paths out of the method.  This may result in a file 
> descriptor leak.  It is generally a good idea to use a finally block to 
> ensure that streams are closed.
> UtilMisc.java:564, OS_OPEN_STREAM_EXCEPTION_PATH
> - OS: org.apache.ofbiz.base.util.UtilMisc.copyFile(File, File) may fail to 
> close stream on exception
> The method creates an IO stream object, does not assign it to any fields, 
> pass it to other methods, or return it, and does not appear to close it on 
> all possible exception paths out of the method.  This may result in a file 
> descriptor leak.  It is generally a good idea to use a finally block to 
> ensure that streams are closed.
> UtilMisc.java:564, OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
> - OBL: org.apache.ofbiz.base.util.UtilMisc.copyFile(File, File) may fail to 
> clean up java.io.OutputStream on checked exception
> This method may fail to clean up (close, dispose of) a stream, database 
> object, or other resource requiring an explicit cleanup operation.
> In general, if a method opens a stream or other resource, the method should 
> use a try/finally block to ensure that the stream or resource is cleaned up 
> before the method returns.
> This bug pattern is essentially the same as the OS_OPEN_STREAM and 
> ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and 
> hopefully better) static analysis technique. We are interested is getting 
> feedback about the usefulness of this bug pattern. To send feedback, either:
> send email to [email protected]
> file a bug report: http://findbugs.sourceforge.net/reportingBugs.html
> In particular, the false-positive suppression heuristics for this bug pattern 
> have not been extensively tuned, so reports about false positives are helpful 
> to us.
> See Weimer and Necula, Finding and Preventing Run-Time Error Handling 
> Mistakes, for a description of the analysis technique.
> UtilNumber.java:30, MS_SHOULD_BE_FINAL
> - MS: org.apache.ofbiz.base.util.UtilNumber.module isn't final but should be
> This static field public but not final, and could be changed by malicious 
> code or by accident from another package. The field could be made final to 
> avoid this vulnerability.
> UtilNumber.java:139, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of value, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilNumber.getBigDecimalScale(String, String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilProperties.java:68, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.UtilProperties is Serializable; consider 
> declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> UtilProperties.java:88, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of value, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilProperties.propertyValueEquals(String, String, 
> String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilProperties.java:101, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of value, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilProperties.propertyValueEqualsIgnoreCase(String,
>  String, String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilProperties.java:123, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of str, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilProperties.getPropertyNumber(String, String, 
> double)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilProperties.java:497, OS_OPEN_STREAM_EXCEPTION_PATH
> - OS: org.apache.ofbiz.base.util.UtilProperties.setPropertyValue(String, 
> String, String) may fail to close stream on exception
> The method creates an IO stream object, does not assign it to any fields, 
> pass it to other methods, or return it, and does not appear to close it on 
> all possible exception paths out of the method.  This may result in a file 
> descriptor leak.  It is generally a good idea to use a finally block to 
> ensure that streams are closed.
> UtilProperties.java:497, OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
> - OBL: org.apache.ofbiz.base.util.UtilProperties.setPropertyValue(String, 
> String, String) may fail to clean up java.io.OutputStream on checked exception
> This method may fail to clean up (close, dispose of) a stream, database 
> object, or other resource requiring an explicit cleanup operation.
> In general, if a method opens a stream or other resource, the method should 
> use a try/finally block to ensure that the stream or resource is cleaned up 
> before the method returns.
> This bug pattern is essentially the same as the OS_OPEN_STREAM and 
> ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different (and 
> hopefully better) static analysis technique. We are interested is getting 
> feedback about the usefulness of this bug pattern. To send feedback, either:
> send email to [email protected]
> file a bug report: http://findbugs.sourceforge.net/reportingBugs.html
> In particular, the false-positive suppression heuristics for this bug pattern 
> have not been extensively tuned, so reports about false positives are helpful 
> to us.
> See Weimer and Necula, Finding and Preventing Run-Time Error Handling 
> Mistakes, for a description of the analysis technique.
> UtilProperties.java:598, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of value, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilProperties.getMessage(String, String, Locale)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilProperties.java:1123, EQ_UNUSUAL
> - Eq: 
> org.apache.ofbiz.base.util.UtilProperties$UtilResourceBundle.equals(Object) 
> is unusual
> This class doesn't do any of the patterns we recognize for checking that the 
> type of the argument is compatible with the type of the this object. There 
> might not be anything wrong with this code, but it is worth reviewing.
> UtilProperties.java:1156, SE_NO_SERIALVERSIONID
> - SnVI: org.apache.ofbiz.base.util.UtilProperties$ExtendedProperties is 
> Serializable; consider declaring a serialVersionUID
> This class implements the Serializable interface, but does not define a 
> serialVersionUID field.  A change as simple as adding a reference to a .class 
> object will add synthetic fields to the class, which will unfortunately 
> change the implicit serialVersionUID (e.g., adding a reference to 
> String.class will generate a static field class$java$lang$String). Also, 
> different source code to bytecode compilers may use different naming 
> conventions for synthetic variables generated for references to class objects 
> or inner classes. To ensure interoperability of Serializable across versions, 
> consider adding an explicit serialVersionUID.
> UtilTimer.java:33, MS_SHOULD_BE_FINAL
> - MS: org.apache.ofbiz.base.util.UtilTimer.staticTimers isn't final but 
> should be
> This static field public but not final, and could be changed by malicious 
> code or by accident from another package. The field could be made final to 
> avoid this vulnerability.
> UtilURL.java:94, ISC_INSTANTIATE_STATIC_CLASS
> - ISC: org.apache.ofbiz.base.util.UtilURL.fromResource(String, ClassLoader) 
> needlessly instantiates a class that only supplies static methods
> This class allocates an object that is based on a class that only supplies 
> static methods. This object does not need to be created, just access the 
> static methods directly using the class name as a qualifier.
> UtilValidate.java:136, MS_PKGPROTECT
> - MS: org.apache.ofbiz.base.util.UtilValidate.daysInMonth should be package 
> protected
> A mutable static field could be changed by malicious code or by accident. The 
> field could be made package protected to avoid this vulnerability.
> UtilValidate.java:810, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.UtilValidate.isDateAfterToday(String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> UtilValidate.java:852, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.UtilValidate.isDateBeforeToday(String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> UtilValidate.java:1243, DM_CONVERT_CASE
> - Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
> org.apache.ofbiz.base.util.UtilValidate.isNotPoBox(String)
> A String is being converted to upper or lowercase, using the platform's 
> default encoding. This may result in improper conversions when used with 
> international characters. Use the
> String.toUpperCase( Locale l )
> String.toLowerCase( Locale l )
> versions instead.
> UtilXml.java:210, DM_DEFAULT_ENCODING
> - Dm: Found reliance on default encoding in 
> org.apache.ofbiz.base.util.UtilXml.createOutputTransformer(String, boolean, 
> boolean, int): String.getBytes()
> Found a call to a method which will perform a byte to String (or String to 
> byte) conversion, and will assume that the default platform encoding is 
> suitable. This will cause the application behaviour to vary between 
> platforms. Use an alternative API and specify a charset name or Charset 
> object explicitly.
> UtilXml.java:472, UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR
> - UwF: UtilXml$1.locator not initialized in constructor and dereferenced in 
> org.apache.ofbiz.base.util.UtilXml$1.setLineColumn(Node)
> This field is never initialized within any constructor, and is therefore 
> could be null after the object is constructed. Elsewhere, it is loaded and 
> dereferenced without a null check. This could be a either an error or a 
> questionable design, since it means a null pointer exception will be 
> generated if that field is dereferenced before being initialized.
> UtilXml.java:828, RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
> - RCN: Redundant nullcheck of value, which is known to be non-null in 
> org.apache.ofbiz.base.util.UtilXml.firstChildElement(Element, String, String, 
> String)
> This method contains a redundant check of a known non-null value against the 
> constant null.
> UtilXml.java:1015, REC_CATCH_EXCEPTION
> - REC: Exception is caught when Exception is not thrown in 
> org.apache.ofbiz.base.util.UtilXml$LocalResolver.resolveEntity(String, String)
> This method uses a try-catch block that catches Exception objects, but 
> Exception is not thrown within the try block, and RuntimeException is not 
> explicitly caught. It is a common bug pattern to say try { ... } catch 
> (Exception e) { something } as a shorthand for catching a number of types of 
> exception each of whose catch blocks is identical, but this construct also 
> accidentally catches RuntimeException as well, masking potential bugs.
> A better approach is to either explicitly catch the specific exceptions that 
> are thrown, or to explicitly catch RuntimeException exception, rethrow it, 
> and then catch all non-Runtime Exceptions, as shown below:
>   try {
>     ...
>   } catch (RuntimeException e) {
>     throw e;
>   } catch (Exception e) {
>     ... deal with all non-runtime exceptions ...
>   }
> UtilXml.java:1076, DM_CONVERT_CASE
> - Dm: Use of non-localized String.toUpperCase() or String.toLowerCase() in 
> org.apache.ofbiz.base.util.UtilXml$LocalErrorHandler.error(SAXParseException)
> A String is being converted to upper or lowercase, using the platform's 
> default encoding. This may result in improper conversions when used with 
> international characters. Use the
> String.toUpperCase( Locale l )
> String.toLowerCase( Locale l )
> versions instead.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to