使用しているソープ サービスの 1 つに問題があります。soap4r
ソープサービスを利用しています。しかしどういうわけか、彼らは私が送っているもの以外の何かを期待しています. これは私が送っているものです:
<?xml version="1.0" encoding="utf-8" ?>
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header>
<authenticate env:mustUnderstand="0">
<username>USERNAME</username>
<apiKey>API_KEY</apiKey>
</authenticate>
<SoftLayer_Network_Media_Transcode_AccountInitParameters env:mustUnderstand="0">
<id>ID</id>
</SoftLayer_Network_Media_Transcode_AccountInitParameters>
<SoftLayer_Network_Media_Transcode_AccountObjectFilter env:mustUnderstand="0">
<transcodeJobs>
<transcodeStatus>
<name>
<operation>Complete</operation>
</name>
</transcodeStatus>
</transcodeJobs>
</SoftLayer_Network_Media_Transcode_AccountObjectFilter>
</env:Header>
<env:Body>
<n1:getTranscodeJobs xmlns:n1="http://api.service.softlayer.com/soap/v3/"
env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
</n1:getTranscodeJobs>
</env:Body>
</env:Envelope>
目的の出力が返されません。彼らが期待していることは次のとおりです。<?xml version="1.0" encoding="utf-8" ?> <env:封筒 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:n1="http://api.service.softlayer.com/soap/v3/" env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <env:ヘッダー> <authenticate env:mustUnderstand="0"> <username>USER_NAME</username> <apiKey>API_KEY</apiKey> </認証> <SoftLayer_Network_Media_Transcode_AccountInitParameters env:mustUnderstand="0"> <id>ID</id> </SoftLayer_Network_Media_Transcode_AccountInitParameters> <n1:SoftLayer_Network_Media_Transcode_AccountObjectFilter env:mustUnderstand="0"> <トランスコードジョブ> <トランスコードステータス> <名前> <操作>完了</操作> </名前> </トランスコードステータス> </transcodeJobs> </n1:SoftLayer_Network_Media_Transcode_AccountObjectFilter> </env:ヘッダー> <env:本体> <n1:getTranscodeJobs > </n1:getTranscodeJobs> </env:本文> </env:封筒>ルートの名前空間とエンコーディング スタイル (ヘッダー ObjectFilter で使用しているため)。soap4r は前のリクエストを生成していますが、実際に機能する後のリクエストに変更することはできません。
これが私がsoap4rを使用している方法です:
class SLHeader < SOAP::Header::SimpleHandler
def initialize(tag, out)
@out = out
super(XSD::QName.new(nil, tag))
end
def on_simple_outbound
@out
end
end
SOAP_WSDL_ENDPOINT = "endpoint"
service = "service name"
initParams = {'id' => ID}
objectFilter = {'transcodeJobs' => {'transcodeStatus' => {'name' => {'operation' => STATUS}}}}
driver = SOAP::WSDLDriverFactory.new(SOAP_WSDL_ENDPOINT + service + "?wsdl").create_rpc_driver
driver.headerhandler << SLHeader.new('authenticate', {'username' => @auth_user, 'apiKey' => @auth_key})
driver.headerhandler << SLHeader.new(service + 'InitParameters', initParam)
driver.headerhandler << SLHeader.new(service + 'ObjectFilter', objectFilter)