Elixir使用detergentex和洗涤剂调用Axis2 Java SOAP Web服务

时间:2015-10-14 21:08:23

标签: web-services soap wsdl erlang elixir

来自Elixir,我试图用detergentex调用SOAP Web服务,它是Erlang库detergent的包装器。

我可以在洗涤剂主页上的示例中调用SOAP Web服务,没有任何问题:http://www.webservicex.net/convertVolume.asmx?WSDL

参数:

wsdl_url = "http://www.webservicex.net/convertVolume.asmx?WSDL"
action = "ChangeVolumeUnit"
parameters = ["100","dry","centiliter"]

但是,当尝试调用Axis2 Java SOAP Web服务时,我遇到了一些问题。示例:http://www.thomas-bayer.com/axis2/services/BLZService?wsdl

致电" getBank"以下列方式

wsdl_url = "http://www.thomas-bayer.com/axis2/services/BLZService?wsdl"
action = "getBank"
parameters = ["abc"]
wsdl = Detergentex.init_model(wsdl_url)
res = Detergentex.call(wsdl, action, parameters)

我收到以下错误消息:

{:error, 'Struct doesn\'t match model: recordtype not expected: p:getBank'}

使用以下堆栈跟踪

    src/erlsom_write.erl:357: :erlsom_write.findAlternative/4
    src/erlsom_write.erl:258: :erlsom_write.processSubType/5
    src/erlsom_write.erl:241: :erlsom_write.processElementValues/7
    src/erlsom_write.erl:132: :erlsom_write.struct2xml/6
    src/erlsom_write.erl:323: :erlsom_write.processAlternativeValue/8
    src/erlsom_write.erl:241: :erlsom_write.processElementValues/7
    src/erlsom_write.erl:116: :erlsom_write.struct2xml/6
    src/erlsom_write.erl:323: :erlsom_write.processAlternativeValue/8
    src/erlsom_write.erl:241: :erlsom_write.processElementValues/7
    src/erlsom_write.erl:45: :erlsom_write.write/2
    src/detergent.erl:211: :detergent.call_attach/8

关于我做错了什么的任何建议?

2 个答案:

答案 0 :(得分:0)

根据实施,init_model上添加了前缀。

def init_model(wsdl_url, prefix \\ 'p') do
   Detergentex.Client.init_model(wsdl_url, prefix)
end

我建议添加一个空前缀。

答案 1 :(得分:-2)

此代码

text_field

在detergentex / lib / detergentex / client.ex中 应该替换为

number_field(:coupon, :value, step: 0.01)

这样您就可以避免错误前缀的错误。 我不知道出了什么问题,因为这两个版本似乎都是合法的。

您的代码无论如何都无法运行 - 出现新错误:/

我的网址代码有不同的错误:

 def is_wsdl(wsdl), do: :detergent.is_wsdl(wsdl)

 def wsdl_operations(wsdl), do: :detergent.wsdl_operations(wsdl)

第一个:

 def is_wsdl(wsdl) do 
   :detergent.is_wsdl(wsdl)
 end

 def wsdl_operations(wsdl) do 
   :detergent.wsdl_operations(wsdl)
 end

并在纠正之后:

wsdl_url = 'http://webapi.allegro.pl/service.php?wsdl'

所以这一次看起来我觉得编码有问题。