Java

Maven プロファイル指定ビルドと、生成物の名前

Maven profile を使用してビルド対象リソース管理しているプロジェクトで ビルドする JAR名も合わせて変更したい。という要求通常デフォルトのMaven がビルドするJAR は、artifactId 名 + "-" +バージョン番号 + ".jar" という書式で JARファイルが作成さ…

guice タイプセーフな annotatedWith

Google guice で JSR330 の @Named に対して、 バインド定義で @Namedアノテーションがついていることを限定する場合、 binder().bind(Logic.class).annotatedWith(Names.named("HIGH")).to(HighLogic.class); と、com.google.inject.name.Names の named(…

OGNL式、インナークラスの場合

先日、 oboe2uran.hatenablog.com を書きましたが、 滅多にないというかそんなクラス定義をして何の意味があるのだと思うが、、 インナークラスで定数を定義している場合、、 $でインナークラスを指定することになる。前回のサンプルを例にすると、、 packa…

bind定義を書かないでクラスに @Injectをした時の guice

通常 Google guice の使い方は、インターフェースに対する実装クラスのインスタンスが 割り当てられるように bind定義を書いてDIを実装する。うっかりというか、諸事情で見落として、 @Inject private Foo foo; と書いた Fooクラスが、インターフェースで…

継承時のlombok @Data

継承があるオブジェクトでは、@Data を使うと警告 Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=f…

Apache POI Excel Sheet の全行 ⇒ 読込みObjecのリスト

Apache POI を使用した Excel の操作はずいぶん昔からコードを書いていた。 PushbackInputStream を使用する - Oboe吹きプログラマの黙示録 Excel 拡張子 (xls) (xlsx) 両方に対応した操作 Apache POI (2) - Oboe吹きプログラマの黙示録 Excel 拡張子 (xl…

ThrowableFunction

Throwable 例外を投げて処理する関数型インターフェースを作っている。 yipuran-core/src/main/java/org/yipuran/function at master · yipuran/yipuran-core · GitHub使い道はいっぱいある。 Strin str = "[ \"A\", \"B\", \"C\" ]"; これを Jackson Object…

JUnit リスト比較

リストの完全一致の比較検証を簡単に記述できないかを考える。 比較対象のリストの要素がデータオブジェクトで、特定のフィールドは 比較対象にしたくない。というケースオブジェクトの比較対象にしたくないフィールドをコピーすることを以下を 使って簡単に…

Maven ビルドリソースの指定

以前、こんなものを書いたけど。。 Maven ビルド実行前にファイルコピー - Oboe吹きプログラマの黙示録改めてビルドでの指定は、こんな風に書く <build> <resources> <resource> <directory>${basedir}/src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> <include>**/*.json</include> </includes> </resource> </resources></build>

JUnit でログ出力を検証する。

JUnit で先日の System.setOut による標準出力先の切り替えを利用する方法である。 logger.info("AuthLogicImpl name = "+name); このロガーが標準出力する設定になっており、このログ出力をJUnit テストコードで検証する。 準備として便利な以下を使用でき…

JUnit で標準出力結果を検証

System.setOut で標準出力先を切り替えたのを元に戻す - Oboe吹きプログラマの黙示録より、切り替えによるJUnit で標準出力結果を検証するテストケースを以下のように書けば良い。 例) "OK"だけを標準出力するメソッドをテスト System.lineSeparator() を付…

System.setOut で標準出力先を切り替えたのを元に戻す

標準出力のバンドル FileDescriptor.out で戻せば良い。System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));例)ファイルに書いていて、元に戻す。 try(FileOutputStream fo = new FileOutputStream(new File("/work/test.txt"))){ …

リストの比較

JUnit リストの比較 Eclipse で、JUnit を書いていると、コード補完でうまく出てこなくて いつもイライラするので、メモ import org.hamcrest.CoreMatchers; import org.hamcrest.MatcherAssert; MatcherAssert.assertThat(list1, CoreMatchers.is(list2)); …

Stream から 配列生成

Stream<T> の toArray(T::new);toArray の引数が IntFunction<A> なのであるからといって、 .toArray(v->new T[v]); と書く人は少ない。IntStream の toArray() が、int[] を生成するのだが、 int[] intary = IntStream.rangeClosed(1, 5).toArray(); Integer の配</a></t>…

JUnit static import

JUnit の時ぐらいしか使わない static import org.junit.Assert を使ってるのか、org.hamcrest.MatcherAssert を使ってるのか、 長いテストコードを素早く確認するのに、いちいち上までスクロールして確認なんて やってられない、 import static org.junit.A…

Java11 でテキストファイルを String に読込み

Java11 でテキストファイルを String に読込むのは、とても記述が楽だ。java.nio.file.Path に、java.nio.file.Files で対応できるのである。サンプル UTF-8 のファイル import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java…

【修正】オブジェクト間フィールドのコピー

先日の オブジェクト間フィールドのコピー - Oboe吹きプログラマの黙示録 を修正することにした。 それは、継承クラスにおいて継承元のフィールドをコピーすることを考慮すべきだからだ。 @Data @EqualsAndHashCode(callSuper=true) を書いているときのエン…

オブジェクト間フィールドのコピー

任意のオブジェクト間で、特定のフィールドだけをコピーするのに汎用的な方法を考えます。 これを考えるきっかけは、JUnit の assertEquals などを実行する前に、比較したくない属性フィールドは、 コピーして同じ値にしてしまおうという目的で、それを状況…

java.nio.file.Files の createDirectories

Files.createDirectory(Path path) は、path 生成元に存在しないディレクトリがあれば、 java.nio.file.FileAlreadyExistsException を発生するが、createDirectories なら、ディレクトリ作成できる権限、環境なら途中も生成 で作ってくれる。 try{ Path pat…

Java SHA256 の結果をどういう文字列にすべきか

Java SHA256 java.security.MessageDigest を使う場合結果として取得できる byte[] を、どういうHEX文字列にすべきか?String.format を使う手段もあるが、BigInteger の toString で16進を指定する手もある、 try{ byte[] hashbytes = MessageDigest.getI…

AWS Lambda タイムアウトの捕捉

AWS Lambda のタイムアウトをJava で作成するLambda関数に捕捉させる要件。 こういう要件、なんで Python で作らないんだという声は置いといて。。。 タイムアウトする Lambda は、ログ出力は、awslogs で CloudWatch で閲覧が可能という前提 Lambda のタイ…

ReturnalConsumer の使いどころ

先日と同じことではあるが、、 Matcher の find() と group() (2) - Oboe吹きプログラマの黙示録ReturnalConsumer の使いどころとして、、 https://github.com/yipuran/yipuran-core/wiki#returnalconsumert String str = "aaa134_cd45_def"; String res =…

Matcher の find() と group() (2)

oboe2uran.hatenablog.comを書きましたが、Matcher だけにフォーカスすれば、 必ずマッチが約束されているなら、 Git-Hub にUPした https://github.com/yipuran/yipuran-core/wiki#returnalconsumert ReturnalConsumer を使って Pattern ptn = Pattern.compi…

Matcher の find() と group() (1)

java.util.regex.Matcher は、マッチをさせてから、一致部分を抽出というステップが 煩わしいと思っていた。例えばファイル名の一部が時刻文字列(yyyyMMddHHmmss)になっており、時刻まで求めるのに、 java.util.regex.Pattern 正規表現でマッチー>Matcher…

Maven package 実行のメモ

テストスキップしてパッケージ生成 mvn package -DskipTests=trueクリーンしてからパッケージ(よく使いそうな実行) mvn clean package -DskipTests=trueMaven プロジェクトーサブモジュール構成で、モジュールを指定する場合 書式は、、 mvn clean package…

JUnit static メソッドのmock

以前、書いていたが、、 JUnit4 でのモック - Oboe吹きプログラマの黙示録static メソッドのモック は、mockito-core だけでなく、mockito-inline も必要 <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.4.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mocki…</artifactid></dependency>

PushbackInputStream を使用する

以前、Excel 拡張子 (xls) (xlsx) 両方に対応した操作 Apache POI として、 oboe2uran.hatenablog.com を書いた。しかし、ファイルシステムによっては、Excel WorkBook の認識に、 Your InputStream was neither an OLE2 stream, nor an OOXML stream or you…

list chain execute

public static <T, R> R relayFunction(List<T> list, Function<T, R> first, BiFunction<T, R, R> func){ Iterator<T> it = list.iterator(); R r = it.hasNext() ? first.apply(it.next()) : null; while(it.hasNext()) { r = func.apply(it.next(), r); } return r; }</t></t,></t,></t></t,>

クォート文字で囲ってないJSONキー

JSONの仕様は、フィールド名:キー は、(") ダブルクォーテーションで囲むと されているが、RFC8259 にそんなこと書いてあるか? JavaScript 表記のことを考えると、キーをダブルクォーテーションで囲まないケースで 読込みエラーになるのは、不都合なのでは…

Iterator → Stream

稀に書くことがある Iterator から Stream への変換メモSpliterators.spliteratorUnknownSize で、イテレータを Spliterator を作って、 StreamSupport で Stream生成 Iterator<T> iterator =list.iterator(); サイズが解らない場合ケースが多いので、 Stream<T> s</t></t>…