SOAP envelope namespace
Dear all,
I have configured a scenario for which the SOAP adapter is used. When I try to send a message like this:
<ns0:Envelope xmlns:ns0="http://www.w3.org/2001/12/soap-envelope">
<ns0:Body>......
I receive message "SOAP:Server Server Error XIAdapter MalformedMessageException "
When the namespace "http://www.w3.org/2001/12/soap-envelope" is replaced with
"http://schemas.xmlsoap.org/soap/envelope/" the message is processed correctly.
Does this mean that any SOAP messages to XI MUST have namespace "http://schemas.xmlsoap.org/soap/envelope/" for the SOAP envelope??
Kind regards,
John.
Hello Bhavesh,
No, the message is sent from a third party to the XI system using SOAP. In their message the SOAP envelope is created with the namespace as I stated in my previous post.
When I edit this message by changing the namespace the message is processed without errors. It seems that there is a check for namespace "http://schemas.xmlsoap.org/soap/envelope" in the SOAP adapter, but I cannot configure out why.
Kind regards,
John.
Similar Messages
-
How to create a new namespace in SOAP envelope?
I'm trying to create SOAP envelope like the following:
<my:Envelope xmlns:my="http://my.com/">
<my:Header/>
<my:Body/>
</my:Envelope>and the following are the codes: SOAPFactory soapFactory = SOAPFactory.newInstance();
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage msg = factory.createMessage();
SOAPPart part = msg.getSOAPPart();
SOAPEnvelope env = part.getEnvelope();
SOAPElement name = env.addNamespaceDeclaration("my", "http://my.com/");
msg.writeTo(System.out);However, the code generates the following results: <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:my="http://my.com/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body/>
</SOAP-ENV:Envelope>What should I do to remove the SOAP-ENV namespace? What is the clean way to create a new SOAP envelope?
Appreciate your advice, thank you!OK, I found a way to do it: SOAPFactory soapFactory = SOAPFactory.newInstance();
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage msg = factory.createMessage();
SOAPPart part = msg.getSOAPPart();
SOAPEnvelope env = part.getEnvelope();
// 1) must add the new namespace before deleting the default namespace
SOAPElement name = env.addNamespaceDeclaration("my", "http://my.com/");
// 2) now only we can delete the default namespace
env.removeNamespaceDeclaration("SOAP-ENV");
// 3) then change the prefix of other parts one by one...
env.setPrefix("my");
msg.getSOAPHeader().setPrefix("my");
msg.getSOAPBody().setPrefix("my");Does anyone has a better way (cleaner) to do it? -
Add namespace in soap envelope
Hi:
Is there a way to add/change the namespace declaration in the soap envelope using pipeline?
example:
incoming request:
<soapenv:Envelope xmlns:soapenv="...">
<soapenv:Header>...</soapenv:Header>
<soapenv:Body>...</soapenv:Body>
</soapenv:Envelope>
out to business service:
<soapenv:Envelope xmlns:soapenv="..." xmlns:xsi="..." xmlns:xsd="...">
<soapenv:Header>...</soapenv:Header>
<soapenv:Body>...</soapenv:Body>
</soapenv:Envelope>
thanks!!
navThanks for the reply! However, I need the soap envelope to have some additional namespaces defined as:
original request:
<soapenv:Envelope xmlns:soapenv="...">
need this to go to the business service:
<soapenv:Envelope xmlns:soapenv="..." xmlns:xsi="..." xmlns:xsd="...">
Is there a predefined $variable for the envelope?
thanks! -
It can NOT parse ....
<?xml version="1.0" encoding="utf-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Header><h:ServerVersionInfo MajorVersion="14" MinorVersion="2" MajorBuildNumber="309
" MinorBuildNumber="3" Version="Exchange2010_SP2" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns
:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/></s:Header><s:Body><m:GetFolderResponse xmlns:m="http://schemas.microsoft.com/exchange/service
s/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"><m:ResponseMessages><m:GetFolderResponseMessage ResponseClass="Success"><m:ResponseCode>NoError</m:Respo
nseCode><m:Folders><t:CalendarFolder><t:FolderId Id="AAMkADExNjY4ZWRmLWIwN2YtNDAxMS05ZjEzLTg3YTRiMjQ0ZGY3ZQAuAAAAAADU0n/e4OgzQYvxnEFT1sxPAQA1LVqe3bVEQ6g4HVLTxYapAFiIzwa6AAA=" ChangeKey="AgA
AABYAAACUAPkRiik5TYV1B0n4GmWXAAAAAj0P"/><t:ParentFolderId Id="AAMkADExNjY4ZWRmLWIwN2YtNDAxMS05ZjEzLTg3YTRiMjQ0ZGY3ZQAuAAAAAADU0n/e4OgzQYvxnEFT1sxPAQA1LVqe3bVEQ6g4HVLTxYapAFiI0lHWAAA=" Chang
eKey="AQAAAA=="/><t:FolderClass>IPF.Appointment</t:FolderClass><t:DisplayName>Calendar</t:DisplayName><t:TotalCount>2</t:TotalCount><t:ChildFolderCount>0</t:ChildFolderCount><t:EffectiveRig
hts><t:CreateAssociated>true</t:CreateAssociated><t:CreateContents>true</t:CreateContents><t:CreateHierarchy>true</t:CreateHierarchy><t:Delete>true</t:Delete><t:Modify>true</t:Modify><t:Rea
d>true</t:Read><t:ViewPrivateItems>true</t:ViewPrivateItems></t:EffectiveRights><t:PermissionSet><t:CalendarPermissions><t:CalendarPermission><t:UserId><t:DistinguishedUser>Default</t:Disti
nguishedUser></t:UserId><t:CanCreateItems>false</t:CanCreateItems><t:CanCreateSubFolders>false</t:CanCreateSubFolders><t:IsFolderOwner>false</t:IsFolderOwner><t:IsFolderVisible>false</t:IsF
olderVisible><t:IsFolderContact>false</t:IsFolderContact><t:EditItems>None</t:EditItems><t:DeleteItems>None</t:DeleteItems><t:ReadItems>TimeOnly</t:ReadItems><t:CalendarPermissionLevel>Free
BusyTimeOnly</t:CalendarPermissionLevel></t:CalendarPermission><t:CalendarPermission><t:UserId><t:DistinguishedUser>Anonymous</t:DistinguishedUser></t:UserId><t:CanCreateItems>false</t:CanC
reateItems><t:CanCreateSubFolders>false</t:CanCreateSubFolders><t:IsFolderOwner>false</t:IsFolderOwner><t:IsFolderVisible>false</t:IsFolderVisible><t:IsFolderContact>false</t:IsFolderContac
t><t:EditItems>None</t:EditItems><t:DeleteItems>None</t:DeleteItems><t:ReadItems>None</t:ReadItems><t:CalendarPermissionLevel>None</t:CalendarPermissionLevel></t:CalendarPermission></t:Cale
ndarPermissions></t:PermissionSet></t:CalendarFolder></m:Folders></m:GetFolderResponseMessage></m:ResponseMessages></m:GetFolderResponse></s:Body></s:Envelope>
microsoft.exchange.webservices.data.ServiceRequestException: The request failed. An element node 'soap:Envelope' of the type START_ELEMENT was expected, but node '{http://schemas.xmlsoap.or
g/soap/envelope/}Envelope' of type START_ELEMENT was found.
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:51)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:142)
at microsoft.exchange.webservices.data.ExchangeService.bindToFolder(ExchangeService.java:346)
at microsoft.exchange.webservices.data.ExchangeService.bindToFolder(ExchangeService.java:370)
at microsoft.exchange.webservices.data.Folder.bind(Folder.java:50)
at microsoft.exchange.webservices.data.Folder.bind(Folder.java:69)
at com.tsg.ews.GetItemWorker.run(GetItemWorker.java:252)
at java.lang.Thread.run(Thread.java:662)
Caused by: microsoft.exchange.webservices.data.ServiceXmlDeserializationException: An element node 'soap:Envelope' of the type START_ELEMENT was expected, but node '{http://schemas.xmlsoap.
org/soap/envelope/}Envelope' of type START_ELEMENT was found.
at microsoft.exchange.webservices.data.EwsXmlReader.internalReadElement(EwsXmlReader.java:114)
at microsoft.exchange.webservices.data.EwsXmlReader.readStartElement(EwsXmlReader.java:618)
at microsoft.exchange.webservices.data.ServiceRequestBase.readResponse(ServiceRequestBase.java:450)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.readResponse(SimpleServiceRequestBase.java:101)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:38)After these change still I am getting this kind of Error:
microsoft.exchange.webservices.data.ServiceRequestException
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:63)
at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:142)
at microsoft.exchange.webservices.data.ExchangeService.internalFindFolders(ExchangeService.java:202)
at microsoft.exchange.webservices.data.ExchangeService.findFolders(ExchangeService.java:257)
at ci.cryoserver.ews.EWSUtils.testEWSWebService(Unknown Source)
at org.apache.jsp.save_005fimap_005fmailbox_005freader_005fuserinfo_jsp._jspService(save_005fimap_005fmailbox_005freader_005fuserinfo_jsp.java:453)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at ci.cryoserver.frontend.filter.CompanyTagFilter.doFilter(CompanyTagFilter.java:69)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at ci.cryoserver.ntlm.CryoHttpSecurityFilter.doFilter(CryoHttpSecurityFilter.java:105)
at ci.cryoserver.ntlm.SSOFilter.doFilter(SSOFilter.java:66)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at ci.cryoserver.ntlm.NTLMPostFilter.doFilter(NTLMPostFilter.java:39)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at ci.cryoserver.frontend.filter.CharsetFilter.doFilter(CharsetFilter.java:152)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: microsoft.exchange.webservices.data.ServiceXmlDeserializationException: An element node 'soap:Header' of the type START_ELEMENT was expected, but node '{http://schemas.xmlsoap.org/soap/envelope/}Body' of type START_ELEMENT was found.
at microsoft.exchange.webservices.data.EwsXmlReader.internalReadElement(EwsXmlReader.java:121)
at microsoft.exchange.webservices.data.EwsXmlReader.readStartElement(EwsXmlReader.java:625)
at microsoft.exchange.webservices.data.ServiceRequestBase.readSoapHeader(ServiceRequestBase.java:565)
at microsoft.exchange.webservices.data.ServiceRequestBase.readResponse(ServiceRequestBase.java:525)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.readResponse(SimpleServiceRequestBase.java:171)
at microsoft.exchange.webservices.data.SimpleServiceRequestBase.internalExecute(SimpleServiceRequestBase.java:49)
... 40 more
This Account is working perfectly with autodiscovery mode. any fix for this ? -
XSLT mapping with SOAP Envelope
Hi
I'm trying map SOAP response (with Envelope) to pick two values into the target. Here's the data:
Source (with data):
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<EnumerateResponse xmlns="http://www.approva.net/BizRights/Services">
<EnumerateResult>
<TaskID>-1</TaskID>
<Result>FinishedSuccessfully</Result>
<StatusInfo/>
</EnumerateResult>
<pageObject>
<startIndex>0</startIndex>
<pageSize>10</pageSize>
<totalRows>1</totalRows>
<moreRecords>false</moreRecords>
<rowsReturned>1</rowsReturned>
</pageObject>
<xmlObjects>(large string of valid data in here)</xmlObjects>
</EnumerateResponse>
</soap:Body>
</soap:Envelope>
Target:
Only need Result and xmlObjects into target.
Mapping:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<poll_status_resp_r3>
<Result>
<xsl:value-of select="EnumerateResponse/Result"/>
</Result>
<xmlObjects>
<xsl:value-of select="EnumerateResponse/xmlObjects"/>
</xmlObjects>
</poll_status_resp_r3>
</xsl:template>
</xsl:stylesheet>
The values are not getting picked-up into the target.
What am I missing here?
Any help is appreciated.Hi,
Save the following XSL file as RSpace.xsl
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="no"/>
<xsl:template match="/|comment()|processing-instruction()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Zip it and import it under Imported Archive.
In the interface mapping click "+" to add one more mapping.
Use this XSL as first mapping and your XSL mapping as the second mapping.
In your XSLT mapping you can use the XPath as
"Envelope/Body/EnumerateResponse/Result".
I mean remove the namespace and use the XPATH.
Thanks,
Prakash -
SOAP Envelope - HTTP_EXCEPTION - HTTP 500 Internal Server Error
Pessoal, o cliente em que estou utiliza uma solução para NFe que não é o GRC.
Para tentar solucionar o problema do SOAP 1.2 e do message header, estou tentando criar o SOAP Envelope utilizando um XSLT, e no Communication Channel eu estou flegando Do not use soap envelope e colocando os modules para os charset, assim como na nota da SAP.
O que está ocorrendo é que estou tendo o seguinte erro:
com.sap.aii.af.ra.ms.api.DeliveryException: SOAP: response message contains an error XIAdapter/HTTP/ADAPTER.HTTP_EXCEPTION - HTTP 500 Internal Server Error
Conversei com um rapaz na SEFAZ e ele diz que não está chegando nada pra ele.
O SOAP Envelope que estou mandando é:
está dentro de tags CDATA.
Alguém saberia o que está ocorrendo?
Muito obrigao,
Leandro RochaOlá Henrique, muito obrigado pela rápida resposta.
O erro que dá no audit log é:
SOAP: response message contains an error XIAdapter/HTTP/ADAPTER.HTTP_EXCEPTION - HTTP 500 Internal Server Error
MP: Exception caught with cause com.sap.aii.af.ra.ms.api.RecoverableException: SOAP: response message contains an error XIAdapter/HTTP/ADAPTER.HTTP_EXCEPTION - HTTP 500 Internal Server Error
Delivery of the message to the application using connection SOAP_http://sap.com/xi/XI/System failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: SOAP: response message contains an error XIAdapter/HTTP/ADAPTER.HTTP_EXCEPTION - HTTP 500 Internal Server Error. Setting message to status failed.
A mensagem que aparece no adapter é a padrão do SOAP Document:
- <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
- <SOAP:Header xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:SAP="http://sap.com/xi/XI/Message/30" xmlns:wsse="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
- <SAP:Main versionMajor="3" versionMinor="0" SOAP:mustUnderstand="1" xmlns:wsu="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="wsuid-main-92ABE13F5C59AB7FE10000000A1551F7">
<SAP:MessageClass>ApplicationMessage</SAP:MessageClass>
<SAP:ProcessingMode>synchronous</SAP:ProcessingMode>
<SAP:MessageId>dfe81887-3f6a-55f1-b933-0050568169b4</SAP:MessageId>
<SAP:TimeSent>2010-11-04T13:36:35Z</SAP:TimeSent>
- <SAP:Sender>
<SAP:Party agency="" scheme="" />
<SAP:Service>NFe_recepcao</SAP:Service>
</SAP:Sender>
- <SAP:Receiver>
<SAP:Party agency="" scheme="" />
<SAP:Service>SEFAZ_RS</SAP:Service>
</SAP:Receiver>
<SAP:Interface namespace="http://www.gerdau.com.br/nfe">NFe_recepcao_inbound_sync</SAP:Interface>
</SAP:Main>
- <SAP:ReliableMessaging SOAP:mustUnderstand="1">
<SAP:QualityOfService>BestEffort</SAP:QualityOfService>
</SAP:ReliableMessaging>
- <SAP:Diagnostic SOAP:mustUnderstand="1">
<SAP:TraceLevel>Information</SAP:TraceLevel>
<SAP:Logging>Off</SAP:Logging>
</SAP:Diagnostic>
- <SAP:HopList SOAP:mustUnderstand="1">
- <SAP:Hop timeStamp="2010-11-04T13:36:39Z" wasRead="false">
<SAP:Engine type="PE" />
<SAP:Adapter namespace="http://sap.com/xi/XI/System">PE</SAP:Adapter>
<SAP:MessageId>dfe81887-3f6a-55f1-b933-0050568169b4</SAP:MessageId>
<SAP:Info />
</SAP:Hop>
- <SAP:Hop timeStamp="2010-11-04T13:36:39Z" wasRead="false">
<SAP:Engine type="IS">is.00.ebsgerd26</SAP:Engine>
<SAP:Adapter namespace="http://sap.com/xi/XI/System">XI</SAP:Adapter>
<SAP:MessageId>dfe81887-3f6a-55f1-b933-0050568169b4</SAP:MessageId>
<SAP:Info>3.0</SAP:Info>
</SAP:Hop>
- <SAP:Hop timeStamp="2010-11-04T13:36:41Z" wasRead="false">
<SAP:Engine type="AE">af.p7d.ebsgerd26</SAP:Engine>
<SAP:Adapter namespace="http://sap.com/xi/XI/System">XIRA</SAP:Adapter>
<SAP:MessageId>dfe81887-3f6a-55f1-b933-0050568169b4</SAP:MessageId>
</SAP:Hop>
</SAP:HopList>
</SOAP:Header>
- <SOAP:Body>
- <sap:Manifest xmlns:sap="http://sap.com/xi/XI/Message/30" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:wsu="http://www.docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="wsuid-manifest-5CABE13F5C59AB7FE10000000A1551F7">
- <sap:Payload xlink:type="simple" xlink:href="cid:payload-DFE818873F6A21F1B9330050568169B4">
<sap:Name>MainDocument</sap:Name>
<sap:Description />
<sap:Type>Application</sap:Type>
</sap:Payload>
</sap:Manifest>
</SOAP:Body>
</SOAP:Envelope>
Mais uma vez, muito obrigado,
Leandro -
SOAP Adapter: DO not use soap envelope
Hi Guys
I have a scenario, which calls a webservice from my ABAP Proxies, the twist in this is that SOAP request expects license info into the header of SOAP envelope, I could achive this by XSLT mapping in the receiver SOAP adapter I selected the option "Do not use SOAP envelope" and could do the call.
Due to this the response received from the webservice is treated as payload, as shown below...
response message payload:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Header xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<SubscriptionInfo xmlns="http://ws.strikeiron.com">
<LicenseStatusCode>0</LicenseStatusCode>
<LicenseStatus>Valid license key</LicenseStatus>
<LicenseActionCode>0</LicenseActionCode>
<LicenseAction>Decremented hit count</LicenseAction>
<RemainingHits>18</RemainingHits>
<Amount>0</Amount>
</SubscriptionInfo>
</Header>
<soap:Body>
<getRateResponse xmlns="CurrencyRates">
<getRateResult>44.945</getRateResult>
</getRateResponse>
</soap:Body>
</soap:Envelope>
and when i am trying to do the response mapping, it is not able to read the value.
Anyone having any idea, on how we could do this.
Thanks
DheerajHi
I am sorry for replying in so late, was busy with some projects.
I got few mails and this post is cathing up again, so thought of giving the solution I followed without any adapter module or anything, simple plain XSLT mapping.
<u><b>Integration Repository</b></u>
1. Created data type and message type for Outbound Interface
2. Imported the WSDL
3. Created an XSD out of the sample response I got by calling the WSDL (this you can do from any tool available, i used the strikeiron website), pls refer below to see the XSD below, and you will have to use the message type envelope from it.
4. Most Important step, created 2 XSLT mappings, one for request and the other for response., Pls refer below for both these mappings.
5. did the interface mapping
<u><b>Integration Directory</b></u>
1. pls configure your scenario as normaly you do, and while you configure the communication channel for your soap receiver, make sure you click on the do not use soap envelop option.
thats it done.
<u><b>XSLT Request Mapping</b></u>
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<LicenseInfo xmlns="http://ws.strikeiron.com">
<RegisteredUser>
<UserID>xyz</UserID>
<Password>xyz</Password>
</RegisteredUser>
</LicenseInfo>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<getConversion xmlns="CurrencyRates">
<FromCurrencyCode>
<xsl:value-of select="//fromCurrency"/>
</FromCurrencyCode>
<ToCurrencyCode>
<xsl:value-of select="//ToCurrency"/>
</ToCurrencyCode>
<Amount>1</Amount>
</getConversion>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</xsl:template>
</xsl:stylesheet>
<u><b>XSLT Response Mapping</b></u>
<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="CurrencyRates" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:template match="/">
<ns0:MT_Cur_res xmlns:ns0="http://www.april.in/WebService/SOAPHeader">
<Rate>
<xsl:value-of select="soap:Envelope/soap:Body/a:getConversionResponse/a:getConversionResult"/>
</Rate>
</ns0:MT_Cur_res>
</xsl:template>
</xsl:stylesheet>
<u><b>Webservice Response XSD</b></u>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.strikeiron.com" xmlns:ns2="CurrencyRates">
<xs:import namespace="CurrencyRates" schemaLocation="ns2.xsd"/>
<xs:import namespace="http://ws.strikeiron.com" schemaLocation="ns1.xsd"/>
<xs:element name="Envelope">
<xs:complexType>
<xs:sequence>
<xs:element ref="soap:Header"/>
<xs:element ref="soap:Body"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Header">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns1:SubscriptionInfo"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element ref="ns2:getConversionResponse"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
let me know in case somebody gets stuck somewhere for this scenario.
Take Care
Dheeraj -
'/soap:Envelope ' in extract throws invalid token error
I'm receiving xml via webservice/soap and placing in an XMLTYPE table. Upon trying to execute a test query:
SELECT
EXTRACTVALUE(VALUE(d),'Destinations/CountryID') AS ID
FROM X_TEST p,
TABLE (xmlsequence(EXTRACT(p.object_value,'/soap:Envelope/soap:Body/GetUserDestinationResponse/GetUserDestinationResult/DestinationResults/DestinationsList//Destinations'))) d
I get an error similar to: (note path here in error is diff than above extract statement)
ORA-31011: XML parsing failed
ORA-19202: Error occurred in XML processing
LPX-00601: Invalid token in: 'soap:Envelope/soap:Body/GetUserDestinationResponse/GetUserDestinationResult/DestinationResults/DestinationsList/Destinations/DestinationList/Destination//Provider'
Without the soap:Envelope/soap:Body there is no error. Is there a problem using the ':' here?
Here's a snippet of the stored xml:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetUserDestinationsResponse xmlns="http://xxx.xxx.xxx.xx/somesite_ws/">
<GetUserDestinationsResult>
<DestinationResults>
<DestinationsList>
<Destinations>
<CountryID>101</CountryID>
<CountryDescription>Indonesia</CountryDescription>
</Destinations>
</DestinationList>
</DestinationResults>
</GetUserDestinationsResult>
</GetUserDestinationsResponse>
</soap:Body>
</soap:Envelope>Thanks,
that set me in the right direction - I had tried the third parm before but must not have been just right being that there are multiple namespaces given. Appears I have to always use the namespace parm to accurately obtain the data. To conclude - this is what I ended up with to get this returning data properly:
SELECT
EXTRACTVALUE(VALUE(d),'/Destination/DestinationId', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"') AS ID,
Get_Point(EXTRACTVALUE(VALUE(d),'/Destination/Longitude', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"'),
EXTRACTVALUE(VALUE(d),'/Destination/Latitude', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"')) AS geom,
EXTRACTVALUE(VALUE(p),'/Provider/ProviderName', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"') AS provider_name,
EXTRACTVALUE(VALUE(p),'/Provider/ProviderSpecific/HospitalInformation/whoAvainFlu', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"') AS avaianflu,
VALUE(p) AS xmlb
FROM X_MEDAIRE xml
,TABLE (xmlsequence(EXTRACT(xml.object_value,
'/soap:Envelope/soap:Body/*', 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'
))) e
,TABLE (xmlsequence(EXTRACT(VALUE(e),
'/long/path/after/soap', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"' ))) d
,TABLE (xmlsequence(EXTRACT(VALUE(d),
'/Destination/ProviderList/Provider', 'xmlns="http://xxx.xxx.xxx.xxx/some_ws/"' ))) p
WHERE
EXTRACTVALUE(VALUE(p),'/Provider/ProviderType', 'xmlns="http://xxx.xxx.xxx.xxx/some_ws/"') = 'Hospital' -
Hi,
i have a question concerning SOAP envelope.
(We run on XI30 SP19.)
A message sent to SOAP adapter with
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-SOAP-Envelope">
runs on error:
Caused by: org.apache.xmlbeans.XmlException: error: The document is not a Envelope@http://www.w3.org/2003/05/soap-SOAP-Envelope: document element namespace mismatch expected "http://www.w3.org/2003/05/soap-SOAP-Envelope" got http://schemas.xmlsoap.org/soap/envelope/
If i use
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
it works.
Can anyone point me to a ressource which describes the XI requirements to the SOAP envelope?
What is/isnt allowed for XI in special?
Thank you very much in advance.
Michael
Edited by: Michael Höcht on Oct 28, 2008 2:56 PMHmm, based on error it looks like service provider expecting some security headers. Are you able to test from other utility soapUI or browser?
Regards,
Chintan -
WCF request with utl_dbws how to add Header into SOAP envelope
I’m trying to make WCF (Windows Communication Foundation) request and using for that utl_dbws package.
After making request (calling utl_dbws.invoke) it will give error “ORA-29532: Java call terminated by uncaught Java exception: javax.xml.rpc.soap.SOAPFaultException: The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect t”
I turned on logging (utl_dbws.set_logger_level) I see that system sends standard SOAP envelope and does not have Header at all. How can I use my own SOAP envelope and/or add Header.
All info that logging give is:
ServiceFacotory: oracle.j2ee.ws.client.ServiceFactoryImpl@eec8c59c
WSDL: null
Service: oracle.j2ee.ws.client.BasicService@7c110d23
*** Created service: -677524827 - oracle.jpub.runtime.dbws.DbwsProxy$ServiceProxy@562bd0c4 ***
ServiceProxy.get(-677524827) = oracle.jpub.runtime.dbws.DbwsProxy$ServiceProxy@562bd0c4
getOperationInfo return NULL: port={http://tempuri.org/Service/}BasicHttpBinding_Service, operation={http://tempuri.org/Service/}GetLov
setProperty(javax.xml.rpc.soap.http.soapaction.use, true)
setProperty(javax.xml.rpc.soap.http.soapaction.uri, http://tempuri.org/Service/GetLov)
setProperty(javax.xml.rpc.encodingstyle.namespace.uri, http://www.w3.org/2005/08/addressing)
setProperty(javax.xml.rpc.security.auth.username, DefaultUser)
setProperty(javax.xml.rpc.security.auth.password, MySecretPassword)
<GetLOV xmlns="http://tempuri.org/"> <request xmlns:d4p1="http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <d4p1:AgentCode>AGENT</d4p1:AgentCode> <d4p1:Language>ENG</d4p1:Language> <d4p1:ProcessName>test</d4p1:ProcessName> </request></GetLOV>
Attribute 0: http://tempuri.org/: xmlns, http://tempuri.org/
createElement(GetLOV,null,http://tempuri.org/)
Attribute 0: http://tempuri.org/: xmlns, http://tempuri.org/
dbwsproxy.element.node.child.0: 1, null
dbwsproxy.add.map: d4p1, http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request
Attribute 0: http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request: xmlns:d4p1, http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request
dbwsproxy.add.map: i, http://www.w3.org/2001/XMLSchema-instance
Attribute 1: http://www.w3.org/2001/XMLSchema-instance: xmlns:i, http://www.w3.org/2001/XMLSchema-instance
createElement(request,null,http://tempuri.org/)
dbwsproxy.add.soap.element.namespace: d4p1, http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request
Attribute 0: http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request: xmlns:d4p1, http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request
dbwsproxy.add.soap.element.namespace: i, http://www.w3.org/2001/XMLSchema-instance
Attribute 1: http://www.w3.org/2001/XMLSchema-instance: xmlns:i, http://www.w3.org/2001/XMLSchema-instance
dbwsproxy.element.node.child.0: 1, null
dbwsproxy.lookup.map: d4p1, http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request
createElement(d4p1:AgentCode,null,http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request)
dbwsproxy.text.node.child.0: 3, E01306
dbwsproxy.element.node.child.1: 1, null
dbwsproxy.lookup.map: d4p1, http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request
createElement(d4p1:Language,null,http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request)
dbwsproxy.text.node.child.0: 3, ENG
dbwsproxy.element.node.child.2: 1, null
dbwsproxy.lookup.map: d4p1, http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request
createElement(d4p1:ProcessName,null,http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request)
dbwsproxy.text.node.child.0: 3, tesr
request:
<GetLOV xmlns="http://tempuri.org/">
<request xmlns:d4p1="http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://tempuri.org/">
<d4p1:AgentCode>AGENT</d4p1:AgentCode>
<d4p1:Language>ENG</d4p1:Language>
<d4p1:ProcessName>test</d4p1:ProcessName>
</request>
</GetLOV>
13.05.2010 14:17:28 oracle.j2ee.ws.client.ClientMessages infoAboutToInvokeCallForEndpoint
INFO: Trying to connect to URL: https://x.y.z/WS/ Service.svc
13.05.2010 14:17:30 oracle.j2ee.ws.client.StreamingSender _sendImpl
FINE: StreamingSender.request:<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><env:Body><GetLOV xmlns="http://tempuri.org/"><request xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d4p1="http://schemas.datacontract.org/2004/07/x.y.z.LOV.Request"><d4p1:AgentCode>AGENT</d4p1:AgentCode><d4p1:Language>ENG</d4p1:Language><d4p1:ProcessName>test</d4p1:ProcessName></request></GetLOV></env:Body></env:Envelope>
13.05.2010 14:17:30 oracle.j2ee.ws.client.StreamingSender _sendImpl
FINE: StreamingSender.response:<?xml version="1.0" encoding="UTF-8"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><s:Fault><faultcode xmlns:a="http://schemas.microsoft.com/net/2005/12/windowscommunicationfoundation/dispatcher">a:InternalServiceFault</faultcode><faultstring xml:lang="et-EE">The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.</faultstring></s:Fault></s:Body></s:Envelope>
Exception in thread "Root Thread" javax.xml.rpc.soap.SOAPFaultException: The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.
at oracle.j2ee.ws.client.StreamingSender._raiseFault(StreamingSender.java:559)
at oracle.j2ee.ws.client.StreamingSender._sendImpl(StreamingSender.java)
at oracle.j2ee.ws.client.StreamingSender._send(StreamingSender.java:112)
at oracle.j2ee.ws.client.dii.CallInvokerImpl.directInvoke(CallInvokerImpl.java:705)
at oracle.j2ee.ws.client.dii.BasicCall.directInvoke(BasicCall.java:692)
at oracle.j2ee.ws.client.dii.BasicCall.invoke(BasicCall.java:598)
at oracle.jpub.runtime.dbws.DbwsProxy$CallProxy.invokeProxy(Unknown Source)
at oracle.jpub.runtime.dbws.DbwsProxy$CallProxy.access$2600(Unknown Source)
at oracle.jpub.runtime.dbws.DbwsProxy.invokeProxy(Unknown Source)HTTP is HTPP... mostly.
In other words, the application protocol is stand and specified in RFC2616 (http://www.w3.org/Protocols/rfc2616/rfc2616.html)
The exception is specific proprietary extensions.. like for example Microsoft's NTLM authentication handshake.
The UTL_HTTP interface supports the protocol pretty well as per the protocol's specification. So using it to interact with a a web service should not be a major issue. The protocol is standard (e.g. POST command is used to supply the payload to the web service). The only real issue is formatting the payload for that as per what the web service expect. And that has nothing to do with HTTP itself - or UTL_HTTP. It is simply the delivering mechanism.
Getting that mechanism to work is fairly easy and should not pose a problem. Instead I suggest you focus on exactly how the HTTP payload needs to look like. Does that web service expects any specific name-values in the header? What does it expect in the body? Etc. -
How To Create SOAP Envelop For WSDL
Hi Friends,
I have created one webservice WSDL and i want to create SOAP Envelop for this.
Can any one help me out how to create SOAP Envelop based on WSDL.
***************My WSDL***********************************
<?xml version="1.0" encoding="UTF-8" ?>
- <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Oracle JAX-WS 2.1.5.
-->
- <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Oracle JAX-WS 2.1.5.
-->
- <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://annotation/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://annotation/" name="MyCompanyWS">
- <types>
- <xsd:schema>
<xsd:import namespace="http://annotation/" schemaLocation="http://localhost:7101/WebService-Annotation-context-root/MyCompanyPort?xsd=1" />
</xsd:schema>
</types>
- <message name="setMyDepts">
<part name="parameters" element="tns:setMyDepts" />
</message>
- <message name="setMyDeptsResponse">
<part name="parameters" element="tns:setMyDeptsResponse" />
</message>
- <message name="getMyDepts">
<part name="parameters" element="tns:getMyDepts" />
</message>
- <message name="getMyDeptsResponse">
<part name="parameters" element="tns:getMyDeptsResponse" />
</message>
- <message name="addEmployeeToDept">
<part name="parameters" element="tns:addEmployeeToDept" />
</message>
- <message name="addEmployeeToDeptResponse">
<part name="parameters" element="tns:addEmployeeToDeptResponse" />
</message>
- <message name="getDeptInfo">
<part name="parameters" element="tns:getDeptInfo" />
</message>
- <message name="getDeptInfoResponse">
<part name="parameters" element="tns:getDeptInfoResponse" />
</message>
- <portType name="MyCompany">
- <operation name="setMyDepts">
<input message="tns:setMyDepts" />
<output message="tns:setMyDeptsResponse" />
</operation>
- <operation name="getMyDepts">
<input message="tns:getMyDepts" />
<output message="tns:getMyDeptsResponse" />
</operation>
- <operation name="addEmployeeToDept">
<input message="tns:addEmployeeToDept" />
<output message="tns:addEmployeeToDeptResponse" />
</operation>
- <operation name="getDeptInfo">
<input message="tns:getDeptInfo" />
<output message="tns:getDeptInfoResponse" />
</operation>
</portType>
- <binding name="MyCompanyPortBinding" type="tns:MyCompany">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="" />
- <operation name="setMyDepts">
<soap:operation soapAction="" />
- <input>
<soap:body use="literal" />
</input>
- <output>
<soap:body use="literal" />
</output>
</operation>
- <operation name="getMyDepts">
<soap:operation soapAction="" />
- <input>
<soap:body use="literal" />
</input>
- <output>
<soap:body use="literal" />
</output>
</operation>
- <operation name="addEmployeeToDept">
<soap:operation soapAction="" />
- <input>
<soap:body use="literal" />
</input>
- <output>
<soap:body use="literal" />
</output>
</operation>
- <operation name="getDeptInfo">
<soap:operation soapAction="" />
- <input>
<soap:body use="literal" />
</input>
- <output>
<soap:body use="literal" />
</output>
</operation>
</binding>
- <service name="MyCompanyWS">
- <port name="MyCompanyPort" binding="tns:MyCompanyPortBinding">
<soap:address location="http://localhost:7101/WebService-Annotation-context-root/MyCompanyPort" />
</port>
</service>
</definitions>
Thanks in Advance.
Bachan
Edited by: Bachan on Sep 1, 2010 9:04 PMThanks Sam,
SOAP UI saved my life but that want last long.
But still my issue is not resolved.
I am using a plsql program to take the Values from SOAP envelop and pass it to web-service and get the responce.
I am sure my approach is perfectly fine. because it is working fine with other examples, but mean while i have a WSDL link this is really big and my program is not working for this WSDL link.
infact i am getting the output as the same XML of URL.
Let me know if u can help me out.
Thanks
Bachan. -
Dear All,
I wanted to log all my SOAP traffic so I created my own SOAPProvider for my Web Service Data Control.
I used below code
public class MySoapProvider extends SOAPProvider
private static final ADFLogger logger = ADFLogger.createADFLogger(MySoapProvider.class);
@Override
public void handleRequest(SOAPMessage soapMessage)
throws AdapterException
logSOAPMessage(soapMessage, "REQUEST");
super.handleRequest(soapMessage);
@Override
protected void handleResponse(SOAPMessage message) throws AdapterException {
logSOAPMessage(message, "RESPONSE");
super.handleResponse(message);
private void logSOAPMessage(SOAPMessage message, String origin){
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
message.writeTo(out);
} catch (Exception e) {
e.printStackTrace();
logger.info("SOAP Message :: " + origin + " :: " +out.toString());
}But it prints this line.
<SSSOAPProvider> <logSOAPMessage> Logging SOAP Message :: REQUEST :: oracle.j2ee.ws.saaj.soap.soap11.Message11@1466e35I am not sure, but how do you logged the SOAP envelope in ADF? I am expecting to print the soap header and soap body actually
ThanksThanks,
that set me in the right direction - I had tried the third parm before but must not have been just right being that there are multiple namespaces given. Appears I have to always use the namespace parm to accurately obtain the data. To conclude - this is what I ended up with to get this returning data properly:
SELECT
EXTRACTVALUE(VALUE(d),'/Destination/DestinationId', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"') AS ID,
Get_Point(EXTRACTVALUE(VALUE(d),'/Destination/Longitude', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"'),
EXTRACTVALUE(VALUE(d),'/Destination/Latitude', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"')) AS geom,
EXTRACTVALUE(VALUE(p),'/Provider/ProviderName', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"') AS provider_name,
EXTRACTVALUE(VALUE(p),'/Provider/ProviderSpecific/HospitalInformation/whoAvainFlu', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"') AS avaianflu,
VALUE(p) AS xmlb
FROM X_MEDAIRE xml
,TABLE (xmlsequence(EXTRACT(xml.object_value,
'/soap:Envelope/soap:Body/*', 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'
))) e
,TABLE (xmlsequence(EXTRACT(VALUE(e),
'/long/path/after/soap', 'xmlns="http://xxx.xxx.xxx.xx/some_ws/"' ))) d
,TABLE (xmlsequence(EXTRACT(VALUE(d),
'/Destination/ProviderList/Provider', 'xmlns="http://xxx.xxx.xxx.xxx/some_ws/"' ))) p
WHERE
EXTRACTVALUE(VALUE(p),'/Provider/ProviderType', 'xmlns="http://xxx.xxx.xxx.xxx/some_ws/"') = 'Hospital' -
Problem in mapping while using Do not Use SOAP Envelope
Hi All,
This is wrt my thread 'Removing and adding SOAP Envelope'
I am currently working on SOAP-XI-Proxy Scenario.
For some un avoiadable reason, I had to use the option 'DO not use SOAP Envelope' .So the SOAP Envelope came withen the payload and in the pipeline, I can see the payload prefixed by '<?xml version="1.0" ?>' .
Now my payload looks like
<?xml version="1.0" ?> ( no more the encoding="utf-8" notation is there)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<Complaint_Request xmlns="urn:******createserviceticket">
<CaseNo>12345</CaseNo>
<CustomerNo>12345</CustomerNo>
</Complaint_Request>
</soapenv:Body>
</soapenv:Envelope>
To accomodate the change, I also changed my request structure as
<Complaint_Request> (My new message Type)
<Envelope>
<Body>
<Complaint_Request> (My previous message Type)
<caseNo>
<CustomerNo>
But I am facing problem in mapping the values to the target structure (which is a flat structure),
as the payload doesnot start with ' ns1: ' notation any more . Even XSLT mapping is not working.
When I am pasting the payload in the Testing Mapping Editor, the Source Node are correctly
formed, but all come in RED . But as the root node , ie 'ns0' is not there, the value
from child nodes are not getting mapped to the target fields.
Regards,
SubhenduHi Joel,
SAP says, when we use the option 'DO Not Use SOAP Envelope', the payload also contains the SOAP
Envelope. So it is obvious that the payload wont start with 'ns0' notation.
So I am searching for a solution, when we use that option.
Regards,
Subhendu -
JAVA/ XSLT Mapping to Create a SOAP Envelope
Hello,
I have a File to SOAP scenario and it requires the SOAP message with a custom SOAP envelope. I have searched SDN and could only find that SOAP envelope can be created using a JAVA or XSLT mapping. However, I could not find any blog/ article which will help me understand, with an example, how this is actually coded (creating of a custom SOAP envelope).
Can anyone please point me to a valid blog/ article/ wiki which describes the procedure?
Thanks,
Pankaj.
P.S. Please no spamming of post with links on SOAP Envelope; I have already searched on SDNHello,
Here is a wiki using PI 7.1
https://wiki.sdn.sap.com/wiki/display/XI/SampleJAVAMappingcodeusingPI7.1+API
If you want to create a SOAP Envelope, comment out the codes
private static final DynamicConfigurationKey KEY_FILENAME =
DynamicConfigurationKey.create("http://sap.com/xi/XI/System/File","FileName");
String inParam = arg0.getInputParameters().getString("PARAM_IN1");
getTrace().addInfo("Input Parameter: " +inParam);
int offset = inData.indexOf(inParam);
//7. Reader Message ID from Message Header
InputHeader messageHeader = arg0.getInputHeader();
String messageId = messageHeader.getMessageId();
//8. A DynamicConfiguration is a map containing adapter specific message attributes.
// It associates DynamicConfigurationKeys with string values. The DynamicConfiguration object is obtained using
// method getDynamicConfiguration()of class com.sap.aii.mapping.api.TransformationInput;
DynamicConfiguration conf = arg0.getDynamicConfiguration();
conf.put(KEY_FILENAME, "This Test file is set by JAVA Mapping");
String outData = "";if(offset > 0){
int offset1 = inData.indexOf(">", offset);
String StartString =inData.substring(0,offset1);
String DocumentNameSpace = " xmlns=\"urn:iso:std:iso:20022:tech:xsd:pain.002.001.02\"";
String RemainingString = inData.substring(offset1);
lastly, instead of using
outData = StartString + DocumentNameSpace + RemainingString;
replace it with something like this
String outData = "";
outData = "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:tem=\"http://yournamespace/\"><soap:Header/><soap:Body>"+inData.substring(inData.indexOf("?>")+2)+"</soap:Body></soap:Envelope>";
Hope this helps,
Mark -
SOAP receiver adapter - payload inside the soap envelop
Hi,
We have to send a SOAP message to 3rd party from PI 7.1. Using SOAP receiver adapter - we are trying to achieve this. 3rd party software is unable to accept payload as an attachment of the main envelop - they want it enside the main envelop.
I tried with "Keep attachment" option - but PI still keping the payload as an attachment. I think this option is for handling "extra" attachment.
Is there any way we can keep the payload inside the envelop?
In run-time WB, at the moment envelop looks like
<SOAP:Envelope xmlns:SOAP="http://schemas....
<SOAP:Body>
<sap:Payload xlink:type="simple" xlink:href="cid:payload-d6518670ca1311debbd9ca347000800b...">
</SOAP:Body>
</SOAP:Envelope>
And the payload d6518670ca1311debbd9ca347000800b... ( again viewed from RWB) - contains the data.
<?xml version="1.0" encoding="UTF-8" ?>
<ns2:Order> ....
</ns2:Order>
Can we insert this payload directly inside the SOAP:Envelope body instead of a link there?
Regards,
SudhinHi!
It seems to me that this 3rd party is expecting only XML not SOAP.
If this is the case, you should use the HTTP Receiver adapter instead of SOAP.
Some systems 'say' they can speak SOAP but they can only speak XML. Not to blame, it's a mistake many make these days.
The only way you use SOAP Receiver adapter with this 3rd party, is that if someone from the 3rd party hands you a WSDL file.
Ricardo Sancio Lóra
Brazil
Maybe you are looking for
-
SPA901 doesn't accept HTTP anymore, only ping
Hi everybody, we bought 2 SPA901 phones about 10 months ago. Now, one of them doesn't connect to the VOIP service provider anymore. The red light is flashing constantly. Also, I'm unable to access the configuration menu with a browser. The phone answ
-
Hello i have problem with Skype 6.9 on my Windows ...
Hello every one , i have problem with my laptop so the problem is that i update my windows from 8 to 8.1. Everything is fine with update but when i try to open my skype windows said that program is not working right and windows will close it. So i u
-
How do I get the Adobe Premiere 10 I ordered and download to work?
How do I get the Adobe Premiere 10 I ordered and download to work? The download and installation seems to work except I was not asked for the serial number and upon clicking finish, nothing happens.
-
When I try and attach a document, picture etc. in an Email on my macbook, I click the paper clip attachment and it opens the document in my Email rather than attaching it. Can anyone tell me what I am doing wrong? Thank you
-
Question when creating a Query
I am trying to display several month Qty for particular MaterialNo on my report. Example of the data: Material No Request Date QTY 001 200804