Hi, We are using Axis SAAJ
implementation (version 1.1 of axis). I seem to be having problem when I am
serializing the SOAP envelope object to byte stream. It is putting extra
whitespaces and line breaks. This is causing problem in verification of message
when a signed message comes. The scenario is like this: A web service client signs
the soap BODY, and sends to the server. The server mainpulates the SOAP header
(does not touch the body) using SAAJ java APIs. Then the server tries to verify
the soap message. For verification, when it retrives the soap message, axis
needs to recreate the byte stream from java SOAP Envelope object since the
message has been modified. However the message retrieved does not have the the
exact same SOAP Body. It has extra whitespaces and line breaks and hence the
verification fails. I was able to isolate
problem in a simple test example and I can see that the body gets changed when
axis recreates the byte stream. Is this an Axis bug? Is it
fixed in later versions? Has anybody encountered similar problem? What are the
options I have to solve this problem? Could anybody please reply. Attached is the test program
I used which gives the problem. Thanks Oracle Corporation ****************************************************************************** public static void
test() { String str0 = new
String( "<soap:Envelope
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"
" + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"
" + "xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\"
" + "soap:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">
\n" +
"<soap:Body>\n" + "
<ns2:getTime xmlns:ns2=\"urn:Test:GetTime\">\n" + "
<format xsi:type=\"xsd:String\">VALUE</format>\n" + "
</ns2:getTime>\n" +
"</soap:Body>\n" +
"</soap:Envelope>"); byte[] b0 =
str0.getBytes(); ByteArrayInputStream inputstream
= new ByteArrayInputStream(b0); try { Message message =
new Message(inputstream, false, null);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
message.writeTo(outputStream); byte[] b1 =
outputStream.toByteArray(); writeByteArray(b1); SOAPEnvelope
envelope = message.getSOAPPart().getEnvelope(); SOAPHeader
existingHeader = envelope.getHeader(); if(existingHeader !=
null) existingHeader.detachNode(); SOAPHeader newHeader
= envelope.addHeader(); ByteArrayOutputStream
outputStream2 = new ByteArrayOutputStream();
message.writeTo(outputStream2); byte[] b2 =
outputStream2.toByteArray(); writeByteArray(b2); } catch (Exception e)
{ e.printStackTrace(); } } public static void
writeByteArray(byte[] b) { try { long l = (new
java.util.Date()).getTime(); String numStr = (new
Long(l)).toString();
java.io.BufferedReader br = new java.io.BufferedReader(new
java.io.InputStreamReader(new java.io.ByteArrayInputStream(b))); String str =
br.readLine(); while(str != null) {
System.out.println(str); str = br.readLine(); } } catch (Exception e)
{ e.printStackTrace(); }
System.out.println("\n"); } |
- axis SAAJ whitespace problem Pratibha Mittal
- Re: axis SAAJ whitespace problem Davanum Srinivas
- RE: axis SAAJ whitespace problem Pratibha Mittal
- Re: axis SAAJ whitespace problem Davanum Srinivas
- Re: axis SAAJ whitespace problem Doug Davis
- axis SAAJ namespace prefix problem Pratibha Mittal