[ http://issues.apache.org/jira/browse/HARMONY-1024?page=comments#action_12458435 ]
Vasily Zakharov commented on HARMONY-1024:
------------------------------------------
Consider the following simple test:
==========================================
import javax.naming.*;
public class Test {
public static void main(String[] args) {
try {
System.out.println("Name: " + new Binding((String) null, new Object()).getName());
} catch (Throwable e) {
System.out.println("Test failed: unexpected " + e);
}
}
}
==========================================
Output on RI:
C:\> java Test
Name: null
Now notice that JavaDoc for javax.naming.NameClassPair.getName() states: "Returns: The non-null
name of this binding."
As you may see, RI explicitly violates its own spec.
So I think, a good implementation of Binding constructors MUST throw exception if name is
null. The question is, what exception should be thrown - NullPointerException or IllegalArgumentException.
I'm voting for the second one, as it's more informative. So my suggestion is closing this
issue as a non-bug difference.
> [classlib][jndi] compatibility: Harmony throws IllegalArgumentException for javax.naming.Binding
constructions while RI does not
> --------------------------------------------------------------------------------------------------------------------------------
>
> Key: HARMONY-1024
> URL: http://issues.apache.org/jira/browse/HARMONY-1024
> Project: Harmony
> Issue Type: Bug
> Components: Non-bug differences from RI
> Reporter: Vladimir Ivanov
> Priority: Minor
>
> J2SE API specifications says that parameter "name of javax.naming.Binding constructors
is non-null." but says nothing about exceptions which may be thrown by constructors when parameter
"name" is null.
> Harmony throws IllegalArgumentException in these cases while RI does not.
> ============== test.java =====================
> import javax.naming.*;
> public class test {
> public static void main(String[] argv) {
> try {
> System.out.println("Test passed: " + new Binding((String) null, (Object)
null));
> } catch (Throwable e) {
> System.out.println("Test failed: unexpected " + e);
> }
> try {
> System.out.println("Test passed: " + new Binding((String) null, new Object(),
true));
> } catch (Throwable e) {
> System.out.println("Test failed: unexpected " + e);
> }
> try {
> System.out.println("Test passed: " + new Binding((String) null, "test", new
Object()));
> } catch (Throwable e) {
> System.out.println("Test failed: unexpected " + e);
> }
> try {
> System.out.println("Test passed: " + new Binding((String) null, "test", new
Object(), true));
> } catch (Throwable e) {
> System.out.println("Test failed: unexpected " + e);
> }
> }
> }
> ==========================================
> Output:
> C:\tmp\tmp17>C:\jrockit-jdk1.5.0-windows-ia32\bin\java.exe -cp . -showversion test
> java version "1.5.0"
> Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
> BEA WebLogic JRockit(R) (build dra-38972-20041208-2001-win-ia32, R25.0.0-75, GC: System
optimized over throughput (initial strategy singleparpar))
> Test passed: null: null:null
> Test passed: null: java.lang.Object:java.lang.Object@1b3586
> Test passed: null: test:java.lang.Object@1b365a
> Test passed: null: test:java.lang.Object@1b36f0
> C:\tmp\tmp17>C:\harmony\trunk_0427\deploy\jdk\jre\bin\java.exe -cp . -showversion
test
> java version 1.5 (subset)
> (c) Copyright 1991, 2006 The Apache Software Foundation or its licensors, as applicable.
> Test failed: unexpected java.lang.IllegalArgumentException: name must not be null
> Test failed: unexpected java.lang.IllegalArgumentException: name must not be null
> Test failed: unexpected java.lang.IllegalArgumentException: name must not be null
> Test failed: unexpected java.lang.IllegalArgumentException: name must not be null
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
|