2013-04-15 32 views
3

我的問題可能首先似乎有一個副本,但我打了一些令我驚訝的東西。 Yaws Webserver配備了一套完整的SOAP例子,但是當我試圖運行原樣,這是我得到: enter image description hereErlang和SOAP服務 - 一個搖滾和一個難的地方

以文本的形式,這是我在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。

+0

的響應,我也與Erlang和SOAP玩,現在脫下重要的東西。我在自己的WS上遇到了一些問題,但天氣示例已經開箱即用。我在Linux上使用Erlang R15B02和Yaws 1.94。 –

+0

讓我改變雅司的版本,看看。可能也是因爲我使用Windows 7 –

+0

仍然遇到'yaws-1.94'的相同問題。讓我轉移到Linux,看看結果。但是,在R15B02中,您還可以獲得「樂趣」警告? –

回答

3

這是一個醜陋的黑客攻擊,但這裏是我如何處理SOAP請求:

寫一個函數/模塊封裝了以下內容:

  1. 設置一些請求模板(靜態個XML)並填寫他們與erlydtl
  2. 做一個HTTP POST請求(使用你選擇的客戶端)與SoapAction頭集。
  3. 使用erlsom
+0

是真的!這工作!謝謝。我使用'erlsom SAX'解析來從需求中獲得我需要的東西。而且我可以將肥皂響應構建回客戶端。 –

2

從官方documentation我們可以看到以下幾點:

元組的玩意兒(與模塊的名稱和功能的兩個元素的數組)是 現在正式使用,將在R16被刪除。改爲使用'有趣的M:F/A' 。

所以,雅司病應該更新。作爲一種解決辦法,至少有兩種選擇:

  1. Detergent
  2. 或者,如果你不介意使用(不那麼)舊的二郎R15,我認爲它應該工作,爲其他用戶報道。