Erlang和SOAP服务 - 摇滚和硬地

时间:2013-04-15 17:46:17

标签: web-services soap erlang mnesia yaws

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

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

1> inets:start().
ok
2> yaws_soap_lib:call("http://www.webservicex.net/WeatherForecast.asmx?WSDL","GetWeatherByPlaceName",["Boston"]).
=ERROR REPORT==== 15-Apr-2013::20:32:11 === Call to tuple fun {erlsom_parse,xml2StructCallback}. Tuple funs are deprecated and will be removed in R16. Use "fun M:F/A" instead, for example "fun erlsom_parse:xml2StructCallback/2". (This warning will only be shown the first time a tuple fun is called.) {error,{decoding,"Malformed: Illegal character in prolog"}}
3> yaws_soap_lib:call("http://www.webservicex.net/WeatherForecast.asmx?WSDL","GetWeatherByPlaceName",["Boston"]). {error,{decoding,"Malformed: Illegal character in prolog"}} 4>


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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

  

Tuple funs(具有模块名称和功能的双元素元组)是   现已正式弃用,将在R16中删除。使用'有趣的M:F / A'   代替。

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

  1. Detergent
  2. 或者,如果你不介意使用(不是那么)旧的Erlang R15,我相信它应该可以正常工作,正如其他用户所报道的那样。