Return-Path: Delivered-To: apmail-ws-axis-dev-archive@www.apache.org Received: (qmail 84751 invoked from network); 27 Jul 2005 05:30:43 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 27 Jul 2005 05:30:43 -0000 Received: (qmail 22367 invoked by uid 500); 27 Jul 2005 05:30:41 -0000 Delivered-To: apmail-ws-axis-dev-archive@ws.apache.org Received: (qmail 22346 invoked by uid 500); 27 Jul 2005 05:30:40 -0000 Mailing-List: contact axis-cvs-help@ws.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list axis-cvs@ws.apache.org Received: (qmail 22332 invoked by uid 99); 27 Jul 2005 05:30:40 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Tue, 26 Jul 2005 22:30:29 -0700 Received: (qmail 84578 invoked by uid 65534); 27 Jul 2005 05:30:27 -0000 Message-ID: <20050727053027.84577.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r225457 - /webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java Date: Wed, 27 Jul 2005 05:30:27 -0000 To: axis-cvs@ws.apache.org From: thilina@apache.org X-Mailer: svnmailer-1.0.2 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: thilina Date: Tue Jul 26 22:30:21 2005 New Revision: 225457 URL: http://svn.apache.org/viewcvs?rev=225457&view=rev Log: Altering the getText method in OMTextImpl This will now convert binary to Base64 by reading 3 bytes at a time Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java Modified: webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java?rev=225457&r1=225456&r2=225457&view=diff ============================================================================== --- webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java (original) +++ webservices/axis/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java Tue Jul 26 22:30:21 2005 @@ -40,399 +40,395 @@ import org.apache.axis2.om.impl.llom.mtom.MTOMStAXSOAPModelBuilder; public class OMTextImpl extends OMNodeImpl implements OMText, OMConstants { - protected String value = null; + protected String value = null; - protected String mimeType; + protected String mimeType; - protected boolean optimize = false; + protected boolean optimize = false; - protected boolean isBinary = false; + protected boolean isBinary = false; - private static Random rnd = new Random(new Date().getTime()); - - /** - * Field contentID for the mime part used when serialising Binary stuff as - * MTOM optimised - */ - private String contentID = null; - - /** - * Field dataHandler - */ - private DataHandler dataHandler = null; - - /** - * Field nameSpace used when serialising Binary stuff as MTOM optimised - */ - protected OMNamespace ns = new OMNamespaceImpl( - "http://www.w3.org/2004/08/xop/include", "xop"); - - /** - * Field localName used when serialising Binary stuff as MTOM optimised - */ - protected String localName = "Include"; - - /** - * Field attributes used when serialising Binary stuff as MTOM optimised - */ - protected OMAttribute attribute; - - /** - * Constructor OMTextImpl - * - * @param s - */ - public OMTextImpl(String s) { - this.value = s; - this.nodeType = TEXT_NODE; - } - - /** - * Constructor OMTextImpl - * - * @param parent - * @param text - */ - public OMTextImpl(OMElement parent, String text) { - super(parent); - this.value = text; - done = true; - this.nodeType = TEXT_NODE; - } - - /** - * @param s - - * base64 encoded String representation of Binary - * @param mimeType - * of the Binary - */ - public OMTextImpl(String s, String mimeType, boolean optimize) { - this(null, s, mimeType, optimize); - } - - /** - * @param parent - * @param s - - * base64 encoded String representation of Binary - * @param mimeType - * of the Binary - */ - public OMTextImpl(OMElement parent, String s, String mimeType, - boolean optimize) { - this(parent, s); - this.mimeType = mimeType; - this.optimize = optimize; - done = true; - this.nodeType = TEXT_NODE; - } - - /** - * @param dataHandler - * To send binary optimised content Created programatically. - */ - public OMTextImpl(DataHandler dataHandler) { - this(dataHandler, true); - } - - /** - * @param dataHandler - * @param optimize - * To send binary content. Created progrmatically. - */ - public OMTextImpl(DataHandler dataHandler, boolean optimize) { - this.dataHandler = dataHandler; - this.isBinary = true; - this.optimize = optimize; - done = true; - this.nodeType = TEXT_NODE; - } - - /** - * @param contentID - * @param parent - * @param builder - * Used when the builder is encountered with a XOP:Include tag - * Stores a reference to the builder and the content-id. Supports - * deffered parsing of MIME messages - */ - public OMTextImpl(String contentID, OMElement parent, - OMXMLParserWrapper builder) { - super(parent); - this.contentID = contentID; - this.optimize = true; - this.isBinary = true; - this.builder = builder; - this.nodeType = TEXT_NODE; - } - - /** - * @param omOutput - * @throws XMLStreamException - */ - public void serializeWithCache( - org.apache.axis2.om.impl.OMOutputImpl omOutput) - throws XMLStreamException { - XMLStreamWriter writer = omOutput.getXmlStreamWriter(); - int type = getType(); - if (type == TEXT_NODE) { - writer.writeCharacters(this.value); - } else if (type == CDATA_SECTION_NODE) { - writer.writeCData(this.value); - } - OMNode nextSibling = this.getNextSibling(); - if (nextSibling != null) { - nextSibling.serializeWithCache(omOutput); - } - } - - /** - * Returns the value - */ - public String getText() throws OMException { - if (this.value != null) { - return this.value; - } else { - try { - InputStream inStream; - inStream = this.getInputStream(); - int x = inStream.available(); - byte[] data; - // There are times, this inStream reports the Available bytes incorrectly. - // Reading the First byte & then getting the available number of bytes fixed it. - if (x==0) - { - int firstByte = inStream.read(); - data = new byte[inStream.available()+1]; - data[0] = (byte)firstByte; - IOUtils.readFully(inStream, data,1,data.length-1); - } - else - { - data = new byte[inStream.available()]; - IOUtils.readFully(inStream, data); - } - return Base64.encode(data); - } catch (Exception e) { - throw new OMException( - "Cannot read from Stream taken form the Data Handler" - + e); - } - } - } - - public boolean isOptimized() { - return optimize; - } - - public void setOptimize(boolean value) { - this.optimize = value; - } - - /** - * @return - * @throws org.apache.axis2.om.OMException - * - * @throws OMException - */ - public DataHandler getDataHandler() { - /* - * this should return a DataHandler containing the binary data - * reperesented by the Base64 strings stored in OMText - */ - if (value != null) { - ByteArrayDataSource dataSource; - byte[] data = Base64.decode(value); - if (mimeType != null) { - dataSource = new ByteArrayDataSource(data, mimeType); - } else { - // Assumes type as application/octet-stream - dataSource = new ByteArrayDataSource(data); - } - return new DataHandler(dataSource); - } else { - - if (dataHandler == null) { - if (contentID == null) { - throw new RuntimeException("ContentID is null"); - } - dataHandler = ((MTOMStAXSOAPModelBuilder) builder) - .getDataHandler(contentID); - } - return dataHandler; - } - } - - public String getLocalName() { - return localName; - } - - public java.io.InputStream getInputStream() throws OMException { - if (isBinary) { - if (dataHandler == null) { - getDataHandler(); - } - InputStream inStream; - try { - inStream = dataHandler.getDataSource().getInputStream(); - } catch (IOException e) { - throw new OMException( - "Cannot get InputStream from DataHandler." + e); - } - return inStream; - } else { - throw new OMException("Unsupported Operation"); - } - } - - public String getContentID() { - if (contentID == null) { - contentID = MIMEOutputUtils.getRandomStringOf18Characters() - + "@apache.org"; - } - return this.contentID; - } - - public boolean isComplete() { - return done; - } - - public void serialize(org.apache.axis2.om.impl.OMOutputImpl omOutput) - throws XMLStreamException { - if (!this.isBinary) { - serializeWithCache(omOutput); - } else { - if (omOutput.isOptimized()) { - if (contentID == null) { - contentID = omOutput.getNextContentId(); - } - // send binary as MTOM optimised - this.attribute = new OMAttributeImpl("href", - new OMNamespaceImpl("", ""), "cid:" + getContentID()); - this.serializeStartpart(omOutput); - omOutput.writeOptimized(this); - omOutput.getXmlStreamWriter().writeEndElement(); - } else { - omOutput.getXmlStreamWriter().writeCharacters(this.getText()); - } - // TODO do we need these - OMNode nextSibling = this.getNextSibling(); - if (nextSibling != null) { - // serilize next sibling - nextSibling.serialize(omOutput); - } else { - // TODO : See whether following part is really needed - if (parent != null && !parent.isComplete()) { - // do the special serialization - // Only the push serializer is left now - builder.next(); - } - } - } - } - - /* - * Methods to copy from OMSerialize utils - */ - private void serializeStartpart(OMOutputImpl omOutput) - throws XMLStreamException { - String nameSpaceName; - String writer_prefix; - String prefix; - XMLStreamWriter writer = omOutput.getXmlStreamWriter(); - if (this.ns != null) { - nameSpaceName = this.ns.getName(); - writer_prefix = writer.getPrefix(nameSpaceName); - prefix = this.ns.getPrefix(); - if (nameSpaceName != null) { - if (writer_prefix != null) { - writer - .writeStartElement(nameSpaceName, this - .getLocalName()); - } else { - if (prefix != null) { - writer.writeStartElement(prefix, this.getLocalName(), - nameSpaceName); - //TODO FIX ME - //writer.writeNamespace(prefix, nameSpaceName); - writer.setPrefix(prefix, nameSpaceName); - } else { - writer.writeStartElement(nameSpaceName, this - .getLocalName()); - writer.writeDefaultNamespace(nameSpaceName); - writer.setDefaultNamespace(nameSpaceName); - } - } - } else { - writer.writeStartElement(this.getLocalName()); - } - } else { - writer.writeStartElement(this.getLocalName()); - } - // add the elements attribute "href" - serializeAttribute(this.attribute, omOutput); - // add the namespace - serializeNamespace(this.ns, omOutput); - } - - /** - * Method serializeAttribute - * - * @param attr - * @param omOutput - * @throws XMLStreamException - */ - static void serializeAttribute(OMAttribute attr, OMOutputImpl omOutput) - throws XMLStreamException { - XMLStreamWriter writer = omOutput.getXmlStreamWriter(); - // first check whether the attribute is associated with a namespace - OMNamespace ns = attr.getNamespace(); - String prefix; - String namespaceName; - if (ns != null) { - // add the prefix if it's availble - prefix = ns.getPrefix(); - namespaceName = ns.getName(); - if (prefix != null) { - writer.writeAttribute(prefix, namespaceName, attr - .getLocalName(), attr.getValue()); - } else { - writer.writeAttribute(namespaceName, attr.getLocalName(), attr - .getValue()); - } - } else { - writer.writeAttribute(attr.getLocalName(), attr.getValue()); - } - } - - /** - * Method serializeNamespace - * - * @param namespace - * @param omOutput - * @throws XMLStreamException - */ - static void serializeNamespace(OMNamespace namespace, - org.apache.axis2.om.impl.OMOutputImpl omOutput) - throws XMLStreamException { - XMLStreamWriter writer = omOutput.getXmlStreamWriter(); - if (namespace != null) { - String uri = namespace.getName(); - String ns_prefix = namespace.getPrefix(); - writer.writeNamespace(ns_prefix, namespace.getName()); - writer.setPrefix(ns_prefix, uri); - } - } - - /** - * Slightly different implementation of the discard method - * - * @throws OMException - */ - public void discard() throws OMException { - if (done) { - this.detach(); - } else { - builder.discard((OMElement) this.parent); - } - } + private static Random rnd = new Random(new Date().getTime()); + + /** + * Field contentID for the mime part used when serialising Binary stuff as + * MTOM optimised + */ + private String contentID = null; + + /** + * Field dataHandler + */ + private DataHandler dataHandler = null; + + /** + * Field nameSpace used when serialising Binary stuff as MTOM optimised + */ + protected OMNamespace ns = new OMNamespaceImpl( + "http://www.w3.org/2004/08/xop/include", "xop"); + + /** + * Field localName used when serialising Binary stuff as MTOM optimised + */ + protected String localName = "Include"; + + /** + * Field attributes used when serialising Binary stuff as MTOM optimised + */ + protected OMAttribute attribute; + + /** + * Constructor OMTextImpl + * + * @param s + */ + public OMTextImpl(String s) { + this.value = s; + this.nodeType = TEXT_NODE; + } + + /** + * Constructor OMTextImpl + * + * @param parent + * @param text + */ + public OMTextImpl(OMElement parent, String text) { + super(parent); + this.value = text; + done = true; + this.nodeType = TEXT_NODE; + } + + /** + * @param s - + * base64 encoded String representation of Binary + * @param mimeType + * of the Binary + */ + public OMTextImpl(String s, String mimeType, boolean optimize) { + this(null, s, mimeType, optimize); + } + + /** + * @param parent + * @param s - + * base64 encoded String representation of Binary + * @param mimeType + * of the Binary + */ + public OMTextImpl(OMElement parent, String s, String mimeType, + boolean optimize) { + this(parent, s); + this.mimeType = mimeType; + this.optimize = optimize; + done = true; + this.nodeType = TEXT_NODE; + } + + /** + * @param dataHandler + * To send binary optimised content Created programatically. + */ + public OMTextImpl(DataHandler dataHandler) { + this(dataHandler, true); + } + + /** + * @param dataHandler + * @param optimize + * To send binary content. Created progrmatically. + */ + public OMTextImpl(DataHandler dataHandler, boolean optimize) { + this.dataHandler = dataHandler; + this.isBinary = true; + this.optimize = optimize; + done = true; + this.nodeType = TEXT_NODE; + } + + /** + * @param contentID + * @param parent + * @param builder + * Used when the builder is encountered with a XOP:Include tag + * Stores a reference to the builder and the content-id. Supports + * deffered parsing of MIME messages + */ + public OMTextImpl(String contentID, OMElement parent, + OMXMLParserWrapper builder) { + super(parent); + this.contentID = contentID; + this.optimize = true; + this.isBinary = true; + this.builder = builder; + this.nodeType = TEXT_NODE; + } + + /** + * @param omOutput + * @throws XMLStreamException + */ + public void serializeWithCache( + org.apache.axis2.om.impl.OMOutputImpl omOutput) + throws XMLStreamException { + XMLStreamWriter writer = omOutput.getXmlStreamWriter(); + int type = getType(); + if (type == TEXT_NODE) { + writer.writeCharacters(this.value); + } else if (type == CDATA_SECTION_NODE) { + writer.writeCData(this.value); + } + OMNode nextSibling = this.getNextSibling(); + if (nextSibling != null) { + nextSibling.serializeWithCache(omOutput); + } + } + + /** + * Returns the value + */ + public String getText() throws OMException { + if (this.value != null) { + return this.value; + } else { + try { + InputStream inStream; + inStream = this.getInputStream(); + //int x = inStream.available(); + byte[] data; + StringBuffer text= new StringBuffer(); + // There are times, this inStream reports the Available bytes + // incorrectly. + // Reading the First byte & then getting the available number of + // bytes fixed it. + do { + data = new byte[3]; + IOUtils.readFully(inStream, data, 0, 3); + text.append(Base64.encode(data)); + }while (inStream.available()>0); + return Base64.encode(data); + } catch (Exception e) { + throw new OMException( + "Cannot read from Stream taken form the Data Handler" + + e); + } + } + } + + public boolean isOptimized() { + return optimize; + } + + public void setOptimize(boolean value) { + this.optimize = value; + } + + /** + * @return + * @throws org.apache.axis2.om.OMException + * + * @throws OMException + */ + public DataHandler getDataHandler() { + /* + * this should return a DataHandler containing the binary data + * reperesented by the Base64 strings stored in OMText + */ + if (value != null) { + ByteArrayDataSource dataSource; + byte[] data = Base64.decode(value); + if (mimeType != null) { + dataSource = new ByteArrayDataSource(data, mimeType); + } else { + // Assumes type as application/octet-stream + dataSource = new ByteArrayDataSource(data); + } + return new DataHandler(dataSource); + } else { + + if (dataHandler == null) { + if (contentID == null) { + throw new RuntimeException("ContentID is null"); + } + dataHandler = ((MTOMStAXSOAPModelBuilder) builder) + .getDataHandler(contentID); + } + return dataHandler; + } + } + + public String getLocalName() { + return localName; + } + + public java.io.InputStream getInputStream() throws OMException { + if (isBinary) { + if (dataHandler == null) { + getDataHandler(); + } + InputStream inStream; + try { + inStream = dataHandler.getDataSource().getInputStream(); + } catch (IOException e) { + throw new OMException( + "Cannot get InputStream from DataHandler." + e); + } + return inStream; + } else { + throw new OMException("Unsupported Operation"); + } + } + + public String getContentID() { + if (contentID == null) { + contentID = MIMEOutputUtils.getRandomStringOf18Characters() + + "@apache.org"; + } + return this.contentID; + } + + public boolean isComplete() { + return done; + } + + public void serialize(org.apache.axis2.om.impl.OMOutputImpl omOutput) + throws XMLStreamException { + if (!this.isBinary) { + serializeWithCache(omOutput); + } else { + if (omOutput.isOptimized()) { + if (contentID == null) { + contentID = omOutput.getNextContentId(); + } + // send binary as MTOM optimised + this.attribute = new OMAttributeImpl("href", + new OMNamespaceImpl("", ""), "cid:" + getContentID()); + this.serializeStartpart(omOutput); + omOutput.writeOptimized(this); + omOutput.getXmlStreamWriter().writeEndElement(); + } else { + omOutput.getXmlStreamWriter().writeCharacters(this.getText()); + } + // TODO do we need these + OMNode nextSibling = this.getNextSibling(); + if (nextSibling != null) { + // serilize next sibling + nextSibling.serialize(omOutput); + } else { + // TODO : See whether following part is really needed + if (parent != null && !parent.isComplete()) { + // do the special serialization + // Only the push serializer is left now + builder.next(); + } + } + } + } + + /* + * Methods to copy from OMSerialize utils + */ + private void serializeStartpart(OMOutputImpl omOutput) + throws XMLStreamException { + String nameSpaceName; + String writer_prefix; + String prefix; + XMLStreamWriter writer = omOutput.getXmlStreamWriter(); + if (this.ns != null) { + nameSpaceName = this.ns.getName(); + writer_prefix = writer.getPrefix(nameSpaceName); + prefix = this.ns.getPrefix(); + if (nameSpaceName != null) { + if (writer_prefix != null) { + writer + .writeStartElement(nameSpaceName, this + .getLocalName()); + } else { + if (prefix != null) { + writer.writeStartElement(prefix, this.getLocalName(), + nameSpaceName); + //TODO FIX ME + //writer.writeNamespace(prefix, nameSpaceName); + writer.setPrefix(prefix, nameSpaceName); + } else { + writer.writeStartElement(nameSpaceName, this + .getLocalName()); + writer.writeDefaultNamespace(nameSpaceName); + writer.setDefaultNamespace(nameSpaceName); + } + } + } else { + writer.writeStartElement(this.getLocalName()); + } + } else { + writer.writeStartElement(this.getLocalName()); + } + // add the elements attribute "href" + serializeAttribute(this.attribute, omOutput); + // add the namespace + serializeNamespace(this.ns, omOutput); + } + + /** + * Method serializeAttribute + * + * @param attr + * @param omOutput + * @throws XMLStreamException + */ + static void serializeAttribute(OMAttribute attr, OMOutputImpl omOutput) + throws XMLStreamException { + XMLStreamWriter writer = omOutput.getXmlStreamWriter(); + // first check whether the attribute is associated with a namespace + OMNamespace ns = attr.getNamespace(); + String prefix; + String namespaceName; + if (ns != null) { + // add the prefix if it's availble + prefix = ns.getPrefix(); + namespaceName = ns.getName(); + if (prefix != null) { + writer.writeAttribute(prefix, namespaceName, attr + .getLocalName(), attr.getValue()); + } else { + writer.writeAttribute(namespaceName, attr.getLocalName(), attr + .getValue()); + } + } else { + writer.writeAttribute(attr.getLocalName(), attr.getValue()); + } + } + + /** + * Method serializeNamespace + * + * @param namespace + * @param omOutput + * @throws XMLStreamException + */ + static void serializeNamespace(OMNamespace namespace, + org.apache.axis2.om.impl.OMOutputImpl omOutput) + throws XMLStreamException { + XMLStreamWriter writer = omOutput.getXmlStreamWriter(); + if (namespace != null) { + String uri = namespace.getName(); + String ns_prefix = namespace.getPrefix(); + writer.writeNamespace(ns_prefix, namespace.getName()); + writer.setPrefix(ns_prefix, uri); + } + } + + /** + * Slightly different implementation of the discard method + * + * @throws OMException + */ + public void discard() throws OMException { + if (done) { + this.detach(); + } else { + builder.discard((OMElement) this.parent); + } + } }