[Microsoft .NET Framework との相互運用性は?] [編集日時 2004年1月22日am9:25 版]
Apache Axis 1.1 と [Microsoft .NET Framework] 1.0/1.1 との相互運用性についての FAQ
質問: Java と Microsoft .NET Framework との間は、どのデータ型が安全に使用することができますか?
回答: 以下の単純な Java データ型が使用できます。String、boolean、byte、short、int、long、float、double。上記の型付き配列も作成することができます。標準的な Sun の[JavaBeans] と JavaBeans の配列もサポートしています。
質問: java.util.Calendar の値は転送できますか?
回答: Calendar オブジェクトのシリアライズ/デシリアライズについては既知の問題があります。Java では [Calendar] クラスはタイムゾーン情報を含んでいます。.NET では [System.DateTime] 構造はタイムゾーン情報を含んでいません。.NET Framework では、シリアライズする際にタイムゾーンを現在のタイムゾーンと仮定し、デシリアライズする際はタイムゾーンを無視します。その結果、値がプラスマイナス24時間ずれる可能性があります。
解決策として2つ、文字列を使用する、ラッパーされた値オブジェクトを使用することが挙げられます。時間の値を転送する際、秒による long 型 (昔の C における time_t) をお勧めします。
質問: Java のデータ型から .NET における同等の型へのマッピングを提供することはできますか?
回答: もちろんできます。
Java C#.NET VB.NET .NET Framework Type
String string String [System.String]
boolean bool Boolean [System.Boolean]
byte sbyte -N/A- [System.SByte]
short short Decimal [System.Int16]
int int Integer [System.Int32]
long long Long [System.Int64]
float float Single [System.Single]
double double Double [System.Double]
質問: java.lang.Integer や java.lang.Double のような標準的な Java のプリミティブ型のラッパは使用できますか?
回答: 直接は使用できません。Microsoft C# は同等の言語機能を持っていません。C# の [System.Object] 型を使用して対処することができます。
質問: 相互運用性を最大限高める際に、どのデータ型、あるいはどのデザインパターンを避けたらいいのでしょうか?
回答: 以下の構成を避けるべきです。
* 標準的な Java Collection クラス。
* 型安全な列挙型。代わりに Java で static final な変数を使用してください。
* 多次元配列とぎざぎざの配列。
* まばらな配列 (SOAP 1.1 では許されているが SOAP 1.2 では許されていない)。
* Java の char データ型はサポートされていません(XML Schema では省略されているので)。
* Webサービス上で同じメソッド名を様々なパラメータで複数回使用するのは避けましょう。
質問: Java と Microsoft .NET Framework との間で添付を送信するにはどうすればいいのでしょうか?
回答: .NET Framework 1.0 と 1.1 の両バージョンは、添付のサポートは一切提供していません。
最近の [Microsoft Web Services Enhancements (WSE)] は [DIME (Direct Internet Message Encapsulation)] のサポートを追加しています。それゆえ、DIME をサポートするにはクライアントマシンに WSE をインストールする必要があります。
Axis は MIME と DIME 添付の両方をサポートします。サーバは両方とも扱いますが、クライアントはメッセージを送る際に DIME を使うということを伝える必要があります。
質問: Axis と [Microsoft Web Services Enhancements (WSE)] を使用するのに他に必要なものはありますか?
回答: Axis と共に WSE ツールキットを使うには、[WS-Routing] を無効にする必要があります。
これは次の呼び出しを追加することによって行えます。
_server.RequestSoapContext.Path.MustUnderstand = false;
さもなければ、Axis が WS-Routing ヘッダーの認識に失敗した際に MustUnderstand を受け取ることになります。より詳しい情報は、[Java & .NET Interop - How To] をご覧下さい。
質問: GZIP のようなものを使用してメッセージを圧縮する組み込みのサポートはありますか?
回答: 残念ながら現在のところありません。実際、.NET Framework にも組み込みの圧縮ライブラリはありません。
この問題についての議論や対処方法については以下のリンクをクリックしてください。
http://marc.theaimsgroup.com/?l=axis-dev&m=106086909809576&w=2
質問: Microsoft .NET Framework の文書化されたWebサービスバグはありますか?
回答: はい。.NET 1.0 では以下の記事で述べられている、空配列のデシリアライズについての問題があります。
バグ: Webサービスがサイズ0の配列を返す際に間違った結果が生じる
http://support.microsoft.com/default.aspx?scid=kb;en-us;330065
このバグは .NET 1.1 リリースで直されました。
Axis 1.1RC2 でこの問題を対処するには、WSDD ファイルに以下の項目を追加します。
<globalConfiguration>
<parameter name="axis.sendMinimizedElements" value="false"/>
</globalConfiguration>
.NET 1.0 クライアントをサポートしなくてはいけない時のみ、このオプションを有効にすることをお勧めします。
質問: java.util.Map を C# に送信するお勧めの方法を教えてくれませんか?
/DotNetInteropMapInfo
質問: 誰か JavaBean のシリアライズと C# あるいは他の .Net クライアントからのアクセスについてのサンプルを提供してくれませんか? (wsdl.exe を使用して) Axis が生成した WSDL から、C# のクライアントプロキシを生成することはできたのですが、それを使用する際、プロキシがレスポンスをアンマーシャルしようとすると [System.InvalidOperationException] が発生します。
回答: 実際に動いている bean のサンプルについてはこちらをご覧下さい。http://www.pankaj-k.net/axis4tag/ (これは Java のみのサンプルで、質問したものとは違います)。.Net Framework 1.0 には、クライアント側で空配列がデシリアライズされる際にこの種のエラーが発生するというバグがあります。http://support.microsoft.com/default.aspx?scid=kb;en-us;330065
質問: Microsoft .NET Framework 1.0 と 1.1 の間での、Webサービスに関連する変更点のリストはありますか?
回答: はい。以下の記事をご覧下さい。
[XML & Web Services Changes in .NET Framework 1.1 (.NET Framework 1.1 における XML とWebサービスの変更点)]
[Changes in System.web.services from .NET Framework 1.0 to 1.1 (System.web.services の、.NET Framework 1.0 から 1.1 への変更点)]
資料
[MSDN Web Services Developer Center (MSDN Webサービス開発者センタ)]
[West Wind Technologies White Papers (West Wind Technologies ホワイトペーパ)]