Java

mybatis logbackが出なくなった場合の対処

mybatis 、logback を使っていて、logback のバージョン上げたのか何かのきっかけ、 依存関係かなにか?指定しているアペンダ悪い?で mybatis のデバッグレベルのログが出なくなってしまった。 実行するSQL文が見れてデバッグに便利だったlogaback.xml …

Optional の filter を連結して使う

Webアプリでのフォーム入力に限らす、Javaでは変数への入力実行の後の妥当性チェックを記述していると どうしてもコードが長くなる。 コードが長いと、タイプミスの確率も上がるし、なにしろ読むのが辛い。長くても何回も if文を書きたくない。java.util.Opt…

グルーピング&ソートの続き

先日のグルーピング&ソートに続いて、、、 グルーピングした時にソートもする。 - Oboe吹きプログラマの黙示録同じく Foo なるクラスオブジェクトのリストで、グルーピングして並べた時に、先頭だけキーをそのままで 他をキーが表示されないように置き換え…

グルーピングした時にソートもする。

グルーピングしながら、ソートした結果リストを求めることを いざコーディングしようとすると、即時、思いつかないのが残念でメモ。Collectors.collectingAndThen を使うのが重要サンプル、以下、文字列の key と value があるクラスオブジェクト public cla…

実行中のクラス名やメソッド名の取得

Thread.currentThread() を参照することで、スレッド名 → Thread.currentThread().getName() クラス名 → Thread.currentThread().getStackTrace()[1].getClassName() メソッド名 → Thread.currentThread().getStackTrace()[1].getMethodName()で取得できるの…

Pattern to Stream

前から常に思っていたのですが、Java8 には、java.util.regex.Pattern に、splitAsStream があるのに、 matchAsStream に相当するマッチしたものをストリームで返すメソッドが提供されてないんだと不満でした。 Java9 なら、Matcher に、 Stream を取得でき…

Stream でListの中で特定要素があるインデックスを求める

完璧=普遍的とは言えないが、、 例) List<String> list = Arrays.asList("a", "b", "c", "d", "e"); int findIndex = IntStream.range(0, list.size()).map(i->list.get(i).equals("c") ? i : -1).max().orElse(-1);;でも、2つ以上マッチする場合は、最後のインデ</string>…

PaxHeaders.X が作られないように圧縮ファイルを作成する

apache commons compress で圧縮ファイル tar.gz を作成していたら、階層が深かったり長すぎるファイル名で圧縮後、解凍を行ったときに、PaxHeaders.X という名のディレクトリエントリ、中に展開したときに不完全に解凍されたファイルのパスが作られてしまっ…

ラムダ式の例外処理を綺麗にする

ラムダ式の中で例外が発生する場合は厄介なもので、何とかしようとするならラップに近い形で自分で用意するしかないみたい。Consumer 、Function 、Predicate これらの例外捕捉処理バージョンを作っておけばかなり便利かもしれません。 import java.io.Seria…

Javaで MACアドレスを抽出する

java.net.NetworkInterface を利用して抽出します。 NetworkInterface から、getHardwareAddress() で、ハードウエアのアドレス=MAC アドレスに相当が見れます。NetworkInterface は、以下の static メソッドがあります。 getByIndex(int index) → 指定イン…

byte[] を IntStream で、、、

byte配列 を IntStream として処理する方法、int配列 ならば、 int[] i = { 25, 26, 27, 28 }; Arrays.stream(i)は、成立するが、 byte[] b = { 25, 26, 27, 28 }; Arrays.stream(b)というのは成立しない。それでも byte配列 を IntStream として処理したい…

ファイルPATH の階層によるコンパレータ

使わないかもしれないけど。 public final class FilePathComparator implements Comparator<File>{ private String splitCharacter = File.separator.equals("\\") ? "\\\\" : "/"; private OrderBy orderby; public enum OrderBy{ ASC(1), DESC(-1); private int</file>…

File.separator の処理

ファイルのPATH Windows でも Linux でも、階層に分けた同じ結果リストを求める。 どういう課題かというと、、、Windows c:\a\b\cLinux /a/b/cとある時、 a a/b a/b/cというリストを改行出力した結果を得たい。 Windows 環境の PATH であろうが、Linux環境で…

Files.lines を使おう。

Java で 有名なフレームワークを使った Webアプリ開発ばかりやっていると、 ファイルシステム上のテキストファイルを1行ずつ読込み処理するというものを作る機会は 案外、少ないもので、どうするんだっけ。。と思いだすまで数十秒かかってしまい自己嫌悪。…

tar and zip の圧縮・展開

昨日書いた FileCollection は、実はこの tar and zip の圧縮・展開 を書く為の伏線です。 oboe2uran.hatenablog.comApache commons compress を使用して https://commons.apache.org/proper/commons-compress/関数型インターフェースで圧縮・展開を用意した…

FileCollection

昨日の続き、、ディレクトリを走査するもの、名前が良くないので、FileCollection と名付け さらに、Predicate を走査ではさみたくなった。 import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; …

ディレクトリツリーを走査を再興

昔、再帰関数で書いたのかもしれないけど、改めて再帰関数、結局これしか思いつかないけど 久々に for 文を書いてみました。(Java8 になってから、本当に for文を書く機会が減った。。。)要の再帰関数は、、 private List<File> parse(File file, List<File> list){ l</file></file>…

Tomcat 8.x + Wicket8 で WebSocket native

Tomcat 8.x + Wicket8 で WebSocket native がなかなかうまくできず苦労していたのだが、 やっと解った。。Tomcat 7.x + Wicket7 では、WebSocketFilter と WicketFilter を web.xml で2つ書いてURL による切り分けをしてたのですが、 Tomcat 8.x + Wick…

XStream null value を出力するケース、再び書き直す。

先日書いた、カスタムのコンバータで、XStream でXML出力する時の NULL の値のタグを書くケース、 HierarchicalStreamWriter を BiConsumer で渡して書かせるなんてやはりセンスないので、、、 oboe2uran.hatenablog.com先日の方法ではなく、NULL で空タグを…

XStream アンダースコアを含むタグのXML出力、

XStreamは、アンダースコアを含むタグをダブらせて、、2個のアンダースコアにしてしまう!!そういう仕様で規則だ。 これを避けるには、XStream インスタンス生成を、 Stream stream = new XStream(new DomDriver("UTF-8", new XmlFriendlyNameCoder("_-", …

XStream の CDATAセクションの書き方

XStream で、CDATAセクションを出力するには、XStream のコンストラクタに、HierarchicalStreamDriver 実装の Driver を指定し、指定する Driver が、createWriter で返す Writer が、直接テキストを判定して書かせるしか ないみたい。 try(OutputStreamWrit…

Google gson fromJson で、 Map<String, Object> への変換は落とし穴。。。

Google gson fromJson を使用する場合、通常変換先は自分で用意するクラスがほとんどのケースであり、 であり、Object に変換させることはあまりやらない。 Gson gson = new GsonBuilder().serializeNulls().create(); Map<String, Object> map = gson.fromJson("{a:0}", new</string,>…

XStream null value を出力させるケース、修正

XStream null value を出力させるケース、先日の XStream を使うかどうかは、NULL value をどう扱うかが問題 - Oboe吹きプログラマの黙示録 の方法は、やはり良くない!!書込み専用になってしまうからである。やはり、ReflectionConverterを継承して doMars…

XStream を使うかどうかは、NULL value をどう扱うかが問題

XStream は、アノテーションによるXMLに対するJava Object のマッピング、コンバータの指定ができていいのだけど、 stackoverflow.comここで書かれたように NULL を 中身空のタグでXMLを書く場合に指定方法が文字列、String型でしか逃げ道がない…

XStream 読込時にタグを無視させる方法

XStream で XML を読み込むとき、タグに対する Java オブジェクトフィールドが存在しないと、 わりと丁寧に詳細なエラーを出してくれる。 com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$UnknownFieldException: No such fiel…

XStream 使ったら、Security framework of XStream not initialized, XStream is probably vulnerable.

XStream を使ってみたところ、 XML読込みをしたら、読込みは成功するものの、標準エラー出力、System.err で Security framework of XStream not initialized, XStream is probably vulnerable.が出力された。使ったバージョンは、1.4.10 public static v…

Exception の root の取得

Exception の root の取得で良い方法はないのか。。。 }catch(Exception e){ Optional<Throwable> rootCause = Stream.iterate(e, Throwable::getCause).filter(t->t.getCause()==null).findFirst(); String errormessage = rootCause.get().getMessage();</throwable>

原始的なHTTPクライアントサンプル

久々に HTTPクライアントプログラムを書く。 以前は https://hc.apache.org/ を使うことばかりしていた。chunk発生を考慮すれば当然だった。でも、限られたネットワークで軽量に動かしたく前にも書いたかもしれない 原始的なHTTP クライアント (=他の…

Enumeration から Stream

Enumeration から Stream にする。 java.util.Collections の list を使って、Stream にする。 Collections.list(getRequest().getParameterNames()).stream().forEach(key->{ }); こんな感じ。。。

リストの順序を保持したグルーピング

リストをグルーピング、しかしあくまでも順序付けされた並びの中でのグルーピングで同じキーのグループが複数あっても まとめない。 という要求があった時、少し悩んだ。サンプルとなるお題、、、要素のキーが以下のようにならんでいる場合、 A , A , A , B …

POI で セル書込み時に Optional を使う

Apache POI メモリ消費量が増えやすいし、今となっては使いにくい。 Excel の場合、セルのスタイル設定は今のメソッドは、まあ許すとして セルの値セットや、スタイル適用のメソッドが実行後のセルを返してくれれば、数珠つなぎにメソッド呼べるのに。。そこ…

HTTPClient の ResponseHandler

HTTPClient といえば、 https://hc.apache.org/ の HttpClient この中の ResponseHandler は、残念なのか仕方ないのか、@FunctionalInterface を持っているわけではない。 あの面倒くさいHTTPで受け取る処理をもう少しスマートに書きたくて、とりあえず…

Consumer を Inject

Google guice で、List をインジェクションする時によく使うのが、com.google.inject.TypeLiteral Java8 lambda の Consumer をインジェクションすることをやれば、条件分岐によるメソッド実行を 一括管理の記述ができると思った。まず、分岐ではなく、ただ…

NULLインジェクション

いつも、Google guice 使用を書いていて思うのが、NULLインジェクションが発生するとき、 @Nullable をつけて、Module の configure で、toProvider を書かなくてはならないのが 煩わしい。 binder().bind(Integer.class).toProvider(Providers.of(null)…

JavaFX CSS で @CHARSET記述は不要である

JavaFX の CSS を書いていると、ついHTMLのCSS を書いていた時の癖で @CHARSET "UTF-8"; を書いてしまう。でも、これを書いてしまうと、com.sun.javafx.css.parser.CSSParser は、CSS parseエラーになり思いとおりの スタイルが適用されなくなる。doc…

JavaFX の ウィンドウフレームを無くす

JavaFX の ウィンドウフレームを無くしたい場合、Application の start(Stage) で渡される javafx.stage.Stage をjavafx.stage.StageStyle の StageStyle.TRANSPARENT を指定すれば、ウィンドウフレーム無しの透過 StageStyle.UNDECORATED なら、ウィンドウ…

JavaFX で、外部フォント

JavaFX で、外部フォントを指定する場合の書き方CSS に書く場合 @font-faceで fontファミリ-ttfを定義、→ -fx-font-family で指定 @font-face{ font-family: meiryo; /** ttf ファイル参照 **/ src: url("file://c:/home/test/meiryo.ttf"); } Pane{ -fx-fon…

java.time.format.FormatStyle を確認

java.time.format.FormatStyle で Locale に従った日付表記を試してみる。 LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(new Locale("ja", "JP"))); LocalDate.now().format(DateTimeFormatter.ofLocalizedDate(…

JavaFX のイニシャライズ処理を Google guice で整理

前回に引き続き、JavaFX のイニシャライズ処理を Google guice で整理してみる。 起動のメインクラス・・・共通イニシャライズとして、guice の Module を配置、 最初に起動されるコントローラ・・・次画面のイニシャライズとして Module を配置、 →画面遷移…

JavaFX で Google guice によって FXMLLoader のロードを補助する

JavaFX の Controller (←この呼び方が個人的には嫌い、MVCモデルの Cなんだろうけど)のファクトリの コールバックに、Google guice でのインジェクションを行う方法は、とても有効な手段だと思う。前回の投稿、 JavaFX の画面遷移、簡単に書く。 - Oboe吹…

JavaFX の画面遷移、簡単に書く。

JavaFX の画面遷移、Webページ閲覧のように切り替え、いろんなやり方のサンプルを見たけど、どれも釈然としない。もっとシンプルに書けるはずだ。javafx.application.Application継承の mainメソッドクラス public class MainApp extends Application{ st…

fxml ソースの配置

JavaFX の画面デザインレイアウトは一度決定してリリースしたらそんなに変更差し替えるものではなかろう。Maven で基本アーキタイプ生成のサンプル、GitHub - javafx-maven-plugin/javafx-basic-archetype: A Maven archetype for generating a basic JavaFX…

JavaFX Mavenサンプル

JavaFX の Maven 基本的なアーキタイプを探していて、GitHub - javafx-maven-plugin/javafx-basic-archetype: A Maven archetype for generating a basic JavaFX starter project.というのを見つけたので、ここに紹介されたとおり mvn コマンドを以下のよう…

今更、JavaFX の開発環境、

デザインレイアウトの為の fxml を編集するツール、もうバージョンUPされる見込みがなさそうで、何とかORACLEのダウンロードサイトを見つける。 JavaFX Scene Builder 2.0インストールhttp://www.oracle.com/technetwork/java/javafxscenebuilder-1x-archi…

WebSocket の getOpenSessions は現在開いてるのを返す約束なのに。。

WebSocket の javax.websocket.Session の getOpenSessions は、現在開いてるセッションを全て返してくれるはずなのに、 サンプルを書いていて、どうも endpoint のセッションしか返してこない。。なぜ?Tomcat8.5.11 で試していた。。やりたかったのは、こ…

Wicket8 の LambdaModel

Wicket 8 になると待望のラムダ Model がある。PropertyModel を使って TextField に 自Pageクラスの変数を指定すると、どうしても new TextField<>("idname", new PropertyModel<>(this, "name"));のように書くことになり、"name" 変数名がタイプセーフでな…

IntStream から逆順リストを作る

List<Integer> years = IntStream.rangeClosed(2013, Calendar.getInstance().get(Calendar.YEAR)) .boxed() .sorted(Comparator.reverseOrder()) .collect(Collectors.toList());</integer>

日付期間重複の抽出

昨日、書いた日付期間のインターフェース DateSpan これを使って、BiConsumer の 期間が重複している重複日と重複した要素のリストを処理するメソッドを用意します。 public static void booklist(List list, BiConsumer<LocalDate, List<? super DateSpan>> bookConsumer){ AtomicInteger i = </localdate,>…

LocalDate の Stream 生成

開始日 LocalDate と 終了日 LocalDate 、 start 、 end の Stream int len = Period.between(start, end).getDays() + 1; Stream<LocalDate> stream = Stream.iterate(start, t->t.plusDays(1)).limit(len); ちょっと遊んだ、ふざけたコード StreamSupport.stream( Spl</localdate>…

DateSpan

日付期間に関する処理のために。。 import java.time.LocalDate; import java.time.Period; import java.util.AbstractMap; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.List; import java.util.function.Supp…