【问题标题】:Erlang and SOAP services - A rock and a hard placeErlang 和 SOAP 服务 - 坚如磐石
【发布时间】:2013-04-07 22:34:43
【问题描述】:

我的问题可能首先似乎有重复,但我遇到了令我惊讶的事情。 Yaws Webserver 带有一个完整的 SOAP 示例,但是当我尝试按原样运行它时,这就是我得到的:

在文本形式中,这是我在 shell 中看到的:

1> inets:开始()。 好的 2> yaws_soap_lib:call("http://www.webservicex.net/WeatherForecast.asmx?WSDL","GetWeatherByPlaceName",["波士顿"])。
=错误报告==== 2013 年 4 月 15 日::20:32:11 === 调用元组 fun {erlsom_parse,xml2StructCallback}。 元组函数已弃用,将在 R16 中删除。请改用“fun M:F/A”,例如“fun erlsom_parse:xml2StructCallback/2”。 (这个警告只会在第一次调用元组 fun 时显示。) {error,{decoding,"Malformed: Illegal character in prolog"}}
3> yaws_soap_lib:call("http://www.webservicex.net/WeatherForecast.asmx?WSDL","GetWeatherByPlaceName",["波士顿"])。 {error,{decoding,"Malformed: Illegal character in prolog"}} 4>

您可以尝试page 之后的 yaws 示例。
另一个问题是,我尝试过其他 SOAP 库,例如 detergenterlsoap,它们要么太旧,要么完全无法使用。大多数解决方案,甚至是 yaws,都提到了他对 erlsom 的依赖,我非常认为是用于 XML 解析。但是,我很难单独使用erlsom 来提供肥皂服务。

有人提供了一些关于我如何在 erlang 中使用肥皂服务(sa 客户端和服务器)的信息,请解释我在使用 yaws 时遇到的错误。我正在使用最新的 yaws 版本和 erlang 15B。

【问题讨论】:

  • 我现在也在玩 Erlang 和 SOAP。我自己的 WS 有一些问题,但是 Weather 示例开箱即用。我在 Linux 上使用 Erlang R15B02 和 Yaws 1.94。
  • 让我换个 yaws 版本看看。可能也是因为我使用的是 Windows 7
  • 仍然遇到与yaws-1.94 相同的问题。让我转向 linux 看看结果。但是,对于 R15B02,您还会在哪里收到 fun 警告?

标签: web-services soap erlang mnesia yaws


【解决方案1】:

这是一个丑陋的 hack,但这是我处理 SOAP 请求的方式:

编写一个包含以下内容的函数/模块:

  1. 设置一些请求模板(静态 XML)并用erlydtl 填充它们
  2. 发出 HTTP POST 请求(使用您选择的客户端)并设置 SoapAction 标头。
  3. 使用erlsom从响应中删除重要内容

【讨论】:

  • 真的!这行得通!谢谢你。我使用erlsom SAX 解析从请求中获取我需要的内容。而且我可以将soap响应构造回给客户。
【解决方案2】:

从官方documentation我们可以读到以下内容:

Tuple funs(具有模块名称和函数的两元素元组)是 现在正式弃用,将在 R16 中删除。使用“有趣的 M:F/A” 而是。

所以,Yaws 应该更新了。作为一种解决方法,您至少有两个选择:

  1. Detergent
  2. 或者,如果您不介意使用(并非如此)较旧的 Erlang R15,我相信它应该可以工作,正如其他用户所报告的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多