سؤال

ولقد تم العمل مع soap4r ومحاولة استخدام SOAP :: :: رأس 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>

وهي موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

و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"/>)

وباستخدام شيء من هذا القبيل البناء، هل يمكن جعلها تبدو أكثر rubyish، ولكن حاول ذلك.

والخيار الآخر سيكون للتحقيق في المكتبات الصابون أحدث. هاندسواب تبدو مثيرة للاهتمام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top