- - PR -
Axisにserializerを組み込む
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-12-21 14:28
UKです。
Axisにシリアライザーを組み込みApache SOAPでサポートされていない 型でもJava2WSDLやWSDL2Javaでサービス作成を行うことについて勉強しています。
の様に既存のDataSerializerなどのソースを参考に シリアライザー、デシリアライザーを作成しました。 クライアントプログラムを実行すると org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0 ) was found in the element content of the document. っといったエラーがでます。 シリアライザーの作成方法自体根本的に間違っているのでしょうか? 変換する際のエンコードが間違っているのかと思ってしらべましたが、解決できませんでした。 どなたかご教授宜しくお願いします。 | ||||
|
投稿日時: 2003-12-22 12:01
> シリアライザーの作成方法自体根本的に間違っているのでしょうか?
間違っています。何が間違っているかと言うと、ObjectOutputStreamでオブジェクト を直列化したバイト配列をそのまま文字列にしている点です。 getValueAsStringはXML表現を返す必要があります。他のシリアライザーの実装を見てみるとよいでしょう。 | ||||
|
投稿日時: 2003-12-22 23:14
t-wataさんのご指摘通り他のシリアラーザーの実装を見て
自分なりに作り直してみました serializerについて getValueAsStringでの返り値をBase64.encode(data, 0, data.length) に変更し、deserializerをBase64Deserializerをextendsして作成 すると期待通りの結果を得ることができました。 そこでserializerの方をgetValueAsStringを使用せずにBase64Serializerをextendsして 作成し直すとBase64Serializerでエラーがでます。
するとクライアント側で at org.apache.axis.encoding.ser.Base64Serializer.getValueAsString(Base64 Serializer.java:102) at org.apache.axis.encoding.ser.Base64Serializer.serialize(Base64Seriali zer.java:93) といったエラーがでます Base64Serialzier.java:102を見ましたが、そこでClassCastExceptionが発生しているようです。ナゼなのでしょう?Base64Serializerのserializeメソッドの第3引数にはバイト配列 をわたしてまいけないのでしょうか? すみませんが、もう少しお力添え宜しくお願いします [ メッセージ編集済み 編集者: UK 編集日時 2003-12-23 10:59 ] | ||||
|
投稿日時: 2003-12-24 17:45
new NodeSerializerするときに、javaTypeに、byte[].classを指定しないと、Byteの配列と見なされます。そのせいじゃないですか?
| ||||
|
投稿日時: 2003-12-24 18:17
t-wataさん、ありがとうございました。ちゃんと動きました。
|
1