我需要使用下面的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>
请建议。
答案 0 :(得分:0)
我能给出的最好建议是停止使用WADL。找到一个体面的HTTP库和XML解析器,使用您正在使用的任何语言,并创建您的XML文件并发布它。只需几行代码就可以实现这一目标。
通过以您的方式使用WADL和xsd,您所实现的只是在客户端和服务器之间创建紧密耦合。这将否定REST系统应该带来的大部分好处。你可以坚持使用SOAP,至少工具是成熟的。