
java
Java11環境でSOAPサービスを呼び出そうとしたら大変だった
Java11上で動かしているJBoss(RedHatSSO)環境で、SOAPサービスを呼び出そうとしたら、とても大変だったのでそのまとめです。環境AdoptOpenJDKHotspot11.0.11+9RedHatSSO7.4(JBossEAP7.3.7)ApacheCXF3.4.3ひとつめの問題RedHatSSOに、カスタムプロバイダ(認証機能を拡張するモジュール)を載せた状態で当該機能にアクセスした際、以下のような例外が発生しました。08:03:12,265ERROR[org.keycloak.services.error.KeycloakErrorHandler](defaulttask-5)Uncaughtservererror:javax.xml.ws.WebServiceException:Providercom.sun.xml.internal.ws.spi.Provider2021.06.07
Java agent をつくってみる
Javaagentを使うことはあっても作ったことないなと思い、調べつつ作ってみたのでそのメモ。環境要件Java8java-versionopenjdkversion"1.8.0_212"OpenJDKRuntimeEnvironmentCorretto-8.212.04.1(build1.8.0_212-b04)OpenJDK64-BitServerVMCorretto-8.212.04.1(build25.212-b04,mixedmode)サンプルコードhttps://github.com/yo1000/demo-javaagenthttps://github.com/yo1000/demo-javaagent-jettyエージェントパッケージの作成まず作成をするにあたって、エージェントパッケージの要件を確認します。エージェントであるためには、以下の要件を満たす必要があります。prem2020.05.18
Executable JAR のリソースを参照する
リソース取得なんてどうせgetResourceでしょとタカをくくっていたらハマってしまったので、ExecutableJAR(実行可能JAR)のリソース取得では、ここに気をつけようというのを残しておきます。環境要件Java8Kotlin1.3java-versionopenjdkversion"1.8.0_212"OpenJDKRuntimeEnvironmentCorretto-8.212.04.1(build1.8.0_212-b04)OpenJDK64-BitServerVMCorretto-8.212.04.1(build25.212-b04,mixedmode)サンプルコードhttps://github.com/yo1000/demo-config-props-vars/blob/master/src/main/kotlin/com/yo1000/demo/DemoApplicat2020.05.17
検証アノテーションを合成する
Javaでフィールドバリデーションをする場合、検証アノテーションを使うことになりますが、言語仕様によりアノテーションは派生クラスを作成できません。しかし、検証アノテーションでは近い意味合いの注釈を表現するために、既存のアノテーションを再利用したいと考えるシーンは少なくありません。そんなときにどう書くか、というのを何度か調べ直しているので残しておきます。環境要件Java8java-versionopenjdkversion"1.8.0_222"OpenJDKRuntimeEnvironment(AdoptOpenJDK)(build1.8.0_222-b10)OpenJDK64-BitServerVM(AdoptOpenJDK)(build25.222-b10,mixedmode)検証アノテーションの合成知っていれば簡単で、大きくは以下2つの要件を満たすだけです。アノテーションに合成したいア2020.04.07
mk2data で Markdown からテストデータ構築
mk2dataという小さなモジュールを作りました。マークダウンを使って、テストデータのセットアップや検証ができるようになるものです。なんでこんなものを作ったのかと申しますと。DB周りのテストを書く場合に、データのセットアップや検証のために、INSERTやSELECTを発行して確認するシーン、けっこうあると思います。でもこれ、面倒じゃないですか。プロダクションコードではバリバリORM使うのに、テストではあんまり使っていなかったり、標準APIを使って直接SQL発行してデータ作ってたり。そして煩雑になったSQL発行処理に、データのサマリや説明をつらつらとコメントしたりする。かくいうわたしも、以下のようなことをしていたんですね。dataSource.connection.use{conn->conn.createStatement().use{stmt->/*|id|name|age|blood|2020.03.07
秒数算出するときはDurationがべんり
Cookie#setMaxAge(int)やHttpSession#setMaxInactiveInterval(int)のように期間を秒数で受けるようなAPIは少なくありません。旧来のJava7以前であれば、秒数計算をしていたかと思いますが、Java8以降ではjava.time.Durationを使用して、これをスマートにわかりやすく記述できるようになっています。環境要件OpenJDKJDK10.0.2+13デモhttps://repl.it/@yo1000/TimeUnitConversion従来の書き方(Java7まで)こんな書き方。よくやってましたよね。publicclassMain{publicstaticvoidmain(String[]args)throwsException{longsecondsOf30Days=30L*24L*60L*60L;//days*hours*m2019.10.14
KotlinやJavaのファイルスキームURLをパスに変換する
fileスキームのURLを、ローカルファイルを参照可能なパスに変換しようとしたところ、単純な文字列操作以外の方法でこれを取り扱うのが、思ったよりも手こずったのでメモ。手こずったとはいえ、方法を知っていれば難しくはないのですが、知らなかったなあということで。環境要件OracleJava1.8.0_161Kotlin1.2.71ApacheMaven3.6.0$./mvnw-versionApacheMaven3.6.0(97c98ec64a1fdfee7767ce5ffb20918da4f719f3;2018-10-25T03:41:47+09:00)Mavenhome:~/.m2/wrapper/dists/apache-maven-3.6.0-bin/2dakv70gp803gtm5ve1ufmvttn/apache-maven-3.6.0Javaversion:1.8.0_161,ve2019.02.22
MavenのactiveByDefaultにはクセがある
Mavenで複数のプロファイルを切替える場合に、そのデフォルトとして、プロファイルをマークするのがactiveByDefaultという設定なわけですが、これの挙動が少し想像とズレていたのでそのメモ。サンプルは以下。https://github.com/yo1000/example.Maven-ActiveByDefaults要件Java1.8.0_121Maven3.5.3$./mvnw-vApacheMaven3.5.3(3383c37e1f9e9b3bc3df5050c29c8aff9f295297;2018-02-25T04:49:05+09:00)Mavenhome:~/.m2/wrapper/dists/apache-maven-3.5.3-bin/2c22a6s60afpuloj4v181qvild/apache-maven-3.5.3Javaversion:1.8.0_1212018.06.09
Jacksonシリアライズの循環参照を止める
Jacksonを使用したJSONの出力で、オブジェクトが循環参照を起こしているような場合、これを止める方法についてのメモ。以下のように、JsonIdentityInfoアノテーションをクラスにつけるだけで良いです。これを使用することで、循環が検出された場合に、循環しているオブジェクトの内容を、ID文字列に置き換えてくれるようになります。JPAエンティティなどをそのままJSON出力したいような場合には、OneToMany,ManyToOneを使用したオブジェクトの参照で、このようなニーズが度々発生します。@Entity@JsonIdentityInfo(property="_id",generator=ObjectIdGenerators.UUIDGenerator::class)dataclassPerson(@Idvarid:String="",varname:String="",@On2018.01.25


