Web services Elixir调用Axis2 Java SOAP Web服务,使用洗涤剂Ex和洗涤剂
在Elixir中,我尝试使用调用SOAP Web服务,它是Erlang库的包装器 我可以在洗涤剂主页上调用示例中的SOAP Web服务,没有问题: 参数:Web services Elixir调用Axis2 Java SOAP Web服务,使用洗涤剂Ex和洗涤剂,web-services,soap,wsdl,erlang,elixir,Web Services,Soap,Wsdl,Erlang,Elixir,在Elixir中,我尝试使用调用SOAP Web服务,它是Erlang库的包装器 我可以在洗涤剂主页上调用示例中的SOAP Web服务,没有问题: 参数: wsdl_url = "http://www.webservicex.net/convertVolume.asmx?WSDL" action = "ChangeVolumeUnit" parameters = ["100","dry","centiliter"] 然而,当尝试调用Axis2 Java SOAP Web服务时,我遇到了一些问题
wsdl_url = "http://www.webservicex.net/convertVolume.asmx?WSDL"
action = "ChangeVolumeUnit"
parameters = ["100","dry","centiliter"]
然而,当尝试调用Axis2 Java SOAP Web服务时,我遇到了一些问题。例如:
按以下方式调用“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
关于我做错了什么有什么建议吗?根据实现,在
init\u模型上添加了前缀
def init_model(wsdl_url, prefix \\ 'p') do
Detergentex.Client.init_model(wsdl_url, prefix)
end
我建议添加一个空前缀。此代码
def is_wsdl(wsdl), do: :detergent.is_wsdl(wsdl)
def wsdl_operations(wsdl), do: :detergent.wsdl_operations(wsdl)
在directgentex/lib/directgentex/client.ex中
应替换为
def is_wsdl(wsdl) do
:detergent.is_wsdl(wsdl)
end
def wsdl_operations(wsdl) do
:detergent.wsdl_operations(wsdl)
end
因此,您将避免前缀不正确的错误。
我不知道哪里不对,因为两个版本似乎都是合法的
您的代码无论如何都无法工作-出现新错误:/
我的url代码有不同的错误:
wsdl_url = 'http://webapi.allegro.pl/service.php?wsdl'
第一个:
** (throw) {:error, 'Struct doesn\'t match model: recordtype not expected: p:doQuerySysStatus'}
src/erlsom_write.erl:366: :erlsom_write.findAlternative/4
src/erlsom_write.erl:256: :erlsom_write.processSubType/5
src/erlsom_write.erl:239: :erlsom_write.processElementValues/7
src/erlsom_write.erl:130: :erlsom_write.struct2xml/6
src/erlsom_write.erl:326: :erlsom_write.processAlternativeValue/8
src/erlsom_write.erl:239: :erlsom_write.processElementValues/7
src/erlsom_write.erl:114: :erlsom_write.struct2xml/6
src/erlsom_write.erl:326: :erlsom_write.processAlternativeValue/8
纠正后:
** (Protocol.UndefinedError) protocol String.Chars not implemented for {:ok, :undefined, :undefined}
(elixir) lib/string/chars.ex:3: String.Chars.impl_for!/1
(elixir) lib/string/chars.ex:17: String.Chars.to_string/1
(elixir) lib/io.ex:429: IO.puts/2
因此,我想这一次似乎是编码有问题。谢谢你的建议。尽管如此,我尝试将代码从wsdl=directonex.init_模型(wsdl_url)
更改为wsdl=directonex.init_模型(wsdl_url.)
,但仍然收到相同的错误消息。您使用的库的版本是什么?我使用的是directonex版本0.0.7(最新的十六进制版本,截至今天)似乎这可能是erlsom
解析中的一个已知问题:我在抓救命稻草,但将:action=“getBank”
更改为action=“tns:getBank”
帮助?不,在操作中删除tns:
没有帮助。返回了一个错误:{:error,'operation not found'}
我试图更改此设置并重新编译洗涤剂,但似乎没有什么不同。我仍然收到相同的错误消息Struct与model:recordtype不匹配:p:getBank
知道区别是什么吗?(对我来说,这两个版本似乎做了完全相同的事情,尽管我绝不是长生不老药专家)这些代码替换似乎是相同的。Elixir在内部将所有内容编译成do:
格式。