cancel
Showing results for 
Search instead for 
Did you mean: 

PI - Problem with a receive WSDL message with encode (envelope)

AnaLavieri
Explorer
0 Kudos

Hello,

I'm having a ploblem with a PI interface with the scenario below (synchronous):

ECC (proxy) <-> PI <-> 3rdParty (soap)

The WSDL provided has a kind of envelope (soapenc:arrayType). Here's the structure declaration:

<xs:complexType name="TTUDResultArray">

<xs:sequence>

<xs:element name="Success" type="xs:boolean" />

<xs:element name="ErrorDescription" type="xs:string" />

<xs:element name="Count" type="xs:int" />

<xs:element name="Accounts" type="ns1:TTUDInquiryResultArray" />

</xs:sequence>

</xs:complexType>

<xs:complexType name="TTUDInquiryResultArray">

<xs:complexContent>

<xs:restriction base="soapenc:Array">

<xs:sequence />

<xs:attribute xmlns:n1="http://schemas.xmlsoap.org/wsdl/" ref="soapenc:arrayType" n1:arrayType="ns1:TTUDInquiryResult[]" />

</xs:restriction>

</xs:complexContent>

</xs:complexType>

When I import this WSDL as a External Definition, the field Accounts is displayed with error (in red), as the PI was incapable to read this kind of type definition.

Testing in SoapUI, the response message is displayed with a different structure than it's possible to see in the PI Operation Mapping:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">

<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="urn:TUDIntf">

<NS1:InquireDateRangeResponse xmlns:NS1="urn:TUDIntf-ITUD">

<return href="#1"/>

</NS1:InquireDateRangeResponse>

<NS2:TTUDResultArray id="1" xsi:type="NS2:TTUDResultArray">

<Success xsi:type="xsd:boolean">true</Success>

<ErrorDescription xsi:type="xsd:string"/>

<Count xsi:type="xsd:int">2</Count>

<Accounts xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="NS2:TTUDInquiryResult[2]">

<item href="#2"/>

<item href="#3"/>

</Accounts>

</NS2:TTUDResultArray>

<NS2:TTUDInquiryResult id="2" xsi:type="NS2:TTUDInquiryResult">

<AvailableAmount xsi:type="xsd:double">49</AvailableAmount>

<PaymentAmount xsi:type="xsd:double">49</PaymentAmount>

<PaymentStatus xsi:type="xsd:string">AC</PaymentStatus>

<PaymentNbr xsi:type="xsd:string">110201</PaymentNbr>

<Success xsi:type="xsd:boolean">false</Success>

</NS2:TTUDInquiryResult>

<NS2:TTUDInquiryResult id="3" xsi:type="NS2:TTUDInquiryResult">

<AvailableAmount xsi:type="xsd:double">50</AvailableAmount>

<PaymentAmount xsi:type="xsd:double">50</PaymentAmount>

<PaymentStatus xsi:type="xsd:string">AC</PaymentStatus>

<PaymentNbr xsi:type="xsd:string">123456</PaymentNbr>

<Success xsi:type="xsd:boolean">false</Success>

</NS2:TTUDInquiryResult>

</SOAP-ENV:Body>

</SOAP-ENV:Envelope>

I`ve tried to map the WSDL inside my interface, but always I test (on SPROXY or Runtime Workbench) an error message is displayed:

Error While Sending Message: Error stack from response: Runtime exception occurred during application mapping com/sap/xi/tf/_mmInquireEZCashtoEcc_; com.sap.aii.mappingtool.tf7.IllegalInstanceException: Cannot create target element /ns1:mtInquireEcc_response. Values missing in queue context. Targe~

Someone knows if that's some tip of how to use this kind of WSDL?

Accepted Solutions (0)

Answers (2)

Answers (2)

markangelo_dihiansan
Active Contributor
0 Kudos

Hello,

Looks like an RPC style WSDL to me. Can you ask the third-party to provide you with a document-literal wsdl? You can refer to the points mentioned by Stephan in this thread.

Thanks to Raj for pointing out that I did not have the thread link

Hope this helps,

Mark

Edited by: Mark Dihiansan on Dec 12, 2011 2:34 AM

prateek
Active Contributor
0 Kudos

arrayType is not supported by PI.

Regards,

Prateek Raj Srivastava