Re: axis SAAJ whitespace problem
I ran into this myself - w/o knowing about this special flag I just ripped the code out :-) PrettyPrinting I understand - pretty deserializing/reading was something I just could not grok. -Doug Davanum Srinivas [EMAIL PROTECTED] 11/14/2005 08:09 PM Please respond to axis-user To axis-user@ws.apache.org cc Subject Re: axis SAAJ whitespace problem Did you try the following in the global configuration section in Axis 1.1? parameter name=disablePrettyXML value=true/ Am not sure if it was even implemented in the old version of Axis. thanks, dims On 11/14/05, Pratibha Mittal [EMAIL PROTECTED] wrote: Hi Dims, Thanks for your reply. Do you know if this bug fix has been back ported to axis 1.1 or if not, if it is possible to do that and if so how? -pratibha -Original Message- From: Davanum Srinivas [mailto:[EMAIL PROTECTED] Sent: Monday, November 07, 2005 9:52 PM To: axis-user@ws.apache.org Cc: [EMAIL PROTECTED] Subject: Re: axis SAAJ whitespace problem Pratibha, Please upgrade to latest Axis 1.3. We've fixed this problem. thanks, dims On 11/7/05, Pratibha Mittal [EMAIL PROTECTED] wrote: 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 Pratibha Mittal 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); } -- Davanum Srinivas : http://wso2.com/blogs/ -- Davanum Srinivas : http://wso2.com/blogs/
RE: axis SAAJ whitespace problem
Hi Dims, Thanks for your reply. Do you know if this bug fix has been back ported to axis 1.1 or if not, if it is possible to do that and if so how? -pratibha -Original Message- From: Davanum Srinivas [mailto:[EMAIL PROTECTED] Sent: Monday, November 07, 2005 9:52 PM To: axis-user@ws.apache.org Cc: [EMAIL PROTECTED] Subject: Re: axis SAAJ whitespace problem Pratibha, Please upgrade to latest Axis 1.3. We've fixed this problem. thanks, dims On 11/7/05, Pratibha Mittal [EMAIL PROTECTED] wrote: 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 Pratibha Mittal 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); } -- Davanum Srinivas : http://wso2.com/blogs/
Re: axis SAAJ whitespace problem
Did you try the following in the global configuration section in Axis 1.1? parameter name=disablePrettyXML value=true/ Am not sure if it was even implemented in the old version of Axis. thanks, dims On 11/14/05, Pratibha Mittal [EMAIL PROTECTED] wrote: Hi Dims, Thanks for your reply. Do you know if this bug fix has been back ported to axis 1.1 or if not, if it is possible to do that and if so how? -pratibha -Original Message- From: Davanum Srinivas [mailto:[EMAIL PROTECTED] Sent: Monday, November 07, 2005 9:52 PM To: axis-user@ws.apache.org Cc: [EMAIL PROTECTED] Subject: Re: axis SAAJ whitespace problem Pratibha, Please upgrade to latest Axis 1.3. We've fixed this problem. thanks, dims On 11/7/05, Pratibha Mittal [EMAIL PROTECTED] wrote: 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 Pratibha Mittal 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); } -- Davanum Srinivas : http://wso2.com/blogs/ -- Davanum Srinivas : http://wso2.com/blogs/
axis SAAJ whitespace problem
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 Pratibha Mittal 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); }
Re: axis SAAJ whitespace problem
Pratibha, Please upgrade to latest Axis 1.3. We've fixed this problem. thanks, dims On 11/7/05, Pratibha Mittal [EMAIL PROTECTED] wrote: 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 Pratibha Mittal 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); } -- Davanum Srinivas : http://wso2.com/blogs/