首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >soap4r自定义标头

soap4r自定义标头
EN

Stack Overflow用户
提问于 2009-03-10 13:02:43
回答 1查看 1.2K关注 0票数 3

我一直在使用soap4r并尝试使用SOAP:: header ::SimpleHandler,我试图让它在传出消息上放置一个自定义头部,但我不知道如何让它包含属性而不是作为子元素:

代码语言:javascript
复制
    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

它返回:

代码语言:javascript
复制
    <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>

我需要它返回的内容如下:

代码语言:javascript
复制
    <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>

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-19 18:22:10

soap4r不是很漂亮。我查看了一下rdocs,看起来解决问题的最简单方法是让on_simple_outbound返回您想要创建的元素的字符串表示。

因此,不是

代码语言:javascript
复制
return {"Identities" => {"Username" => username, "Password" => password, "Docbase" => docbase}}

试一试

代码语言:javascript
复制
%Q(<Identities xsi:type="RepositoryIdentity" userName="#{user}" password="#{password}" repositoryName="#{docbase}" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>)

使用像builder这样的东西,你可以让它看起来更像红宝石,但是试试这个。

另一种选择是调查较新的soap库。handsoap看起来很有趣。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/630050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档