Ruby SavonV3.x-如何将完整的xml消息作为soap请求传递
使用Savon版本3.x(找到当前主分支) 目前,要在savon 3中生成soap请求,需要将消息体定义为散列,例如:Ruby SavonV3.x-如何将完整的xml消息作为soap请求传递,ruby,xml,soap,soap-client,savon,Ruby,Xml,Soap,Soap Client,Savon,使用Savon版本3.x(找到当前主分支) 目前,要在savon 3中生成soap请求,需要将消息体定义为散列,例如: operation.body = { Search: { accountID: 23, accountStatus: 'closed' } } response = operation.call 从散列中,savon将生成完整的soap消息xml(信封、标题等),并将该消息传递到HttpClient,以将请求发布到soap端点 我希望能够作为请求传入
operation.body = {
Search: {
accountID: 23,
accountStatus: 'closed'
}
}
response = operation.call
从散列中,savon将生成完整的soap消息xml(信封、标题等),并将该消息传递到HttpClient,以将请求发布到soap端点
我希望能够作为请求传入完整的xml消息,而不是散列,例如:
我的xml请求消息
..... 更多的嵌套节点、名称空间和大量属性等等。。。。。
"
似乎body
被发送到build
以创建soap请求,然后由call
发布:
所以我想是去猴子补丁<代码>调用以允许我用xml块覆盖生成
,例如:
def call
raw_response = @http.post(endpoint, http_headers, my_xml_request_message)
Response.new(raw_response)
end
这就是我们陷入困境的地方——我不清楚我的xml是否正确创建或发布。或者如果这是正确的方式继续
提前感谢您的帮助 我还没有使用Savon3,因为它还不稳定。您可以在v2中执行以下操作:
client.call(:authenticate, xml: "<envelope><body></body></envelope>")
client.call(:身份验证,xml:)
我想类似的东西也可以在v3中使用。它存在于v1和v2中。猴子补丁解决了我们的问题-所以我认为这是目前的好答案。 我们希望尽可能将此解决方案添加到savon 3 master中,详细信息: 更多背景:
我们已经使用Savon作为SOAP主干构建了一个webservices(SOAP和REST)测试框架。在我们的框架中,我们定义了两个描述每个wsdl操作的方法,我们的用例是在希望将xml主体定义为散列(如savon的示例_body()所述)或传递完整的原始xml信封时,允许使用savon body()方法,我们可以通过monkey补丁使用上面的原始xml_信封()方法 嗨。谢谢你的回复。是的,我用v2做的。我们使用v3构建了一个框架,因为我们喜欢savon在重写时所采用的方法。到目前为止,一切都很顺利,但我们确实希望传入完整的xml(不幸的是,在本例中,savon的示例_body方法无法生成body()散列)Savon>操作中的方法:
类Savon类操作attr\u访问器:raw\u xml\u message def call message=(raw\u xml\u message!=nil?raw\u xml\u message:build)raw\u response=@http.post(端点,http\u头,消息)response.new(raw\u response)结束
然后,如果我们不想为def body
定义has,我们将在我们的框架中包含一个新方法def raw\u xml\u message
。这个补丁应该添加到Savon 3 master还是有更好的解决方案?
client.call(:authenticate, xml: "<envelope><body></body></envelope>")
class Savon
class Operation
attr_accessor :raw_xml_envelope
def call
message = (raw_xml_envelope != nil ? raw_xml_envelope : build)
raw_response = @http.post(endpoint, http_headers, message)
Response.new(raw_response)
end
end
end