Lunatic Sol

IT Tips

Java デコンパイラー

2009-07-14 11:52:27 | Java
以前は DJ Java Decompiler というものを使ってましたが、シェアウェアになってしまいました。

DJ Java Decompiler

なので、別のを探してみたところ、JD-Core / JD-GUI / JD-Eclipse というラインナップの Java Decompiler を発見。

Java Decompiler

Eclipse は常に起動しないので、JD-GUI にしましたが、使いやすいです。インストールも不要ですし、便利。

native2ascii

2007-02-04 22:55:21 | Java
プロパティファイルを Encode するのに native2ascii を使いますが、元に戻したり、任意のエンコードタイプから変換したりするためのオプションがあります。以下のサイトが便利だったので、メモメモ

http://takeoba.cool.ne.jp/java/native2ascii.htm

以下は代表的?なもの。

-reverse : エンコードされたものを戻す場合
-encoding <エンコード> : 日本語 Win で SJIS 以外から変換したい場合に指定

Tomcat 5.5 インストール後に Java 5 をインストールした場合

2006-08-17 16:57:35 | Java
Tomcat 5.5 は Java 5 が基本的に必要な環境になります。例外的に設定を加えることで Java 1.4 でも実行は可能ですが。

で、先に Tomcat 5.5 をインストールしてしまうと、その後で Java 5 をインストールしても、Tomcat 5.5 は Java 5 じゃないとエラーを出し続けて起動しません。

原因は Registry の Jvm キーです。

HKLM\Software\Apache Software foundation\Procrun 2.0 あたりの下にある Jvm にある jvm.dll までのパスを JRE 5 のものに変えてあげれば解決します。

Notes/Domino に実装された JRE で java -version

2005-02-18 13:31:12 | Java
Notes/Domino には Java の実行環境 (JRE) が実装されており、R5.x は Java 1.1.8、6.x は 1.3.1 が含まれているようです。次期リリースの 7.x では 1.4.2 レベルだそうです。

しかしながら具体的なバージョン、ベンダーが不明だったりします。それを調べるためのサンプル Java エージェントです。J2SE の java -version と同等の内容が出力されるようにしてあります。

■ 出力サンプル
==========================
Notes/Domino Build V70_M4_01112005 Beta 3|January 11, 2005
Windows XP (5.1)

java -version
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2)
Classic VM (build 1.4.2, J2RE 1.4.2 IBM Windows 32 build cn1420-20040626 (JIT disabled))
==========================


このエージェントを LotusScript の NotesAgent クラス、Run メソッドや RunOnServer メソッドで実行することで Notes クライアント、および Domino サーバーの JRE を確認できます。java -version で表示されるものと同等にしています。

尚、このエージェントをサーバー上で実行するには制限なしの権限が必要ですのでサーバー文書のセキュリティとエージェントプロパティのセキュリティでの権限設定が必要です。

■ Java エージェント

import lotus.domino.*;

public class JavaAgent extends AgentBase {

  public void NotesMain() {

    try {
      Session session = getSession();
      AgentContext agentContext = session.getAgentContext();

      String notesVersion = session.getNotesVersion();
      String osName = System.getProperty("os.name");
      String osVersion = System.getProperty("os.version");

      String javaVersion = System.getProperty("java.version");
      String runtimeName = System.getProperty("java.runtime.name");
      String runtimeVersion = System.getProperty("java.runtime.version");
      String vmName = System.getProperty("java.vm.name");
      String vmVersion = System.getProperty("java.vm.version");
      String vmInfo = System.getProperty("java.vm.info");


      System.out.println("==========================");
      System.out.println("Notes/Domino " + notesVersion);
      System.out.println(osName + " (" + osVersion + ")");
      System.out.println(" ");
      System.out.println("java -version");
      System.out.println("java version \\"" + javaVersion + "\\"");
      System.out.println(runtimeName + " (build " + runtimeVersion + ")");
      System.out.println(vmName + " (build " + vmVersion + ", " + vmInfo + ")");
      System.out.println("==========================");

    } catch(Exception e) {
      e.printStackTrace();
    }
  }
}

10進/16進 HTML Unicode にエンコード

2004-06-01 12:40:00 | Java
最近 LotusScript ネタがあまりなくて書いていませんでしたが、Java の勉強もしなくてはいけないのでせっかくなのでひとつ書いてみました。HTML Unicode を返すスタティックメソッドを含んだ SxString クラスです。まだ Java は修行中の身なのでエラー処理とか、また Unicode に変換させる必要のない文字も対象にしてしまっていたり、いろいろ気になる点はあるかもしれませんが、まぁそこはご愛嬌。10進数と16進数の HTML Unicode を返すクラスファイルがあるだけでも便利でしょ。

使い方は簡単。SxString.java をコンパイルした SxString.class ファイルを準備し、自分のクラスファイルの中で以下のような構文で呼び出してあげれば String クラス型の値を戻します。

String uHtml = SxString.toUnicodeHTMLHex(str);
toUnicodeHTMLDec(String s) と toUnicodeHTMLHex(String s) という二つの public static method があります。前者は10進数 HTML Unicode を返して、後者は16進数で返します。当初 toUnicodeHTML(String s, int radix) を public にしていましたが、2つめの radix のエラー処理を含めるよりはラッパーを作ってしまった方が間違えないなということで toUnicodeHTML() は private にして Wrapper を public にするように形を変えてみました。
public class SxString {
    public static String toUnicodeHTMLDec(String s) {
        return toUnicodeHTML(s, 10);
    }
    
    public static String toUnicodeHTMLHex(String s) {
        return toUnicodeHTML(s, 16);
    }
    
    private static String toUnicodeHTML(String s, int radix){
        StringBuffer sb = new StringBuffer("");
        char ch[] = s.toCharArray();
        for(int i=0; i<ch.length; i++) {
            if (Character.getNumericValue(ch[i]) >= 1) {
                sb.append(ch[i]);
            } else if (Character.isWhitespace(ch[i])) {
                sb.append(ch[i]);
            } else {
                sb.append("&#");
                if (radix == 16) sb.append("x");
                sb.append(Integer.toString(ch[i],radix) + ";");
            }
        }
        return sb.toString();
    }
}