Java
$("#foo").text("${var}"); の場合、「${var}」に含まれるXMLエンティティはエスケープしなくていいとしても「"」や「'」は「\」でエスケープしないとJavaScript的にダメなんでは、と思ったらVelocityにちゃんと機能が用意されていましたよ、と。XMLエンティ…
プロパティ「"eventhandler.referenceinsertion.class"」と「"eventhandler.escape.html.match"」を設定することで、埋め込み文字列内のXMLエンティティのエスケープ(「<>&」→「<>&」)を行なってくれます。 デフォルトは何もしないので、明示的に設定する必…
Class.getField()は親のstatic変数も探索します。例えば、以下のコードを実行すると、 Child.B,Child.C,Parent.Aには値が設定される。 Parent.Bは初期化されない。 Child.Bが先に見つかるのでそちらが返されてしまうため。 という結果になります。 public st…
なんだ、findはあるのか。 > Google Collections import static com.google.common.collect.Iterables.*; import static com.google.common.collect.Sets.*; import static com.google.common.base.Predicates.*; ... // セット Set<String> set = newHashSet("aaa",</string>…
Google Collectionsを使ったmapとinjectを作ってみました。 @SuppressWarnings("unchecked") static <IN, OUT, X extends Collection<OUT>> X map( Collection<IN> collection, Function<IN,OUT> f ) { try { X out = (X) collection.getClass().newInstance(); for ( IN i : collection ) out.add( f.apply(</in,out></in></in,>…
Google Collectionsなるものを発見。APIを眺めていて、Sets.filterユーティリティが個人的にちょいぐっときたのでサンプルを書いてみました。 import static com.google.common.base.Predicates.*; import static com.google.common.collect.Sets.*; .... //…
JSPとか使ったことないからわかんないよー。今日はまったのは以下のエラー。Tomcatは起動するのだがjspを実行すると発生する。 2009-09-17,12:39:05,JST ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/xxxx].[jsp]] (tomcat-http…
"ja"や"en"などをキーとして各言語に対応する文字列を格納するMapがあって、そこから指定されたロケールにマッチする文字列を取り出して使う、ということなのだけど、ResourceBundleの取得先特定ってvariantとかも考慮してたよなー。一応その辺と仕様をあわ…
次はVelocityなのです。ということで、とりあえずHello World!的なものを書いてみました。 // Velocityを初期化 Velocity.init(); // テンプレートに渡す値を保持するコンテキストオブジェクトを作成 VelocityContext context = new VelocityContext(); cont…
「ロックしてから処理をする機構を、タイプセーフな感じで」ということで、処理のインターフェイスとロツクメソッドを定義してみたわけですが。 /** * 処理 * @param <X> 戻り値の型 * @param <E1> 例外の型1 * @param <E2> 例外の型2 * @param <E3> 例外の型3 * @param <E4> 例</e4></e3></e2></e1></x>…
この前作ったTupleですが、TrioとかQuartetを使っていると、型パラメータが長くなってしまって鬱陶しい時があります。 List<Trio<String,Number,String>> kittens = new ArrayList<Trio<String,Number,String>>(); kittens.add( new Trio<String,Number,String>( "mii", 1, "mike" ) ); kittens.add( new Trio<String,Number,String>( "kuro", 0, "egyptian" ) );</string,number,string></string,number,string></trio<string,number,string></trio<string,number,string>…
PushbackReaderを使うと、Readerで読み込んだ文字を再度Readerに戻す(読まなかったことにする)ことができます。以下は簡単な利用例。連続する文字を1つにまとめつつ、出力します。 // PushbackReader を作成 PushbackReader reader = new PushbackReader( ne…
Google App Engine上でも普通に使えましたよ > Google GuiceのAOP。ということで、動作確認に使った簡単なサーブレットを公開してみます。 import java.io.IOException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReque…
Google App EngineのURLフェッチ機能では、HttpURLConnectionが普通に使える訳ですが、Basic認証が必要なサイトにアクセスしたいと思って以下のように書いてデプロイしたら実行時エラーに。 static { Authenticator.setDefault( new Authenticator(){ @Overr…
以下のような書き方が個人的に流行中。 String[] strs = // 略 // 配列がnullでなければ各要素に対して処理を実行 if ( strs != null ) for ( String str : strs ) { // 処理 } forで列挙する対象がMap.Entryとかになると、Genericsもあって行がすぐに長くな…
RubyクラスをJSONでアクセスできるWebサービス化するJSONBrokerのJava版クライアントを書いてみました。 サンプル 以下はクライアントを使ってjijiにアクセスし、レート情報を取得するサンプルです。 /** * レート情報を提供するサービス */ static interfac…
タプルを書いてみた。 import static java.util.Arrays.deepEquals; import static java.util.Arrays.deepHashCode; /** * タプル */ public class Tuple { /** * ペア * * @param <A> Aの型 * @param <B> Bの型 */ public static class Pair<A,B> { private final A a;</a,b></b></a>…
Locatorから取得できます。 XMLFilterImpl#setDocumentLocator()をオーバーライドしておくとLocatorが渡されてくるので、 必要なタイミンクでLocator#getLinenumber()を呼び出して、行番号を取得すればOK 以下は、各要素の行番号とカラム番号を出力するサン…
LinkedHashMapを使うとFIFO方式のキャッシュがさくっと作成できます。新しいエントリが追加されるたびに呼び出されるremoveEldestEntry()をオーバーライドして、削除するかどうかの判定処理を書くだけでOK。 public static void main( String[] args ) { // …
JSONICを使うと、任意のJavaBeanをJSONにさくっと変換できます。 // テスト用クラス static final class Kitten { private String name; private int age; public Kitten() {} public Kitten( String name, int age ) { this.name = name; this.age = age; }…
軽量サーブレットコンテナ「Winstone」を使って、jspをさくっと動かすための環境を構築する手順のメモです。 ※[http //winstone.sourceforge.net/:title=Winstone]とは:サーブレットコンテナの一種。300kくらいの1つのファイルでHTTPサーバー、サーブレット…
JAX-RSの実装であるJaersyでは、アノテーションを付与したサービスクラスを自動で探索して、デプロイしてくれます。マッピングを指定するわけでもなく、もちろん「META-INF/services/...」とかも不要。んー、内部実装はどうなってるんだろー、気になるー!、…
JAX-RSを使うとRESTFullなWebサービスがさくっと作成できるらしい。ということで試してみました。 概要 Webサービスを公開するまでの手順は以下の通りです。 JAX-RSの実装(Jersey)をダウンロード Webサービスとするクラスを書いて、アノテーションを付ける。…
ITPro -「Java SE 6完全攻略」第81回 JAX-WS その1より。Java 6 から標準添付になったJAX-WSを使うと任意のJavaクラスをさくっとWebサービスにして公開できるらしい。ということで試してみました。 概要 公開までの手順は以下の通り。 Webサービスとするクラ…
Javaのif文は「文」なので値を返しません。条件を評価した結果に応じて値を返す「式」を作るには三項演算子を使いますが、「これがどうしても気に食わん!」という奇特な人のために(いるのか?)、こうすればifを「式」にして関数の引数にぶちこんだりできるよ!…
昔書いたコードを発見。interface内でどうしてもstaticブロックが使いたかったようだ。 public interface Foo { ...略 /** 必要なシステムプロパティを設定。*/ Object INIT = new Object(){{ System.setProperty( "foo", "var" ); }}; } 我ながら、一瞬何が…
癒しを求めてSVNリポジトリを徘徊していたら、昔書いた懐かしいコードを発見したので公開してみます。 任意の処理を実行し、 処理の戻り値または例外を評価して、リトライする必要がある場合、 指定された回数だけ再試行する ための、ユーティリティです。 /…
配列だとtoString()とかできないので、(これも原罪というやつか) String[] strs = new String[]{ "a", "b", "c" }; System.out.println( strs != null ? Arrays.asList( strs ) : "null" ); とかいう感じで書いていたのだけど、Arrays.deepToString()とかあ…
↓のようなコードがたくさんあって、 int result = 0; result = <処理1>; if( result != 0 ) { return result; } // end if result = <処理2>; if( result != 0 ) { return result; } // end if result = <処理3>; if( result != 0 ) { return result; } // e…
System.exit()が好きなコードですが、案の定、必要な後始末をせずにSystem.exit()してるじゃないか!と思ったら、ShutdownHookが仕込まれていた。 Runtime.getRuntime().addShutdownHook( new Thread() { public void run() { System.out.println("x"); } });…