DLNA サービス/クライアントの Java スタブを作成しますか?(または、XML ファイルの <scpd> ルート タグとは何ですか?)
-
19-09-2019 - |
質問
DLNA の仕様を見ると、メタデータ通信のほとんどは SOAP ベースであるようです。ただし、さまざまなサービスのいずれにも WSDL のようなものが見つかりません。代わりに、次のようなサービス記述言語があります。
<scpd>
<serviceStateTable>
<stateVariable>
<Optional />
<name>TransferIDs</name>
<sendEventsAttribute>yes</sendEventsAttribute>
<dataType>string</dataType>
...
</stateVariable>
</serviceStateTable>
<actionList>
<action>
<name>Browse</name>
<argumentList>
<argument>
<name>ObjectID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_ObjectID</relatedStateVariable>
</argument>
...
</argumentList>
</action>
...
</actionList>
</scpd>
この形式に関するドキュメントや、WSDL のようにサーバーまたはクライアントのスタブを生成するツールが見つかりません。現時点での私の選択肢は次のようになります
- XSLT を作成して記述子言語の変換を試みます の中へ wsdl
- 既存の記述子言語で動作する Java コード生成ツールを作成する
- SOAP メッセージを手動でシリアル化/逆シリアル化するためのスタブとコードを作成する
3 つのオプションはどれも同様に魅力的ではないように思えますが、最初のオプションは最も手間がかからないようですが、それほど大きな意味はありません。この問題をより適切に対処するための提案はありますか?
解決
私は最終的には手動でXMLを解析し、クライアントとサーバーのスタブを作成するためのコード生成ツールを使用します。
他のヒント
それが助け場合は、 ohNet には、UPnPサービスごとにクラスを作成するために、同様のアプローチを使用していますSOAPメッセージのすべて(デ)シリアライズを処理する(C ++、C#、Javaの、JavaScriptやCのお好みで)ます。
所属していません StackOverflow