Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Java

What is the difference of RFC 5322, RFC 821 and javax.mail.internet.InternetAddress ?

Test for RFC 5322: https://gist.github.com/satob/0dc003aefe020d5f1e9263bd7e173f9f (with regexp in http://www.din.or.jp/~ohzaki/mail_regex.htm#RFC) Test for RFC 821: https://gist.github.com/satob/8c5a42cf636732d81b850b58e8808eef (with regex…

メールアドレスのバリデーション方法

じゃぁメールアドレスのバリデーションってどうやったらいいのさ、という話。 satob.hatenablog.com もちろんバリデーションをした後には、メールアドレスの実在性確認のために実際にメールを送信します*1。その前段の、 「じゃぁどんなメールアドレスだった…

What does "the syntax of RFC822" means in javax.mail.internet.InternetAddress ?

Javadoc of JavaMail API says InternetAddress class uses "the syntax of RFC822". https://javaee.github.io/javamail/docs/api/javax/mail/internet/InternetAddress.html Then how about actual implementation? Is it different from some other email…

How many fields does a class need to cause StackOverflowError with @ToString in Lombok

A: Around 568 (But sometimes it could be compile) BeanWithSoManyFields.java · GitHub This class causes java.lang.StackOverflowError like this: java.lang.StackOverflowError at java.lang.reflect.Field.get(Field.java:393) at lombok.core.AST.b…

Parasoft Jtest can't ignore Lombok-generated methods/fields

Problem: When you execute static analysis Java sources with Lombok by using Parasoft Jtest, you have to delombok the sources because of Jtest can't handle Lombok's compile-time generated methods/fields. Additionally, Jtest raise alerts wit…

オブジェクトの変換にコンストラクタを使ったときの問題

背景 MyBatisのSqlSession#selectOne()で、クラスAのオブジェクトaを取得している。SELECTの結果が0件だった場合はnullが返る。 オブジェクトaを、別のクラスBのオブジェクトbへ変換したい。 問題となる設計 クラスBのコンストラクタが、引数にクラスAのオブ…

mvn command results in error in Windows

You will get error when you run following Maven command from Windows PowerShell: PS C:\workspace> mvn -B archetype:generate -DgroupId=com.example -DartifactId=hajiboot -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quicksta…

Gotchas in Eclipse JET (JET2)

No uniq() There are no XPath functions to uniq the result of XPath (e.g. text element). If you want to uniq something, you have to implement control break with <c:iterate> like: <c:setVariable select="''" var="control" /> <c:iterate select="XPath to list text elements" var="item" > </c:iterate></c:setvariable></c:iterate>

Difference of behavior of String#split() in Java and -split operator in PowerShell

Both of String#split() in Java and -split operator in PowerShell take regex as argument, and split string into a list or an array, but there is some difference in behavior when you pass an empty string as argument. In Java: System.out.prin…

java.text.BreakIteratorによる文字数(grapheme)カウント

JIS X 0213など、シフトJISやマイクロソフト コードページ932以外の文字を業務プログラムで扱う場合には、入力された文字列を証明書などに確実に収めるため、文字数を正しくカウントする必要があります。 JIS X 0213では複数のコードポイントで1文字を表す文…

Default ClassLoader configuration in several Application Servers

Java application uses ClassLoaders in parent-first mode. On the other hand, some JavaEE Application Servers are not parent-first mode in default, and/or have preferences to configure ClassLoader behavior. # Application Server Default mode …

How to see an AOP pointcut matches to a method signature

Situation You are developing an Java application with Spring Framework. You are trying to write an AOP pointcut to weave some logic into a method invocation, but the weaved logic doesn't seems be running. Problem Mistakes are sometimes in …

A List of What Cannot JCache do

JCache cannot save the order of insertion. You should use LinkedHashMap for that purposes. JCache cannot update whole entries in a cache atomically. You should use AtomicReference or some locking mechanisms for that purpose. (Ofcourse you …

How to join nested collections with Stream API

For example, in PushOperation.java in EGit, PushOperationSpecification contains LinkedHashMap<URIish, Collection<RemoteRefUpdate>>. So you can join all remote name with Stream API like: String specs = this.specification.getURIs().stream() .map(uri -> this.specification.getRe</uriish,>…

You cannot wrap checked exceptions with lambda in Java

Context You can use lambda as lazy evaluation syntax in Java. Problem You can wrap RuntimeException with lambda like (it shows "omit exception"): import java.util.function.Supplier; public class OmitRuntimeException { public static void ma…

What does "US-ASCII only" means in Java regexp?

Java Patten class (regexp) supports POSIX character classes like \p{XDigit}. They are very useful when you want to check hex strings. In Java API Document, POSIX character classes say (US-ASCII only). What does it mean? https://docs.oracle…

Trimmed characters by trim() are different between languages

String object in .NET (PowerShell), JavaScript, and Java all have trim() method. But trimmed characters by trim() are different between these languages. # codepoint .NET JavaScript Java 1 0000-0008 ✘ ✘ ✔ 2 0009-000D ✔ ✔ ✔ 3 000E-001F ✘ ✘ ✔…

Delombok removes super(); in default constructors

Context: You have a class that has one or more constructors other than default constructor, so you have to define the default constructor explicitly. You use Lombok to generate some methods/fields. You use static code analyzers that warn e…

Javadocの{@value}タグで日本語が表示できない

Javadocには、static finalな定数のJavadocコメントに「{@value}」という内容を含めると、そこを定数の値で置き換えるという機能がある。 例えば、下記のようなコメントの場合Javadocには「ファイル名 ("AIUEO")」と表示される。 /** ファイル名 ({@value}) …

Eclipse 3.3 (Europa) で行番号を付けて印刷

Eclipse 3.4 ではできるが、Eclipse 3.3 では行番号を付けた印刷ができない。 前述の設定を行っても、エディタのビューに行番号が表示されるだけで、印刷結果には行番号が含まれない。

Eclipse 3.4 (Ganymede) で行番号を付けて印刷

以下の設定を行うとエディタのビューに行番号が表示される。 [設定]-[一般]-[エディター]-[テキスト・エディター]-[行番号の表示]この状態で印刷を行えば、印刷結果にも行番号が含まれるようになる。 (Eclipse 3.4 のリリースノートに記述がありそうだが、…

再帰構造を扱うTailib

Struts(1.x系列)付属のTaglibには、再帰構造を扱えるものがない。再帰的なデータ構造を使う代わりに、平坦なデータ構造でまかなえないか検討すること。 あるいは、再起構造を扱うTaglibを作成すること。

Struts の ActionForm では2文字目が大文字の変数名を使えない

Struts では、内部で使っている Jakarta BeanUtils の制限で、ActionForm に2文字目が大文字の変数名(例えば「xPos」「yPos」とか)を使えない。 これは JavaBeans の仕様 *1 が原因。 まず、先頭から2文字が大文字の変数名では、UpperCamelCase lowerCamel…

デフォルトエンコーディング

Java VM 実行時のデフォルトエンコーディングは OS および実行時の locale によって決定される *1。 ……とあるが、どの OS でどの locale だったらどのエンコーディングになるかは規定されていない模様。 *1:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs…

例外の区分

Java における「例外」と呼ばれるモノには、言語レベルで次のような区分が設けられている。 チェック例外 java.lang.Exception を継承し java.lang.RuntimeException を継承していない例外。 メソッド単位で言えば、引数に関係なく発生しうる例外が多い(気…

Swing アプリケーションで TrueType フォントを使う

Unix は本当にフォントの設定やら何やらこんがらがってますね…… orz

Tomcat 5.5 における Logger の話

Tomcat 5.0 系列以前では、HttpServlet#log (GenericServlet#log) 等によるログ取りを有効にするためには、それを呼んだときのログの出力先を指定しなければならなかった。で、その指定には Administration Tool を使っていた。 Tomcat 5.5 では、次のような…

JSP/Servlet on Tomcat でアプリケーション作成

最もてこずったのは MySQL とそれを参照するための Tomcat の設定だった。それさえできてしまえば、アプリケーション自体はどうということはない。

SQLite の JDBC ドライバ

http://www.ch-werner.de/javasqlite/ なんだけど、./configure; make; su -c "make install" としたまではいいけれど肝心のテストが通らない。 $ echo $CLASSPATH /opt/SUNWappserver/jdk/lib/tools.jar:/opt/SUNWappserver/jdk/lib/mysql-connector-java-3…

Servlet から JSP へ Dispatch しようとするとまっ白な画面になる

Servlet から JSP へ Dispatch している ブラウザの画面まっ白(ソースを見ても空) ロケーションバーの URL は Servlet のそれ という場合、Tomcat のログ (localhost_log.yyyy-mm-dd.txt) をチェック。次のような内容があって、タグの整合に間違いが見当た…