WADL:来自外部xsd的复杂类型

时间:2010-12-14 22:51:23

标签: rest xsd soapui wadl

我需要使用下面的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没有看到元素“sis:user”,因为它存在于xsdand中,认为它只是一些具有未定义类型的单个元素。你能告诉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>

请建议。

1 个答案:

答案 0 :(得分:0)

我能给出的最好建议是停止使用WADL。找到一个体面的HTTP库和XML解析器,使用您正在使用的任何语言,并创建您的XML文件并发布它。只需几行代码就可以实现这一目标。

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