2

私は AS400-Java プログラミングの初心者です。メッセージ認証コード (MAC) の実装をテストする最初のプログラムを作成しようとしています。HMACSHA1 ハッシュ関数を使用しようとしています。私の (Java 1.4) プログラムは、開発ボックス (V5R4) では正常に動作しますが、QA ボックス (V5R3) ではひどく失敗します。私のプログラムは以下の通りです:

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


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'};


}

このプログラムは正常にコンパイルされ、win-xp クライアントと開発ボックスで正しい応答が得られます。ただし、QA ボックスで次のエラーが表示されて失敗します。

java.lang.StackOverflowError
    java.lang.Throwable で (Throwable.java:180)
    java.lang.Error で (Error.java:37)
    java.lang.StackOverflowError で。(StackOverflowError.java:24)
    java.io.Os400FileSystem.list(ネイティブメソッド)
    java.io.File.list(File.java:922)
    javax.crypto.be (提供元不明)
    at javax.crypto.ba (提供元不明)
    javax.crypto.bc (提供元不明)
    at javax.crypto.b£0.run (不明なソース)
    at javax.crypto.b.(不明なソース)
    javax.crypto.Mac.getInstance で (不明なソース)

java.security ファイルと、jce ファイルに対応するエントリがすべて問題ないことを確認しました。DMPJVM コマンドを実行すると、次の応答が返されます。

木 6 月 3 日 12:25:34 E
Java 仮想マシン情報 016822/QPGMR/11111
................................................................... ...................................
. クラスパス .
................................................................... ...................................
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
................................................................... ...................................
. ガベージ コレクション。
................................................................... ...................................
ガベージ コレクターのパラメーター
   初期サイズ: 16384 K
   最大サイズ: 240000000 K
現在の値
   ヒープサイズ: 437952 K
   ガベージ コレクション: 58
付加価値
   JIT ヒープ サイズ: 53824 K
   JVM ヒープ サイズ: 55752 K
   最後の GC サイクル時間: 1333 ミリ秒
................................................................... ...................................
. スレッド情報 .
................................................................... ...................................
処理された 4 つのスレッドのうち 4 つのスレッドの情報
スレッド: 00000004 スレッド-0
  TDE: B00380000BAA0000
  スレッドの優先度: 5
  スレッドの状態: 実行中
  スレッドグループ: メイン
  実行可能: java/lang/Thread
 スタック:
    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/be()[B+127 (:0)]
    javax/crypto/ba(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)
 ロック:
    なし
スレッド: 00000007 jitcompilethread
  TDE: B00380000BD58000
  スレッドの優先度: 5
  スレッドの状態: Java 待機
  スレッドグループ: システム
  実行可能: java/lang/Thread
 スタック:
    なし
 ロック:
    なし
スレッド: 00000005 参照ハンドラ
  TDE: B00380000BAAC000
  スレッドの優先度: 10
  スレッドの状態: 待機中
  待機オブジェクト: java/lang/ref/Reference$Lock
  スレッドグループ: システム
  実行可能: java/lang/ref/Reference$ReferenceHandler
 スタック:
    java/lang/Object.wait()V+1 (Object.java:452)
    java/lang/ref/Reference$ReferenceHandler.run()V+47 (Reference.java:169)
 ロック:
    なし
スレッド: 00000006 ファイナライザー
  TDE: B00380000BAB3000
  スレッドの優先度: 8
  スレッドの状態: 待機中
  待機オブジェクト: java/lang/ref/ReferenceQueue$Lock
  スレッドグループ: システム
  実行可能: java/lang/ref/Finalizer$FinalizerThread
 スタック:
    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)
 ロック:
    なし
................................................................... ...................................
. クラスローダー情報。
................................................................... ...................................
0 デフォルトのクラスローダー
1 sun/reflect/DelegatingClassLoader
2 sun/misc/Launcher$ExtClassLoader
................................................................... ...................................
. GC ヒープ情報。
................................................................... ...................................
 ローダー オブジェクト クラス名
 ------ ---------- ----------
 0 1493 [C
 0 2122181 Java/言語/文字列
 0 47 [Ljava/util/Hashtable$ エントリ;
 0 68 [Ljava/言語/オブジェクト;
 0 1016 Java/言語/クラス
 0 31 ジャバ/ユーティリティ/ハッシュマップ
 0 37 ジャバ/ユーティリティ/ハッシュテーブル
 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 ジャバ/ユーティリティ/ベクター
 0 4 Java/ユーティリティ/スタック
 0 3 sun/misc/SoftCache
 0 1 [Ljava/言語/ThreadGroup;
 0 5 [Ljava/io/ObjectStreamField;
 0 1 太陽/反射/ReflectionFactory
 0 7 java/lang/ref/ReferenceQueue$ロック
 0 10 Java/言語/オブジェクト
 0 1 java/lang/String$CaseInsensitiveComparator
 0 1 java/util/Hashtable$EmptyEnumerator
 0 1 java/util/Hashtable$EmptyIterator
 0 33 [Ljava/util/HashMap$ エントリ;
 0 19210 [日]
 0 1 sun/nio/cs/StandardCharsets
 0 5 ジャバ/ユーティリティ/ツリーマップ
 0 1075 java/util/TreeMap$ エントリ
 0 469 [Ljava/言語/文字列;
 0 1 java/lang/StringBuffer
 0 2 java/io/FileInputStream
 0 2 java/io/ファイル出力ストリーム
 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/Sur​​rogate$Parser
 0 3 太陽/その他/信号
 0 1 [Ljava/io/ファイル;
 0 6 ジャバ/io/ファイル
 0 1 Java/ユーティリティ/ビットセット
 0 17 太陽/反射/NativeConstructorAccessorImpl
 0 2 java/net/URLClassLoader$ClassFinder
 0 12 java/util/ArrayList
 0 32 java/io/RandomAccessFile
 0 16 Java/言語/スレッド
 0 1 java/lang/ref/Reference$ReferenceHandler
 0 1 java/lang/ref/Finalizer$FinalizerThread
 0 266 [B
 0 2 java/util/プロパティ
 0 71 java/lang/ref/ファイナライザー
 0 2 com/ibm/nio/cs/DirectEncoder
 0 38 java/lang/reflect/コンストラクター
 0 33 java/util/jar/JarFile
 0 19200 Java/言語/StackOverflowError
 0 5 java/セキュリティ/AccessControlContext
 0 2 [Ljava/言語/スレッド;
 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 [私は
 0 3 java/lang/ClassLoader$NativeLibrary
 0 25 ジャバ/ユーティリティ/ロケール
 0 3 sun/misc/URLClassPath
 0 30 java/util/zip/インフレータ
 0 612 java/util/HashMap$ エントリ
 0 2 java/io/ファイル許可
 0 10 java/io/オブジェクトストリームフィールド
 0 1 java/security/BasicPermissionCollection
 0 2 java/セキュリティ/保護ドメイン
 0 1 java/lang/Integer$1
 0 1 java/lang/ref/Reference$ロック
 0 1 java/lang/Shutdown$Lock
 0 1 Java/言語/ランタイム
 0 36 java/io/ファイル記述子
 0 1 java/lang/Long$1
 0 202 Java/言語/ロング
 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 太陽/その他/安全でない
 0 2 ジャバ/ニオ/バイトオーダー
 0 1 java/io/Os400ファイルシステム
 0 3 Java/言語/ブール
 0 1 Java/言語/ターミネータ$1
 0 23 Java/言語/整数
 0 2 太陽/その他/NativeSignalHandler
 0 1 太陽/その他/Launcher$Factory
 0 1 太陽/その他/ランチャー
 0 53 [Ljava/言語/クラス;
 0 1 java/lang/reflect/ReflectAccess
 0 18 sun/reflect/DelegatingConstructorAccessorImpl
 0 1 sun/net/www/プロトコル/ファイル/ハンドラ
 0 3 ジャバ/ユーティリティ/ハッシュセット
 0 3 太陽/ネット/www/プロトコル/jar/ハンドラー
 0 1 java/util/jar/JavaUtilJarAccessImpl
 0 1 java/net/UnknownContentHandler
 0 2 [Ljava/セキュリティ/プリンシパル;
 0 10 [Ljava/セキュリティ/証明書/証明書;
 0 2 sun/misc/AtomicLongCSImpl
 0 3 sun/reflect/DelegatingMethodAccessorImpl
 0 1 太陽/セキュリティ/ユーティリティ/ByteArrayLexOrder
 0 1 太陽/セキュリティ/ユーティリティ/ByteArrayTagOrder
 0 7 太陽/セキュリティ/x509/CertificateVersion
 0 7 太陽/セキュリティ/x509/CertificateSerialNumber
 0 7 太陽/セキュリティ/x509/シリアル番号
 0 7 太陽/セキュリティ/x509/CertificateAlgorithmId
 0 7 太陽/セキュリティ/x509/CertificateIssuerName
 0 60 日/セキュリティ/x509/RDN
 0 60 [Lsun/セキュリティ/x509/AVA;
 0 67 太陽/セキュリティ/ユーティリティ/DerInputStream
 0 3 [Ljava/数学/BigInteger;
 0 2 com/ibm/nio/cs/コンバーター
 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 ジャバ/ネット/URL
 0 1 sun/misc/Launcher$ExtClassLoader
 0 1 sun/misc/Launcher$AppClassLoader
 0 4 Java/言語/スロー可能
 0 7 java/lang/reflect/メソッド
 0 2 sun/misc/URLClassPath$FileLoader
 0 2 Java/セキュリティ/コードソース
 0 2 Java/セキュリティ/権限
 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/セキュリティ/SecureRandom
 0 2 太陽/セキュリティ/プロバイダー/太陽
 0 1 java/util/jar/JarFile$JarFileEntry
 0 1 java/util/jar/JarVerifier
 0 3 太陽/反映/NativeMethodAccessorImpl
 0 116 太陽/セキュリティ/ユーティリティ/ObjectIdentifier
 0 1 Java/言語/パッケージ
 0 2 [S
 0 104 Java/数学/BigInteger
 0 20 太陽/セキュリティ/x509/AlgorithmId
 0 14 太陽/セキュリティ/x509/X500Name
 0 14 [Lsun/セキュリティ/x509/RDN;
 0 60 太陽/セキュリティ/x509/AVA
 0 67 太陽/セキュリティ/ユーティリティ/DerValue
 0 67 太陽/セキュリティ/ユーティリティ/DerInputBuffer
 0 21 sun/security/x509/AVAキーワード
 0 6 太陽/セキュリティ/x509/X509CertImpl
 0 7 太陽/セキュリティ/x509/X509CertInfo
 0 1 [Lsun/セキュリティ/ユーティリティ/ObjectIdentifier;
 0 1 [[Ljava/言語/バイト;
 0 3 [[B
 0 7 太陽/セキュリティ/プロバイダー/DSAPublicKey
 0 7 太陽/セキュリティ/x509/AuthorityKeyIdentifierExtension
 0 12 [Ljava/言語/バイト;
 0 14 Java/言語/バイト
 0 7 太陽/セキュリティ/x509/CertificateSubjectName
 0 7 太陽/セキュリティ/x509/CertificateX509Key
 0 14 太陽/セキュリティ/x509/KeyIdentifier
 0 4 [Z
 0 5 sun/text/Normalizer$Mode
 0 7 太陽/セキュリティ/x509/CertificateValidity
 0 14 Java/ユーティリティ/日付
 0 7 太陽/セキュリティ/プロバイダー/DSAParameters
 0 7 太陽/セキュリティ/ユーティリティ/BitArray
 0 7 太陽/セキュリティ/x509/CertificateExtensions
 0 7 java/セキュリティ/AlgorithmParameters
 0 7 太陽/セキュリティ/x509/SubjectKeyIdentifierExtension
 0 5 sun/security/x509/BasicConstraintsExtension
 0 2 太陽/セキュリティ/x509/KeyUsageExtension
 0 1 太陽/テキスト/CompactCharArray
 0 1 太陽/テキスト/CompactByteArray
 0 1 太陽/ネット/www/プロトコル/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/クリプト/b$0
 0 1 sun/security/provider/X509Factory
 0 1 太陽/反映/BootstrapConstructorAccessorImpl
 1 1 sun/reflect/GeneratedConstructorAccessor3202134454
 2 1 com/ibm/crypto/provider/IBMJCE
 0 6 java/util/ResourceBundle$LoaderReference
 0 1 [Lsun/セキュリティ/x509/NetscapeCertTypeExtension$MapEntry;
 0 1 com/sun/rsajca/プロバイダ
 0 1 com/ibm/security/cert/IBMCertPath
 0 1 com/ibm/as400/ibmonly/net/ssl/プロバイダー
 0 1 com/ibm/jsse/IBMJSSEProvider
 0 1 com/ibm/security/jgss/IBMJGSSProvider
 0 5 組織/ietf/jgss/Oid
 0 1 java/util/PropertyResourceBundle
 0 7 java/util/ResourceBundle$ResourceCacheKey
 0 2 太陽/ネット/www/プロトコル/jar/URLJarFile
 0 6 太陽/その他/SoftCache$ValueCell
 0 1 Java/ユーティリティ/ランダム
 0 1 java/util/Collections$EmptyMap
 0 112 com/ibm/security/util/ObjectIdentifier
 0 5 java/security/Security$ProviderProperty
 0 1 java/セキュリティ/証明書/CertificateFactory
 0 1 太陽/セキュリティ/プロバイダー/SecureRandom
 0 2 java/security/MessageDigest$デリゲート
 0 2 太陽/セキュリティ/プロバイダー/SHA
 0 1 太陽/ユーティリティ/カレンダー/ZoneInfo
 0 4 com/ibm/security/x509/X500Name
 0 2 [Ljava/セキュリティ/証明書/X509Certificate;
 0 1 sun/reflect/DelegatingClassLoader
 0 1 太陽/セキュリティ/x509/NetscapeCertTypeExtension
 0 7 太陽/セキュリティ/x509/NetscapeCertTypeExtension$MapEntry
 0 3 [[Ljava/言語/文字列;
 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/AVAキーワード
 0 4 javax/セキュリティ/認証/x500/X500プリンシパル
 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/ネット/InetAddress;
 0 2 java/net/InetAddress$キャッシュ
 0 1 java/net/Inet4AddressImpl
 0 3 ジャバ/ネット/Inet4アドレス
 0 2 java/net/InetAddress$CacheEntry
................................................................... ...................................
. グローバル レジストリ情報。
................................................................... ...................................
 ローダー オブジェクト クラス名
 ------ ---------- ----------
 0 23 [C
 0 1017 Java/言語/クラス
 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

誰かが私にアドバイスできますか?

どうもありがとう、プラサンナ

4

1 に答える 1

1

問題は

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

Mac.getInstance()コードは、Os400FileSystem.list()メソッドによって実行されているフォルダー(File.list)を読み取る必要があります。どうやらそのフォルダは大きすぎます。

最初に確認する必要があるのは、マシンがPTFで最新であることです。問題が解決しない場合は、プロセスにメモリを追加して(JAVA / RUNJVAコマンドの引数)、メモリが少し少なすぎるかどうかを確認してください。デフォルトはV5R3からV5R4にインクリメントされました。

于 2010-06-18T09:50:26.893 に答える