2022-01-01から1年間の記事一覧

PyScript を試す

pyscript.netGIt-Hub : GitHub - pyscript/pyscript: Home Page: https://pyscript.net Examples: https://pyscript.net/examples 紹介記事 https://ops.jig-saw.com/tech-cate/new-tech-pyscriptHTML上でPythonコードが使える、PyScriptを用いて静的サイト…

MySQL で、PostgreSQL の generate_series関数と同じことをする。

SQL

MySQL で PostgreSQL の generate_series 関数と同じことをしようとすると、 SET @num:= 0; SELECT @num:=@num+1 FROM `information_schema`.COLUMNS LIMIT 4; でもこれでは SET 文と2つの文になってしまって mybatis での実行では都合が悪い。 SELECT a.VC…

PostgreSQL の generate_series

SQL

PostgreSQL で、連番や、日付の並びなどSQLクエリ結果として求めるのに便利なのが、 generate_series 関数1~4を ’ 1' ~ ' 4' で出力する SELECT TO_CHAR(GENERATE_SERIES(1, 4), '9999') AS UCD 1~4を ’0001' ~ '0004' で出力する SELECT TO_CHAR(GE…

配列を文字列に、

String[] ary = { "A", "B", null, "C" }; これを System.out.println やログで出力すると [Ljava.lang.String;@75b84c92となってしまう。 期待としては、以下のように出力したい。 [A] [B] [null] [C]汎用性を考えて、オブジェクトの toString が想定どおり…

String#split の第2引数

String#split の第2引数をもっと使いこなそう。サンプル String str = "A/B//C/D/"; 良くコーディングする方法 String[] ary = str.split("/"); ary.length は、5 になる。 第2引数に0をしても同じ結果になる。 String[] ary = str.split("/", 0); 第2引…

Java11 HttpClient timeout

Java11 java.net.http.HttpClient でのタイムアウトは、、、 接続時のタイムアウト HttpClient.Builder の connectTimeoutメソッドで java.time.Duration を設定 HttpClient client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1) .follow…

XStream attribute

XStream でのXMLの attribute は、@XStreamAsAttribute を付けるだけ import com.thoughtworks.xstream.annotations.XStreamAlias; import com.thoughtworks.xstream.annotations.XStreamAsAttribute; import lombok.Data; @XStreamAlias("ball") @Data publ…

XStream List構造のXMLを読む

XStreamで、XML→Java Object では、 XMLのリストの記述方法に左右される。リストをラップするタグがない場合、 <items> <item> <id>101</id> <name>cell</name> </item> <item> <id>102</id> <name>mouse</name> </item> </items> Java Object package org.sample.element; import com.thoughtworks.xstream.annotations.X…

Java11 HttpClient SSL サンプル

サンプルといっても完成形ではないが。。。 import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.net.http.HttpClient; import java.securit…

XStream を使う

XML読み書き、Java Object との相互変換に何を使う?で問われてだいたいは、JAXB を挙げる。 他の選択肢は?で XStream を挙げてくれる人は少ない。 5年前に、XStream を知ってその頃は、あまり活発でなかった。しばらく触れる機会がなかったが、 2022年1…

Guice Injector の mock

モックインスタンスを guice でインジェクションさせるパターンは、ネット検索すれば、 たくさん見つかる。 しかし、Injector の生成メソッド Guice#createInjector をモックしてテスト用の Injector を生成させるパターンは 見たことがない。 MockedStatic …

Objects.requireNonNull

安易というかまだまだ、if 文で null かどうかをチェックすることが多い Objects.requireNonNull で、NullPointerException を発生させるスタイルは なぜか、あまり見ない。もっと使えば良いと思うのだが。。。java.util.Objects public static T requireNon…

hamcrest-json のチェック処理メソッドを使いやすくする

hamcrest-json を JUnit 以外で使用する - Oboe吹きプログラマの黙示録 と、書いたがもっと実践的なものにする。Maven pom.xml に追加する <dependency> <groupId>uk.co.datumedge</groupId> <artifactId>hamcrest-json</artifactId> <version>0.2</version> </dependency> AssertionError を捕まえてエラーメッセージを、ラムダ(Consumer)で処理する…

hamcrest-json を JUnit 以外で使用する

2つのJSONを比較するのに、JUnit だけで使用するのはもったいないと思った。 <dependency> <groupId>uk.co.datumedge</groupId> <artifactId>hamcrest-json</artifactId> <version>0.2</version> </dependency> このようにテストスコープを外して使用 安易であるが比較メソッドも以下のように用意する。 import org.hamcrest.MatcherAssert; import uk…

InputStream から読み取って String

ほとんど多くの現場で、ほぼ同じコードを書くことが多くて 煩わしいと思ったので、メモ。ByteArrayOutputStream を使うのがいいのか?それとも BufferedReader を使うのが いいのか?迷うところではある。ByteArrayOutputStream を使う // InputStream → toS…

okhttp の MockWebServer で指定する Dispatcher でリクエストカウントを参照

oboe2uran.hatenablog.comvoid okhttp3.mockwebserver.MockWebServer.enqueue(@NotNull MockResponse response) は、キューとして応答レスポンスを登録するので返す順番にこれを呼べばよかった。Dispatcher の方法で、リクエストカウントを判断したい MockWe…

JUnit JSON を検証したい

JUnit テストで生成されるJSON を期待値 JSONテキストと比較して検証したい。 hamcrest-json というのを使うとできる。Hamcrest Related Projects ここから、 GitHub - hertzsprung/hamcrest-json: Hamcrest matchers for comparing JSON documents を辿ると…

JUnit 実行で、ログファイルをテストケース毎に保存させる。

org.junit.rules.TestName から実行時のテストケースメソッド名を取得して メソッド名のディレクトリにログ出力をテストケース単位にログファイルとして保存します。SL4J + log4j2 を使用している場合と、SL4J + logback を使用している場合、 各々退避方法…

JSON シリアライズ時のソート

Java Jackson を使用した時のシリアライズのソートの話である。 @JsonPropertyOrder を使わないで、ObjectMapper の設定として指定する方法Java Object プロパティ順(フィールド宣言順) Jackson version >= 2.6.1 ObjectMapper mapper = new ObjectMapper(…

Jackson シリアライズで、null オブジェクトを出力させない

一律に全て、null オブジェクトを出力させない import com.fasterxml.jackson.annotation.JsonInclude.Include; Include.NON_NULL を設定する。 ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(Include.NON_NULL);

Jackson JSONシリアライズ実行で、null を空文字にする

汎用的にシリアライザを設定するのが賢い com.fasterxml.jackson.databind.JsonSerializer 実装を com.fasterxml.jackson.databind.ser.DefaultSerializerProvider で、約束して ObjectMapper に登録する。DefaultSerializerProvider が抱える public final …

JUnit 用のログ設定を行う

リリース用のログ設定ファイル、 logback 使用の場合 → logback.xml log4j2 使用の場合 → log4j2.xml これを src/main/resources に配置するが、Junitテスト用のログ設定を別に用意したい時、、、 import org.junit.BeforeClass; システムプロパティで、設定…

@ImplementedBy VS TypeLiteral

Google guice のインジェクションバインド定義で、 com.google.inject.TypeLiteral は、良くこのように使用される。 Injector injector = Guice.createInjector(new AbstractModule(){ @Override protected void configure(){ binder().bind(new TypeLiteral<List<String></list<string>…

Javaで、JSONキーによるシリアライズ時のソート

このようなクラスオブジェクトが存在したとします。 import java.io.Serializable; import lombok.Data; @Data public class Person implements Serializable{ private static final long serialVersionUID = 1L; private String name; private String alias…

MockWebServer POST に対応する

HttpClient 実行を含むJUnit で、Mockwebserver を使う - Oboe吹きプログラマの黙示録okhttp の Mockwebserver で、複数リクエストに対応する - Oboe吹きプログラマの黙示録ここまでくると、次はPOST送信された内容に対するレスポンスの設定である。 okhttp3…

okhttp の Mockwebserver で、複数リクエストに対応する

okhhtp3 の Mockwebserver の使い方の問題ですが、 Mockwebserver 1回の enqueue(MockResponse response) メソッドの設定だけでは、 2回リクエストを実行すると2回目は応答しなくなる。 解決方法は2通り。 enqueue レスポンス設定をリクエストの回数分実…

HttpClient 実行を含むJUnit で、Mockwebserver を使う

Square社が開発した Apache License2.0 の OkHttp を使う <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>mockwebserver</artifactId> <version>4.0.1</version> <scope>test</scope> </dependency> Java11 HttpClient を使ったテスト対象プログラム(省略して書いてます) @Inject @Named("BASEURL") private String baseURL; URL path の …

HttpClient.Redirect.SAME_PROTOCOL → NORMAL

もうだいぶ年月がたってしまった、Java9 で HttpClient インキュベーター Java11 で HttpClient 正式リリース 昔書いた、Java9 の HttpClient を試す - Oboe吹きプログラマの黙示録 この中で HttpClient.Redirect.SAME_PROTOCOL「同じプロトコルのみにリダイ…

HttpClient のモックを書くとしたら、、

Java11 の HttpClient のモックを書くとしたら、 だいたいこんな感じかな。。。 @Test public void case1() { try{ HttpResponse<Object> resp = Mockito.mock(HttpResponse.class); HttpClient client = Mockito.mock(HttpClient.class); Mockito.when(resp.body())</object>…

Git 急に Fetch やPull ができなくなったら。。

こんなエラーが出るようになったら、 error: cannot lock ref ‘refs/remotes/origin/xxx’: ‘refs/remotes/origin/xxx’リモート上の削除されたブランチをローカルで追跡できなくなっているのである。 そういう時は、クリーンする処置が必要で、prune というの…