Vishnu, Have you looked at the data on the wire, e.g. with tcpmon, TcpTunnelGui, tcpdump, or netmon? That would indicate whether the serialization or deserialization is at fault.
Scott Nichol ----- Original Message ----- From: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Friday, October 25, 2002 11:43 AM Subject: Re: base 64 encoded xml string getting truncated > > Hi Scott, > > The byte array is already base 64 encoded and is a descendent > ("binaryData") of the "itemElement" passed to the soap call. > To make the things simpler, equiavalent client code is provided below: > > public static Document clientMethod(int userID, byte[] state) { > System.out.println("byte[] length at client: " + state.length);//about > 100k > String stateString = Base64.encode(state); > System.out.println("encoded string length at client: " + > stateString.length());//about 130k > DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); > DocumentBuilder db = dbf.newDocumentBuilder(); > Document doc = db.newDocument(); > Element itemElement = doc.createElement("item"); > itemElement.appendChild(doc.createTextNode(stateString)); > doc.appendChild(itemElement); > URL rpcURL = null; > try { > rpcURL = new URL("http://localhost/soap/servlet/rpcrouter"); > } catch(MalformedURLException ex){ > ex.printStackTrace(); > } > Call call = new Call(); > call.setTargetObjectURI("urn:ItemManagerPersistence"); > call.setMethodName("saveItem"); > call.setEncodingStyleURI(Constants.NS_URI_LITERAL_XML); > Vector params = new Vector(); > params.addElement(new Parameter("userID", int.class, new Integer(userID), > Constants.NS_URI_SOAP_ENC)); > params.addElement(new Parameter("itemElement", Element.class, > itemElement, Constants.NS_URI_LITERAL_XML)); > call.setParams(params); > Response response = null; > try { > response = call.invoke(rpcURL, ""); > } catch(SOAPException ex) { > ex.printStackTrace(); > } > if(!response.generatedFault()) { > Parameter returnValue = response.getReturnValue(); > Object value = returnValue.getValue(); > if(value != null) { > Element element = (Element)value; > try { > doc = db.newDocument(); > Node importedNode = doc.importNode(element, true); > doc.appendChild(importedNode); > } catch(Exception ex){ > ex.printStackTrace(); > } > } else { > Fault fault = response.getFault(); > System.out.println("fault code: " + fault.getFaultCode() + " fault > string: " + fault.getFaultString()); > > } > return doc; > } > > Here is the method saveItem() code in provider class: > > public Element saveItem(int userID, Element itemElement) throws > ItemManagerException { > //debug code > String stateText = itemElement.getFirstChild().getNodeValue(); > System.out.println("encoded string length in provider: " + > stateText.length());//about 7k > byte[] state = Base64.decode(stateText); > System.out.println("byte[] length in provider: " + state.length);//about > 5k > //save and return element > return saveToDatabase(userID, itemElement); > } > > You might wonder why we're not sending byte[] as a soap parameter, that's > because we need to send addtional information about the item(text nodes) > besides the byte[], the original "itemElement" contains many text nodes > besides the encoded byte[] string. > > Any insight why the encoded string is getting truncated is welcome, > > Thanks, > > Vishnu. > > > |---------+-----------------------------> > | | Scott Nichol | > | | <snicholnews@scott| > | | nichol.com> | > | | | > | | 10/24/2002 06:04 | > | | PM | > | | Please respond to | > | | soap-user | > | | | > |---------+-----------------------------> > >----------------------------------------------------------------------- ----------------------------------------------------------------------| > | | > | To: [EMAIL PROTECTED], [EMAIL PROTECTED] | > | cc: [EMAIL PROTECTED] | > | Subject: Re: base 64 encoded xml string getting truncated | > >----------------------------------------------------------------------- ----------------------------------------------------------------------| > > > > > I am not clear about what you are doing. The client code you show > includes no byte array. Is the byte array on the server? I would have > to assume it is. Do you verify at the exit of your service method that > the string as contained in the DOM is the length you expect? Where in > the provider do you check the string to see it is 5k? Are you checking > the string still in the DOM, or as serialized? If you are looking at > the string while it is still in the DOM, I'm not sure what could have > gone wrong. > > Scott Nichol > ----- Original Message ----- > From: <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]>; <[EMAIL PROTECTED]> > Cc: <[EMAIL PROTECTED]> > Sent: Thursday, October 24, 2002 4:27 PM > Subject: base 64 encoded xml string getting truncated > > > > Hi, > > > > We have been successfully using apache soap over the past one year > > for transferring java objects between web applications. We're using > > soap 2.2 with websphere 3.5.4 servlet/ejb environment. > > > > We have a byte[] which is encoded to String using Base64 and the > String is > > placed as a child element in a Parent Element(which contains other > > childeren). > > > > We notice that when the Element reaches the Provider Class the encoded > > string(one of the child elements) > > is getting truncated(the original encoded string is about 100k and the > new > > string is about 5k). > > > > Are there any limits on the size of byte[] that can be encoded and > decoded > > by Base64? Or are there any limits on > > size of "Element" parameters to a soap call? > > > > Here is the client code: > > > > //"itemElement" is the whole xml which contains an element > > "binaryData" which holds the encoded string > > public static Document save(int userID, Element itemElement) > throws > > Exception { > > // Set the SOAP RPC URL > > URL rpcURL = null; > > try{ > > rpcURL = new URL > > ("http://localhost/soap/servlet/rpcrouter"); > > }catch(MalformedURLException ex){ > > throw new Exception("ItemManagerSOAPProxy::save - " > + > > ex.getMessage()); > > } > > // Build the SOAP call > > Call call = new Call(); > > call.setTargetObjectURI("urn:ItemManagerPersistence"); > > call.setMethodName("saveItem"); > > call.setEncodingStyleURI(Constants.NS_URI_LITERAL_XML); > > // Set the method parameters > > Vector params = new Vector(); > > params.addElement(new Parameter("userID", int.class, new > > Integer(userID), Constants.NS_URI_SOAP_ENC)); > > params.addElement(new Parameter("itemElement", > Element.class, > > itemElement, Constants.NS_URI_LITERAL_XML)); > > call.setParams(params); > > // Invoke the call > > Response response = null; > > try{ > > response = call.invoke(rpcURL, ""); > > }catch(SOAPException ex){ > > throw new Exception("ItemManagerSOAPProxy::save - > Caught > > SOAPException (" + ex.getFaultCode() + "): " + ex.getMessage()); > > } > > // Check the response > > Document itemXMLDocument = null; > > if(!response.generatedFault()){ > > Parameter returnValue = response.getReturnValue(); > > Object value = returnValue.getValue(); > > if(value != null) { > > // Cast value to an Element > > Element element = (Element)value; > > try{ > > DocumentBuilderFactory dbf = > > DocumentBuilderFactory.newInstance(); > > DocumentBuilder db = > dbf.newDocumentBuilder > > (); > > itemXMLDocument = db.newDocument(); > > Node importedNode = > > itemXMLDocument.importNode(element, true); > > > itemXMLDocument.appendChild(importedNode); > > } > > catch(Exception ex){ > > throw new Exception > > ("ItemManagerSOAPProxy::save - " + ex.getMessage()); > > } > > } > > }else{ > > Fault fault = response.getFault(); > > throw new Exception("ItemManagerSOAPProxy::save - > Fault > > Code = " + fault.getFaultCode() + " and Fault String = " + > > fault.getFaultString()); > > } > > return itemXMLDocument; > > } > > > > Here is the deployment descriptor: 'urn:ItemManagerPersistence' > > ID urn:ItemManagerPersistence > > Scope Application > > Provider Type java > > Provider Class > com.intellequip.itemmanager.soap.ItemManagerSOAPProcessor > > Use Static Class false > > Methods saveItem, saveItemTemp, getItemByID, getItemTempByID, > > deleteItemTemp > > > > Any ideas about what is happening? > > > > Thanks in advance, > > > > Vishnu. > > > > > > > > > > > > -- > > To unsubscribe, e-mail: <mailto:soap-dev-unsubscribe@;xml.apache.org> > > For additional commands, e-mail: <mailto:soap-dev-help@;xml.apache.org> > > > > > > > -- > To unsubscribe, e-mail: <mailto:soap-user-unsubscribe@;xml.apache.org> > For additional commands, e-mail: <mailto:soap-user-help@;xml.apache.org> > > > > > > > > -- > To unsubscribe, e-mail: <mailto:soap-user-unsubscribe@;xml.apache.org> > For additional commands, e-mail: <mailto:soap-user-help@;xml.apache.org> > > -- To unsubscribe, e-mail: <mailto:soap-user-unsubscribe@;xml.apache.org> For additional commands, e-mail: <mailto:soap-user-help@;xml.apache.org>