Search code examples
javaibm-midrangejcejava1.4

StackOverFlowError while creating Mac object on AS400/Java


I am a newbie to AS400-Java programming. I am trying to create my first program to test the implementation of Message Authentication Code (MAC). I am trying to use the HMACSHA1 hash function. My (Java 1.4) program runs fine on a dev box (V5R4).But fails terribly on the QA box (V5R3). My program is as below:

=====================================================


import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.Security;
import java.security.Provider;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.crypto.SecretKey;

public class Test01
{
 private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";

 public static void main (String [] arguments)
 {
  byte[] key = { 1,2,3,4,5,6,7,8};
  SecretKeySpec SHA1key = new SecretKeySpec(key, "HmacSHA1");
  Mac hmac;
  String strFinalRslt = "";

  try {
 hmac = Mac.getInstance("HmacSHA1");
 hmac.init(SHA1key);
 byte[] result = hmac.doFinal();
    strFinalRslt = toHexString(result);

  }catch (NoSuchAlgorithmException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
  }catch (InvalidKeyException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
  }catch(StackOverflowError e){
 e.printStackTrace();
  }
  System.out.println(strFinalRslt);
  System.out.println("All done!!!");
 }

 public static byte[] fromHexString ( String s )
 {
  int stringLength = s.length();
  if ( (stringLength & 0x1) != 0 )
  {
   throw new IllegalArgumentException ( "fromHexString requires an even number of hex characters" );
  }
  byte[] b = new byte[stringLength / 2];

  for ( int i=0,j=0; i>> 4] );

  //look up low nibble char
  sb.append( hexChar [b[i] & 0x0f] );
 }
 return sb.toString();
}

static char[] hexChar = {
'0' , '1' , '2' , '3' ,
'4' , '5' , '6' , '7' ,
'8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f'};


}

This program compiles fine and gets the correct response on my win-xp client and also my dev box. But, fails with the following error on the QA box:

java.lang.StackOverflowError
    at java.lang.Throwable.(Throwable.java:180)
    at java.lang.Error.(Error.java:37)
    at java.lang.StackOverflowError.(StackOverflowError.java:24)
    at java.io.Os400FileSystem.list(Native method)
    at java.io.File.list(File.java:922)
    at javax.crypto.b.e(Unknown source)
    at javax.crypto.b.a(Unknown source)
    at javax.crypto.b.c(Unknown source)
    at javax.crypto.b£0.run(Unknown source)
    at javax.crypto.b.(Unknown source)
    at javax.crypto.Mac.getInstance(Unknown source)

I have verified the java.security file and entry corresponding to the jce files are all ok. The DMPJVM command gives me the following response:

Thu Jun 03 12:25:34 E
Java Virtual Machine Information  016822/QPGMR/11111
........................................................................
. Classpath                                                            .
........................................................................
java.version=1.4
sun.boot.class.path=/QIBM/ProdData/OS400/Java400/jdk/lib/jdkptf14.zip:/QIBM
/ProdData/OS400/Java400/ext/ibmjssefw.jar:/QIBM/ProdData/CAP/ibmjsseprovide
r.jar:/QIBM/ProdData/OS400/Java400/ext/ibmjsseprovider2.jar:/QIBM/ProdData/
OS400/Java400/ext/ibmpkcs11impl.jar:/QIBM/ProdData/CAP/ibmjssefips.jar:/QIB
M/ProdData/OS400/Java400/jdk/lib/IBMiSeriesJSSE.jar:/QIBM/ProdData/OS400/Ja
va400/jdk/lib/jce.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/jaas.jar:/QIBM/P
rodData/OS400/Java400/jdk/lib/ibmcertpathfw.jar:/QIBM/ProdData/OS400/Java40
0/jdk/lib/ibmcertpathprovider.jar:/QIBM/ProdData/OS400/Java400/ext/ibmpkcs.
jar:/QIBM/ProdData/OS400/Java400/jdk/lib/ibmjgssfw.jar:/QIBM/ProdData/OS400
/Java400/jdk/lib/ibmjgssprovider.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/s
ecurity.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/charsets.jar:/QIBM/ProdDat
a/OS400/Java400/jdk/lib/resources.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/
rt.jar:/QIBM/ProdData/OS400/Java400/jdk/lib/sunrsasign.jar:/QIBM/ProdData/O
S400/Java400/ext/IBMmisc.jar:/QIBM/ProdData/Java400/
java.class.path=/myhome/lib/commons-codec-1.3.jar:/myhome/lib/commons-httpc
lient-3.1.jar:/myhome/lib/commons-logging-1.1.jar:/myhome/lib/log4j-1.2.15.jar:/myhome/lib/log4j-core.jar
;
java.ext.dirs=/QIBM/ProdData/OS400/Java400/jdk/lib/ext:/QIBM/UserData/Java4
00/ext:/QIBM/ProdData/Java400/jdk14/lib/ext
java.library.path=/QSYS.LIB/ROBOTLIB.LIB:/QSYS.LIB/QTEMP.LIB:/QSYS.LIB/ODIP
GM.LIB:/QSYS.LIB/QGPL.LIB
........................................................................
. Garbage Collection                                                   .
........................................................................
Garbage collector parameters
   Initial size: 16384 K
   Max size: 240000000 K
Current values
   Heap size: 437952 K
   Garbage collections: 58
Additional values
   JIT heap size: 53824 K
   JVM heap size: 55752 K
   Last GC cycle time: 1333 ms
........................................................................
. Thread information                                                   .
........................................................................
Information for 4 thread(s) of 4 thread(s) processed
Thread:  00000004 Thread-0
  TDE:  B00380000BAA0000
  Thread priority: 5
  Thread status: Running
  Thread group: main
  Runnable: java/lang/Thread
 Stack:
    java/io/Os400FileSystem.list(Ljava/io/File;)[Ljava/lang/String;+0 (Os400FileSystem.java:0)
    java/io/File.list()[Ljava/lang/String;+19 (File.java:922)
    javax/crypto/b.e()[B+127 (:0)
    javax/crypto/b.a(Ljava/security/cert/X509Certificate;)V+7 (:0)
    javax/crypto/b.access$500(Ljava/security/cert/X509Certificate;)V+1 (:0)
    javax/crypto/b$0.run()Ljava/lang/Object;+98 (:0)
    javax/crypto/b.()V+507 (:0)
    javax/crypto/Mac.getInstance(Ljava/lang/String;)Ljavax/crypto/Mac;+10 (:0)
 Locks:
    None
Thread:  00000007 jitcompilethread
  TDE:  B00380000BD58000
  Thread priority: 5
  Thread status: Java wait
  Thread group: system
  Runnable: java/lang/Thread
 Stack:
    None
 Locks:
    None
Thread:  00000005 Reference Handler
  TDE:  B00380000BAAC000
  Thread priority: 10
  Thread status: Waiting
  Wait object: java/lang/ref/Reference$Lock
  Thread group: system
  Runnable: java/lang/ref/Reference$ReferenceHandler
 Stack:
    java/lang/Object.wait()V+1 (Object.java:452)
    java/lang/ref/Reference$ReferenceHandler.run()V+47 (Reference.java:169)
 Locks:
    None
Thread:  00000006 Finalizer
  TDE:  B00380000BAB3000
  Thread priority: 8
  Thread status: Waiting
  Wait object: java/lang/ref/ReferenceQueue$Lock
  Thread group: system
  Runnable: java/lang/ref/Finalizer$FinalizerThread
 Stack:
    java/lang/ref/ReferenceQueue.remove(J)Ljava/lang/ref/Reference;+43 (ReferenceQueue.java:111)
    java/lang/ref/ReferenceQueue.remove()Ljava/lang/ref/Reference;+1 (ReferenceQueue.java:127)
    java/lang/ref/Finalizer$FinalizerThread.run()V+3 (Finalizer.java:171)
 Locks:
    None
........................................................................
. Class loader information                                             .
........................................................................
0 Default class loader
1 sun/reflect/DelegatingClassLoader
2 sun/misc/Launcher$ExtClassLoader
........................................................................
. GC heap information                                                  .
........................................................................
 Loader     Objects      Class name
 ------     -------      ----------
 0          1493         [C
 0          2122181      java/lang/String
 0          47           [Ljava/util/Hashtable$Entry;
 0          68           [Ljava/lang/Object;
 0          1016         java/lang/Class
 0          31           java/util/HashMap
 0          37           java/util/Hashtable
 0          2            java/lang/ThreadGroup
 0          2            java/lang/RuntimePermission
 0          2            java/lang/ref/ReferenceQueue$Null
 0          5            java/lang/ref/ReferenceQueue
 0          50           java/util/Vector
 0          4            java/util/Stack
 0          3            sun/misc/SoftCache
 0          1            [Ljava/lang/ThreadGroup;
 0          5            [Ljava/io/ObjectStreamField;
 0          1            sun/reflect/ReflectionFactory
 0          7            java/lang/ref/ReferenceQueue$Lock
 0          10           java/lang/Object
 0          1            java/lang/String$CaseInsensitiveComparator
 0          1            java/util/Hashtable$EmptyEnumerator
 0          1            java/util/Hashtable$EmptyIterator
 0          33           [Ljava/util/HashMap$Entry;
 0          19210        [J
 0          1            sun/nio/cs/StandardCharsets
 0          5            java/util/TreeMap
 0          1075         java/util/TreeMap$Entry
 0          469          [Ljava/lang/String;
 0          1            java/lang/StringBuffer
 0          2            java/io/FileInputStream
 0          2            java/io/FileOutputStream
 0          2            java/io/BufferedOutputStream
 0          1            java/lang/reflect/ReflectPermission
 0          1            [[Ljava/lang/ref/SoftReference;
 0          2            [Ljava/lang/ref/SoftReference;
 0          2            sun/nio/cs/Surrogate$Parser
 0          3            sun/misc/Signal
 0          1            [Ljava/io/File;
 0          6            java/io/File
 0          1            java/util/BitSet
 0          17           sun/reflect/NativeConstructorAccessorImpl
 0          2            java/net/URLClassLoader$ClassFinder
 0          12           java/util/ArrayList
 0          32           java/io/RandomAccessFile
 0          16           java/lang/Thread
 0          1            java/lang/ref/Reference$ReferenceHandler
 0          1            java/lang/ref/Finalizer$FinalizerThread
 0          266          [B
 0          2            java/util/Properties
 0          71           java/lang/ref/Finalizer
 0          2            com/ibm/nio/cs/DirectEncoder
 0          38           java/lang/reflect/Constructor
 0          33           java/util/jar/JarFile
 0          19200        java/lang/StackOverflowError
 0          5            java/security/AccessControlContext
 0          2            [Ljava/lang/Thread;
 0          4            java/lang/OutOfMemoryError
 0          1065         java/util/Hashtable$Entry
 0          1            java/io/BufferedInputStream
 0          2            java/io/PrintStream
 0          2            java/io/OutputStreamWriter
 0          428          [I
 0          3            java/lang/ClassLoader$NativeLibrary
 0          25           java/util/Locale
 0          3            sun/misc/URLClassPath
 0          30           java/util/zip/Inflater
 0          612          java/util/HashMap$Entry
 0          2            java/io/FilePermission
 0          10           java/io/ObjectStreamField
 0          1            java/security/BasicPermissionCollection
 0          2            java/security/ProtectionDomain
 0          1            java/lang/Integer$1
 0          1            java/lang/ref/Reference$Lock
 0          1            java/lang/Shutdown$Lock
 0          1            java/lang/Runtime
 0          36           java/io/FileDescriptor
 0          1            java/lang/Long$1
 0          202          java/lang/Long
 0          3            java/lang/ThreadLocal
 0          3            java/nio/charset/CodingErrorAction
 0          2            java/nio/charset/CoderResult
 0          1            java/nio/charset/CoderResult$1
 0          1            java/nio/charset/CoderResult$2
 0          1            sun/misc/Unsafe
 0          2            java/nio/ByteOrder
 0          1            java/io/Os400FileSystem
 0          3            java/lang/Boolean
 0          1            java/lang/Terminator$1
 0          23           java/lang/Integer
 0          2            sun/misc/NativeSignalHandler
 0          1            sun/misc/Launcher$Factory
 0          1            sun/misc/Launcher
 0          53           [Ljava/lang/Class;
 0          1            java/lang/reflect/ReflectAccess
 0          18           sun/reflect/DelegatingConstructorAccessorImpl
 0          1            sun/net/www/protocol/file/Handler
 0          3            java/util/HashSet
 0          3            sun/net/www/protocol/jar/Handler
 0          1            java/util/jar/JavaUtilJarAccessImpl
 0          1            java/net/UnknownContentHandler
 0          2            [Ljava/security/Principal;
 0          10           [Ljava/security/cert/Certificate;
 0          2            sun/misc/AtomicLongCSImpl
 0          3            sun/reflect/DelegatingMethodAccessorImpl
 0          1            sun/security/util/ByteArrayLexOrder
 0          1            sun/security/util/ByteArrayTagOrder
 0          7            sun/security/x509/CertificateVersion
 0          7            sun/security/x509/CertificateSerialNumber
 0          7            sun/security/x509/SerialNumber
 0          7            sun/security/x509/CertificateAlgorithmId
 0          7            sun/security/x509/CertificateIssuerName
 0          60           sun/security/x509/RDN
 0          60           [Lsun/security/x509/AVA;
 0          67           sun/security/util/DerInputStream
 0          3            [Ljava/math/BigInteger;
 0          2            com/ibm/nio/cs/Converter
 0          2            sun/nio/cs/StreamEncoder$CharsetSE
 0          35           java/lang/ref/SoftReference
 0          2            java/nio/HeapByteBuffer
 0          2            java/io/BufferedWriter
 0          33           sun/misc/URLClassPath$JarLoader
 0          4            java/lang/ThreadLocal$ThreadLocalMap$Entry
 0          76           java/net/URL
 0          1            sun/misc/Launcher$ExtClassLoader
 0          1            sun/misc/Launcher$AppClassLoader
 0          4            java/lang/Throwable
 0          7            java/lang/reflect/Method
 0          2            sun/misc/URLClassPath$FileLoader
 0          2            java/security/CodeSource
 0          2            java/security/Permissions
 0          2            java/io/FilePermissionCollection
 0          1            java/lang/ThreadLocal$ThreadLocalMap
 0          1            javax/crypto/spec/SecretKeySpec
 0          17           java/util/jar/Attributes$Name
 0          1            [Ljava/lang/ThreadLocal$ThreadLocalMap$Entry;
 0          1            java/security/SecureRandom
 0          2            sun/security/provider/Sun
 0          1            java/util/jar/JarFile$JarFileEntry
 0          1            java/util/jar/JarVerifier
 0          3            sun/reflect/NativeMethodAccessorImpl
 0          116          sun/security/util/ObjectIdentifier
 0          1            java/lang/Package
 0          2            [S
 0          104          java/math/BigInteger
 0          20           sun/security/x509/AlgorithmId
 0          14           sun/security/x509/X500Name
 0          14           [Lsun/security/x509/RDN;
 0          60           sun/security/x509/AVA
 0          67           sun/security/util/DerValue
 0          67           sun/security/util/DerInputBuffer
 0          21           sun/security/x509/AVAKeyword
 0          6            sun/security/x509/X509CertImpl
 0          7            sun/security/x509/X509CertInfo
 0          1            [Lsun/security/util/ObjectIdentifier;
 0          1            [[Ljava/lang/Byte;
 0          3            [[B
 0          7            sun/security/provider/DSAPublicKey
 0          7            sun/security/x509/AuthorityKeyIdentifierExtension
 0          12           [Ljava/lang/Byte;
 0          14           java/lang/Byte
 0          7            sun/security/x509/CertificateSubjectName
 0          7            sun/security/x509/CertificateX509Key
 0          14           sun/security/x509/KeyIdentifier
 0          4            [Z
 0          5            sun/text/Normalizer$Mode
 0          7            sun/security/x509/CertificateValidity
 0          14           java/util/Date
 0          7            sun/security/provider/DSAParameters
 0          7            sun/security/util/BitArray
 0          7            sun/security/x509/CertificateExtensions
 0          7            java/security/AlgorithmParameters
 0          7            sun/security/x509/SubjectKeyIdentifierExtension
 0          5            sun/security/x509/BasicConstraintsExtension
 0          2            sun/security/x509/KeyUsageExtension
 0          1            sun/text/CompactCharArray
 0          1            sun/text/CompactByteArray
 0          1            sun/net/www/protocol/jar/JarFileFactory
 0          1            java/util/Collections$EmptySet
 0          1            java/util/Collections$EmptyList
 0          1            java/util/Collections$ReverseComparator
 0          1            com/ibm/security/jgss/i18n/PropertyResource
 0          1            javax/crypto/b$0
 0          1            sun/security/provider/X509Factory
 0          1            sun/reflect/BootstrapConstructorAccessorImpl
 1          1            sun/reflect/GeneratedConstructorAccessor3202134454
 2          1            com/ibm/crypto/provider/IBMJCE
 0          6            java/util/ResourceBundle$LoaderReference
 0          1            [Lsun/security/x509/NetscapeCertTypeExtension$MapEntry;
 0          1            com/sun/rsajca/Provider
 0          1            com/ibm/security/cert/IBMCertPath
 0          1            com/ibm/as400/ibmonly/net/ssl/Provider
 0          1            com/ibm/jsse/IBMJSSEProvider
 0          1            com/ibm/security/jgss/IBMJGSSProvider
 0          5            org/ietf/jgss/Oid
 0          1            java/util/PropertyResourceBundle
 0          7            java/util/ResourceBundle$ResourceCacheKey
 0          2            sun/net/www/protocol/jar/URLJarFile
 0          6            sun/misc/SoftCache$ValueCell
 0          1            java/util/Random
 0          1            java/util/Collections$EmptyMap
 0          112          com/ibm/security/util/ObjectIdentifier
 0          5            java/security/Security$ProviderProperty
 0          1            java/security/cert/CertificateFactory
 0          1            sun/security/provider/SecureRandom
 0          2            java/security/MessageDigest$Delegate
 0          2            sun/security/provider/SHA
 0          1            sun/util/calendar/ZoneInfo
 0          4            com/ibm/security/x509/X500Name
 0          2            [Ljava/security/cert/X509Certificate;
 0          1            sun/reflect/DelegatingClassLoader
 0          1            sun/security/x509/NetscapeCertTypeExtension
 0          7            sun/security/x509/NetscapeCertTypeExtension$MapEntry
 0          3            [[Ljava/lang/String;
 0          3            java/util/Arrays$ArrayList
 0          7            com/ibm/security/x509/NetscapeCertTypeExtension$MapEntry
 0          1            com/ibm/security/validator/EndEntityChecker
 0          1            java/util/AbstractList$Itr
 0          1            com/ibm/security/util/ByteArrayLexOrder
 0          1            com/ibm/security/util/ByteArrayTagOrder
 0          18           [Lcom/ibm/security/x509/AVA;
 0          18           com/ibm/security/util/DerInputStream
 0          5            com/ibm/security/util/text/Normalizer$Mode
 0          1            com/ibm/security/validator/SimpleValidator
 0          1            [Lcom/ibm/security/x509/NetscapeCertTypeExtension$MapEntry;
 0          4            [Lcom/ibm/security/x509/RDN;
 0          1            java/util/Hashtable$Enumerator
 0          4            java/util/LinkedHashMap$Entry
 0          1            sun/text/resources/LocaleElements
 0          1            sun/text/resources/LocaleElements_en
 0          22           com/ibm/security/x509/AVAKeyword
 0          4            javax/security/auth/x500/X500Principal
 0          18           com/ibm/security/x509/RDN
 0          18           com/ibm/security/x509/AVA
 0          18           com/ibm/security/util/DerInputBuffer
 0          18           com/ibm/security/util/DerValue
 0          1            com/ibm/security/util/text/CompactCharArray
 0          1            com/ibm/security/util/text/CompactByteArray
 0          2            java/util/LinkedHashMap
 0          1            java/net/InetAddress$1
 0          2            [Ljava/net/InetAddress;
 0          2            java/net/InetAddress$Cache
 0          1            java/net/Inet4AddressImpl
 0          3            java/net/Inet4Address
 0          2            java/net/InetAddress$CacheEntry
........................................................................
. Global registry information                                          .
........................................................................
 Loader     Objects      Class name
 ------     -------      ----------
 0          23           [C
 0          1017         java/lang/Class
 0          1            java/lang/ref/Reference$ReferenceHandler
 0          1            java/lang/ref/Finalizer$FinalizerThread
 0          1            sun/misc/Launcher$AppClassLoader
 0          32           java/io/RandomAccessFile
 0          32           [B

Can someone please advise me?

Thanks a lot, Prasanna


Solution

  • The issue appears to be

    at java.io.Os400FileSystem.list(Native method)
    at java.io.File.list(File.java:922)
    

    The Mac.getInstance() code needs to read a folder (File.list) which is being done by the Os400FileSystem.list() method. Apparently that folder is too large.

    The first thing you need to check is that the machine is current on PTF's. If the problem remains, then try giving your process more memory (argument to the JAVA/RUNJVA command) to see if you just have a bit too little memory. The defaults were incremented from V5R3 to V5R4.