使用ruby/savon定制绑定oracle WFC web服务
我试图使用一个带有ruby和savon的非基本HTTP绑定的wfc web服务 WS-provider使用消息、保护、服务策略实现了oracle/wss11、用户名、令牌 ) 如果我理解正确,由于非基本http绑定,此策略需要某种加密(根据此) 所描述的WS实际上是通过ssl实现的,这可能是所有问题的根源,因为我实现得很差 甚至可以使用带有savon的非基本http绑定的WFC WS吗 我的背景是ruby和rails,但我不熟悉WS(和savon)和ssl的使用 现在WS的提供者并没有提供太多的支持。事实上,它们只提供对java或.net实现的支持(考虑到它是WS,因此与平台无关,这可能吗?) 试图运行以下相当简单的代码使用ruby/savon定制绑定oracle WFC web服务,ruby,oracle,web-services,ssl,savon,Ruby,Oracle,Web Services,Ssl,Savon,我试图使用一个带有ruby和savon的非基本HTTP绑定的wfc web服务 WS-provider使用消息、保护、服务策略实现了oracle/wss11、用户名、令牌 ) 如果我理解正确,由于非基本http绑定,此策略需要某种加密(根据此) 所描述的WS实际上是通过ssl实现的,这可能是所有问题的根源,因为我实现得很差 甚至可以使用带有savon的非基本http绑定的WFC WS吗 我的背景是ruby和rails,但我不熟悉WS(和savon)和ssl的使用 现在WS的提供者并没有提供太多的
require 'savon'
client = Savon.client do
wsdl "https://apps.ika.gr/hospitalisationWSS_TEST-hospitalisationWSS_TEST-context-root/MainWSClassPort?WSDL"
wsse_auth "ΥΥΥΥ", "ΧΧΧΧ" # ALTERED
wsse_timestamp true
pretty_print_xml true
log_level :debug
ssl_verify_mode :none
ssl_cert_file "files/ika.cer" # provided by WS provider
end
save_admission_hl7_msg = "MSH|^~\&|||||201310111112||ADT^A13^ADT_A13|2013000012113|P|2.6|||||||||66645678912345678945|^^^^^^^^^10000\nEVN|A13|201310101122|||nosiliapap\nPID\nPV1||I|||||||||||||||||2013000012111|||||||||||||||||||||||||||||||2013000012113\n"
response = client.call(:save_admission_hl7,
:attributes => { :xmlns => "http://bean.intracom.com/" },
:message => { :arg0 => { :@xmlns=>'', :content! =>{ :hl7ADT => save_admission_hl7_msg } } } )
end
puts response.body
获得以下输出
D, [2013-12-04T08:21:20.445549 #3088] DEBUG -- : HTTPI GET request to apps.ika.gr (httpclient)
I, [2013-12-04T08:21:22.074643 #3088] INFO -- : SOAP request: https://apps.ika.gr/hospitalisationWSS_TEST-hospitalisationWSS_TEST-context-root/MainWSClassPort
I, [2013-12-04T08:21:22.074643 #3088] INFO -- : SOAPAction: "saveAdmissionHl7", Content-Type: text/xml;charset=UTF-8, Content-Length: 1363
D, [2013-12-04T08:21:22.075643 #3088] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://bean.intracom.com/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header>
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-1">
<wsse:Username>YYYY</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XXXX</wsse:Password>
</wsse:UsernameToken>
<wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-2">
<wsu:Created>2013-12-04T06:21:22Z</wsu:Created>
<wsu:Expires>2013-12-04T06:22:22Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</env:Header>
<env:Body>
<tns:saveAdmissionHl7 xmlns="http://bean.intracom.com/">
<arg0 xmlns="">
<hl7ADT>MSH|^~&|||||201310111112||ADT^A13^ADT_A13|2013000012113|P|2.6|||||||||66645678912345678945|^^^^^^^^^10000
EVN|A13|201310101122|||nosiliapap
PID
PV1||I|||||||||||||||||2013000012111|||||||||||||||||||||||||||||||2013000012113
</hl7ADT>
</arg0>
</tns:saveAdmissionHl7>
</env:Body>
</env:Envelope>
D, [2013-12-04T08:21:22.076643 #3088] DEBUG -- : HTTPI POST request to apps.ika.gr (httpclient)
I, [2013-12-04T08:21:22.472665 #3088] INFO -- : SOAP response (status 500)
D, [2013-12-04T08:21:22.473665 #3088] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:Fault xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://www.w3.org/2003/05/soap-envelope">
<faultcode xmlns:ns0="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">ns0:FailedCheck</faultcode>
<faultstring>FailedCheck : failure in security check</faultstring>
</ns2:Fault>
</S:Body>
</S:Envelope>
f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/response.rb:85:in `raise_soap_and_http_errors!': (ns0:FailedCheck) FailedCheck : failure in security check (Savon::SOAPFault)
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/response.rb:14:in `initialize'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/operation.rb:64:in `new'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/operation.rb:64:in `create_response'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/operation.rb:55:in `call'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/client.rb:36:in `call'
from eopyy.rb:82:in `<main>'
调试--:HTTPI获取对apps.ika.gr(httpclient)的请求
一、 [2013-12-04T08:21:22.074643#3088]信息--:SOAP请求:https://apps.ika.gr/hospitalisationWSS_TEST-hospitalisationWSS_TEST-context-root/MainWSClassPort
一、 [2013-12-04T08:21:22.074643#3088]信息--:SOAPAction:“保存许可HL7”,内容类型:text/xml;字符集=UTF-8,内容长度:1363
D、 [2013-12-04T08:21:22.075643#3088]调试--:
YYYY
XXXX
2013-12-04T06:21:22Z
2013-12-04T06:22:22Z
MSH | ^ ~&|||||201310111112 | ADT | A13 | ADT | u A13 | 20130000113 | P | 2.6 | 66645678912345678945 | 10000 |
EVN | A13 | 201310101122 | | |诺西利亚帕普
PID
PV1(一)
D、 [2013-12-04T08:21:22.076643#3088]调试--:HTTPI向apps.ika.gr(httpclient)发送POST请求
一、 [2013-12-04T08:21:22.472665#3088]信息--:SOAP响应(状态500)
D、 [2013-12-04T08:21:22.473665#3088]调试--:
ns0:失败检查
FailedCheck:安全检查失败
f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/response.rb:85:in'raise_soap_和_http_errors':(ns0:FailedCheck)FailedCheck:安全检查失败(Savon::SOAPFault)
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/response.rb:14:in'initialize'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/operation.rb:64:in'new'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/operation.rb:64:in'create_response'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/operation.rb:55:in'call'
from f:/rubystack/ruby/lib/ruby/gems/1.9.1/gems/savon-2.3.0/lib/savon/client.rb:36:in'call'
from eopyy.rb:82:in`'
现在,由于我对WS和SSL的使用知之甚少,我无法找出错误。
是SSL吗?我应该使用ssl\u ca\u证书文件而不是ssl\u证书文件吗?(显然我已经试过了)。我也需要使用密钥文件吗
提供者实际上提供了一个.jks文件(在上面的“ika.cer”证书旁边),但也提到它应该只在java实现中使用(而不是.net)。我已经解包了jks文件,并试图使用其中包含的证书和文件,但没有成功
非常感谢您提供的任何帮助、线索、提示。如果您在ssl\u certifite\u模式下运行:无您不需要认证文件。正如设置所建议的:没有认证。如果你希望人们回答你,你可能应该把你的问题减少到必要的最低限度。大多数人都愿意提供帮助,但不喜欢通过阅读别人的源代码来理解别人的问题。到目前为止,我可以使用Ruby/Savon使用各种WS。我的建议是首先使用SoapUI来找到一个有效的解决方案。这将把WS与Ruby问题分开。在第二步中,您可以将纯WS解决方案转换为Ruby解决方案。我很乐意帮助你。谢谢你的回复。我的印象是“无”只会忽略本地验证(从而忽略证书的有效性),但仍然将其用于连接。不管怎样,我试过了,但没有改变任何事情(同样的错误)。是的,关于我的文章长度,你也许是对的。尽管我的意图正好相反(我想给出整个情况)。您是否实际使用了带有savon的WFC WS使用ssl?关于SoapUI,我已经试过了,但没有成功。也就是说,当我给它一个wsdl url时,它只会因为一个“加载url失败”而崩溃(尽管url会在浏览器中打开),而且,在我的ruby脚本中,我实际上可以获取wsdl(并通过client.operations显示操作)。当我实际尝试发布到该程序时,该程序崩溃。我处理了由IIS(*.svc)和TomCat/JAX-WS托管的WS。两者都是用同一种描述语言“手工”完成的。我不知道WFC是Windows基础类??,看起来很奇怪,因为另一方面涉及Oracle软件。SoapUI崩溃是一个不好的迹象:-(。它在95%的情况下对我有效。我个人没有使用WSSE,所以我不能对此发表评论。