代码之家  ›  专栏  ›  技术社区  ›  DavidAndroidDev

Soap元素没有xsi:nil作为属性,但反序列化不会使对象不为null

  •  1
  • DavidAndroidDev  · 技术社区  · 14 年前

    在XML和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中没有xsi:nil=真将允许对象在 生成的类类型

    1 回复  |  直到 11 年前
        1
  •  0
  •   DavidAndroidDev    14 年前

    事实上,我发现了问题所在。我在这里输入的SOAP消息实际上是该公司文档中的一个示例。我试图用它来模拟我们将收到的消息。在比较从XSD生成的类文件之后,我注意到 <CS> 实际上没有在文件中定义。反序列化时,它找不到该元素,因此不填充任何内容,因为我们从 <Data> <CS> 元素。去掉那个元素就解决了这个问题。我已经通知公司他们的文件有误。