1

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つの要素を探しています。受信しているコールバックのタイプを特定しようとしています。私の最初の仮定は、タイプ(生成されたクラスタイプ)のXMLSerializerを使用する場合、xsi:nil = trueを持たないCSCallbackRequest内の要素は、生成されたクラスタイプオブジェクト内のオブジェクトがnullにならないことを許可します。しかし、そうではありません。デシリアライズ後に、のプロパティにxsi:nilプロパティがないかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

0

実際、私はその問題を理解しました。ここに記載したSOAPメッセージは、実際には会社のドキュメントの例です。これを、受信するメッセージのモックアップとして使用しようとしていました。<CS>XSDから生成されたクラスファイルを比較した後、が実際にはファイルで定義されていないことに気付きました。デシリアライズしているときは、その要素が見つからないため、要素以降からデシリアライズを開始したため、何も入力されません<Data><CS>ドキュメントの他の例を確認しましたが、これらにはこの余分な要素はありませんでした。その要素を削除すると、この問題全体が修正されました。ドキュメントの誤りを会社に通知しました。

于 2010-09-29T18:21:25.067 に答える