Frage

Ich habe mit soap4r arbeiten und versuchen, die SOAP zu verwenden :: Rubrik :: SimpleHandler, ich versuche, es zu bekommen einen benutzerdefinierten Header auf der abgehenden Nachricht zu setzen, aber ich kann nicht herausfinden, wie man es sind Attribute nicht als Unterelemente:

    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

, die zurückgibt:

    <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>

, was ich brauche es zurückkehrt, ist die folgende:

    <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>

Jede Hilfe wird sehr geschätzt.

War es hilfreich?

Lösung

soap4r ist nicht sehr hübsch. Ich stocherte den rdocs abit und es sieht aus wie der einfachste Weg, um Ihr Problem zu beheben wäre, die String-Darstellung des Elements Sie erstellen möchten, haben on_simple_outbound zurück.

so anstelle von

return {"Identities" => {"Username" => username, "Password" => password, "Docbase" => docbase}}

Versuch

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

so etwas wie Builder verwenden, Sie könnten es mehr rubyish aussehen, aber versuchen.

Die andere Option wäre neuere Seife Bibliotheken zu untersuchen. Handseife sieht interessant aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top