SoapUI MockServices 返回 html 而不是 xml response

2022-09-04 19:59:53

使用以下示例 WSDL 文件,我在 SOAP UI(版本 3.5)中生成了一个新项目,并创建了示例测试套件、测试用例和模拟服务。

断续器

<definitions name="HelloService"
   targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">

   <message name="SayHelloRequest">
      <part name="firstName" type="xsd:string"/>
   </message>
   <message name="SayHelloResponse">
      <part name="greeting" type="xsd:string"/>
   </message>

   <portType name="Hello_PortType">
      <operation name="sayHello">
         <input message="tns:SayHelloRequest"/>
         <output message="tns:SayHelloResponse"/>
      </operation>
   </portType>

   <binding name="Hello_Binding" type="tns:Hello_PortType">
   <soap:binding style="rpc"
      transport="http://schemas.xmlsoap.org/soap/http"/>
   <operation name="sayHello">
      <soap:operation soapAction="sayHello"/>
      <input>
         <soap:body
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
            namespace="urn:examples:helloservice"
            use="encoded"/>
      </input>
      <output>
         <soap:body
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
            namespace="urn:examples:helloservice"
            use="encoded"/>
      </output>
   </operation>
   </binding>

   <service name="Hello_Service">
      <documentation>WSDL File for HelloService</documentation>
      <port binding="tns:Hello_Binding" name="Hello_Port">
         <soap:address
            location="http://www.examples.com/SayHello/"/>
      </port>
   </service>
</definitions>

我可以启动模拟服务并通过浏览器访问,从而我看到指向wsdl的链接并可以查看它。

但是,通过使用默认生成的 soap 请求(如下所示),它将返回 html 响应(显示为网页),而不是我配置的 soap 响应。

请求

POST http://localhost:8088/SayHello/ HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: "sayHello"
User-Agent: Jakarta Commons-HttpClient/3.1
Host: localhost:8088
Content-Length: 467

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:helloservice">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:sayHello soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <firstName xsi:type="xsd:string">James</firstName>
      </urn:sayHello>
   </soapenv:Body>
</soapenv:Envelope>

响应

HTTP/1.1 200 OK
Content-Type: text/html; charset=iso-8859-1
Transfer-Encoding: chunked
Server: Jetty(6.1.x)

<html><body><p>There are currently 1 running soapUI MockServices</p><ul><li><a href="/mockHello_Binding?WSDL">Hello_Binding MockService</a></li></ul></p></body></html>

我配置了一个示例响应,如下所示:

模拟上的示例响应

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:examples:helloservice">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:sayHelloResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <greeting xsi:type="xsd:string">?</greeting>
      </urn:sayHelloResponse>
   </soapenv:Body>
</soapenv:Envelope>

它配置为默认响应,因此我不知道为什么不返回它。

有什么建议吗?+1是任何有助于我进步的东西。

谢谢


答案 1

不会为请求中的端点 URL 启动任何服务:。唯一启动的服务位于服务响应中报告的 URL。SoapUI 在请求不存在的模拟服务时,在 HTML 页面中返回所有已启动的模拟服务的列表。请考虑修复终结点地址以解决此问题。http://localhost:8088/SayHello/http://localhost:8088/mockHello_Binding


答案 2

我在使用肥皂UI 5.4.0时遇到了同样的问题。发生这种情况是因为创建的模拟服务的路径不正确。

如果你在 soap UI 中单击创建的 mock service - 底部的属性按钮 - 你会看到你的路径看起来像 /mockBindingservice,它应该说 /。

要更改它,请双击创建的模拟服务,单击停止服务而不是设置按钮(位于停止和启动按钮旁边)。更改路径到 / 并仔细检查主机。

保存,启动服务。现在应该工作了。

我知道这是一个旧帖子,但希望它能帮助sombody寻找anwser。


推荐