الرؤوس المخصصة soap4r
-
08-07-2019 - |
سؤال
ولقد تم العمل مع 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، ولكن حاول ذلك.
والخيار الآخر سيكون للتحقيق في المكتبات الصابون أحدث. هاندسواب تبدو مثيرة للاهتمام.
لا تنتمي إلى StackOverflow