SOAP Response with WS-Addressing elements
Hi All,
I have an issue with the response message of SOAP - PI - RFC Sync scenario.
In the request of the SOAP message, we receive following header(WS-Addressing) Elements in the SOAP Header part of the envelope.
<wsa:Action wsu:Id="wssecurity_signature_id_281" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
http://partnername/interfacedetails
</wsa:Action>
<wsa:MessageID wsu:Id="wssecurity_signature_id_285" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
uuid:463BF10F-0126-4000-E000-604DAC152914
</wsa:MessageID>
<wsa:RelatesTo wsu:Id="wssecurity_signature_id_283" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
urn:uuid:02875597AE9A49ABAB1229340545618
</wsa:RelatesTo>
Now the issue is the, our interface partner(who actually sends the SOAP Request), wants SOAP response containing the above WS-Addressing elements.
Is it possible with SAP PI?. Can anybody help me with this.
By the way, our interface( SOAP-PI-RFC Sync ) working fine. We just need these elements inside SOAP Response.
Thanks in advance.
Kind Regards,
Prasad.
Hi Prasad,
I am not sure if the problem is solved.
I guess you are talking about a scenario in which a non-SAP consumer sends a request to SAP ABAP provider. The consumer requests the enabling of WS-Addressing. The answer nothing is required to configure the ABAP provider, which will send back a SOAP response either with WS-A or without depending if WS-A is sent by the consumer or not. That might be the case that you can see these headers with the SXMB_MONI.
Hope this helps.
Regards,
Wei
Similar Messages
-
Hi
My PI server is able to make a soap call to the SFDC ( webservice ) ...however the response that is received within PI
has a SOAP envelope...and hence the response mapping is going in error....because the source data type in response mapping doesnot match with the soap response ( with envelope )
<?xml version="1.0" encoding="UTF-8" ?>
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:enterprise.soap.sforce.com">
- <soapenv:Body>
- <upsertResponse>
- <result>
<created>false</created>
<id>a0UT0000004aeaMMAQ</id>
<success>true</success>
</result>
</upsertResponse>
</soapenv:Body>
</soapenv:Envelope>
how do i handle thisHi,
I think there is an option while configuration of SOAP adapter, where you can define, not to keep SOAP envelop. Please check the option Conversion Parameters\Do Not Use SOAP Envelope and set it as per your requirement. That might solve the problem. Here is the link which can be helpful
http://help.sap.com/saphelp_nw04/helpdata/en/29/5bd93f130f9215e10000000a155106/content.htm
Alternatively you need a java mapping or XSLT mapping to remove the envelop.
Here is the java mapping code to remove SOAP envelop
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.sap.aii.mapping.api.StreamTransformation;
import com.sap.aii.mapping.api.StreamTransformationException;
public class RemoveSoapEnvelop implements StreamTransformation{
public void execute(InputStream in, OutputStream out)
throws StreamTransformationException {
try
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builderel=factory.newDocumentBuilder();
/*input document in form of XML*/
Document docIn=builderel.parse(in);
/*document after parsing*/
Document docOut=builderel.newDocument();
TransformerFactory tf=TransformerFactory.newInstance();
Transformer transform=tf.newTransformer();
Element root;
Node p;
NodeList l;
int mm,n1;
//if you need to include namespace use next two lines
//root=docOut.createElement("ns0:upsertResponse");
//root.setAttribute("xmlns:ns0","http://connectsystems.be/MAINFR/AccDocument");
root=docOut.createElement("upsertResponse");
p=docIn.getElementsByTagName("upsertResponse").item(0);
l=p.getChildNodes();
n1=l.getLength();
for(mm=0;mm<n1;++mm)
Node temp=docOut.importNode(l.item(mm),true);
root.appendChild(temp);
docOut.appendChild(root);
transform.transform(new DOMSource(docOut), new StreamResult(out));
catch(Exception e)
e.printStackTrace();
public void setParameter(Map arg0) {
public static void main(String[] args) {
try{
RemoveSoapEnvelop genFormat=new RemoveSoapEnvelop();
FileInputStream in=new FileInputStream("C:\\Apps\\my folder\\sdn\\sd2.xml");
FileOutputStream out=new FileOutputStream("C:\\Apps\\my folder\\sdn\\removedEnvelop.xml");
genFormat.execute(in,out);
catch(Exception e)
e.printStackTrace();
input xml file sd2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="urn:enterprise.soap.sforce.com">
<soapenv:Body>
<upsertResponse>
<result>
<created>false</created>
<id>a0UT0000004aeaMMAQ</id>
<success>true</success>
</result>
</upsertResponse>
</soapenv:Body>
</soapenv:Envelope>
Here is the output xml removedEnvelop.xml
<?xml version="1.0" encoding="UTF-8" ?>
<upsertResponse>
<result>
<created>false</created>
<id>a0UT0000004aeaMMAQ</id>
<success>true</success>
</result>
</upsertResponse>
Helpful articles on java mapping for PI 7.1
http://wiki.sdn.sap.com/wiki/display/XI/SampleJAVAMappingcodeusingPI7.1+API
You can also try following XSLT mapping to get the same output as java mapping
<xsl:stylesheet version="1.0"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="SOAP-ENV">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:for-each select="SOAP-ENV:Envelope/SOAP-ENV:Body">
<upsertResponse>
<result>
<xsl:variable name="var" select="normalize-space(.)"></xsl:variable>
<xsl:variable name="tokenizedSample" select="tokenize($var,' ')"/>
<created><xsl:value-of select="$tokenizedSample[1]"/></created>
<id><xsl:value-of select="$tokenizedSample[2]"/></id>
<success><xsl:value-of select="$tokenizedSample[3]"/></success>
</result>
</upsertResponse>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Other than these please refer to following links for further examples on the topic
Remove SOAP-ENV tags from xml RECEIVER RESPONSE payload (XSL needed?)
Remove SOAP Envelop using XSLT mapping.
Hope this helps your cause.
regards
Anupam -
Soap envelope with two root elements
I have a wsdl with a message like:
<message>
<RootElement1Part>
<RootElement2Part>
<message>
Using jdeveloper 10.1.3.4 to crete my bpel, i have tried to assign both and only the one i need but the following happens:
1) If i try to assign both, only one is sent.
2) If i assing the one i need, bpel overwrite and sent the other.
Both elements are declared as required, but my service provider does not validate this. In the real case, only one is really needed.
The wsdl and xsd cannot be modified.
How can i handle this ?Hi Prasad,
I am not sure if the problem is solved.
I guess you are talking about a scenario in which a non-SAP consumer sends a request to SAP ABAP provider. The consumer requests the enabling of WS-Addressing. The answer nothing is required to configure the ABAP provider, which will send back a SOAP response either with WS-A or without depending if WS-A is sent by the consumer or not. That might be the case that you can see these headers with the SXMB_MONI.
Hope this helps.
Regards,
Wei -
Read XML response with multiple root elements
Hi ,
I am trying to achieve the below scenario but unable to do so.Please help urgently.
I am getting a response from a service which has multiple root elements.these root elements can change at runtime..I need to read the different root elements and extract data from its sub elements.
Regards...
Hoping for an anwser..i assume on runtime the service just returns 1 rootnode, but this rootnode can change
you could use a switch after the invoke
if $response/myroot1
assign $response/myroot to myroot1_var
if $response/myroot2
assign $response/myroot to myroot2_var
etc
so you check what's in the root node before you assign to you temp variable
or if you have logic which is specific based on this root nod you can just implement all these branches in the switch and execute logic in there based on the selected rootnode
several implementations are possible -
I got one scenario SOAP-2-SAP where I receive a req in format in PI 7.0:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" >
<soapenv:Header/>
<soapenv:Body>
<Req>
<Message><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<ADT_A05>
...data...
</ADT_A05>]]></Message>
<Creator></Creator>
</Req>
</soapenv:Body>
</soapenv:Envelope>
Which I parse correctly, then I give my answer, which should contain a CDATA too, e.g.:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Header/>
<SOAP:Body>
<Res>
<Message><!CDATA[[
...data....
]]></Message>
</Response>
</SOAP:Body>
</SOAP:Envelope>
Instead, the SOAP channel return this:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP:Header/>
<SOAP:Body>
<Response> <Message><ACK>
...data...
/ACK></Message>
</Res>
</SOAP:Body>
</SOAP:Envelope>
But btw, in monitor I can see the resp message, without soap envelope, of course:
<?xml version="1.0" ?>
<Res>
<Message>
<![CDATA[ <ACK>
...data...
</ACK>
]]>
</Message>
</Res>
Which is correct! Why the soap adapter convert the brackets into ascii code?
thx for help,
regardsHi Paola,
please check following thread may be helpful to resolve your issue
Creating CDATA sections in output XML
Regards,
Amit -
Hi all,
I have a scenario where PI is calling a webservice, the webservice has a response attachment having a CSV file. I want to know how to handle this attachment. I want to keep this attachment ina folder on our FTP to start another process, Can you please suggest?
Thanks
-KulwantJust to complement: if you're on PI 7.0, only chance would be to handle it on a custom adapter module. You'd need to read the attachment and save it directly to the file system (not so good solution).
On PI 7.1, you could handle it in the mapping level, using the new PI 7.1 Mapping API.
Best,
Henrique. -
No any response with clicking address bar, not to a specific url.
- "enter key" is okay
- i set google.cn as homepage of firefox
- it really worked days ago
- already tried to restart computer as well as firefox browser
- IE browser works as expected
- tried searching the issue via internet, some Q&A are talking the same, but none of them has certain workaround
- although i detected webpage directly from browser 'History', issue persists, none of them could be opened
- my firefox ver is 10.0 almost the latest one.I figured it out: Changing the default page in the "PUBLIC" user profile.
-
SOAP client fails to validate SOAP Response
Hi,
I have developed and deployed a document style web service (with use="literal")
on Web Logic 7.0 server using servicegen ant task. I am using a non Web Logic
client to invoke this service.
The WSDL generated by the service, uses "elementFormDefault="qualified" but in
the SOAP response, all elements are not qualified by namespace. The client is
failing to validate this SOAP response against the types defined in WSDL file
because of this.
I would like to know how to generate a SOAP response with all elements qualified
with namaspace.
Thanks
Prasghhttp://newsgroups.bea.com/cgi-bin/dnewsweb?cmd=article&group=weblogic.developer.interest.webservices&item=2831&utag=
prasgh wrote:
>
Hi Bruce,
Thanks for your reply. It works fine with 8.1 but it doesn't with WLS 7.0. What
we have is 7.0. How can I resolve this on 7.0
Appreciate your help.
Thanks
Prasgh
Bruce Stephens <[email protected]> wrote:
Hello,
Are you using the latest WLS 7.0SP2?
We recently updated the interop instance: http://webservice.bea.com:7001
with WLS 8.1 so I don't have v7 stack (online) to show you, however I
did try it locally using the Compound1 test (doc/lit with
"elementFormDefault="qualified") and it works as shown below.
HTHs,
Bruce
<!--REQUEST.................-->
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header>
</env:Header>
<env:Body>
<ns100:x_Person xmlns:ns100="http://soapinterop.org/xsd"
Male="true"
Name="sample string">
<ns101:Age
xmlns:ns101="http://soapinterop.org/xsd">20.2</ns101:Age>
<ns102:ID
xmlns:ns102="http://soapinterop.org/xsd">10.1</ns102:ID>
</ns100:x_Person>
</env:Body>
</env:Envelope>
Response from the server
<!--RESPONSE.................-->
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Body>
<ns100:result_Person xmlns:ns100="http://soapinterop.org/xsd"
Name="sample string"
Male="true">
<ns101:Age
xmlns:ns101="http://soapinterop.org/xsd">20.2</ns101:Age>
<ns102:ID
xmlns:ns102="http://soapinterop.org/xsd">10.1</ns102:ID>
</ns100:result_Person>
</env:Body>
</env:Envelope>
[email protected] wrote:
Hi,
I have developed and deployed a document style web service (with use="literal")
on Web Logic 7.0 server using servicegen ant task. I am using a nonWeb Logic
client to invoke this service.
The WSDL generated by the service, uses "elementFormDefault="qualified"but in
the SOAP response, all elements are not qualified by namespace. Theclient is
failing to validate this SOAP response against the types defined inWSDL file
because of this.
I would like to know how to generate a SOAP response with all elementsqualified
with namaspace.
Thanks
Prasgh -
How can i custom the xml soap response in my ws?
Hello there,
Im developing a ws in weblogic 10.2 and i need to return a complex type soap response with a custom xml created by me... can any one give me an advice on how can i do that? Im not used to soap ws
And i need to return a lot of info some times and some of them are ArrayList of an object. Like the info of a Client and all the contracts of this client (and the info of that contract)... a lot of xml element with childs.
Thanx in advance for any help
PS. I tried to post an xml as example but i couldnt do it using '{' code '}' tag
Edited by: mgaldames on 08-dic-2010 8:50Hi Riyaz,
Thanks for your immediate response.
Here is my requirement.
I have created a ZTABLE with Field AUART and this table is maintain table using SM30.
When I Press F4, it will giving the list of all the order types available in T003O table and can select one and I can proceed succussfully.
But when using SM30 I need to give '*' in the column for AUART which is not available in T003O table.
I need to save my entires for AUART with * also( The value "*" is not available in Check table T003O ).
Please let me know how can I do this.
Thanks in advance. -
MessageHandlers - caching of SOAP responses
I have a webservice which has a number of clients who will all consume the same
message once. I've determined that one of my bottlenecks is actually turning
the results of the EJB call into the SOAP message. Since all the clients will
receive the same message once I think it would be nice to cache the soap message
resulting from a call.
Can I use a message handler to do this, or will the SOAP message already have
been generated?Hi Tom,
Your previous reply clears things up :-) But for the record, serialization (converting
the value returned from the EJB to XML) has already occurred when the handleResponse(MessageContext)
method is called. That's why you can get access to (and manipulate) the SOAP response
in the handleResponse(MessageContext) method. This SOAP response has the value
returned from the EJB in it, when the handleResponse(MessageContext) method is
called.
Later,
Mike Wooten
"Tom Hennen" <[email protected]> wrote:
>
I need to call the EJB because what it returns will determine if the
message is
already cached. You see the ejb returns a message from a queue. That
message
needs to be removed from the queue, and the handler won't know if it
has the message
cached until it gets a response from the EJB.
At any rate it sounds like you're saying the serialization takes place
after handlerResponse
gets through with the Message? If that's the case then this won't work
anyways.
"Michael Wooten" <[email protected]> wrote:
Hi Tom,
You'd have to store something in the MessageContext DURING the handleRequest(MessageContext)
method processing, to make any sense here :-)
The JAX-RPC Handler infrastructure is only guaranteeing that the property
stored
during the handleRequest(MessageContext) call, will be available during
the handleResponse(MessageContext)
call.
I don't quite understand why you need to call the EJB, if you already
know what
the value of the return object will be. I'm assuming that the EJB will
return
the same result, for a given value assigned to the input arguments.If
this is
true, why can't you use a byte[] created from the payload of the <SOAPBody>
request,
as the cache item key. If you don't find the cache item key (you look
in the
handleRequest method), set a MessageContext property with the payload
byte[],
and call the EJB. When the EJB returns, retrieve the property and use
it to create
a cache item that has the value of the property as the key, and a byte[]
of the
SOAP response as a value. When the handleResponse method is called,it
will contain
the response that will become the cache item value. Create a byte[]from
it, assign
the value of the property as the key, and a byte[] of the SOAP response
as the
value. If you find the key in the cache during the handleRequest(MessageContext)
call, retreive the cache value, put it in a MessageContext property,
return false
from handleRequest(MessageContext), grab the MessageContext property
value in
the handleResponse(MessageContext) method, and create the SOAP response
with it.
I take it that this isn't something you can do in your situation :-)
Calling the EJB from inside the handleRequest(MessageContext) method
will still
have performance issues, because you'll still need to deal with serializing/deserializing
XML.
Regards,
Mike Wooten
"Tom Hennen" <[email protected]> wrote:
Hmm, that's what I was afraid of.
We actually have to call the EJB. Skipping it isn't an option.
The
ejb only
accesses data in memory, so caching it's response would be of little
value anyways.
When using RMI to bypass the jax-rpc stack I'm seeing CPU usage about
1/3 less
than when using webservices. Overall throughput also more than doubles.
Would I see a benefit to calling the EJB from the handleRequest method
and then
based upon it's response sticking a cached SOAP message into the message
context?
Of course this would bring up the problem of what to do if the message
hasn't
been cached (calling the EJB twice isn't allowed).
"Michael Wooten" <[email protected]> wrote:
Hi Tom,
The SOAP message will have already been created for both client andserver-side
JAX-RPC Handlers, but you can avoid the EJB call :-)
The flow is as follows:
1. Web service consumer code calls web service operation.
2. The client-side JAX-RPC stack creates a SOAP message from the call.
If a
client-side JAX-RPC Handler is in place for the called operation,
it's
handleRequest
callback method is invoked.
3. If handleRequest returns a true, or there is no client-side JAX-RPC
Handler
in place, the
JAX-RPC implementation connects to the endpoint URL and sends the
SOAP
message.
4. The server-side JAX-RPC stack invokes the handleRequest method,of
a server-side
JAX-RPC Handler for the operation, if one is defined. It (the server-side
JAX-RPC
stack) hasn't made the call to the EJB that is providing the service
implementation
yet.
NOTE: Seeing as the EJB hasn't been called yet, you could have thecode
in the
handleRequest method return a cached response. The assumption here,would
be that
this server-side JAX-RPC Handler had access to a shared database (or
a JCache-based
product), that it could query in the handleRequest method, and update
in the handleResponse
method. If the query returned a cached SOAP response, you would useit
to set
a property on the MessageContext object passed to handleRequest, using
the setProperty
method, and return false from handleRequest. The stack should then
bypass
invoking
the EJB and call the handleResponse, using the same MessageContextobject
you
set the property on in the handleRequest method. Call the getProperty
on the MessageContext
object in the handleResponse method, to get the cached SOAP response,
and use
it to replace the one currently in the SOAP response. If performance
is a major
factor (which sounds like the case), you might want to replace theshared
database
with an distributed cache product (i.e. Tangosol Coherence, an open-source
JCache
product, etc.), or an XML database :-)
5. If the handleRequest method of the server-side JAX-RPC Handler
returns
true,
or no server-side JAX-RPC Handler was defined for the operation, the
server-side
stack calls the EJB.
6. If a server-side JAX-RPC Handler is defined, the server-side stack
calls the
handleResponse method. If not, the stack uses the results of the EJB
call to create
the SOAP response.
7. If a client-side JAX-RPC Handler is defined, the client-side stack
calls the
handleResponse method. Afterwards, it processes the SOAP responseand
deserializes
the return value. If no client-side JAX-RPC Handler is defined, theclient-side
stack just processes the SOAP response and deserializes the return
value.
HTH,
Mike Wooten
"Tom Hennen" <[email protected]> wrote:
I have a webservice which has a number of clients who will all consume
the same
message once. I've determined that one of my bottlenecks is actually
turning
the results of the EJB call into the SOAP message. Since all the
clients
will
receive the same message once I think it would be nice to cache thesoap
message
resulting from a call.
Can I use a message handler to do this, or will the SOAP message
already
have
been generated? -
Missing element To when using SOAP 1.2 with WS Addressing 1.0 in Response
Hi,
I'm developing WCF using SOAP 1.2 with WS Addressing 1.0 between Windows Server 2012 and JAVA client Oracle JAX-WS 2.1.5.
The Request from the client contains the element <To>, but the Response from the Server somehow will ignore that element, which is required for the client, even I tried to add manually.(refer to http://stackoverflow.com/questions/15808852/how-to-correctly-implement-custom-soap-1-2-headers-and-ws-addressing-in-a-wcf-se)
Is this normal behavior that the Response will ignore the element <To>?
And is there another way to add the element?
Thanks.I'm developing server side service using .net framework 4.0.
Microsoft Service Trace Viewer shows that in ServiceLevelReceiveRequest the element <To> is exist, but then it is gone in the following step, ServiceLevelSendReply, and TransportSend.
Thanks. -
Weblogic throwing "null SOAP element Exception" in multi-part SOAP response
Hi All,
I'm using weblogic 10. My application is a webservice client generated using '*clientgen*', which is running on weblogic, and
is invoking a remotely hosted webservice ( Remotely hoseted webservice may not be running on weblogic).
I've the wsdl file of remotely hosted webservice.
Now the problem is with WSDL file (I suppose), have a look at this.
*<message name="m1">*
*<part name="body" element="tns:GetCompanyInfo"/>*
*</message>*
*<message name="m2">*
*<part name="body" element="tns:GetCompanyInfoResult"/>*
*<part name="docs" type="xsd:AnyComplexType"/> ------> assume all elements inside this complex type can be nil or minOccurs set to '0'*
*<part name="logo" type="xsd:AnyOtherComplexType"/> ------> assume all elements inside this complex type can be nil or minOccurs set to '0'*
*</message>*
<portType name="pt1">
<operation name="GetCompanyInfo">
<input message="m1"/>
*<output message="m2"/> -----> multi part message.*
</operation>
</portType>
Now here is sample message for the request(I've composed this message for this question):
<soap:Envelope> MESSAGE1
<soap:header/>
<soap:body>
<tns:m2>
<tns:GetCompanyInfoResult>
Blah Blah....
</tns:GetCompanyInfoResult>
<tns:docs>
Blah Blah....
</tns:docs> Assume no data for 'logo', so it's not returned. Since all its elements can be nillable.
<tns:m2>
</soap:body>
</soap:Envelope>
First of all, is this SOAP response is valid? I'm not sure about *'message' and 'parts' in SOAP*, but according to XML schema standards it's invalid.
Because, according to *'message' m2, 'logo' is missing*, eventhough all it's elements are nillable in such case there should be *<logo/>* at the end.
I mean valid message should be like below
<soap:Envelope> '*MESSAGE2*'
<soap:header/>
<soap:body>
<tns:m2>
<tns:GetCompanyInfoResult>
Blah Blah....
</tns:GetCompanyInfoResult>
<tns:docs>
Blah Blah....
</tns:docs>
*<tns:logo/> ------------------> here is the change compared to above message. empty element.*
<tns:m2>
</soap:body>
</soap:Envelope>
Now the concerns are :
(1) Which is a valid response? Message1 or Message2
(2) If message1 is valid then why is weblogic throwing an exception 'null SOAP element', I suppose this is due to missing 'logo' element.
(To confirm this I've used tcpmonitor and found message1 as response but weblogic is still throwing 'null SOAP Element' exception,
which confirms it needs 'logo' as well, I suppose <logo/> at least). Is there any workaround for this in weblogic for multi-part messages?
(3) If message1 is invalid according to SOAP standards then You've answered my question. ---> I need to talk to the webservice provider in this case.....
Thanks in advance...Message 1 is not Basic Profile 1.1 compliant. It is specified by BP1.1 in section 4.4.1(http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html#Bindings_and_Parts) that when a wsdl:part element is defined using the type attribute, the serialization of that part in a message is equivalent to an implicit (XML Schema) qualification of a minOccurs attribute with the value "1", a maxOccurs attribute with the value "1" and a nillable attribute with the value "false".
-
How to control the location of the SOAP:address element in the WSDL
I have an EJB exposed as webservice in WebLogic 10.3. Further, the EJB has been annotated with the WebService annotation as in:
@WebService(name = "S_CALCULATORname", serviceName = "S_CALCULATORserviceName",
targetNamespace = "http://tempuri.org/SCalculator/")
@Stateless(name = "S_CALCULATOR")
public class S_CALCULATOR_Beanxxxxxx
The location attribute of the SOAP:address element in the WSDL document generated by the Test Client facility is of the form
http://host:port/ejb-java-class-name/service-name-attribute-value as in:
<soap:address location="http://123.4.5.678:1234/S_CALCULATOR_Beanxxxxxx/S_CALCULATORserviceName" />
Is there a way to control the value of the context root portion of the URL, ejb-java-class-name in this case, either using annotations or deployment descriptor files?
thanks in advance for any replies,
octavioHi,
While building the WebService Application you can use the following ANT task...
<target name="build-service4">
<jwsc
srcdir="src"
destdir="output/TestEar">
<jws file="examples/webservices/jwsc/TestServiceImpl.java">
<WLHttpTransport contextPath ="TestContext" serviceUri="TestServiceUri" portName="TestServicePortHTTP"/>
</jws>
</jwsc>
</target>
Or if you are developing JAXRPC EJB based WebService in that case you can even define the Context root using *@weblogic.jws.WLHttpTransport* annotation....
@WLHttpTransport(contextPath="simple", serviceUri="SimpleService", portName="SimpleServicePort")
Thanks
Jay SenSharma
http://jaysensharma.wordpress.com (WebLogic Wonders Are Here)
Edited by: Jay SenSharma on Feb 4, 2010 10:22 PM -
How to deal with complex SOAP responses when calling web services ???
Hi all,
I have an issue when calling a web service that returns a complex
SOAP response message. With simple responses (e. g. array of strings) it
worked.
I created the PDF as an Interactive form with Livecycle Designer 8.2.
The Javascript looks like this:
var cURL = "http://blabla";
var cTestString = "too";
SOAP.wireDump=true;
var response = SOAP.request(
cURL: cURL,
oRequest: {
"http://blabla.com/:complete" : {
arg0: cTestString
cAction: "http://bla.com:50000/"
var resp = response["http://blabla.com:serviceResponse"];
console.println("lenght:"+resp.length);
var myns = "http://blabla.com/namespace";
for (var nItem in resp.return)
console.println("" + nItem + " " + resp.return[nItem] );
for (var ConceptView in resp.return[nItem])
console.println(" "+resp.return[nItem].length);
console.println(" "+ConceptView+" "+resp.return[nItem][ConceptView] );
if (ConceptView == myns + ":Response")
for (var item2 in resp.return[nItem][ConceptView]){
console.println(" "+item2+" "+resp.return[nItem][ConceptView][item2] );
I call the service and when I realized that I do not find out the type of the object returned, I used the nested for-in-loops to iterate through it. But it seems that there is just one item in the Javascript object returned, although the SOAP message clearly shows that there are more than one item.
Can you help me?
One key problem when analyzing this issue is that I do not know at all
the Javascript type of response. We suspected it might be an array, but it is not
because the method .length returns "undefined". It would already be
helpful to know at least the type of this object and to know callable
methods and so on ...
Best regards
Christoph
P.S. As mentioned I used Livecycle Designer 8.2 and displayed and
debugged the document using Acrobat 9.Christoph,
Firstly LiveCycle Designer 8.2 is still not supported to develop forms as per my knowledge. The latest version compatible for SAP Interactive Forms is ALD 8.0.
There is a difference between Acrobat based forms and LiveCycle forms and based on your coding it looks to me that you are trying to create a LiveCycle based form with coding of Acrobat which is not supported in LiveCycle Desginer, which is why you may be getting the error.
I hope that does not confuse you, so may check this [link|http://www.acrobatusers.com/articles/2006/08/designer_or_forms/index.php] for some clear information on what point I was trying to make.
Chintan -
Synchronous RFC -- SOAP Scenario: problem with SOAP Response/Fault Mapping
Hi,
I've a synchronous RFC --> PI --> SOAP Scenario. The problem is that the message structure of the sending RFC doesn't match the Webservice Structure.
The (SAP standard) RFC has just a Request / Response message structure. Part of the Response Message structure is a exception structure.
The Webservice has a Request / Response message structure and in case of an error I get a SOAP:Fault.
Problem now is that I cannot configure that scenario without usage of BPM as I will have to map SOAP:Response or SOAP:Fault to the RFC Response structure.
Has anybody another idea to do that synchronous scenario (with usage of message mapping) without BPM?
BR
Holger1)
you maus define 3 mapping.
1)request
2)response
3)Fault
in Interface mapping define at response boths (2-3) mapping. its clear??
2)
otherwise sometjhing is not clear, why do you want fault?? why dont you get only response message. we implement this kind of response:
<response_MT>
<ID> (error ID)
<system> (target system)
<error> (Error Description)
</response>
by this way fault message is not needed. but if you must have it just follow the top of message else, propose second.
Thanks
Rodrigo
Thanks
Rodrigo
Edited by: Rodrigo Pertierra on Feb 25, 2008 11:52 AM
Maybe you are looking for
-
XML Publisher Report - java.lang.OutOfMemoryError
Hi All, Apps - 11.5.10.2 XML Publisher - 5.6.3 When the request being run for huge data, its getting out of momory error. We have already tried the below options Modified the teo profiles and 3 Fo processing properties in both the template and the da
-
Details on booting from a Fire Wire HD
Good day, all I'm trying to make a bootable back up of my internal hard drive on my old iBook. I used "Personal Backup X3" to "clone" my drive to a LaCie Fire Wire drive (which is partitioned into two 40 gig parts. When I boot the iBook (with the LaC
-
How to upload the RM and PM budjeted cost in sap.
Dear sap guru's, Could you please suggest me , how to upload the 2008 budjeted cost(RM/PM) in sap, One way i can upload the budjet Through materi master( costing2 tab) ie planed price1 or 2 , Please suggest me is there any other way to
-
How to connect to SQL Server from Forms 10g?
Hello all, How do we connect to SQL Server database from Forms 10g? In Oracle Metalink site they have suggested using Transparent Gateway for SQL Server as a solution. But is there a way we can connect directly to SQL Server from Forms using an ODBC
-
Hi. I have next problem: In my application, user can create xml documents by xml forms. This generated xml files are stored in the KM. My application has another page in order to view/manage these documents. Clicking on the Context Menu, it appears a