2016-11-28 3 views
0

저는 파이썬으로 조금 녹슬었지만 클라이언트를 사용하여 SOAP 호출을 설정해야합니다. 나는 사전 객체 만 전달하여 두 가지 메소드를 성공적으로 호출 할 수 있었지만이 부분을 설정하지 않아도이 기술을 사용하여 가능한지 확실하지 않습니다.Python Zeep SOAP 클라이언트 모듈 - 요소에 대한 속성을 설정할 수 없습니다.

'transportSettings': { 
    [ 
     {'setupParameter': {'key': 'key1', 'value': 'val1'}}, 
     {'setupParameter': {'key': 'key2', 'value': 'val2'}} 
    ] 
} 

:이 같은 PARAMS 통과 시도

<xs:complexType name="transportSettings"> 
    <xs:sequence> 
     <xs:element maxOccurs="unbounded" minOccurs="0" name="setupParameter" type="tns:setupParameter" /> 
    </xs:sequence> 
</xs:complexType> 

: 내부에 내장되어

<xs:complexType name="setupParameter"> 
    <xs:sequence /> 
    <xs:attribute name="key" type="xs:string" use="required" /> 
    <xs:attribute name="value" type="xs:string" use="required" /> 
</xs:complexType> 

:

내가에 문제가 봉투의 일부입니다 봉투 안에 있지만 작동하지 않는 것 같습니다. SOAP 메서드는 큰 유효성 검사가 없으므로 setupParameter 유형의 두 항목을 만들지 만 모두 keyvalue 값이 누락되었습니다.

나를 위해 약간의 빛을 비춰주세요.

EDIT1

이 내가 복제하기 위해 노력하고있어 SoapUI (요청의 일부)의 출력입니다 : 내가했습니다,

<transportSettings> 
    <!--Zero or more repetitions:--> 
    <setupParameter key="?" value="?"/> 
</transportSettings> 

Edit2가를

그래서 SOAP 요청 및 응답을 출력하는 클라이언트에 대한 플러그인을 문서에 설명 된대로 추가했습니다.이 요청은

입니다. (210)
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap-env:Body> 
    <ns0:provisionService xmlns:ns0="http://ntc.nms.slm.hub.provisioning"> 
     <service> 
     <vn>test</vn> 
     <serviceClass>Satellite Internet Access - 3100 Forward</serviceClass> 
     <linkType>MULTIPLE_ACCESS</linkType> 
     <channelCarrier>false</channelCarrier> 
     <transportSettings> 
      <setupParameter key="" value=""/> 
     </transportSettings> 
     <multicastRequired>false</multicastRequired> 
     <linkTopology>POINT_TO_POINT</linkTopology> 
     <serviceGuiOptions> 
      <enableBooking>true</enableBooking> 
      <enableUnManagedTransmitter>false</enableUnManagedTransmitter> 
      <enableCustomSetupParameters>true</enableCustomSetupParameters> 
     </serviceGuiOptions> 
     <qosParameters> 
      <bestEffortPirFixed>0</bestEffortPirFixed> 
      <bestEffortPirPct>0</bestEffortPirPct> 
      <criticalData1CirFixed>0</criticalData1CirFixed> 
      <criticalData1CirPct>0</criticalData1CirPct> 
      <criticalData1PirFixed>0</criticalData1PirFixed> 
      <criticalData1PirPct>0</criticalData1PirPct> 
      <criticalData2CirFixed>0</criticalData2CirFixed> 
      <criticalData2CirPct>0</criticalData2CirPct> 
      <criticalData2PirFixed>0</criticalData2PirFixed> 
      <criticalData2PirPct>0</criticalData2PirPct> 
      <criticalData3CirFixed>0</criticalData3CirFixed> 
      <criticalData3CirPct>0</criticalData3CirPct> 
      <criticalData3PirFixed>0</criticalData3PirFixed> 
      <criticalData3PirPct>0</criticalData3PirPct> 
      <realTime1CirFixed>6000</realTime1CirFixed> 
      <realTime1CirPct>0</realTime1CirPct> 
      <realTime2CirFixed>0</realTime2CirFixed> 
      <realTime2CirPct>0</realTime2CirPct> 
      <realTime3CirFixed>0</realTime3CirFixed> 
      <realTime3CirPct>80</realTime3CirPct> 
     </qosParameters> 
     </service> 
    </ns0:provisionService> 
    </soap-env:Body> 
</soap-env:Envelope> 
(이런 식으로 전달하여 - client.service.serviceName(inputDict)을)이 입력 사전에서 만든

:

{ 
    'serviceClass': '${serviceName}', 
    'vn': '${testVnName}', 
    'linkType': 'MULTIPLE_ACCESS', 
    'linkTopology': 'POINT_TO_POINT', 
    'serviceGuiOptions': { 
     'enableBooking': 1, 
     'enableUnManagedTransmitter': 0, 
     'enableCustomSetupParameters': 1 
    }, 
    'multicastRequired': 0, 
    'channelCarrier': 0, 
    'qosParameters': { 
     'realTime1CirFixed': 6000, 
     'realTime1CirPct': 0, 
     'realTime2CirFixed': 0, 
     'realTime2CirPct': 0, 
     'realTime3CirFixed': 0, 
     'realTime3CirPct': 80, 
     'criticalData1CirFixed': 0, 
     'criticalData1CirPct': 0, 
     'criticalData1PirFixed': 0, 
     'criticalData1PirPct': 0, 
     'criticalData2CirFixed': 0, 
     'criticalData2CirPct': 0, 
     'criticalData2PirFixed': 0, 
     'criticalData2PirPct': 0, 
     'criticalData3CirFixed': 0, 
     'criticalData3CirPct': 0, 
     'criticalData3PirFixed': 0, 
     'criticalData3PirPct': 0, 
     'bestEffortPirFixed': 0, 
     'bestEffortPirPct': 0 
    }, 
    'transportSettings': [ 
     {'setupParameter': {'key': 'forwardGateway', 'value': 'dialog'}}, 
     {'setupParameter': {'key': 'referenceServiceProfileDomainName', 'value': 'hno'}} 
    ] 
} 

그리고 나는 (단지 문제가있는 부분)은 원하는 :

 <transportSettings> 
      <setupParameter key="key1" value="val1"/> 
      <setupParameter key="key2" value="val2"/> 
      <setupParameter key="key3" value="val3"/> 
     </transportSettings> 

답변

1

하지 않음 이미 솔루션을 직접 찾을 수 있었는지 확인하십시오.

그러나 여기 좀 봐 :

그리고 요소 자체에 추가하여 귀하의 정보를 중첩 이상의 http://docs.python-zeep.org/en/master/datastructures.html

<element name='ElementName'> 
<complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <choice maxOccurs="unbounded"> 
    <sequence> 
     <element name="item_1_a" type="string"/> 
     <element name="item_1_b" type="string"/> 
    </sequence> 
    <element name="item_2" type="string"/> 
    </choice> 
</complexType> 
. _value_1은 상위 항목의 첫 번째 선택 항목을 나타냅니다.

element = client.get_element('ns0:ElementName') 
obj = element(_value_1={'item_1_a': 'foo', 'item_1_b': 'bar'}) 

희망이 있습니다.