Javaで.NET Webサービスを利用する最良の方法
-
10-07-2019 - |
質問
JAX-WSを使用して、いくつかの.NET Webサービスを利用しようとしています。 wsimportツールを使用してJavaクラスを生成しました。ただし、これらの(パブリックではなく独自の)WebサービスをJavaで使用しようとすると、ベンダーが提供するC#の例で提供されているメソッドとプロパティのほとんどが、生成されたクラスで利用できません(エラーは発生していませんが) WSDLファイルからJavaクラスを生成する場合)。 Webサービスへの接続も基本的に機能します。
.NET SDKからwsdl.exeを使用してC#クラスを生成しようとすると、すべてのメソッドが適切に生成されました。
.NET Webサービスを利用してJavaですべての機能を使用できるようにする最良の方法は何ですか?また、wsimportがWSDLファイルに記述されているすべてのメソッドとプロパティの小さなサブセットのみを生成するのはなぜですか?
例:WSDLファイルUserManagement.wsdlにスニペットがあります
<s:schema elementFormDefault="qualified" targetNamespace="http://www.initechsystems.com/initech7/initechws/">
<s:element name="UserSecurityContext" type="s2:UserSecurityContext"/>
<s:complexType name="UserSecurityContext">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Token" type="s2:UserToken"/>
</s:sequence>
</s:complexType>
<s:complexType name="UserToken">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Value" type="s:string"/>
</s:sequence>
</s:complexType>
</s:schema>
C#では、次のようにUserSecurityContextにアクセスできます。
UserManagement userMgmt = new UserManagement();
userMgmt.UserSecurityContextValue = new SampleWS.UserRef.UserSecurityContext();
ただし、JavaではUserManagementオブジェクトを作成できます
UserManagement userMgmt = new UserManagement();
ただし、生成されたUserManagementオブジェクトには、アクセス可能なオブジェクトSecurityContextも、そのようなプライベートオブジェクトのgetterまたはsetterもありません。
他のヒント
この例は、単なるモデル(または、より良いSOA用語を好む場合はメッセージ)ではなく、ワイヤー経由でオブジェクトを送信するように聞こえるので、あなたが話している例を見てみたいです。
データモデルまたはメッセージとしてフォーマットされたオブジェクトを送信する場合、使用するメソッドは含まれません。また、相互運用機能を使用すると、動作(メソッド)を設定してネットワークを横断することはあまり意味がありません。
できることは、シリアライズしているので、ビヘイビアメソッドを作成できます。個人的には、他のオブジェクトで動作を作成し、モデル/メッセージを状態コンテナーとして保持します。ただし、走行距離は異なる場合があります。 ;-)