Java11 上で動かしている JBoss (Red Hat SSO) 環境で、SOAP サービスを呼び出そうとしたら、とても大変だったのでそのまとめです。 環境 AdoptOpenJDK Hotspot 11.0.11+9 Red Hat SSO 7.4 (JBoss EAP 7.3.7) Apache CXF 3.4.3 ひとつめの問題 Red Hat SSO に、カスタムプロバイダ (認証機能を拡張するモジュール) を載せた状態で当該機能にアクセスした際、以下のような例外が発生しました。 が見つからないのだそうです。 これは、Java8 以前のバージョンで、 の中に含まれていたクラスです。 Java…
Java agent を使うことはあっても作ったことないなと思い、調べつつ作ってみたのでそのメモ。 環境要件 Java 8 サンプルコード https://github.com/yo1000/demo-javaagent https://github.com/yo1000/demo-javaagent-jetty エージェントパッケージの作成 まず作成をするにあたって、エージェントパッケージの要件を確認します。 エージェントであるためには、以下の要件を満たす必要があります。 メソッドが実装されていること マニフェストファイルで の位置が指定されていること 依存クラスへのパスが通っていること それでは作っていきます。 premain メソッドの実装 メソッドは通常の Java…
リソース取得なんてどうせ でしょとタカをくくっていたらハマってしまったので、Executable JAR (実行可能JAR) のリソース取得では、ここに気をつけようというのを残しておきます。 環境要件 Java 8 Kotlin 1.3 サンプルコード https://github.com/yo1000/demo-config-props-vars/blob/master/src/main/kotlin/com/yo1000/demo/DemoApplication.kt リソースの取得 手順としては以下のようになります。 実行中コードの URL を取得する URL を整形して JAR ファイルのパスを取得する JAR ファイル内のエントリから必要なファイルを取得する 問題はこの手順の最初、(1) の部分にあります。通常はここで から URL…
Java でフィールドバリデーションをする場合、検証アノテーションを使うことになりますが、言語仕様によりアノテーションは派生クラスを作成できません。しかし、検証アノテーションでは近い意味合いの注釈を表現するために、既存のアノテーションを再利用したいと考えるシーンは少なくありません。そんなときにどう書くか、というのを何度か調べ直しているので残しておきます。 環境要件 Java 8 検証アノテーションの合成 知っていれば簡単で、大きくは以下…
mk2dataという小さなモジュールを作りました。マークダウンを使って、テストデータのセットアップや検証ができるようになるものです。 なんでこんなものを作ったのかと申しますと。 DB周りのテストを書く場合に、データのセットアップや検証のために、INSERTやSELECTを発行して確認するシーン、けっこうあると思います。でもこれ、面倒じゃないですか。プロダクションコードではバリバリORM使うのに、テストではあんまり使っていなかったり、標準APIを使って直接SQL発行してデータ作ってたり。そして煩雑になったSQL…
やのように期間を秒数で受けるようなAPIは少なくありません。旧来のJava7以前であれば、秒数計算をしていたかと思いますが、Java8以降ではを使用して、これをスマートにわかりやすく記述できるようになっています。 環境要件 OpenJDK JDK 10.0.2+13 デモ https://repl.it/@yo1000/TimeUnitConversion 従来の書き方(Java7まで) こんな書き方。よくやってましたよね。 Durationを使った書き方(Java8以降) を使用すると以下のように書けま す。 では、今回の例の他にも、時、分、ミリ秒、ナノ秒も扱えるため、時間範囲の単位変換には便利に使っていくことができます。 参考 https://docs.oracle.com/javase/jp/8/docs/api/java/time/Duration.html#ofDays-long…
fileスキームのURLを、ローカルファイルを参照可能なパスに変換しようとしたところ、単純な文字列操作以外の方法でこれを取り扱うのが、思ったよりも手こずったのでメモ。手こずったとはいえ、方法を知っていれば難しくはないのですが、知らなかったなあということで。 環境要件 Oracle Java 1.8.0_161 Kotlin 1.2.71 Apache Maven 3.6.0 fileスキームの変換 を使うことで、URLから適切にスキームパートを取り除けた。いくつかのURLパターンごとの実行サンプルは以下の通り。 参考 https://stackoverflow.com/questions/6164448/convert-url-to-normal-windows-filename-java
Mavenで複数のプロファイルを切替える場合に、そのデフォルトとして、プロファイルをマークするのがという設定なわけですが、これの挙動が少し想像とズレていたのでそのメモ。 サンプルは以下。 https://github.com/yo1000/example.Maven-ActiveByDefaults 要件 Java 1.8.0_121 Maven 3.5.3 検証 検証に際し、以下のようなを用意しました。 検証内容 依存関係の設定が異なる、プロファイルと、3つのプロファイルを用意しました。まとめると以下の4つです。 プロファイル: に依存 プロファイル: に依存() プロファイル: に依存 プロファイル: 個別の依存設定はないため、プロファイルと同義 これらに対し、以下のコマンドを発行したときに、依存関係にどのような変化があるかを検証します。 検証結果 以下…