Hessian をしばらく使用してきましたが、次の動作に気付きました。Hessian で java.lang.Character をシリアライズすると、String としてデシリアライズされます。
public class TestHessianChar {
public static void main(String... args) throws IOException {
// Serialize
Character c = new Character('x');
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Hessian2Output hessian2Output = new Hessian2Output( byteArrayOutputStream );
hessian2Output.startMessage();
hessian2Output.writeObject(c);
hessian2Output.completeMessage();
hessian2Output.close();
byte[] dataBytes = byteArrayOutputStream.toByteArray();
// Deserialize
Hessian2Input hessian2Input = new Hessian2Input( new ByteArrayInputStream( dataBytes ) );
hessian2Input.startMessage();
Object o = hessian2Input.readObject();
hessian2Input.completeMessage();
hessian2Input.close();
System.out.println(o.getClass().getName());
}
}
このコードの出力は次のとおりです。
java.lang.String
プリミティブの言語に依存しないシリアル化と関係があると思いますが、かなり面倒です。私は JMS ドライバーを作成しており、仕様が異なる動作を要求しているため、char と String を区別する必要があります。char を表す独自のクラスを作成することを検討しています (そしてオートボクシングを放棄します) が、そのようなゆがみを経験する前に Hessian で Character を Character として扱う適切な方法があるかどうかを知りたかったのです。