3

これに似た石鹸リクエストを生成しようとしています:

soappy 経由でサーバーにアクセスできましたが、ネスト xml パラメーターを GetStopMonitoringService に渡す良い例が見つかりませんでした

誰かが例に情報/いいねを提供できればいいのですが。

ありがとう 。

Python 経由で生成する必要があるサンプル SOAP リクエスト:

    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:acsb="http://www.ifopt.org.uk/acsb" xmlns:datex2="http://datex2.eu/schema/1_0/1_0" xmlns:ifopt="http://www.ifopt.org.uk/ifopt" xmlns:siri="http://www.siri.org.uk/siri" xmlns:siriWS="http://new.webservice.namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="./siri">
        <SOAP-ENV:Header />
        <SOAP-ENV:Body>
            <siriWS:GetStopMonitoringService>
                <Request xsi:type="siri:ServiceRequestStructure">
                    <siri:RequestTimestamp>2012-10-31T09:39:39.480+02:00</siri:RequestTimestamp>
                    <siri:RequestorRef xsi:type="siri:ParticipantRefStructure">KLM12345</siri:RequestorRef>
                    <siri:MessageIdentifier xsi:type="siri:MessageQualifierStructure">0100700:1351669188:4684</siri:MessageIdentifier>
                    <siri:StopMonitoringRequest version="IL2.6" xsi:type="siri:StopMonitoringRequestStructure">
                        <siri:RequestTimestamp>2012-10-31T09:39:39.480+02:00</siri:RequestTimestamp>
                        <siri:MessageIdentifier xsi:type="siri:MessageQualifierStructure">0</siri:MessageIdentifier>
                        <siri:PreviewInterval>PT1H</siri:PreviewInterval>
                        <siri:MonitoringRef xsi:type="siri:MonitoringRefStructure">39795</siri:MonitoringRef>
                        <siri:MaximumStopVisits>100</siri:MaximumStopVisits>
                    </siri:StopMonitoringRequest>
                </Request>
            </siriWS:GetStopMonitoringService>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

私はこのpythonコードを使用します:

    #!/usr/bin/python
    from  SOAPpy  import SOAPProxy
    import httplib
    httplib.HTTPConnection.debuglevel = 1
    soapaction='http://siri.motrealtime.co.il:8081/Siri/SiriServices/GetStopMonitoringService'
    namespace='http://www.ifopt.org.uk/ifopt'
    server = SOAPProxy('http://siri.motrealtime.co.il:8081/Siri/SiriServices',soapaction=soapaction,namespace=namespace)
    Request =  { 
    'RequestTimestamp':"2014-02-04T09:39:39.480+02:00",
    'RequestorRef':"AG566778",
    'MessageIdentifier':"0100700:1351669188:4684",
    'StopMonitoringRequest': 
        {'version':"IL2.6",
        'RequestTimestamp' :"2014-02-04T09:39:39.480+02:00",
        'MessageIdentifier':0,
        'PreviewInterval':"PT1H",
        'MonitoringRefStructure':21705,
        'MaximumStopVisits':100}
    }

    server.soapproxy.config.dumpSOAPOut = 1     
    server.soapproxy.config.dumpSOAPIn = 1
    print  server.GetStopMonitoringService(Request = Request)

しかし、それはまだ機能しません

4

1 に答える 1

1

これを理解するためにソースコードを読みました。行き詰まったときに同じことをすることをお勧めします!

あなたの質問 (SOAPpy の場合) に対する本質的な答えは、ネストを作成するために「structType」を使用する必要があるということです。これは、soap ヘッダーを追加するコード スニペットの例です。そのヘッダーに「SessionHeader」ノードをネストし、その中に「sessionId」ノードをネストしました。

from SOAPpy import WSDL, Types as soapTypes
....
soapProxy = server.soapProxy._sa( "urn:sessionid" )
soapHeader = soapTypes.headerType()
soapHeader.SessionHeader = soapTypes.structType( None, "SessionHeader" )
soapHeader.SessionHeader.sessionId = soapTypes.stringType( sessionId )
soapProxy = soapProxy._hd( soapHeader )
server.soapproxy = soapProxy

これにより、次の SOAP (xml のヘッダー セクション) が生成されます。

<SOAP-ENV:Header>
    <xsd:SessionHeader SOAP-ENC:root="1">
        <sessionId xsi:type="xsd:string">345423534532774</sessionId>
    </xsd:SessionHeader>
</SOAP-ENV:Header>

石鹸本体でも同じことができます。

ここで「SessionHeader」または「sessionid」と表示されている場所は、任意のカスタマイズであることに注意してください。これらは、目的に応じて任意の名前を付けることができます。

于 2015-12-05T22:51:52.393 に答える