2

我从 wsdl 创建了一个驱动程序

当我调用我的请求时,我希望标头包含一个元素,即,我希望看到如下内容:

REPLACE_WITH_ACTUAL 等等等等

然而,环顾四周,每个人都在谈论继承 SOAP::Header::SimpleHandler 然后将一个实例注入到 driver.headerhandler

但是,如果我这样做,那么我最终会得到一个嵌套标题,即 REPLACE_WITH_ACTUAL

所以必须有一种方法可以将一个元素添加到现有的 headerhandler 中,这样我就可以做类似的事情

driver.headerhandler.AddElement(“会话”,“123”)

但我找不到任何方法来做到这一点。我也尝试过类似的东西

driver.headerhandler["session"]="123" 和其他类似的技巧,但我找不到任何方法来完成这项工作。

查看 driver.headerhandler.methods,我看不到任何明显的机制。

真的很感激一个指向如何做到这一点的指针。

4

1 回答 1

1

好吧,我团队中的一位同事在查看了我之前发现的一些典型示例后解决了上述问题,包括http://dev.ctor.org/soap4r/browser/trunk/sample/soapheader/authheader/中的示例客户端2.r​​b

事实证明,微不足道的(叹息)解决方案是替换

def on_simple_outbound
  if @sessionid
     { "sessionid" => @sessionid }
  end
end

def on_simple_outbound
  if @sessionid
     @sessionid
  end
end

现在,如果您只是将标头命名为“会话”(在 QName 创建中),您将得到未嵌套的标头,这正是我想要的。

我想我会在其他人可能遇到同样问题的情况下将我的解决方案粘贴到我自己的问题上。

于 2008-12-12T19:29:41.250 回答