cancel
Showing results for 
Search instead for 
Did you mean: 

Handleling SOAP requests in BPM

Former Member
0 Kudos

Hi,

I have a BPM process where I receive an idoc (ORDERS) from R/3, call a webservice and the send an idoc (ALEAUD) back to R/3.

The scenario is working perfectly expect for the ALEAUD back to R/3 is missing all the mapped fields from the SOAP Response.

If I drop the SOAP response payload to my Message Mapping (SOAP.response to the ALEAUD) test tab, I can see that the top node is green but all the other fields are red. It's funny because they are all are the right spot and I don't get (XML not well-formed) and my mapping is not working.

If I look at the payload, it looks like this:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><!-- Call Adapter --> <CreateOrderOut xmlns='http://www.inter-tel.com/sapintegration/WSLOrders/CreateOrder' xmlns:ns1='http://www.inter-tel.com/sapintegration/WSLOrders/CreateOrder' xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>

<ReturnStatus>E</ReturnStatus>

<ReturnMessage/>

<OracleOrderNumber/>

<OracleOrderStatus/>

<IDocNum>0000000000377755</IDocNum>

<SapOrderNumber>0123456789</SapOrderNumber>

</CreateOrderOut>

If I generate a test instance using the XI test tool, the message look like this:

<?xml version="1.0" encoding="UTF-8"?>

<ns0:CreateOrderOut xmlns:ns0="http://www.inter-tel.com/sapintegration/WSLOrders/CreateOrder">

<ReturnStatus></ReturnStatus>

<ReturnMessage/>

<OracleOrderNumber/>

<OracleOrderStatus/>

<IDocNum/>

<SapOrderNumber/>

</ns0:CreateOrderOut>

So what could be the problem?

I created the mapping using the SOAP external definition so why is it not coming back cleanly from the SAOP response?

Is it because of the SAOP envelope coming back?

Rgds,

Yves

Accepted Solutions (0)

Answers (9)

Answers (9)

Former Member
0 Kudos

OK I never tried the XSLT Mapping so I will let you know.

Thanks again.

Rgds

Former Member
0 Kudos

OK I tried with the XMLAnonymizerBean and the message look like this now:

<?xml version='1.0' encoding='utf-8'?>

<CreateOrderOut>

<ReturnStatus>E</ReturnStatus>

<ReturnMessage></ReturnMessage>

<OracleOrderNumber></OracleOrderNumber>

<OracleOrderStatus></OracleOrderStatus>

<IDocNum>0000000000377941</IDocNum>

<SapOrderNumber>0123456789</SapOrderNumber>

</CreateOrderOut>

And it's now all in red when I copy the payload in the test tab. I will try creating a new xsd format for the response.

Thanks All, you are the best!!!!!

Yves

Former Member
0 Kudos

Hi,

OK - remove this from the commuinication channel and re-activate.

I think you can use a simple XSLT mapping (as the first step of your mapping) to give you the message that you need as input into your graphical mapping.

Are you familiar with XSLT mapping ?

You need something like this:

<?xml version="1.0" ?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<ns0:CreateOrderOut xmlns:ns0="http://www.inter-tel.com/sapintegration/WSLOrders/CreateOrder>

<ReturnStatus>

<xsl:value-of select="//ReturnStatus" />

</ReturnStatus>

<ReturnMessage>

<xsl:value-of select="//ReturnMessage" />

</ReturnMessage>

<OracleOrderNumber>

<xsl:value-of select="//OracleOrderNumber" />

</OracleOrderNumber>

<OracleOrderStatus>

<xsl:value-of select="//OracleOrderStatus" />

</OracleOrderStatus>

<IDocNum>

<xsl:value-of select="//IDocNum" />

</IDocNum>

<SapOrderNumber>

<xsl:value-of select="//SapOrderNumber" />

</SapOrderNumber>

</ns0:CreateOrderOut>

</xsl:template>

</xsl:stylesheet>

This should work.

Make sure you add to the interface mapping - response when you have imported the relevant archive file.

Cheers

Colin.

Former Member
0 Kudos

OK I will try. I'm looking for examples on SDN on how to use this.

Thanks

Yves

Former Member
0 Kudos

I added the payload in the original message:

Bad:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><!-- Call Adapter --> <CreateOrderOut xmlns='http://www.inter-tel.com/sapintegration/WSLOrders/CreateOrder' xmlns:ns1='http://www.inter-tel.com/sapintegration/WSLOrders/CreateOrder' xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>

<ReturnStatus>E</ReturnStatus>

<ReturnMessage/>

<OracleOrderNumber/>

<OracleOrderStatus/>

<IDocNum>0000000000377755</IDocNum>

<SapOrderNumber>0123456789</SapOrderNumber>

</CreateOrderOut>

Good:

<?xml version="1.0" encoding="UTF-8"?>

<ns0:CreateOrderOut xmlns:ns0="http://www.inter-tel.com/sapintegration/WSLOrders/CreateOrder">

<ReturnStatus></ReturnStatus>

<ReturnMessage/>

<OracleOrderNumber/>

<OracleOrderStatus/>

<IDocNum/>

<SapOrderNumber/>

</ns0:CreateOrderOut>

Rgds,

Yves

Former Member
0 Kudos

Hi,

Try using the XMLAnonymizerBean module to get rid of the namespaces - I posted how to do this.

give it a go and get back to me if this does not work.

Cheers

Colin.

henrique_pinto
Active Contributor
0 Kudos

These two messages are differently defined. The difference is in the inner tags.

Observe that in the 2nd sample (good one), the inner tags have no prefix asociated (hence, they have the default prefix) and the default prefix is not associated to any namespace (there is no 'xmlns="<some_url>"' entry, only for ns0 prefix). Hence, the application understands that these tags have no namespace, and this seems to be the correct behavior.

On the 1st sample (bad one), the root tag also have empty (default) prefix, and the default prefix is now associated to a namespace. Then, the application understands that the inner tags are associated to that namespace, which is wrong, from the definition above.

If that's the response message from the webservice you're consuming, you have two alternatives:

1. update your internal definiton accordingly (you may need xsd for that);

2. ask them to include this reference in the first inner tag:

> xmlns=""

This will clear the default prefix association, then the inner tags should be ok again.

Regards,

Henrique.

Former Member
0 Kudos

I do have the response tab in Interface Mapping and also created an Inbound Synch Message Interface.

The SAOP Adapter is adding something in the response back and my mapping does not like it... The problem, I don't know what?!?

Former Member
0 Kudos

Hi,

1. Use the test tool to load your response XML then look at the XML source.

2. Use the test tool and just type in some data to simulate a response then look at the XML source.

Post both on here and hopefully someone will spot the difference.

I think it might be something to do with the namespace prefix - ns1: whereas XI is expecting ns0:

Cheers

Colin.

Former Member
0 Kudos

Hi,

Use the XMLAnonymizerBean module to remove the namespaces.

Make sure it appears after the SAP standard module in the modules section on the communication channel so it is applied to the response.

The parameter you need to see is XmlAnonymizerBean.acceptNamespaces and it should have the value of blank

This will remove all the namespaces from the incoming XML and could possibly sort your issue.

Cheers

Colin.

rodrigoalejandro_pertierr
Active Contributor
0 Kudos

Hi,

In Interface Mapping did yoo define the response Message Mapping In response Tab? if the response tab does not appear. check whether the Message interface was defined as Sync.

This should be the problem

Thanks

PS: Reward porints if useful

Rodrigo

Former Member
0 Kudos

I'm looking at the (How to use the XI 3.0 SOAP Adapter) doc and they are talking about my problem. I need to extract the SOAP body from the message.

Rgds,

Yves

Former Member
0 Kudos

Hi,

When you import a sample document in the mapping test tab and some nodes appear in red, it means this document does not match your design object (namespaces, tag names or structure discrepancies)

Try to compare your input document and what you've defined in the IR (did you import the WSDL for the SOAP response ?)

Chris