2006年5月24日 (水)

Tomcat起動時に「マッピングがない」のエラー

すごく久しぶりに書くなあ。

昨日、struts-configを分割しようと思い、web.xmlのservletのinit-paramに追加した。

本やWebに載っているとおりにしているつもりが、Tomcat起動時に
「struts-config-xxxx.xmlに対するマッピングがありません。」とエラーが出る。
インターネットで調べると、2人ぐらい同じエラーで掲示板に質問を出していたが、
どちらもみんな解決しないままになっていた。
半日以上いろいろやってみたが、夜も遅くなったので帰った。

そして今日、英語のサイトで同じ質問をしている人がいないか調べていたところ、
回答の中にcommons-xxx.jarの話が出ていたのでantのbuild.xmlを
見直していたらふと気がついた(結局commonsのjarは関係なかったが)。
デプロイしているwarにstruts-config-xxxx.xmlが含まれていなかったのだ。

なるほど、そうとわかれば確かにエラーメッセージそのままだけど・・・。

今日こんなに早く気がつくなら昨日はもっと早く帰ればよかった。
いろいろ考えてもだめなときはだいたいだめだ。
最近は技術的にどうしてもうまくいかないことがあっても、
「明日になれば、しょうもないことが原因で解決してるんだろうなー」と
思ってあまり考え込まなくなった。
それはそれでいいことなような気がする。

とにかく、しょうもないミスほど気がつきにくい。
今回は他人がある程度作っているものに追加する形だったから
よけいに気がつかなかった。
まあ、こうやって時間を無駄にしながらいろいろ覚えていけばいいか。

| | コメント (0) | トラックバック (0)

2006年3月 6日 (月)

Linux

この1週間で、Linuxがだいぶ使えるようになった。
丸1日、人が操作するのを見ている機会があり、さらにその次の日、
自分で操作する必要にせまられた。

その前に、Emacsのことも少し勉強していたので
何とかやるべきことはやり終えた。
慣れている人にはなんでもないのだろうが、Windowsしか
触ったことのない人間には、何をするにもLinuxはすごく大変。
常にディレクトリを頭の中で描いておかなきゃいけないので疲れる。

せっかく少し使えるようになったので、早いうちにうちのパソコンの一つに
Linuxを入れたいと思う(ってずっと思ってるんだけど・・・)。

| | コメント (0) | トラックバック (0)

2006年3月 5日 (日)

JMeterでNoSOAPActionエラー

JMeterでSOAP通信のテストを作っていたところ、
Client.NoSOAPActionというAxisFaultが発生。
追加-設定エレメント-HTTPヘッダマネージャで以下のように設定したら正しく動いた。

名前:SOAPAction
値:""

IBMのサイト内の「developerWorks」の「Web services」を見ると、以下のようなことが書かれている。

SOAPを、HTTP要求メソッド POSTと組み合わせて、SOAP HTTP要求を
送信するためには、HTTPに SOAPAction ヘッダー・フィールドを用意する必要がある。
SOAPActionはSOAP要求の意図を指定する。
SOAPActionが空ストリング ("")の場合は、SOAPの意図がホストURI と
同じであることを表す。
(この「意図」という訳語は分かるような分からないような・・・。)
ま、そういうことらしい。感覚派の私としては、これで理解したということで。

ちなみにそのときのエラー内容  ----------------------
(faultstringがおかしくなってるなー)

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http:
//schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
  <soapenv:Fault>
   <faultcode
xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode>

<faultstring>SOAPAction&#x30D8;&#x30C3;&#x30C0;&#x304C;&#x3042;&#x308A;&#x30
7E;&#x305B;&#x3093;! / [en]-(no SOAPAction header!)</faultstring>
   <detail>
    <ns2:hostname
xmlns:ns2="http://xml.apache.org/axis/">1N54-05-003</ns2:hostname>
   </detail>
  </soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>

| | コメント (0) | トラックバック (0)

2006年3月 4日 (土)

AxisでWebサービスを実行するときのクラスパスの設定

AxisでWebサービスを実行するときには、クラスパスの設定が必要。
バッチファイルにしておくと便利。

set AXIS_HOME=c:\axis
set AXIS_LIB=%AXIS_HOME%\lib
set AXISCLASSPATH=%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar;%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar;%AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

| | コメント (0) | トラックバック (0)

2006年2月 1日 (水)

そのまま実行できるjarファイル作成

展開しなくても、ダブルクリックでそのまま実行できるjarファイルの作成方法

マニフェストファイルのMain-Classにクラス名を指定する。
セミコロンの後のスペースも必要だそうです。
Main-Class: SampleClass

そして、作成時のjarコマンドは

jar cfm aaa.jar bbb.mf ccc.class
jar cfm jar名 マニフェスト名 クラス名

このようにして作成したjarファイルをコマンドから実行するときは

java -cp aaa.jar packageA.ccc
java -cp jar名 パッケージ.クラス名

| | コメント (0) | トラックバック (0)

2006年1月25日 (水)

JFileChooserのgetSelectedFile()

今回、Swingで簡単なアプリを作った。
ファイル名入力の項目があったので、「参照」ボタンを置き、
それをクリックするとファイル選択のダイアログが出るようにした。
そのダイアログを出すためのオブジェクトがJFileChooser。

JFileChooserのgetSelectedFile()の戻り値はファイルオブジェクト。
getPath()でファイルのフルパスを取得できる。

            JFileChooser fc = new JFileChooser();

            int selected = fc.showOpenDialog(this);

            if(selected == JFileChooser.APPROVE_OPTION){
                if (cmd.equals("RefIn")) {
                    _textIn.setText(fc.getSelectedFile().getPath());
                } else {
                    _textOut.setText(fc.getSelectedFile().getPath());
                }
            }

| | コメント (0) | トラックバック (0)

2005年12月29日 (木)

Springの定義ファイルのref要素

Springの定義ファイルで、他のBeanを参照するときに

<ref bean="aaa"/>と書くのと
<ref local="aaa"/>と書くのではどう違うのか、
とふと気になって調べてみた。

まず、「local」から想像されるとおり、同じXMLファイル内のBeanの
場合は<ref local=......>が使える。

もう一つの違いは、<ref bean=.....>で参照するときは、
参照するBeanの<bean>要素のid属性またはname属性で参照し、
<ref local=.....>で参照するときは、id属性だけで参照するとのこと。

ふーん。

| | コメント (0) | トラックバック (0)

2005年12月28日 (水)

Javaで文字コードを自動判別

JavaのInputStreamReaderは、文字コードに「JISAutoDetect」を指定すると
文字コードを自動判別しUnicodeに変換してくれる。

★例えば、ファイルAから文字コードを自動判別して読み込む
BufferedReader in = new BufferedReader(new InputStreamReader(
           new FileInputStream("ファイルA"), "JISAutoDetect"));

| | コメント (0) | トラックバック (0)

2005年12月15日 (木)

最近したアホなこと2つ

2週間前、会社の帰りに反対方向の電車に乗ってしまった。
その線は電車によって発車するホームが違う。
間違ったホームへの階段を駆け上がったときにちょうど発車の音楽が鳴り、
あわてて飛び乗ったのが悪かった。

そして、今日の帰り、電車を降りてからバスが来るまでに5分ほど
あったため、バス停の前にあるコンビニで立ち読みをしていたら、
いつの間にかバスが行ってしまっていた。

なんかぼけてるなー。

もっとしっかりしないと。

| | コメント (0) | トラックバック (0)

2005年12月14日 (水)

スキーマでXMLの妥当性検証

スキーマを使ってXMLの妥当性をチェックする方法。
「IBM developerWorks > XML」にあったソースを元にしています。

        final String SCHEMA_LANGUAGE =
                "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
        final String XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
        final String SCHEMA_SOURCE =
                "http://java.sun.com/xml/jaxp/properties/schemaSource";

        File input = new File(filePath);
        File schema = new File("C:/xml/a_schema.xsd");

        org.apache.xerces.jaxp.SAXParserFactoryImpl impl = new
                                        org.apache.xerces.jaxp.SAXParserFactoryImpl();
        impl.setNamespaceAware(true);
        impl.setValidating(true);
        javax.xml.parsers.SAXParser parser = impl.newSAXParser();

        try
        {
            parser.setProperty(SCHEMA_LANGUAGE,XML_SCHEMA);
            parser.setProperty(SCHEMA_SOURCE,schema);
        } catch(SAXNotRecognizedException x) {
            System.err.println("JAXPのバージョンが 1.2 ではない");
        }
        parser.parse(input,new ErrorPrinter());

ピンク色になっている部分は、もともと下記のようになっていた。

      javax.xml.parsers.SAXParserFactory factory =
                   javax.xml.parsers.SAXParserFactory.newInstance();
      factory.setNamespaceAware(true);
      factory.setValidating(true);
      javax.xml.parsers.SAXParser parser = factory.newSAXParser();

これだと、J2SE1.4だとエラーになりcatchにあるメッセージが出る。
なぜならJAXP(Java API for XML Processing)のバージョンが
1.1(Crimson)だからだ。
J2SE5.0プラットフォームだとJAXP1.3(Xerces)である。
今回は、J2SE1.4なのでそのままではダメで、
JBossの方にあるXercesにクラスパスを通し、コードも少し変更した。
ここにたどりつくまでに時間はかかったがこれでうまくいった。

今は仕事が忙しくなく余裕があるので、納得がいくまで調べることができた。
久しぶりに一つのことをじっくり調べて解決できたので満足!

| | コメント (0) | トラックバック (0)

«ループのbreak