Web services SOAPWebService播放中客户端框架2.5.1

Web services SOAPWebService播放中客户端框架2.5.1,web-services,soap,playframework,playframework-2.5,Web Services,Soap,Playframework,Playframework 2.5,我正在尝试使用PlayWebService API开发SOAPWebService客户端,但我不知道如何做到这一点。我找到了链接: 但我没有看到任何示例代码,如何使用WSClient使用SOAP Web服务。 非常感谢您的建议。通过Play使用SOAP web服务基本上有两种方法(为了完整起见,我添加了两种) 使用Play WS模块(如您所尝试的)——当您将要使用XML时,您可以调用: 使用(您自己的)SOAP库-您可以在build.sbt文件中作为依赖项提供您的库,也可以将其放在Play项

我正在尝试使用PlayWebService API开发SOAPWebService客户端,但我不知道如何做到这一点。我找到了链接: 但我没有看到任何示例代码,如何使用WSClient使用SOAP Web服务。
非常感谢您的建议。

通过Play使用SOAP web服务基本上有两种方法(为了完整起见,我添加了两种)

  • 使用Play WS模块(如您所尝试的)——当您将要使用XML时,您可以调用:


  • 使用(您自己的)SOAP库-您可以在
    build.sbt
    文件中作为依赖项提供您的库,也可以将其放在Play项目的类路径中,然后使用它。 还可以看看scalaxb()

  • 嗨,谢谢你的帮助,但我还有一个问题。在您的示例1中,变量url应该指向asmx文件(例如)或特定的webmethod(例如)。我写了以下内容:ws.url(“,”乌克兰”).get()。然后应用(WSResponse::asXml)和CompletionFuture completed,对该Web服务的任何调用都将被执行,并且结果文档为null。url应该明确指向您将要使用的资源-因此在您的示例中指向GetCitiesByCountry操作。但是请注意,它们需要一个
    POST
    请求-因此您必须使用
    .POST()
    而不是
    .get()
    嗨,我将代码更改为
    CompletionStage responseStage=ws.url(“http://www.webservicex.net/globalweather.asmx/GetCitiesByCountry)。setQueryParameter(“国家名称”、“乌克兰”).setRequestTimeout(5000).post(“内容”).thenApply(WSResponse::asXml)
    ws.url(“http://www.webservicex.net/globalweather.asmx/GetCitiesByCountrysetRequestTimeout(5000).post(“CountryName=Ukraine”).thenApply(WSResponse::asXml)现在播放时抛出`org.xml.sax.SAXParseException;行号:1;列数:1;prolog中不允许内容。`因为这是一些与xml相关的错误,我试图生成
    WSResponse
    对象(删除
    然后应用
    ),现在作为响应,我得到
    NettyResponse{statusCode=500 body=System.InvalidOperationException:请求格式无效:text/plain.}
    。类似的响应适用于
    text/xml
    application/soap+xml
    这可能是因为soap比rest-WS更复杂,您必须在HTTP请求上使用
    SOAPAction
    头指定被调用的方法。一般来说,我建议不要编写自己的soap客户机,因为有开源的可靠库。
    CompletionStage<Document> documentPromise = ws.url(url).get().thenApply(WSResponse::asXml);
    
    String value = XPath.selectText("//value", yourXmlDocument);
    Node node = XPath.selectNode("//node", yourXmlDocument);