Re: URGENT:!!! Please help insert XML data in kSOAP envelope

Sherine Khoury <[email protected]> Fri, 31 Oct 2003 13:54:02 +0100
Newsgroups gmane.comp.java.enhydra.ksoap
Message-ID <[email protected]>
KHOURY Shérine (Dr&T) wrote:

> [email protected] wrote:
>
>> Hi
>>     i am using following code for inserting
>> <agency>
>>    <name>..</name>
>>    <tel>..</tel>
>>   <email>..</email>
>>   <contacted>...</contacted>
>>   <contactPerson>...</contactPerson>
>> </agency>
>>  
>> on the receiving side (struts/servlet) i can successfully build a 
>> SOAPEnvelope..
>>  
>>
>> SoapObject method = *new* 
>> SoapObject("http://www.tgmm.com/agenciesdemo", "agency");
>>
>> method.addProperty("name", name);
>>
>> method.addProperty("tel", phone);
>>
>> method.addProperty("email", email);
>>
>> method.addProperty("contacted", contact);
>>
>> method.addProperty("contactperson",person);
>>
>> SoapSerializationEnvelope envelope =
>>
>> *new* SoapSerializationEnvelope(SoapSerializationEnvelope.VER10);
>>
>> envelope.bodyOut = method;
>>
>> System.err.println("connecting to new endpoint...");
>>
>> HttpTransport ht = *new* 
>> HttpTransport("http://localhost:8080/struts/insert.do");//http://services.xmethods.net/soap");
>>
>> ht.debug = *true*;
>>
>> *try* {
>>
>> ht.call("http://localhost:8080/struts/insert.do", envelope);
>>
>> }
>>
>> *catch* (Exception e) {
>>
>> e.printStackTrace();
>>
>> }
>>
>>  
>>
>> hope this helps...
>>
>>  
>>
>> regards
>>
>>     marco
>>
>>  
>>
>>     -----Original Message-----
>>     *From:* [email protected]
>>     [mailto:[email protected]]*On Behalf Of *ext KHOURY Shérine
>>     (Dr&T)
>>     *Sent:* 29 October, 2003 16:16
>>     *To:* [email protected]
>>     *Subject:* Ksoap: URGENT:!!! Please help insert XML data in kSOAP
>>     envelope
>>
>>     Hi guys,
>>     I have to send an XML result looking like this
>>     <Person>
>>     <FirstName>Smith</FirstName>
>>     <LastName>John</LastName>
>>     </Person>
>>     inside a SOAP message using kSOAP.
>>     I'm proceding as follows:
>>     ///result being a String containing the XML result
>>     response = new SoapObject( soapReq.getNamespace( ) , name +
>>     "Response" );
>>         if ( result != null )
>>             response.addProperty( "return", result );
>>         }
>>     SoapEnvelope ResEnv = new SoapEnvelope();
>>         // Puts the Soap response in the envelope's body
>>         ResEnv.setBody(response);/
>>
>>     The problem is that upon receipt of this Soap message, the
>>     contents of the SOAP envelope looks something like this:
>>     /<SOAP-ENV:Envelope
>>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>>     xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
>>     xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
>>      <SOAP-ENV:Body
>>     SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
>>       <findResponse
>>     xmlns="urn:sncf:profilekeeper:profilekeeper.ProfileKeeper"
>>     id="o0" SOAP-ENC:root="1">
>>        <return xmlns="" xsi:type="xsd:string">&lt;Person&gt;
>>                     &lt;FirstName&gt;Smith&lt;/FirstName&gt;
>>                     &lt;LastName&gt;John&lt;/LastName&gt;
>>                     &lt;Person&gt;
>>                      </return>
>>       </findResponse>
>>      </SOAP-ENV:Body>/
>>
>>     Can anyone tell me how to avoid letting SoapObject assume all
>>     properties to be Strings?
>>     I'm in urgent need of help!! So I will appreciate any suggestions
>>
> Hello Marco,
> Thanks for your help. But my problem is that in my case, the XML part 
> that I need to add in the SOAP message does not have a standard 
> structure. It's the answer returned by some query, so it's really 
> dependant of that query.
> Therefore what you suggested does not exactly fit to what I want to 
> do. Do you have any more ideas?
> Thanks anyway!!
> Shérine
>
Hi you guys ,
Found the cure!!
Here's the trick: Put the XML info inside à org.kxml.kdom.Node. Then, 
use simply SoapEnvelope.setBody(node);
setBody checks to see if the argument inherits from XmlIO, as is the 
case for Node, and does the right thing.
Thanks for your help.