• ベストアンサー

java.security.KeyStoreについて

keyStoreファイルをメンテナンスするためのプログラムを引き継いだのですが、このプログラムがビルドできなくて困っています。 (前任者からビルドして使ってね、としか言い残されていないので・・・) プログラムの冒頭部分に以下のような記載があり、矢印をつけた部分でエラーが出てしまいます。 import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.Key; import java.security.KeyStore;  ←ここでビルドエラー import java.security.cert.Certificate; import java.util.Enumeration; エラーメッセージには「型java.security.KeyStoreが見つかりません」と出ていますが、どうすれば解消できるのか検討もつかず、困っています。 同時に渡されたbcprov-jdk14-129.jarになにかありそうなのですが、中には膨大な.classファイルが収められているだけでした。 (bcprov-jdk14-129で検索しても、何も得られなかったので、本当に困っています。) どなたか、お知恵を貸してください。

  • SSMSE
  • お礼率25% (17/67)
  • Java
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • nfonfonfo
  • ベストアンサー率63% (12/19)
回答No.2

1さんと同じく前任者に聞いてみるのが一番だと思います。 前提条件として「bcprov-jdk14-129.jar」はJDK 1.4用のライブラリです。(参考URL参照)コンパイル環境 1.4かどうかまず確認してみてください。 以下 C:\Program Files\Java\jre1.5.0_09を %JAVA_HOME%と呼称 jre1.5.0_0_09という部分はコンパイル時の参照ライブラリのパスです。 以下は推測の回等ですが、参考になれば %JAVA_HOME%\lib\security\java.securityの内容と %JAVA_HOME%\lib\extの内容が食い違っている可能性が高いです。 %JAVA_HOME%\lib\security\java.securityのファイルをメモ帳などで開いてみて、security.provider.1=からsecurity.provider.6=という部分に org.bouncycastle.jce.provider.BouncyCastleProviderという文がなければこの回答以降の文の内容は無視してください。 ある場合は%JAVA_HOME%\lib\extにbcprov-jdk14-129.jarをそのまま(解凍せずに)コピーしてください。その後、コンパイラを再起動してください。 「bcprov-jdk14-129.jar」というのはフリーの「Bouncy Castle」というライブラリです。 「bcprov」で検索してみてください。

参考URL:
http://www.bouncycastle.org/latest_releases.html
SSMSE
質問者

お礼

ご回答有難うございました。 前任者に詳しく話を聞いてみたところ、 ・Eclipseで開発を行った   (私の環境にはそもそもJDKがなかった。なんとなくビルドできたかのように見えたのは、どうやらVisualStudia.NETのJ#のせいらしい。) ・nfonfonfoさんの仰るような設定が必要   (EclipseはJDKでなくJREのライブラリやjava.securityをみるので、こっちをさわる必要がある) ということが判明しました。 お騒がせしましたが、java.securityの設定方法やBouncy Castleを置いているサイトを教えていただけたおかげで、スムーズに設定作業ができました。 有難うございました。

その他の回答 (1)

回答No.1

前任者に確認してみるのが1番ではないでしょうか。 java.security.KeyStoreのJavaDocを見ると、導入されたのが1.2とのことなので、質問者様の環境のJavaのバージョンが1.2以前になっていませんか? bcprov-jdk14-129.jarを解凍した中(jarはzip形式)にjava.security.KeyStoreはありませんか? (でもJavaの標準APIなので関係なさそうですが…)

SSMSE
質問者

お礼

ご回答有難うございました。 やっと前任者に連絡がつき、詳細を確認することができました。 どうやら、私の環境にそもそもJDKがなかったためにjava.security.KeyStoreがみつからない、という現象が起きていたようです。(それでも途中までビルドできたのは、どうやらVisualStudio.NETのJ#のせいのようです。) なまじ中途半端にビルドできてしまったせいで、おおもとの原因がわからなくなっていました。 お騒がせして申し訳ありませんでした。

関連するQ&A

  • Javaのシリアライズについて質問です。

    Javaのシリアライズについて質問です。 以下の二つのコードで実行すると、ちゃんとシリアライズされたデータが生成されるのですが このコードでは実行するたびにデータが上書きされてしまいます。 これを実行するたびに新しいデータを最後尾に追加するような形にしたいのですがどのようにすればいいのでしょうか? よろしくお願いします。 ------------------------------------------------------------------------------- import java.io.FileOutputStream; import java.io.ObjectOutputStream; import java.io.FileInputStream; import java.io.ObjectInputStream; public class Main { public static void main(String[] args) { Data data = new Data(); data.setName("testtesttest"); try { FileOutputStream outFile = new FileOutputStream("data.txt"); ObjectOutputStream out = new ObjectOutputStream(outFile); out.writeObject(data); out.close(); outFile.close(); } catch(Exception ex) { ex.printStackTrace(); } } } ----------------------------------------------------------------------------------- import java.io.Serializable; public class Data implements Serializable { private String name = ""; public void setName( String NameData ) { name = NameData; } } -----------------------------------------------------------------------------------

    • ベストアンサー
    • Java
  • 固定長データのbyteスキップについて

    バイナリ入出力でご質問がございます。 下記の例のように各レコードにある 先頭5byte付与されたデータを スキップ(破棄)して 各レコード10byteずつ読み込みたいのですが なにかサンプルデータもしくは アドバイス頂けないでしょうか? どうぞよろしくお願い致します。 例 1レコード 10byte (先頭5byte付与) LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 LLLLL1234567890 ↓ 1234567890 1234567890 1234567890 1234567890 1234567890 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • レコード長からのbyteスキップ設定について

    QNo.8229324から あらたに新規でご質問させて頂きます。 1レコードごとに10byteあったとします。 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 レコード長からスキップ設定を35byteと設定したとします。 40byteごとに頭の付与された5byteをスキップさせたいのですが なにかサンプル及びアドバイス頂けますでしょうか? 仕様案 (1)まずはレコード先端の5byteをスキップ (2)次は35byteを超えた時点で5byteスキップを繰り返し。 どうぞ宜しくお願い致します。 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.io.ByteArrayOutputStream; public class dat{ public static void main(String[] args) { String inputFileName = ""; String outputFileName = ""; // ファイルオブジェクトの生成 File inputFile = new File(inputFileName); File outputFile = new File(outputFileName); try { FileInputStream fis = new FileInputStream(inputFile); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(outputFile); BufferedOutputStream bos = new BufferedOutputStream(fos); byte[] buf = new byte[17]; int len = 0; while ((len = bis.read(buf, 0, 17)) == 17) { bos.write(buf, 0, 17); } bos.flush(); bos.close(); bis.close(); } catch(Exception e) { e.printStackTrace(); } }

    • ベストアンサー
    • Java
  • オブジェクトのシリアル化について

    serializableを使ってオブジェクトの入出力を2つのファイルで行ないたいのですが、出力の部分が分からなくて困っています。どなたか教えてください。プログラムは下のように書いてみました。 シリアル化のプログラム import java.io.*; public class serialin implements Serializable { public static void main(String[] args) throws Exception { //シリアル化して書き出す FileOutputStream fs = new FileOutputStream("output"); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject("Hello"); os.close(); } } ------------------------------------------------- 復元のプログラム import java.io.*; public class serialout { public static void main(String[] args) throws Exception { //シリアル化ストリームを読み込んでオブジェクトを復元 FileInputStream fs = new FileInputStream("output"); ObjectInputStream os = new ObjectInputStream(fs); } }

    • ベストアンサー
    • Java
  • ストリームの問題について【至急】

    import java.io.*; public class FileStreamDemo { public static void main(String[] args){ try{ byte[] buffer=new byte[1024]; FileInputStream fileInputStream= new FileInputStream(new File(args[0])); FileOutputStream fileOutputStream= new FileOutputStream(new File(args[1])); System.out.println("コピーファイル: "+fileInputStream.available()+"バイト"); while(true){ if(fileInputStream.available()<1024){ int remain=-1; while((remain=fileInputStream.read())!=-1){ fileOutputStream.write(remain); } break; } else{ fileInputStream.read(buffer); fileOutputStream.write(buffer); } } fileInputStream.close(); fileOutputStream.close(); System.out.println("コピー完了"); } catch(ArrayIndexOutOfBoundsException e){ System.out.println( "using:java FileStreamDemo src des"); e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } } } JAVAの入門者です。 JAVAの教科書に書いてあるように、上のプログラムを書きましたけど… コンパイルすると、エラーメッセージが出て来ます。 エラー中身は下記のとおりです。 【using:java FileStreamDemo src des java.lang.ArrayIndexOutOfBoundsException: 0 at FileStreamDemo.main(FileStreamDemo.java:8) 】 どうすればいいのか悩んでいます。 誰か、助けていただけないのでしょうか?どこか間違ってるか、教えてください。 よろしく、お願いします。

  • javaのエラーについて

    javaを使って、ファイルの場所が書いてある、テキストファイルからファイルを読み取って解析するコードを書いたのですが、何行か作業をすると、エラーがでます。 ファイル名に半角カナや顔文字の類が入っているためエラーが起こっていると思います。 ただ、残念ながら、ファイル名を変更することができないため、読めるファイルだけでも読みたいのですが、下記のエラーがでて前に進めません。なんとか、エラーをスキップして作業を進めたいのですが、よい方法はないでしょうか?よろしくお願いいたします。 エラーメッセージ Exception in thread "main"java.io.FileNotFoundException :c:\ファイル名.txt( ファイル名、ディレクトリ名、またはボリューjム ラベルの構文が間違っています。) at java.io.FileInputSteam.open(Nativa Method) at java.io.FileInputStream.<init>(Unknown Source) at java.io.FileInputStream.<init>(Unknown Source) at Test.main(Test.java:17) 17行目と18行目のコードです InputStream is = new FileInputStream(link); BufferedReader br = new BufferedReader(new InputStreamReader(is, "JISAutoDetect")); linkというところに、C:\ファイル名.txtを読み込ませています。しかしながら、多分、この「ファイル名」が半角やら、顔文字やらでうまく読み込めていないと思います。

    • ベストアンサー
    • Java
  • NTEmacsでJavaのコンパイルをしたいです

    NTEmacsのシェルです。 Javaの勉強をつい最近始めました。JDKは入っていて、普段はjavac、javaは普通に動くのですが、import java.io.*;のようなことをすると、(パーケージを読みこませる等)その部分でエラーになってしまいます。 ただ、eclipseで同様のものを作ると、コンパイルはうまくいきます。 例 import java.io.*; class Sample4{ public static void main(String[] args) throws Exception { System.out.println("please imput something"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str); } } 結果 c:\Users\***\Documents\Java>javac no_3.java javac no_3.java no_3.java:33: エラー: class、interfaceまたはenumがありません import java.io.*; ^ エラー1個

    • ベストアンサー
    • Java
  • ObjectInputStreamとStreamCorruptedExceptionについて

    このようなソースがあり ------------------------------------------------- import java.io.File; import java.io.FileInputStream; import java.io.ObjectOutputStream; import java.io.ObjectInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.BufferedInputStream; import java.io.Serializable; import java.io.ByteArrayInputStream; public class TTT{ public static void main( String[] args ){ try{ FileInputStream fis = new FileInputStream( "C:\\aa\\ddd.txt" ); //FileInputStream fis = new FileInputStream( "C:\\aa\\aa.jpg" ); ObjectInputStream ois = new ObjectInputStream( fis ); }catch( Exception w ){ w.printStackTrace(); } } } ------------------------------------------------- これをコンパイルをかけて実行すると java.io.StreamCorruptedException: invalid stream header at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:737) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:253) at TTT.main(TTT.java:24) となってしまいます。 読み込むファイルをコメント部分の画像ファイルに 変えてみても同様です。 StreamCorruptedExceptionの内容はJAVAのAPIドキュメントでは読み込まれた制御情報が、内部整合検査に違反した場合にスローされると説明がありますがこれはどういう意味でしょうか? また正しく実行させるにはどのようにすればいいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • javaでCSVの中身から最大値を表示したい

    タイトルの通りなのですが、javaのプログラムでCSVの中の少数を読み込み、そこから最大値を表示したいのです。 CSVの中身は 10.1,20.2,30.3,40.4,50.4 100.1,200.2,300.3,400.4 という半角の少数がカンマで区切られた状態になっています。 import java.util.Scanner; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class test { public static void main(String args[]) throws NumberFormatException, IOException{ System.out.println("csvのファイル名を入力"); Scanner sc = new Scanner(System.in); String str = sc.next(); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(str))); String line; while((line=br.readLine())!=null){ String[] sp = line.split(","); double sum=0;//合計値格納用 for(int i=0;i<sp.length;i++){ sum += Double.parseDouble(sp[i]); } System.out.println(line+"の合計値は"+sum); } br.close(); } } 上記のプログラムは、CSVの中身の各行の合計値を算出するもので、これを元に各行の最大値を算出したいのですが、どうしても比較演算子を使用しての算出がうまくいきません。 どなたかプログラムに詳しい方がいましたら、ご教授いただけると助かります。 つたない文章ですがよろしくお願いします。

    • ベストアンサー
    • Java
  • javaプログラムのimportについて

    Javaプログラムでサンプルプログラムを実行したいのですが、 com.sun.xml.parser.Resolver;とcom.sun.xml.tree.XmlDocument; をimportするところでエラーがでてしまいます。 javaのビルド・パスで、JARファイルを追加しようと考えております が、上記の2つを含むJARファイルが置いてあるサイト(URL)が 分かりません。どうか教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java