Java

Jerseyで@RolesAllowedアノテーションを使った認可の設定

JAX-RSでは、権限のあるユーザのみリソースにアクセスすることを可能にするために、アノテーションによる宣言型の記述とプログラマティックな処理をのためのAPIがあります。アノテーションを使う場合には、特定のロールを持つユーザのみ許可するのであれば、…

JAX-RS (Jersey) でパラメータとして独自のクラスをインジェクトする (2)

このエントリの続きです。パラメータが多い場合には、対応するメソッドの引数が増えてしまうので、引数をDTOにまとめたいという話です。 例えば、id, foo, bar, bazという引数があるメッソッドで、これらの引数を以下のようなDTOにしてクエリパラメータやパ…

JJUG CCC 2011 fall 行ってきた

すごい今更ですけど、10/17にJJUG CCC 2011 fall に行ってきました。基調講演の途中から参加しました。会場の国立オリンピック記念青少年総合センター初めて行ったので迷ってしまった。。 G-2 基調講演 JavaOne報告会 Part.2 JavaOne 2011 Report View more …

Jerseyでアップロードされたファイルを処理する

サーバーサイド Jerseyでマルチパート(multipart/form-data)によりアップロードされたファイルを処理するためには、jersey-multipartというモジュールを使用します。 pom.xmlのdependencyにjersey-multipartを追加します。 <dependencies> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version></version></dependency></dependencies>…

JerseyでJSONシリアライズ対象外のプロパティを指定する (2)

JerseyでJSONシリアライズ対象外のプロパティを指定する (1) こちらの続きです。JAX-RS(Jersey)でJavaオブジェクトをJSON形式に変換する際に、@XmlTransientをつけて対象外のプロパティを指定しましたが、今回はJacksonMixInAnnotationsを使用する方法を試し…

Selenium 2でChromeDriverを使う

WebアプリケーションのテストにSeleniumを使っていますが、少し前になりますがSelenium 2が正式にリリースされたので試しています。Selenium 2は、WebDriverベースとなりアーキテクチャ的にも大きく変更されています。Selenium RCで使用していたSeleniumServ…

IEでのみブラウザ内でPDFファイルを表示できない場合

Content-TypeもContent-Dispositionの設定も問題ないはずなのにIEでのみ、PDFファイルのブラウザ内での表示ができずにダウンロードダイアログが表示されてしまう。 レスポンスヘッダのContent-Typeにいつの間にかcharsetが付加されていることが原因でした。 …

HttpServiceとWAB(Web Application Bundle)

GlassfishでWebアプリケーションからOSGiバンドルを利用する 前回のサンプルでは、Webアプリケーション自体はwarとしてディプロイし、依存するサービスをOSGiバンドルとしてディプロイして@Resourceでインジェクションしていました。今回は、アプリケーショ…

Javaでtarファイルを操作する

Javaでtarファイルを操作する場合には、Commons Compressを使用するのが簡単そうです。Commons Compresは他にもbzip2やgzipにも対応しています。サイトのサンプルとJavadocを見ればだいたいの使い方はわかると思いますが。 File[] filesToArchive = {file1, …

JavaからWindowsのレジストリにアクセスするライブラリ

JavaからWindowsのレジストリにアクセスするライブラリについて調査したのでまとめておきます。いくつかのライブラリがありますが、基本的にはJNI経由でWin32 APIを呼び出しています。 Roxes Win32 for Java (Orangevolt Ant Tasksの一部) JRegistry SWT(Ecl…

Build Number Maven Pluginを使う

Build Number Maven Pluginを使うと、pom.xmlでプロパティとしてSCMのリビジョン番号${buildNumber}を使用できるようになります。 前提 内部的にsvnコマンドを実行するのでsubversionのバイナリがインストールされている必要があります。TortoiseSVN不可です…

MavenでWindows(x86 or x86_64)によってプロファイルを切り替える

具体的には、GUIにSWTを使っているJavaのデスクトップアプリケーションで、プラッtフォームによってSWTのjarを変更したいというシチュエーションです。SWTのjarファイルには、それぞれのプラットフォーム用のDLL(Windowsの場合)が含まれているので、x86 or x…

JAX-RS (Jersey) でパラメータとして独自のクラスをインジェクトする (1)

@QueryParamアノテーションで、パラメータをインジェクトすることができますが(パラメータに含まれない場合はnullになる)、パラメータがあまりに多いとメソッドシグネチャが見にくくなり、値をBeanにコピーしたりするのも面倒です。このような場合には、、 @…

JerseyのJSONサポート

引き続きJerseyについて調査しています。JerseyでレスポンスとしてJavaのオブジェクトをJSONに変換する場合には、いくつか方法があります。 POJOを直接変換する JAXB経由で変換する JSONObjectを生成する Jersey 1.5 User Guide - Chapter 5. JSON Support …

JAX-RS(Jersey)を使ってみる

JaveEE6に対応しているGlassfish 3.0を使う方が手っ取り早いとは思いますが、、サーブレットコンテナとしてTomcat6.0を使った環境でJAX-RSを使ってみます。 JAX-RSの実装としては、JavaによるRESTfulシステム構築では、Jersey, Apache CXF, JBoss RESTEasyな…

Maven Antrun pluginを使う

S2JDBC-GenのAntタスクを実行するためにMaven Antrun Pluginを使いました。Maven Antrun plugin自体は、これまでも使っていたのですが、普段はMavenの特定のビルドフェーズでAntタスクを実行するために使っていたので、ビルドフェーズに関係なくAntタスクの…

Windowsのサービスとして実行しているTomcatのダンプファイルが作成される場所

実際に確認したことがなかったので試してみました。Windowsのサービスとして実行しているTomcatのJVMが落ちたとき、ダンプファイル(hs_err_pid****.log)はどこにできるのか?? → Tomcatフォルダ直下でした。通常java.exeを実行した際には、カレントディレ…

JSTLでプロパティが存在するかを取得する

ひさびさにJSPを使いました。javascriptでいうところのがundefinedかどうかを調べたいということです。例えばrequestスコープにuserというキーでオブジェクトが格納されている場合に、adminというプロパティが存在しないことがある場合には(あまりこういう…

mime-utilでファイルのMIME Typeを判別する

mime-utilというライブラリを使うと、ファイルの内容からMIME Typeを判別することができます。 MimeUtil.registerMimeDetector("eu.medsea.mimeutil.detector.MagicMimeMimeDetector"); Collection mimeTypes = MimeUtil.getMimeTypes("foo.pdf"); registerM…

C#からJAX-WSのWebサービスにアクセスしてみる

C#からJAX-WSのWebサービスへのアクセスを試してみます。Windows系の開発はずいぶんご無沙汰なのですっかり忘れているのですが。。まず開発ツールのインストールから。以下のサイトから無償版のVisual C#用をインストールしました。いつの間にかExpressエデ…

JAX-WSでの例外

JAX-WSを使用したWebサービスでサーバ側で例外を投げる場合にはどうすべきなのか試してみました。とりあえず、JavaのコードからWSDLを自動生成してWebサービスを構築した場合(ボトムアップアプローチ?)で試します。JAX-WSやWSDLの仕様を読むべきだと思い…

Tomcat+JAX-WSでWebサービス

JAX-WSを使ったWebサービスを構築するのであれば、標準でJAX-WSをサポートしているGlassfishを使うのが手っ取り早いのですが、今回は既存のプロジェクトへの追加なのでTomcat6+Eclipseを使います。Java環境はJava6です。JAX-WSの実装は、今回はMetro(JAX-WS …

Eclipse(+m2eclipse)でWTPプロジェクトを作成する

Eclipseで動的Webプロジェクト(WTP)を作成するとMavenとことなるディレクトリ構成になるし、m2eclipseを使ってMavenプロジェクトで作成するとWTPが有効にならないしと悩んでいたのですが、、m2eclipseのWTP用Maven統合プラグインを追加する必要がありました…

HtmlUnitを使ってファイルダウンロードのテストをする

SeleniumだとExcelやCSVなどのファイルをダウンロードさせるページのテストで、ダウンロードしたファイルの内容を検証することは難しいですが、HtmlUnitを使えばできます。ファイルのダウンロードというのは、Content-Disposition:attachmentヘッダを返すよ…

Maven経由で実行されるテストにシステムプロパティを渡す

Maven 2.1.0 not passing on system properties to Java virtual machine - Stack Overflow MavenのSurefire plug-inからJUnitのテストケースを実行する際にシステムプロパティを渡す方法です。システムプロパティは以下のようなコードで取得できます。 Syst…

UACの権限昇格ダイアログ

Webアプリケーションの開発を行っているとあまり意識しないのですが、既存のスタンドアロンのJavaプログラムをWindows 7にて動作検証する必要があり、ユーザアカウント制御(UAC)について調査しました。普段はWindows XPを使用しているのでUACに馴染みがなく…

Windowsのバージョンの取得

System.getProperty("os.name"); System.getProperty("os.version"); というコードで取得できるWindowsのOS名とバージョンがどんな感じになるのか、手近にあったPCで試してみました。 OS os.name os.version Windows 2000 Server SP4 Windows 2000 5.0 Windo…

Google Calendar API(2)

Google Calendar API(1) この前は、単に公開カレンダーのフィードを取得するだけだったので、今回はもう少し条件を絞り込んでフィードを取得したいと思います。GoogleのドキュメントではこのページにカレンダーAPIのパラメータについての情報があります。 AP…

RFC1123形式の日付のパース

HTTPヘッダのLast-Modifiedフィールドに設定されて日付をパースする方法のメモです。 DateFormat df = new SimpleDateFormat("EEE, dd MMM yyyy hh:mm:ss zzz", java.util.Locale.US); Date date = df.parse("Fri, 22 May 2009 00:00:00 GMT"); 注意点として…

URLの相対パスから絶対パスへの変換

URL (Java Platform SE 6) HTMLパスのパースをしていて、相対パスで記述されたリンク先URLをに絶対パスに変換する方法を調べたのでメモしておきます。baseがあるとまた違ってくるのかもしれませんが。 URL baseURL = new URL("http://www.example.com/dir1/i…

HttpClientメモ

HttpClientで、プロキシサーバを使ったり、認証が必要なサーバにアクセスする場合のメモです。 プロキシサーバ&プロキシ認証 // HttpClientのインスタンスを生成 HttpClient client = new HttpClient(); // プロキシサーバの情報 String proxyHost = "127.0…

Google Calendar API

JavaからGoogle Calendar APIをさわってみたいと思い、調べています。Googleのドキュメントはこのあたり。 Google Data APIs Client Libraries API Reference Guide - Google Calendar APIs and Tools API Developer's Guide: Java - Google Calendar APIs a…

JasperReportsで生成したExcelファイルの用紙サイズの設定

JasperReportsで生成したファイルをExcelで開くとテンプレート(jrxml)の用紙サイズが反映されません。ただし、用紙の方向は正しく設定されます。JasperReportsのTrackerに登録されておりclosedですが、まだ反映されたリリースバージョンはありません。 Track…

POIでのセルの高さ/幅の自動調整

POIでExcelでの列の高さの自動調整ができないものかと調べていました。POIのAPIでは、セルの幅の自動調整については、HSSFSheet#autoSizeColumn()というメソッドがあります。この部分のソースを見てみると、java.awt.font.TextLayoutクラスを使って入力値と…

Excelの帳票の悩ましいところ

JasperReportを使ったときも同様だったのですが、Excelの帳票を出力すると、どうしても行の高さの調整に悩まされます。 セルに入れる文字数が多い場合やセル内に改行があったり、行の高さに比べて内容が多くなると文字の一部が隠れてしまいます。もともとExc…

ワークブック間でシートをコピーする

上記のjXLSにたどり着いたきっかけというのは、POIを使って異なるワークブック間でシートをコピーする方法を調べていてのことでした。 Re: merge worksheets from mutiple xls files jXLSのUtilというクラスに、シートをコピーするcopySheetsがありました。 …

jXLS

Fisshplateと同じようにExcelファイルをテンプレートとして、動的にデータを埋め込んだExcelを生成するオープンソースのツールにはjXLSというのもありました。サンプルを見ればすぐにイメージはつかめると思いますが、 Department department; ... //initial…

Content-Typeの設定

サーバサイドでPDFやExcelの帳票を作成してダウンロードさせる際にContent-Typeヘッダを指定しますが、ServletContextのgetMimeType()で取得できます。 String filename = "output.pdf" String contextType = this.getServletContext().getMimeType(filename…

JODConverter

JODConverter Online Guideを参考にJODConverterを使ってみました。最終的にはWebアプリケーションの内部でPDFへの変換する機能を使うことを目標にしています。 OpenOfficeのインストール http://ja.openoffice.org/download/ からOpenOfficeをダウンロード…

Javaでの帳票出力

Java環境で、オープンソースのツールを使ってPDFやExcel形式の帳票を出力する方法を調査しています。数年前に帳票関連の開発した際には以下を使いました。 JasperReport + iReport iText JasperReportはXMLで作成したテンプレートをもとにPDFを生成します。i…

統合認証を使ったJDBC接続

接続URLの構築 / Microsoft TechNet SQL Server 2005/2008で統合認証を使ってJDBC接続する方法です(Windows限定)。JDBCドライバはここからダウンロードします。2005用ですが2008でも使えます。そういえば、この前、最新版2.0のCTP版が出たみたいです。統合…

Tomcat6.0起動時のエラー

最近、開発に使っているTomcatを6.0に変更したのですが、EclipseのTomcatプラグインからの起動時に以下のエラーがでて困ってました。 java.lang.NoClassDefFoundError: javax/servlet/Filter at java.lang.ClassLoader.defineClass1(Native Method) ...クラ…

サイレントインストール

最近はサーバーサイドで使用することが多いので、あまり使うことがないのですが、JDK、JREのサイレンとインストールの方法です。サイレントインストールでは、作業する人がコンポーネントやインストール先の選択を行う必要がないので、手間が減り作業ミスも…

Genericsを含むコードをJava1.4環境向けにコンパイルする。

Javaの理論と実践: Java 5 の言語機能を以前の JDK で使う Generics等のJava5からの新機能を含むソースコードをコンパイルする際に、javacの-targetオプションに"jsr14"を指定すると、Java1.4環境でも実行可能なバイトコードを生成してくれるそうです。上記…

Commons IOでディスクの空き容量を取得

Java SE6からはFileクラスでいろいろできるようになっているのは知っていたのですが、Commons IOのFileSystemUtilsでドライブの空き容量が取得できるのですね。やはり自前で実装する前にCommonsとかをあたってみた方がよいですね。

PreparedStatementのバインド変数の制限?

S2DaoからSQL Serverに対してクエリを実行した際に↓のような例外が発生しました。 com.microsoft.sqlserver.jdbc.SQLServerException: 着信の表形式のデータ ストリーム (TDS) リモート プロシージャ コール (RPC) プロトコル ストリームが不適切です。この …

request.getRemoteHost()で逆引きしない

たまにある問い合わせでつい忘れがちなのでメモしておきます。 アクセスログなど用途でホスト名を取得するため、request.getRemoteHost()を呼び出すと非常に時間がかかってしまう場合があります。DNSにて逆引きの設定がされていなかったりで、タイムアウトし…

Java6のzip処理

Java5までは、以下のようなエラーが出るzipファイルがあったのですがJava6でテストしていたところ問題なく開けました。 java.lang.InternalError: jzentry == 0, jzfile = 8949552, total = 7, name = ファイル名, i = 1, message = invalid LOC header (bad…

JJUG Cross Community Conference

JJUG Cross Community Conference 2008 Spring行ってきました。Webフレームワークのパネルまでの予定だったのですが、時間があったのでというか休みなので、、そのままScalaとひがさんのBOFまで聞いてきてしまいました。Webフレームワーク関連のセッションと…

Grails予習

明日、JJUG CrossCommunityConference2008Springに行く予定です。Grails,JRuby On Rails, Wicket, Clickのそれぞれのセッションとスピーカーの方のパネルディスカッションを聞きにいくのが目的なのですが、その前にいままで全くノーチェックだったGrailsをち…