我一直在使用soap4r并尝试使用SOAP:: header ::SimpleHandler,我试图让它在传出消息上放置一个自定义头部,但我不知道如何让它包含属性而不是作为子元素:
class ServiceContext < SOAP::Header::SimpleHandler
NAMESPACE = "http://context.core.datamodel.fs.documentum.emc.com/"
def initialize()
super(XSD::QName.new(NAMESPACE, 'ServiceContext'))
XSD::QName.new(nil, "Identities")
end
def on_simple_outbound
username = "username"
password = "password"
docbase = "Test"
return {"Identities" => {"Username" => username, "Password" => password, "Docbase" => docbase}}
end
end它返回:
<n1:ServiceContext xmlns:n1="http://context.core.datamodel.fs.documentum.emc.com/"
env:mustUnderstand="0">
<n1:Identities>
<n1:Username>username</n1:Username>
<n1:Password>password</n1:Password>
<n1:Docbase>Test</n1:Docbase>
</n1:Identities>
</n1:ServiceContext>我需要它返回的内容如下:
<ServiceContext xmlns="http://context.core.datamodel.fs.documentum.emc.com/">
<Identities xsi:type="RepositoryIdentity" userName="_USER_" password="_PWD_" repositoryName="_DOCBASE_" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</ServiceContext>任何帮助都是非常感谢的。
发布于 2009-06-19 18:22:10
soap4r不是很漂亮。我查看了一下rdocs,看起来解决问题的最简单方法是让on_simple_outbound返回您想要创建的元素的字符串表示。
因此,不是
return {"Identities" => {"Username" => username, "Password" => password, "Docbase" => docbase}}试一试
%Q(<Identities xsi:type="RepositoryIdentity" userName="#{user}" password="#{password}" repositoryName="#{docbase}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>)使用像builder这样的东西,你可以让它看起来更像红宝石,但是试试这个。
另一种选择是调查较新的soap库。handsoap看起来很有趣。
https://stackoverflow.com/questions/630050
复制相似问题