I am using ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar
I am working on a project where i need the following soap request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mod="http://www.tmforum.org/xml/tip/model" xmlns:cust="http://www.tmforum.org/xml/tip/customer/cust">
<soapenv:Header/>
<soapenv:Body>
<mod:listProblemsRequest>
<!--Optional:-->
<mod:customer>
<cust:iD >1100000677</cust:iD>
</mod:customer>
</mod:listProblemsRequest>
</soapenv:Body>
</soapenv:Envelope>
but using KSOAP2 I am able to generate the following request:
<v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:d="http://www.w3.org/2001/XMLSchema" xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" xmlns:v="http://schemas.xmlsoap.org/soap/envelope/">
<v:Header />
<v:Body>
<retrieveCustomerProfileRequest xmlns="http://www.tmforum.org/xml/tip/model">
<n0:customer xmlns:n0="http://www.tmforum.org/xml/tip/model">
<n1:iD i:type="d:string" xmlns:n1="http://www.tmforum.org/xml/tip/customer /cust">1100000990</n1:iD>
</n0:customer>
</retrieveCustomerProfileRequest>
</v:Body>
</v:Envelope>
How do I remove i:type="d:string"
from the SOAP request.
Please suggest a solution or any Workaround that could be done in Source code of KSOAP2 so that I may be able to generate the appropriate request.
I have found a workaround to my problem in ksoap :
1. Download the source code of Ksoap2.jar.
2.open up Transport .java and edit its :
protected byte[] createRequestData(SoapEnvelope envelope, String encoding)
throws IOException
Method.
3.i edited it as follows:
protected byte[] createRequestData(SoapEnvelope envelope, String encoding)
throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(bufferLength);
byte result[] = null;
bos.write(xmlVersionTag.getBytes());
XmlSerializer xw = new KXmlSerializer();
xw.setOutput(bos, encoding);
envelope.write(xw);
xw.flush();
bos.write('\r');
bos.write('\n');
bos.flush();
result = bos.toByteArray();
xw = null;
bos = null;
String requestObject = new String(result);
String pattern = "i:type=\"d:string\"";
String resultString="";
System.out.println("==earlier String==" + requestObject);
if (requestObject.contains(pattern)) {
System.out.println("==is it here ");
resultString=requestObject.replace(pattern, "");
}
4.compile this class using classpath of ksoap2.jar
5.extract the ksoap2.jar and remove existing transport.class from it.
6.Add newly compiled .class file and make a new jar.
7.import the jar in your project.
Problem solved..