You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ru...@apache.org on 2005/10/18 03:57:59 UTC
svn commit: r326011 - in
/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl:
dom/CharacterImpl.java dom/DOMUtil.java dom/TextImpl.java
llom/OMTextImpl.java
Author: ruchithf
Date: Mon Oct 17 18:57:46 2005
New Revision: 326011
URL: http://svn.apache.org/viewcvs?rev=326011&view=rev
Log:
modules/xml/src/org/apache/axis2/om/impl/dom/TextImpl.java completed, MTOM related code taken from modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java, ASF licence added to modules/xml/src/org/apache/axis2/om/impl/dom/DOMUtil.java
Modified:
webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/CharacterImpl.java
webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/DOMUtil.java
webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/TextImpl.java
webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java
Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/CharacterImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/CharacterImpl.java?rev=326011&r1=326010&r2=326011&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/CharacterImpl.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/CharacterImpl.java Mon Oct 17 18:57:46 2005
@@ -15,7 +15,6 @@
*/
package org.apache.axis2.om.impl.dom;
-import org.apache.axis2.om.OMText;
import org.w3c.dom.CharacterData;
import org.w3c.dom.DOMException;
@@ -25,8 +24,7 @@
*
* @author Ruchith Fernando (ruchith.fernando@gmail.com)
*/
-public abstract class CharacterImpl extends ChildNode implements
- OMText, CharacterData {
+public abstract class CharacterImpl extends ChildNode implements CharacterData {
protected StringBuffer textValue;
@@ -169,28 +167,5 @@
public int getLength() {
return this.textValue.length();
}
-
-
- ///OMCharacter methods
-
- public String getText() {
- return this.textValue.toString();
- }
-
-
- ///
- /// Unsupported binary manipulation related method
- ///
-
-
-
- public String getContentID() {
- throw new UnsupportedOperationException("This is required to hanlde binary content in OM");
- }
- public Object getDataHandler() {
- throw new UnsupportedOperationException("This is required to hanlde binary content in OM");
- }
-
-
}
Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/DOMUtil.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/DOMUtil.java?rev=326011&r1=326010&r2=326011&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/DOMUtil.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/DOMUtil.java Mon Oct 17 18:57:46 2005
@@ -1,5 +1,25 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.apache.axis2.om.impl.dom;
+/**
+ * Utility class for the OM-DOM implementation
+ *
+ * @author Ruchith Fernando (ruchith.fernando@gmail.com)
+ */
class DOMUtil {
public static boolean isValidChras(String value) {
Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/TextImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/TextImpl.java?rev=326011&r1=326010&r2=326011&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/TextImpl.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/dom/TextImpl.java Mon Oct 17 18:57:46 2005
@@ -15,20 +15,30 @@
*/
package org.apache.axis2.om.impl.dom;
+import org.apache.axis2.om.OMAttribute;
+import org.apache.axis2.om.OMElement;
import org.apache.axis2.om.OMException;
+import org.apache.axis2.om.OMNamespace;
import org.apache.axis2.om.OMNode;
+import org.apache.axis2.om.OMText;
import org.apache.axis2.om.impl.OMOutputImpl;
+import org.apache.axis2.om.impl.llom.mtom.MTOMStAXSOAPModelBuilder;
+import org.apache.axis2.util.Base64;
+import org.apache.axis2.util.UUIDGenerator;
import org.w3c.dom.DOMException;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
+import java.io.IOException;
+import java.io.InputStream;
+
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
/**
* @author Ruchith Fernando (ruchith.fernando@gmail.com)
*/
-public class TextImpl extends CharacterImpl implements Text {
+public class TextImpl extends CharacterImpl implements Text, OMText {
private String mimeType;
@@ -36,14 +46,39 @@
private boolean optimize;
private boolean isBinary;
-
+
+ /**
+ * Field dataHandler contains the DataHandler
+ * Declaring as Object to remove the depedency on
+ * Javax.activation.DataHandler
+ */
+ private String contentID = null;
+
/**
* Field dataHandler contains the DataHandler
* Declaring as Object to remove the depedency on
* Javax.activation.DataHandler
*/
private Object dataHandlerObject = null;
-
+
+
+ /**
+ * Field nameSpace used when serialising Binary stuff as MTOM optimised
+ */
+ protected OMNamespace ns = new NamespaceImpl(
+ "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;
+
+
/**
* Create a text node with the given text
* required by the OMDOMFactory
@@ -174,36 +209,235 @@
* @see org.apache.axis2.om.OMNode#serialize(org.apache.axis2.om.OMOutput)
*/
public void serialize(OMOutputImpl omOutput) throws XMLStreamException {
- // TODO
- throw new UnsupportedOperationException("TODO");
+ serializeLocal(omOutput);
}
-
- public void serialize(XMLStreamWriter xmlWriter) throws XMLStreamException {
- // TODO
- throw new UnsupportedOperationException("TODO");
- }
-
public void serializeAndConsume(OMOutputImpl omOutput) throws XMLStreamException {
- // TODO
- throw new UnsupportedOperationException("TODO");
+ serializeLocal(omOutput);
}
- public void serializeAndConsume(XMLStreamWriter xmlWriter) throws XMLStreamException {
- // TODO
- throw new UnsupportedOperationException("TODO");
- }
-
- public void doOptimize(boolean value) {
- throw new UnsupportedOperationException("TODO");
- }
public boolean isOptimized() {
- throw new UnsupportedOperationException("TODO");
+ return this.optimize;
}
public void setOptimize(boolean value) {
- // TODO
- throw new UnsupportedOperationException("TODO");
+ this.optimize = value;
}
+
+ public void discard() throws OMException {
+ if (done) {
+ this.detach();
+ } else {
+ builder.discard((OMElement) this.parentNode);
+ }
+ }
+
+ /**
+ * Writes the relevant output
+ *
+ * @param omOutput
+ * @throws XMLStreamException
+ */
+ private void writeOutput(OMOutputImpl omOutput) throws XMLStreamException {
+ XMLStreamWriter writer = omOutput.getXmlStreamWriter();
+ int type = getType();
+ if (type == Node.TEXT_NODE || type == SPACE_NODE) {
+ writer.writeCharacters(this.getText());
+ } else if (type == Node.CDATA_SECTION_NODE) {
+ writer.writeCData(this.getText());
+ } else if (type == Node.ENTITY_REFERENCE_NODE) {
+ writer.writeEntityRef(this.getText());
+ }
+ }
+
+
+ public String getText() {
+ if (this.textValue!= null) {
+ return this.textValue.toString();
+ } else {
+ try {
+ InputStream inStream;
+ inStream = this.getInputStream();
+ //int x = inStream.available();
+ byte[] data;
+ StringBuffer text = new StringBuffer();
+ do {
+ data = new byte[1024];
+ int len;
+ while((len = inStream.read(data)) > 0) {
+ byte[] temp = new byte[len];
+ System.arraycopy(data,0,temp,0,len);
+ text.append(Base64.encode(temp));
+ }
+
+ } while (inStream.available() > 0);
+ return text.toString();
+ } catch (Exception e) {
+ throw new OMException(e);
+ }
+ }
+ }
+
+ public String getContentID() {
+ if (contentID == null) {
+ contentID = UUIDGenerator.getUUID()
+ + "@apache.org";
+ }
+ return this.contentID;
+ }
+ public Object getDataHandler() {
+ /*
+ * this should return a DataHandler containing the binary data
+ * reperesented by the Base64 strings stored in OMText
+ */
+ if (textValue != null & isBinary) {
+ return org.apache.axis2.attachments.DataHandlerUtils.getDataHandlerFromText(textValue.toString() ,mimeType);
+ } else {
+
+ if (dataHandlerObject == null) {
+ if (contentID == null) {
+ throw new RuntimeException("ContentID is null");
+ }
+ dataHandlerObject = ((MTOMStAXSOAPModelBuilder) builder)
+ .getDataHandler(contentID);
+ }
+ return dataHandlerObject;
+ }
+ }
+
+
+ public java.io.InputStream getInputStream() throws OMException {
+ if (isBinary) {
+ if (dataHandlerObject == null) {
+ getDataHandler();
+ }
+ InputStream inStream;
+ javax.activation.DataHandler dataHandler = (javax.activation.DataHandler)dataHandlerObject;
+ 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");
+ }
+ }
+
+
+ private void serializeLocal(OMOutputImpl omOutput) throws XMLStreamException {
+ if (!this.isBinary) {
+ writeOutput(omOutput);
+ } else {
+ if (omOutput.isOptimized()) {
+ if (contentID == null) {
+ contentID = omOutput.getNextContentId();
+ }
+ // send binary as MTOM optimised
+ this.attribute = new AttrImpl("href",
+ new NamespaceImpl("", ""), "cid:" + getContentID());
+ this.serializeStartpart(omOutput);
+ omOutput.writeOptimized(this);
+ omOutput.getXmlStreamWriter().writeEndElement();
+ } else {
+ omOutput.getXmlStreamWriter().writeCharacters(this.getText());
+ }
+ }
+ }
+
+
+ /*
+ * 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, 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);
+ }
+ }
+
}
Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java?rev=326011&r1=326010&r2=326011&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMTextImpl.java Mon Oct 17 18:57:46 2005
@@ -171,9 +171,7 @@
* @param omOutput
* @throws XMLStreamException
*/
- public void serialize(
- org.apache.axis2.om.impl.OMOutputImpl omOutput)
- throws XMLStreamException {
+ public void serialize(OMOutputImpl omOutput) throws XMLStreamException {
serializeLocal(omOutput);
}
@@ -404,8 +402,7 @@
* @param omOutput
* @throws XMLStreamException
*/
- static void serializeNamespace(OMNamespace namespace,
- org.apache.axis2.om.impl.OMOutputImpl omOutput)
+ static void serializeNamespace(OMNamespace namespace, OMOutputImpl omOutput)
throws XMLStreamException {
XMLStreamWriter writer = omOutput.getXmlStreamWriter();
if (namespace != null) {