cancel
Showing results for 
Search instead for 
Did you mean: 

SOAP adapter engine with system error, problem with fault message.

Former Member
0 Kudos

HI,

I have IDOC -> PI -> SOAP scenario.

Idoc to PI is async. I have no problem in receiving the idoc in PI. The message mapping is carried out and sent to the adapter engine. I can also see the technical routing payload. It is sucessful at XML monitoring in SXMB_MONI.

The error is at PI -> SOAP.

I have wsdl provided by the receiver webservice. Which I have imported.

And created a service interface against this wsdl. I tried changing it to both sync and async.

I have also provided fault message.

I have set a receiver soap communication channel and provided the target URL like "http://xxx/services" and soap

action = processDocument. Also provided user id and password.

I have a

Sender Agreement

Receiver determination

Interface determination

Receiver Agreement

I check in RWB adapter engine, this message goes to system error. The error log is as shown at the bottom.

When I see the message content, the SOap document shows me the details about IDOC, Instead I feel it should match

with the wsdl, where they have specified the corresponding interface name and address location etc.Please correct me.

How does the receiver know which service interface is it? The Service Interface which I created in the ER is

different from the WSDL, Does this have to be same? I see that the soap document in the adapter engine has the

Service interface name which I created in the ER. Where in the document the Reciever interface name is sent?

Where can I see the generated soap document for the receiver?

Is there some setting/configuration required in PI for this to work?

I tried using the tcpgw to see the error. If I dont provide the service interface name in the communication channel

then I get the following error in the TCPGW. "The service cannot be found for the endpoint reference"

When I provide the service interface name in the communication channel I get a valid fault message.

Similarly

When I use SOAPUI, I can see the fault exception being return. The adapter engine doesnot show an equivalent message

instead it goes into system error as shown at the bottom. I guess this is expected, if so what is the work around? (I found this weblog /people/alessandro.guarneri/blog/2011/01/10/soap-fault-in-sap-pi-hijack-it, do I need to implement this? Or use ALEAUD?

The fault message what I see in SOAPUI has the below format.

<soapenv:Fault xmlns:axis2ns1="http://schemas.xmlsoap.org/soap/envelope/">

<faultcode>axis2ns1:Server</faultcode>

<faultstring>nested exception is: psdi.util.MXApplicationException: BMXAA7136E - Validation failed when the

database default values were set. See the associated message for more information.

BMXAA4190E - Country NZ is not in the value list.</faultstring>

<detail>

<Exception>org.apache.axis2.AxisFault: nested exception is: psdi.util.MXApplicationException: BMXAA7136E

- Validation failed when the database default values were set. See the associated message for more information.

BMXAA4190E - Country NZ is not in the value list.

/Exception>

</detail>

</soapenv:Fault>

And the fault message in my ER service interface is stanadard datatype ExchangeFaultData, which is different from

the above. Is this the problem? Can I change the data type here to be the same as above?

Audit log in the RWB adapter engine.

Time Stamp Type Description

30.09.2011 15:10:57 Information MP: processing local module Localejbs/sap.com/com.sap.aii.af.soapadapter/XISOAPAdapterBean

30.09.2011 15:10:57 Information SOAP: request message entering the adapter with user J2EE_GUEST

30.09.2011 15:10:57 Information SOAP: completed the processing

30.09.2011 15:10:57 Information SOAP: sending a delivery error ack ...

30.09.2011 15:10:57 Information SOAP: sent a delivery error ack

30.09.2011 15:10:57 Error MP: exception caught with cause

com.sap.engine.interfaces.messaging.api.exception.MessagingException

30.09.2011 15:10:57 Error Adapter Framework caught exception: null

30.09.2011 15:10:57 Error Delivering the message to the application using connection

SOAP_http://sap.com/xi/XI/System failed, due to:

com.sap.engine.interfaces.messaging.api.exception.MessagingException.

30.09.2011 15:10:57 Information The message status was set to WAIT.

30.09.2011 15:10:57 Information The asynchronous message was successfully scheduled to be delivered at Fri Sep 30

15:15:57 NZDT 2011.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos
 I have a 
Sender Agreement 
Receiver determination 
Interface determination 
Receiver Agreement 

In case of sender as IDoc you need not have sender agreement unless you are implementing IDoc packaging at PI.

 
How does the receiver know which service interface is it? 

its mentioned in interface determination. with source interface as IDoc and target as your Service Interface which you created in the ER

Country NZ is not in the value list. 

Check the value list at target system for Country NZ.

Regards

Raj

Former Member
0 Kudos

I know that routing takes place in interface determination.

The receiver system does not know the name of the SI which we create in the ER, it expects the SI name which is provided in the wsdl. And neither we refer the SI name in wsdl anywhere (if I am correct), not even in the target URL. So I was wondering how would the receiver sys know which SI it has to trigger in its intenal system by looking at the incoming Soap document? I checked the Soap document in the adapter engine, I see the SI name of our ER system and no reference to receiver SI name.

I hope you are able to understand my query.

Former Member
0 Kudos
And neither we refer the SI name in wsdl anywhere (if I am correct), not even in the target URL.

I am wrong, we do have to provide the full traget url which also contains the service interface name of the traget system.

SO I had to use Dynamic URL in message mapping to resolve the issue 2.

Edited by: S Kantheri on Oct 12, 2011 4:55 AM

Answers (2)

Answers (2)

Former Member
0 Kudos

Changing the reciver channel to AXIS adapter resolved this issue 1. WE could see the error message on the adapter engine.

former_member200962
Active Contributor
0 Kudos
I tried changing it to both sync and async.
I have also provided fault message.

dont feel that you need to do above steps.

I have a 
Sender Agreement

ideally you dont need a sender agreement (and a channel) for IDOC --> PI flow.

When I see the message content, the SOap document shows me the details about IDOC

this is fine...you may see fields as seen in EDI_DC40 of the IDOC...

How does the receiver know which service interface is it? 

receiver need not know about the SI created in PI.

The Service Interface which I created in the ER is 
different from the WSDL, Does this have to be same?

you should the WSDL (external definition) as the Request Message in your service interface.

Is there some setting/configuration required in PI for this to work?

nothing specific...AFAIK

I have set a receiver soap communication channel and provided the target URL like "http://xxx/services" and soap action

can you open the URL from Internet explorer...from your machine or from the machine which is in the same network as your PI server?

Things to check:

WSDL structure in PI and in target system is exactly the same.

does the target system require mesage in SOAP format (SOAP envelope - SOAP Header + SOAP body)?

target system is up and running?

Former Member
0 Kudos

Thanks Abhishek for your reply.

1. WSDL has request and response messages, I use that in my SI in ER, but the name of the SI inside the WSDL is different from request and response message names.

For e.g the external WSDL interface name is EXT_VENDORINTERFACE and it has two messages EXT_VENDORREQUEST and EXT_VENDRESPONSE.

And the SI which I created in ER as per our naming standards would be something like SI_VENDOR_IN.

I have multiple interfaces (wsdl) to be consumed (sent to a webservice). In each wsdl the address location is specified as

http://localhost:port/services/EXT_VENDORINTERFACE or http://localhost:port/services/EXT_CUSTOMERINTERFACE etc.

I am creating single SOAP reciver adapter for all these WSDL with target url as http://localhost:port/services/. It does not seem to work, but when I place it with the whole URL along with the interface name, it works (rathers gives me some meaningful fault message, issue 2). So I assume I need to created as many CC for receiver adapter for all the interfaces??? or is there a work around?

2. I read through the bolgs and concluded that idoc to webservice (async to sync) is not a good idea in case of error handling as the fault messages from the webservice into the XI is not correctly displayed instead goes into a system error. We are thinking of coming up with a different solution...either get the ALEAUD as acknowledgement back or convert this to BAPI -> webservice synch scenario.