3

我需要使用下面的 wadl 文件测试身份验证过程:

<application xmlns="http://research.sun.com/wadl/2006/10" 
         xmlns:sis="http://sis.thecompany.com/" >
<grammars>
    <include href="http://localhost/wadl/sis.xsd"/>
</grammars>
<resources base="http://192.168.10.139">
    <resource path="/user/sign_in">
        <method name="POST" id="Authentication">
            <request>
                <param name="user" type="sis:user" required="true"/>
                <representation mediaType="application/xml" element="sis:user"/>
            </request>
            <response status="201">
                <representation mediaType="application/xml"/>
                <fault status="401" />
            </response>
        </method>
    </resource>
</resources>

将此文件导入soapUI Pro后,单击“请求”没有任何操作。原因是soapUI Pro 没有看到xsd 中出现的元素“sis:user”,并且认为它只是一些具有未定义类型的单个元素。你能建议 wadl 文件有什么问题吗?

下面是使用的 sis.xsd 模式:

<?xml version="1.0" encoding="utf-8"?> <xs:schema id="SIS" targetNamespace="http://sis.thecompany.com/" elementFormDefault="qualified" xmlns="http://sis.thecompany.com/" xmlns:mstns="http://sis.thecompany.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"> <xs:element name="application"> <xs:complexType> <xs:all> <xs:element name="user" minOccurs="0"> <xs:xs:complexType> <xs:all minOccurs="1"> <xs:element name="login" type="xs:string" /> <xs:element name="password" type="xs:string" /> </xs:all> </xs:complexType> </xs:element> </xs:all> </xs:complexType> </xs:element> </xs:schema>

还有下一个问题。如果soapUI Pro 将正确解析来自xsd 的complexType 元素用户 - 来自soapUI Pro 的POST 数据将是下一个:

<sis:user><sis:login>admin</sis:login><sis:password>admin!</sis:password></sis:user>

但是由于附加前缀“sis:”,这将被服务器拒绝。服务器只支持下一种格式

<user><login>admin</login><password>admin!</password></user>

请指教。

4

1 回答 1

0

我能给出的最好建议是停止使用 WADL。用你使用的任何语言找到一个像样的 HTTP 库和 XML 解析器,然后创建你的 XML 文件并发布它。只需几行代码即可实现这一目标。

通过以您的方式使用 WADL 和 xsd,您所实现的只是在客户端和服务器之间创建紧密耦合。这将否定 REST 系统应该带来的大部分好处。您不妨坚持使用 SOAP,至少工具是成熟的。

于 2010-12-15T00:22:52.553 回答