Soap - 要素にはプロパティとして xsi:nil がありませんが、逆シリアル化してもオブジェクトが null ではなくなりません
-
26-09-2019 - |
質問
XML と SOAP メッセージに関しては、私は全くの初心者です。...これが SOAP メッセージです。
<?xml version="1.0" encoding="utf-8" ?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CR>
<Username xmlns="<Hidden>">mtas</Username>
<Password xmlns="<Hidden>">password</Password>
<id xmlns="<Hidden>">
70dad12b-bb50-402d-8b34-
fe2d4c0c283d
</id>
<Data xmlns="<Hidden>">
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="<Hidden>">
<CS>
<CSCallbackRequest xmlns="">
<CDS xsi:nil="true" xmlns="<Hidden>"/>
<CDRP xmlns="<Hidden>"/>
<UDI xsi:nil="true"
xmlns="<Hidden>"/>
</CSCallbackRequest>
</CS>
<Fault xsi:nil="true" />
<Comment xsi:nil="true"/>
</Data>
</Data>
</CR>
</s:Body>
</s:Envelope>
xsd.exe ツールを使用してクラスを生成し、逆シリアル化するクラスを提供しました。この .xsd ファイルは、SOAP メッセージの受信元である会社によって提供されました。
ここが問題です。会社からこのタイプの応答を受け取ると、CSCallbackRequest 内で CDS、CDRP、UDI という 3 つの要素を探します。受信しているコールバックのタイプを判断しようとしています。私の最初の仮定は、タイプ (生成されたクラスの種類)、xsi:nil=true を持たない CSCallbackRequest 内の要素は、 生成されたクラスの種類 オブジェクトは null にはなりません。しかしそうではありません。逆シリアル化後に、 を持つプロパティに xsi:nil プロパティがないかどうかを確認するにはどうすればよいですか?
解決
実は、私はこの問題を考え出しました。私はここに置かSOAPメッセージは、実際には、同社のドキュメントからの例です。私たちは受け取るだろうとのメッセージのためのモックアップとしてこれを使用しようとしました。 XSDから生成されたクラスファイルを比較した後、私は<CS>
が実際のファイルで定義されていなかったことに気づきました。それはデシリアライズされたとき、我々は<Data>
要素以降からデシリアライズ開始して以来、それは、その要素、それゆえ移入何も見つけられないでしょう。私は、ドキュメント内の他の例を確認し、それらは、この余分な<CS>
要素を持っていませんでした。その要素の削除すると、この全体の問題を修正しました。私は、ドキュメントでそのエラーの会社を通知してきます。