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 ch...@apache.org on 2005/03/15 11:56:40 UTC

svn commit: r157534 [4/4] - in webservices/axis/trunk/archive/java/scratch/Thilina/MTOM: lib/ src/java/org/apache/axis/impl/ src/java/org/apache/axis/om/impl/ src/java/org/apache/axis/om/impl/llom/ src/java/org/apache/axis/om/impl/llom/builder/ src/java/org/apache/axis/om/impl/llom/exception/ src/java/org/apache/axis/om/impl/llom/mtom/ src/java/org/apache/axis/om/impl/llom/serialize/ src/java/org/apache/axis/om/impl/llom/traverse/ src/test-resources/ src/test/org/apache/axis/om/ src/test/org/apache/axis/om/impl/ src/test/org/apache/axis/om/impl/llom/ src/test/org/apache/axis/om/impl/llom/mtom/

Added: webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenQNameIterator.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenQNameIterator.java?view=auto&rev=157534
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenQNameIterator.java (added)
+++ webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenQNameIterator.java Tue Mar 15 02:56:31 2005
@@ -0,0 +1,135 @@
+/*
+ * 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.axis.om.impl.llom.traverse;
+
+import org.apache.axis.om.OMNode;
+import org.apache.axis.om.impl.llom.OMNamedNodeImpl;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Class OMChildrenQNameIterator
+ */
+public class OMChildrenQNameIterator extends OMChildrenIterator {
+    /**
+     * Field givenQName
+     */
+    private QName givenQName;
+
+    /**
+     * Field needToMoveForward
+     */
+    private boolean needToMoveForward = true;
+
+    /**
+     * Field isMatchingNodeFound
+     */
+    private boolean isMatchingNodeFound = false;
+
+    /**
+     * Constructor OMChildrenQNameIterator
+     *
+     * @param currentChild
+     * @param givenQName
+     */
+    public OMChildrenQNameIterator(OMNode currentChild, QName givenQName) {
+        super(currentChild);
+        this.givenQName = givenQName;
+    }
+
+    /**
+     * Returns <tt>true</tt> if the iteration has more elements. (In other
+     * words, returns <tt>true</tt> if <tt>next</tt> would return an element
+     * rather than throwing an exception.)
+     *
+     * @return <tt>true</tt> if the iterator has more elements.
+     */
+    public boolean hasNext() {
+        while (needToMoveForward) {
+            if (currentChild != null) {
+
+                // check the current node for the criteria
+                if ((currentChild instanceof OMNamedNodeImpl)
+                        && (isQNamesMatch(
+                                   ((OMNamedNodeImpl) currentChild).getQName(),
+                                   this.givenQName))) {
+                    isMatchingNodeFound = true;
+                    needToMoveForward = false;
+                } else {
+
+                    // get the next named node
+                    currentChild = currentChild.getNextSibling();
+                    isMatchingNodeFound = needToMoveForward = !(currentChild
+                                                                           == null);
+                }
+            } else {
+                needToMoveForward = false;
+            }
+        }
+        return isMatchingNodeFound;
+    }
+
+    /**
+     * Returns the next element in the iteration.
+     *
+     * @return the next element in the iteration.
+     * @throws java.util.NoSuchElementException
+     *          iteration has no more elements.
+     */
+    public Object next() {
+
+        // reset the flags
+        needToMoveForward = true;
+        isMatchingNodeFound = false;
+        nextCalled = true;
+        removeCalled = false;
+        lastChild = currentChild;
+        currentChild = currentChild.getNextSibling();
+        return lastChild;
+    }
+
+    /**
+     * Here I can not use the overriden equals method of QName, as one might want to get
+     * some element just by giving the localname, even though a matching element has a namespace uri as well.
+     * This will not be supported in the equals method of the QName
+     *
+     * @param elementQName
+     * @param qNameToBeMatched
+     * @return
+     */
+    private boolean isQNamesMatch(QName elementQName, QName qNameToBeMatched) {
+
+        // if no QName was given, that means one needs all
+        if (qNameToBeMatched == null) {
+            return true;
+        }
+
+        // if the given localname is null, whatever value this.qname has, its a match
+        boolean localNameMatch =
+        (qNameToBeMatched.getLocalPart() == null)
+                || (qNameToBeMatched.getLocalPart() == "")
+                || ((elementQName != null)
+                               && elementQName.getLocalPart().equalsIgnoreCase(
+                                       qNameToBeMatched.getLocalPart()));
+        boolean namespaceURIMatch =
+        (qNameToBeMatched.getNamespaceURI() == null)
+                || (qNameToBeMatched.getNamespaceURI() == "")
+                || ((elementQName != null)
+                               && elementQName.getNamespaceURI().equalsIgnoreCase(
+                                       qNameToBeMatched.getNamespaceURI()));
+        return localNameMatch && namespaceURIMatch;
+    }
+}

Added: webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenWithSpecificAttributeIterator.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenWithSpecificAttributeIterator.java?view=auto&rev=157534
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenWithSpecificAttributeIterator.java (added)
+++ webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/java/org/apache/axis/om/impl/llom/traverse/OMChildrenWithSpecificAttributeIterator.java Tue Mar 15 02:56:31 2005
@@ -0,0 +1,112 @@
+/*
+ * 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.axis.om.impl.llom.traverse;
+
+import org.apache.axis.om.OMAttribute;
+import org.apache.axis.om.OMElement;
+import org.apache.axis.om.OMNode;
+
+import javax.xml.namespace.QName;
+
+/**
+ * Class OMChildrenWithSpecificAttributeIterator
+ */
+public class OMChildrenWithSpecificAttributeIterator
+        extends OMChildrenIterator {
+    /**
+     * Field attributeName
+     */
+    private QName attributeName;
+
+    /**
+     * Field attributeValue
+     */
+    private String attributeValue;
+
+    /**
+     * Field detach
+     */
+    private boolean detach;
+
+    /**
+     * Constructor OMChildrenWithSpecificAttributeIterator
+     *
+     * @param currentChild
+     * @param attributeName
+     * @param attributeValue
+     * @param detach
+     */
+    public OMChildrenWithSpecificAttributeIterator(OMNode currentChild,
+                                                   QName attributeName, String attributeValue, boolean detach) {
+        super(currentChild);
+        this.attributeName = attributeName;
+        this.attributeValue = attributeValue;
+        this.detach = detach;
+    }
+
+    /**
+     * Method hasNext
+     *
+     * @return
+     */
+    public boolean hasNext() {
+
+        // First check whether we have a child, using the super class
+        if (currentChild == null) {
+            return false;
+        }
+        boolean isMatchingNodeFound = false;
+        boolean needToMoveForward = true;
+
+        // now we have a child to check. If its an OMElement and matches the criteria, then we are done
+        while (needToMoveForward) {
+
+            // check the current node for the criteria
+            if (currentChild instanceof OMElement) {
+                OMAttribute attr =
+                        ((OMElement) currentChild).getAttributeWithQName(
+                        attributeName);
+                if ((attr != null)
+                        && attr.getValue().equalsIgnoreCase(attributeValue)) {
+                    isMatchingNodeFound = true;
+                    needToMoveForward = false;
+                } else {
+                    currentChild = currentChild.getNextSibling();
+                    needToMoveForward = !(currentChild == null);
+                }
+            } else {
+
+                // get the next named node
+                currentChild = currentChild.getNextSibling();
+                needToMoveForward = !(currentChild == null);
+            }
+        }
+        return isMatchingNodeFound;
+    }
+
+    /**
+     * Method next
+     *
+     * @return
+     */
+    public Object next() {
+        Object o = super.next();
+        if ((o != null) && detach) {
+            ((OMElement) o).detach();
+        }
+        return o;
+    }
+}

Modified: webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test-resources/OMSerializeMTOMOut.txt
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test-resources/OMSerializeMTOMOut.txt?view=diff&r1=157533&r2=157534
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test-resources/OMSerializeMTOMOut.txt (original)
+++ webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test-resources/OMSerializeMTOMOut.txt Tue Mar 15 02:56:31 2005
@@ -1,17 +1,17 @@
 MIME-Version: 1.0
 Content-Type: multipart/Related; 
-	boundary="----=_Part_0_5525185.1110549010843"
+	boundary="----=_Part_0_31212095.1110790995812"
 
-------=_Part_0_5525185.1110549010843
+------=_Part_0_31212095.1110790995812
 Content-Type: application/xop+xml
 Content-Transfer-Encoding: 8bit
 Content-ID: <http://example.org/my.hsh>
 
-<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><m:data xmlns:m="http://www.example.org/stuff"><m:name m:contentType="text/plain"><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/Include" href="cid:http://example.org/my.hsh1110549010656"></xop:Include></m:name></m:data></soap:Body></soap:Envelope>
-------=_Part_0_5525185.1110549010843
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><m:data xmlns:m="http://www.example.org/stuff"><m:name m:contentType="text/plain"><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/Include" href="cid:http://example.org/my.hsh1110790995593"></xop:Include></m:name></m:data></soap:Body></soap:Envelope>
+------=_Part_0_31212095.1110790995812
 Content-Type: text/plain; charset=Cp1252
 Content-Transfer-Encoding: binary
-Content-ID: <http://example.org/my.hsh1110549010656>
+Content-ID: <http://example.org/my.hsh1110790995593>
 
 Programming Project
-------=_Part_0_5525185.1110549010843--
+------=_Part_0_31212095.1110790995812--

Added: webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/OMTextImplTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/OMTextImplTest.java?view=auto&rev=157534
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/OMTextImplTest.java (added)
+++ webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/OMTextImplTest.java Tue Mar 15 02:56:31 2005
@@ -0,0 +1,99 @@
+/*
+ * Created on Mar 14, 2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.apache.axis.om.impl.llom;
+
+import java.io.*;
+
+import junit.framework.TestCase;
+import org.apache.axis.encoding.*;
+import javax.activation.*;
+import org.apache.axis.om.impl.llom.mtom.*;
+
+/**
+ * @author TGunarathne
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class OMTextImplTest extends TestCase {
+	Object expectedObject;
+	
+	OMTextImpl textNode;
+	
+	String expectedBase64;
+	
+	public static void main(String[] args) {
+		junit.swingui.TestRunner.run(OMTextImplTest.class);
+	}
+	
+	protected void setUp() throws Exception {
+		super.setUp();
+		expectedObject = new String("Lanka Software Foundation");
+		ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+		ObjectOutputStream objectOutStream = new ObjectOutputStream(byteStream);
+		objectOutStream.writeObject(expectedObject);
+		expectedBase64 = Base64.encode(byteStream.toByteArray());
+		textNode = new OMTextImpl(expectedBase64, "text/plain");	
+	}
+	
+	/*
+	 * @see TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+	
+	/**
+	 * Constructor for OMTextImplTest.
+	 * @param name
+	 */
+	public OMTextImplTest(String name) {
+		super(name);
+	}
+	
+	public void testBase64Encode() {
+		Object actualObject1;
+		try {
+			byte[] tempa = Base64.decode(expectedBase64);
+			ObjectInputStream objectInStream = new ObjectInputStream(
+					new ByteArrayInputStream(tempa));
+			actualObject1 = objectInStream.readObject();
+			assertEquals("Base64 Encoding Check", expectedObject, actualObject1);
+		} catch (IOException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		} catch (ClassNotFoundException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+		}
+	}
+	
+	public void testGetDataHandler() {
+		String actualObject;
+		
+		DataHandler DH = textNode.getDataHandler();
+		
+		ByteArrayDataSource ds = (ByteArrayDataSource) DH.getDataSource();
+		try {
+			InputStream inStream = ds.getInputStream();
+			ObjectInputStream obj = new ObjectInputStream(inStream);
+			
+			actualObject = (String) obj.readObject();
+			
+			assertEquals("OMTextImpl GetDataHandler Check", expectedObject,
+					actualObject);
+		} catch (ClassNotFoundException e1) {
+			// TODO Auto-generated catch block
+			e1.printStackTrace();
+			
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+	
+}
\ No newline at end of file

Added: webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/mtom/MTOMTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/mtom/MTOMTest.java?view=auto&rev=157534
==============================================================================
--- webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/mtom/MTOMTest.java (added)
+++ webservices/axis/trunk/archive/java/scratch/Thilina/MTOM/src/test/org/apache/axis/om/impl/llom/mtom/MTOMTest.java Tue Mar 15 02:56:31 2005
@@ -0,0 +1,171 @@
+/*
+ * Created on Mar 9, 2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.apache.axis.om.impl.llom.mtom;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.util.Iterator;
+
+import javax.activation.DataHandler;
+
+import junit.framework.TestCase;
+
+import org.apache.axis.om.OMAttribute;
+import javax.xml.stream.*;
+import org.apache.axis.om.OMElement;
+import org.apache.axis.om.impl.llom.OMAttributeImpl;
+import org.apache.axis.om.impl.llom.OMElementImpl;
+import org.apache.axis.om.impl.llom.OMNamespaceImpl;
+import org.apache.axis.om.impl.llom.builder.MTOMStAXSOAPModelBuilder;
+import org.apache.axis.om.impl.llom.mtom.MTOMXMLStreamWriter;
+import org.apache.axis.om.impl.llom.mtom.OMBlob;
+import org.apache.axis.om.impl.llom.serialize.SimpleOMSerializer;
+
+/**
+ * @author TGunarathne
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class MTOMTest extends TestCase {
+	String expectedObject;
+
+	String outFileName;
+	
+	String outBase64FileName;
+
+	MTOMStAXSOAPModelBuilder builder;
+
+	DataHandler expectedDH;
+
+	public static void main(String[] args) {
+		junit.swingui.TestRunner.run(MTOMTest.class);
+	}
+
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		outFileName = "mtom/src/test-resources/OMSerializeMTOMOut.txt";
+		outBase64FileName = "mtom/src/test-resources/OMSerializeBase64Out.xml";
+		serializeSetUp();
+		builder = new MTOMStAXSOAPModelBuilder(new FileInputStream(outFileName));
+
+	}
+
+	protected void serializeSetUp() {
+		File outMTOMFile;
+		File outBase64File;
+		
+
+		try {
+
+			outMTOMFile = new File(outFileName);
+			outBase64File = new File(outBase64FileName);
+			MTOMXMLStreamWriter mtomWriter = new MTOMXMLStreamWriter(
+					new FileOutputStream(outMTOMFile));
+			XMLStreamWriter baseWriter =XMLOutputFactory.newInstance().createXMLStreamWriter(new FileOutputStream(outBase64File));
+			
+			//SimpleOMSerializer mtomSimpleOMSerialiser = new SimpleOMSerializer();
+
+			OMNamespaceImpl soap = new OMNamespaceImpl("http://schemas.xmlsoap.org/soap/envelope/", "soap");
+			OMElement envelope = new OMElementImpl("Envelope", soap);
+			OMElement body = new OMElementImpl("Body", soap);
+
+			OMNamespaceImpl dataName = new OMNamespaceImpl(
+					"http://www.example.org/stuff", "m");
+			OMElement data = new OMElementImpl("data", dataName);
+
+			OMNamespaceImpl mime = new OMNamespaceImpl(
+					"http://www.w3.org/2003/06/xmlmime", "m");
+
+			OMElement text = new OMElementImpl("name", dataName);
+			OMAttribute cType1 = new OMAttributeImpl("contentType", mime,
+					"text/plain");
+			text.insertAttribute(cType1);
+			expectedObject = new String("Programming Project");
+			expectedDH = new DataHandler(expectedObject, "text/plain");
+			OMBlob textData = new OMBlob(expectedDH);
+
+			envelope.addChild(body);
+			body.addChild(data);
+			data.addChild(text);
+			text.addChild(textData);
+			
+			envelope.serialize(baseWriter,false);
+			baseWriter.flush();
+
+			envelope.serialize(mtomWriter,false);
+			//MTOMser.serialize(Envelope, MTOMWriter);
+			mtomWriter.flush();
+			mtomWriter.complete();
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	/*
+	 * @see TestCase#tearDown()
+	 */
+	protected void tearDown() throws Exception {
+		super.tearDown();
+	}
+
+	/**
+	 * Constructor for OMBlobTest.
+	 * 
+	 * @param name
+	 */
+	public MTOMTest(String name) {
+		super(name);
+	}
+
+	public void testGetDataHandler() {
+		try {
+			OMElement root = (OMElement) builder.getDocumentElement();
+			System.out.println(root.getLocalName() + " : "
+					+ root.getNamespaceName());
+			OMElement body = (OMElement) root.getFirstChild();
+			System.out.println(body.getLocalName() + " : "
+					+ body.getNamespaceName());
+			OMElement data = (OMElement) body.getFirstChild();
+			System.out.println(data.getLocalName() + " : "
+					+ data.getNamespaceName());
+			Iterator childIt = data.getChildren();
+			//while (childIt.hasNext()) {
+			OMElement child = (OMElement) childIt.next();
+			OMBlob blob = (OMBlob) child.getFirstChild();
+			/*
+			 * Following is the procedure the user has to follow to read objects
+			 * in OBBlob User has to know the object type & whether it is
+			 * serializable. If it is not he has to use a Custom Defined
+			 * DataSource to get the Object.
+			 */
+
+			DataHandler actualDH;
+			actualDH = blob.getDataHandler();
+			//assertEquals("DataHandler
+			// check",expectedDH.getContent(),(actualDH =
+			// blob.getDataHandler()).getContent());
+			Object actualObject = actualDH.getContent(); //This returns a
+														 // String cause string
+														 // is serializable
+			assertEquals("Object check", expectedObject, (String) actualObject);
+
+			System.out.println(child.getLocalName() + ":-\t" + actualObject);
+
+			//}
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+}
\ No newline at end of file