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 as...@apache.org on 2005/09/01 16:37:25 UTC

svn commit: r265739 - in /webservices/axis2/trunk/java/modules/saaj: src/javax/xml/soap/ src/org/apache/axis2/saaj/ test-resources/ test/org/apache/axis2/saaj/

Author: ashutosh
Date: Thu Sep  1 07:36:53 2005
New Revision: 265739

URL: http://svn.apache.org/viewcvs?rev=265739&view=rev
Log: (empty)

Added:
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java
    webservices/axis2/trunk/java/modules/saaj/test-resources/
    webservices/axis2/trunk/java/modules/saaj/test-resources/axis.jpg   (with props)
    webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentSerializationTest.java
    webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentTest.java
Modified:
    webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPMessage.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttrImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPDocumentImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
    webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImpl.java
    webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/EnvelopeTest.java

Modified: webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPMessage.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPMessage.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPMessage.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/javax/xml/soap/SOAPMessage.java Thu Sep  1 07:36:53 2005
@@ -15,7 +15,7 @@
  */
 package javax.xml.soap;
 
-//import javax.activation.DataHandler;
+import javax.activation.DataHandler;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -210,14 +210,14 @@
      * @see DataHandler DataHandler
      * @see javax.activation.DataContentHandler DataContentHandler
      */
-    /*public AttachmentPart createAttachmentPart(DataHandler datahandler) {
+    public AttachmentPart createAttachmentPart(DataHandler datahandler) {
 
         AttachmentPart attachmentpart = createAttachmentPart();
 
         attachmentpart.setDataHandler(datahandler);
 
         return attachmentpart;
-    }*/
+    }
 
     /**
      * Returns all the transport-specific MIME headers for this

Added: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java?rev=265739&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java (added)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttachmentPartImpl.java Thu Sep  1 07:36:53 2005
@@ -0,0 +1,188 @@
+package org.apache.axis2.saaj;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.activation.DataHandler;
+import javax.activation.UnsupportedDataTypeException;
+import javax.xml.soap.AttachmentPart;
+import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPException;
+
+import org.apache.axis2.om.OMText;
+import org.apache.axis2.transport.http.HTTPConstants;
+import org.apache.axis2.util.SessionUtils;
+
+public class AttachmentPartImpl extends AttachmentPart {
+	
+    /**
+     * Bulds a new <code>AttachmentPart</code>.
+     */
+    public AttachmentPartImpl() {
+        setMimeHeader(HTTPConstants.HEADER_CONTENT_ID, SessionUtils.generateSessionId());
+    }
+    
+    /**
+     * Bulds a new <code>AttachmentPart</code> with a <code>DataHandler</code>.
+     *
+     * @param dh the <code>DataHandler</code>
+     */
+    public AttachmentPartImpl(javax.activation.DataHandler dh) {
+    	setMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
+    			SessionUtils.generateSessionId());
+    	dataHandler = dh;
+    	if(dh != null) {
+    		setMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE, dh.getContentType());
+    		omText = org.apache.axis2.om.OMAbstractFactory.getOMFactory().createText(dataHandler, true);
+    	}
+    }
+
+	public OMText getOMText() throws SOAPException{
+		if(omText == null){
+			throw new SOAPException("OMText set to null");
+		}
+		return omText;
+	}
+
+	public int getSize() throws SOAPException {
+		if (dataHandler == null) {
+            return 0;
+        }
+		ByteArrayOutputStream bout = new ByteArrayOutputStream();
+		try {
+            dataHandler.writeTo(bout);
+        } catch (java.io.IOException ex) {
+            throw new SOAPException(ex);
+        }
+        return bout.size();
+	}
+
+	public void clearContent() {
+		
+		dataHandler = null;
+		omText = null;
+	}
+
+	public Object getContent() throws SOAPException {
+		if(dataHandler==null) {
+			throw new SOAPException("No content is present in this AttachmentPart");
+		}
+		try {
+			String ContentType = dataHandler.getContentType();
+			if(ContentType.equals("text/plain") ||
+					ContentType.equals("text/xml") ||
+					ContentType.equals("text/html")) {
+				//For these content types underlying DataContentHandler surely does 
+				//the conversion to appropriate java object and we will return that java object
+				return dataHandler.getContent();
+			} else {
+				try {
+					return dataHandler.getContent();
+				}catch (UnsupportedDataTypeException e) {
+					//If the underlying DataContentHandler can't handle the object contents,
+					//we will return an inputstream of raw bytes represneting the content data					
+					return dataHandler.getDataSource().getInputStream();
+				}
+			}
+		} catch(Exception e) {
+			throw new SOAPException(e);
+		}
+	}
+
+	public void setContent(Object object, String contentType) {
+		
+		DataHandler dh = new DataHandler(object, contentType);
+		this.setDataHandler(dh);
+	}
+
+	public DataHandler getDataHandler() throws SOAPException {
+		if (dataHandler==null) {
+			throw new SOAPException("No Content present in the Attachment part");
+		}
+		return dataHandler;
+	}
+
+	public void setDataHandler(DataHandler datahandler) {
+		
+		this.dataHandler = datahandler;
+    	if(datahandler != null) {
+    		setMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE, datahandler.getContentType());
+    		omText = org.apache.axis2.om.OMAbstractFactory.getOMFactory().createText(dataHandler, true);
+    	}
+	}
+
+	public void removeMimeHeader(String header) {
+		
+		mimeHeaders.removeHeader(header);
+	}
+
+	public void removeAllMimeHeaders() {
+		
+		mimeHeaders.removeAllHeaders();
+	}
+
+	public String[] getMimeHeader(String name) {
+		
+		return mimeHeaders.getHeader(name);
+	}
+
+	public void setMimeHeader(String name, String value) {
+		
+		mimeHeaders.setHeader(name, value);
+	}
+
+	public void addMimeHeader(String name, String value) {
+		
+		mimeHeaders.addHeader(name, value);
+	}
+
+	public Iterator getAllMimeHeaders() {
+		
+		return mimeHeaders.getAllHeaders();
+	}
+
+	public Iterator getMatchingMimeHeaders(String[] names) {
+		
+		return mimeHeaders.getMatchingHeaders(names);
+	}
+
+	public Iterator getNonMatchingMimeHeaders(String[] names) {
+		
+		return mimeHeaders.getNonMatchingHeaders(names);
+	}
+	
+    public boolean matches(javax.xml.soap.MimeHeaders headers) {
+        for (Iterator i = headers.getAllHeaders(); i.hasNext();) {
+            javax.xml.soap.MimeHeader hdr = (javax.xml.soap.MimeHeader) i.next();
+            String values[] = mimeHeaders.getHeader(hdr.getName());
+            boolean found = false;
+            if (values != null) {
+                for (int j = 0; j < values.length; j++) {
+                    if (!hdr.getValue().equalsIgnoreCase(values[j])) {
+                        continue;
+                    }
+                    found = true;
+                    break;
+                }
+            }
+            if (!found) {
+                return false;
+            }
+        }
+        return true;
+    }
+	
+    //Should we make it private?
+	DataHandler dataHandler;
+	
+	/**
+	 *  Field mimeHeaders.           
+	 */
+	private MimeHeaders mimeHeaders = new MimeHeaders();
+	
+	//private Object contentObject;
+	
+	private OMText omText;
+
+}

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttrImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttrImpl.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttrImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/AttrImpl.java Thu Sep  1 07:36:53 2005
@@ -115,4 +115,5 @@
         omAttr.setValue(value);
         setSpecified(true);
     }
+
 }

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/NodeImpl.java Thu Sep  1 07:36:53 2005
@@ -441,9 +441,17 @@
         Iterator iter = ((OMElement) omNode).getChildren();
         NodeListImpl list = new NodeListImpl();
         while (iter.hasNext()) {
-            OMNode omChild = (OMNode) iter.next();
-            Node child = new NodeImpl(omChild);
-            list.addNode(child);
+        	Object omChild =  iter.next();
+        	if(omChild instanceof OMText){
+        		OMText omTextChild = (OMText)omChild;
+        		TextImpl textChild = new TextImpl(omTextChild);
+        		list.addNode(textChild);
+        	}else{
+        		OMNode omNodeChild = (OMNode)omChild;
+        		Node nodeChild = new NodeImpl(omNodeChild);
+        		list.addNode(nodeChild);
+        	}
+            
         }
         return list;
     }

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPConnectionImpl.java Thu Sep  1 07:36:53 2005
@@ -19,13 +19,20 @@
 import org.apache.axis2.Constants;
 import org.apache.axis2.addressing.EndpointReference;
 import org.apache.axis2.clientapi.Call;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.OMAttribute;
+import org.apache.axis2.om.OMNode;
+import org.apache.axis2.om.OMText;
 
 import javax.xml.soap.SOAPConnection;
 import javax.xml.soap.SOAPException;
 import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.AttachmentPart;
+import javax.xml.namespace.QName;
 import java.net.MalformedURLException;
 import java.net.URL;
 
+import java.util.Iterator;
 
 /**
  * Class SOAPConnectionImpl
@@ -40,18 +47,24 @@
     public SOAPMessage call(SOAPMessage request, Object endpoint)
             throws SOAPException {
         try {
-            org.apache.axis2.soap.SOAPEnvelope envelope = ((SOAPEnvelopeImpl) request.getSOAPPart()
+            OMElement envelope = ((SOAPEnvelopeImpl) request.getSOAPPart()
                     .getEnvelope()).getOMEnvelope();
+            
+            //parse the omEnvelope element and stuff it with the attachment
+            //specific omText nodes
+            insertAttachmentNodes(envelope, request);
 
             Call call = new Call();
             URL url = new URL(endpoint.toString());
+            call.set(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
             call.setTransportInfo(Constants.TRANSPORT_HTTP,
                     Constants.TRANSPORT_HTTP,
                     true);
             call.setTo(
                     new EndpointReference(url.toString()));
+            String axisOp = request.getSOAPBody().getFirstChild().getNodeName();
             org.apache.axis2.soap.SOAPEnvelope responseEnv = (org.apache.axis2.soap.SOAPEnvelope) call.invokeBlocking(
-                    "echo", envelope);
+                    axisOp, envelope);
             SOAPEnvelopeImpl response = new SOAPEnvelopeImpl(responseEnv);
             return new SOAPMessageImpl(response);
 
@@ -70,5 +83,95 @@
         // TODO Auto-generated method stub
 
     }
-
+    
+    /**
+     * This method recursively stuffs the OMElement with appropriate OMText nodes
+     * that are prepared out of attachment contents whereever those attachments are referenced
+     * @param element
+     * @param soapMsg
+     */
+    private void insertAttachmentNodes(OMElement element, SOAPMessage soapMsg) throws SOAPException {
+    	Iterator childIter = element.getChildElements();
+    	while(childIter.hasNext()) {
+    		OMElement child = (OMElement)childIter.next();
+    		//check if there is an href attribute
+    		OMAttribute hrefAttr = (OMAttribute)child.getFirstAttribute(new QName("href"));
+    		String hrefContentId = validateHref(hrefAttr);
+    		
+    		if (hrefContentId!=null) {//This is an element referencing an attachment!
+    			/*
+    			//Get a handle to this element's parent and next sibling for later use.
+    			OMElement parent = (OMElement)child.getParent();
+    			OMNode nextSibling = child.getNextSibling();
+    			OMNode prevSibling = child.getPreviousSibling();
+    			
+    			OMText omText = getOMTextForReferencedAttachment(hrefContentId, soapMsg);
+    			
+    			child.build();
+    			child.detach();
+    			//We should now detach the element which referenced the attachment
+    			//and in its place put an OMText node created out of the attachment's
+    			//data handler, of course, preserving the order of attachments
+    			if(nextSibling!=null) {
+    				nextSibling.insertSiblingBefore(omText); //preserving the order of attachments
+    			} else if (prevSibling!=null) {
+    				prevSibling.insertSiblingAfter(omText);
+    			} else {//only child for its parent, so needn't bother about order
+    				parent.addChild(omText);
+    			}
+    			*/
+    			OMText omText = getOMTextForReferencedAttachment(hrefContentId, soapMsg);
+    			child.build();
+    			child.removeAttribute(hrefAttr);
+    			child.addChild(omText);
+    			
+    		} else { //possibly there can be references in the children of this element
+    				 //so recurse through.
+    			insertAttachmentNodes(child, soapMsg);
+    		}
+    	}
+    }
+    
+    /**
+     * This method checks the value of attribute and if it is a valid CID then
+     * returns the contentID (with cid: prefix stripped off) or else returns null.
+     * A null return value can be assumed that this attribute is not an attachment
+     * referencing attribute
+     */
+    private String validateHref(OMAttribute attr) {
+    	String contentId;
+    	if(attr!=null) {
+    		contentId = attr.getValue();
+    	} else {
+    		return null;
+    	}
+    	
+    	if (contentId.startsWith("cid:")) {
+    		contentId = contentId.substring(4);
+    		return contentId;
+    	}
+    	return null;
+    }
+    
+    /**
+     * This method looks up the attachment part corresponding to the given contentId and
+     * returns the OMText node thta has the content of the attachment.
+     * @param contentId
+     * @param soapMsg
+     * @return
+     */
+    private OMText getOMTextForReferencedAttachment(String contentId, SOAPMessage soapMsg) throws SOAPException{
+    	Iterator attachIter = soapMsg.getAttachments();
+		while(attachIter.hasNext()) {
+			AttachmentPart attachment = (AttachmentPart)attachIter.next();
+			if(attachment.getContentId().equals(contentId)) {
+				try {
+					return ((AttachmentPartImpl)attachment).getOMText();
+				} catch (Exception e) {
+					throw new SOAPException(e);
+				}
+			}
+		}
+    	throw new SOAPException("No attachment found with the given contentID");
+    }
 }

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPDocumentImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPDocumentImpl.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPDocumentImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPDocumentImpl.java Thu Sep  1 07:36:53 2005
@@ -388,5 +388,4 @@
         throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "");
     }
 
-
 }

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPMessageImpl.java Thu Sep  1 07:36:53 2005
@@ -24,6 +24,7 @@
 import javax.xml.stream.XMLStreamWriter;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.Iterator;
 
 /**
@@ -33,6 +34,7 @@
 public class SOAPMessageImpl extends SOAPMessage {
 
     private SOAPPartImpl mSOAPPart;
+    private ArrayList attachments = new ArrayList();
     private java.util.Hashtable mProps = new java.util.Hashtable();
     private MimeHeaders headers;
     private Log log = LogFactory.getLog(getClass());
@@ -63,7 +65,36 @@
     private void setup(Object initialContents, boolean bodyInStream,
                        String contentType, String contentLocation,
                        javax.xml.soap.MimeHeaders mimeHeaders) throws SOAPException {
-        if (null == mSOAPPart)
+        if(contentType == null && mimeHeaders != null) {
+            String contentTypes[] = mimeHeaders.getHeader("Content-Type");
+            contentType = (contentTypes != null)? contentTypes[0] : null;
+        }
+        
+        if(contentLocation == null && mimeHeaders != null) {
+            String contentLocations[] = mimeHeaders.getHeader("Content-Location");
+            contentLocation = (contentLocations != null)? contentLocations[0] : null;
+        }
+        
+        if (contentType != null) {
+            int delimiterIndex = contentType.lastIndexOf("charset");
+            if (delimiterIndex > 0) {
+                String charsetPart = contentType.substring(delimiterIndex);
+                int charsetIndex = charsetPart.indexOf('=');
+                String charset = charsetPart.substring(charsetIndex + 1).trim();
+                if ((charset.startsWith("\"") || charset.startsWith("\'"))) {
+                    charset = charset.substring(1, charset.length());
+                }
+                if ((charset.endsWith("\"") || charset.endsWith("\'"))) {
+                    charset = charset.substring(0, charset.length()-1);
+                }
+                try {
+                    setProperty(SOAPMessage.CHARACTER_SET_ENCODING, charset);
+                } catch (SOAPException e) {
+                }
+            }
+        }
+    	
+    	if (null == mSOAPPart)
             mSOAPPart = new SOAPPartImpl(this, initialContents, bodyInStream);
         else
             mSOAPPart.setMessage(this);
@@ -102,7 +133,7 @@
                 description);
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#getSOAPPart()
      */
     public SOAPPart getSOAPPart() {
@@ -125,55 +156,67 @@
         return mProps.get(property);
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#removeAllAttachments()
      */
     public void removeAllAttachments() {
-        // TODO Auto-generated method stub
-
+        
+    	attachments.clear();
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#countAttachments()
      */
     public int countAttachments() {
-        // TODO Auto-generated method stub
-        return 0;
+        
+        return attachments.size();
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#getAttachments()
      */
     public Iterator getAttachments() {
-        // TODO Auto-generated method stub
-        return null;
+        
+        return attachments.iterator();
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#getAttachments(javax.xml.soap.MimeHeaders)
      */
     public Iterator getAttachments(javax.xml.soap.MimeHeaders headers) {
-        // TODO Auto-generated method stub
-        return null;
+        
+    	ArrayList temp = new ArrayList();
+    	Iterator iterator = getAttachments();
+    	while(iterator.hasNext()){
+    		AttachmentPartImpl part = (AttachmentPartImpl)iterator.next();
+    		if(part.matches(headers)){
+    			temp.add(part);
+    		}
+    	}
+        return temp.iterator();
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#addAttachmentPart(javax.xml.soap.AttachmentPart)
      */
     public void addAttachmentPart(AttachmentPart attachmentpart) {
-        // TODO Auto-generated method stub
+        
+    	if(attachmentpart != null){
+    		attachments.add(attachmentpart);
+    		headers.setHeader("Content-Type","multipart/related");
+    	}
 
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#createAttachmentPart()
      */
     public AttachmentPart createAttachmentPart() {
-        // TODO Auto-generated method stub
-        return null;
+        
+        return new AttachmentPartImpl();
     }
 
-    /* (non-Javadoc)
+    /** 
      * @see javax.xml.soap.SOAPMessage#getMimeHeaders()
      */
     public javax.xml.soap.MimeHeaders getMimeHeaders() {
@@ -181,11 +224,11 @@
         return headers;
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPMessage#saveChanges()
      */
     public void saveChanges() throws SOAPException {
-        // TODO Auto-generated method stub
+        // TODO Not sure what we should do here
     }
 
     /**

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/SOAPPartImpl.java Thu Sep  1 07:36:53 2005
@@ -93,7 +93,7 @@
         this.msgObject = msg;
     }
 
-    /* (non-Javadoc)
+    /**
      * @see javax.xml.soap.SOAPPart#getEnvelope()
      */
     public SOAPEnvelope getEnvelope() throws SOAPException {
@@ -487,5 +487,5 @@
     public boolean hasAttributes() {
         return document.hasAttributes();
     }
-
+    
 }

Modified: webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImpl.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImpl.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImpl.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/src/org/apache/axis2/saaj/TextImpl.java Thu Sep  1 07:36:53 2005
@@ -59,6 +59,10 @@
                 org.apache.axis2.om.OMAbstractFactory.getOMFactory()
                 .createText(data.getData());
     }
+    
+    public TextImpl(OMText omText){
+    	omNode = this.omText = omText;
+    }
 
     /*Overridden Method*/
     public SOAPElement getParentElement() {

Added: webservices/axis2/trunk/java/modules/saaj/test-resources/axis.jpg
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/test-resources/axis.jpg?rev=265739&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/modules/saaj/test-resources/axis.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentSerializationTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentSerializationTest.java?rev=265739&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentSerializationTest.java (added)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentSerializationTest.java Thu Sep  1 07:36:53 2005
@@ -0,0 +1,103 @@
+package org.apache.axis2.saaj;
+
+import junit.framework.TestCase;
+
+import javax.activation.DataHandler;
+import javax.activation.FileDataSource;
+import javax.xml.soap.AttachmentPart;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.MimeHeaders;
+import javax.xml.soap.SOAPBody;
+import javax.xml.soap.SOAPElement;
+import javax.xml.soap.SOAPEnvelope;
+import javax.xml.soap.SOAPHeader;
+import javax.xml.soap.SOAPMessage;
+import javax.xml.soap.SOAPPart;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class AttachmentSerializationTest extends TestCase {
+
+    public AttachmentSerializationTest(String name) {
+        super(name);
+    }
+
+    public static void main(String args[]) throws Exception {
+        AttachmentSerializationTest tester = new AttachmentSerializationTest("tester");
+        tester.testAttachments();
+    }
+
+    public void testAttachments() throws Exception {
+        try {
+            ByteArrayOutputStream bais = new ByteArrayOutputStream();
+            int count = saveMsgWithAttachments(bais);
+            assertEquals(count, 2);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new Exception("Fault returned from test: " + e);
+        }
+    }
+
+    public static final String MIME_MULTIPART_RELATED = "multipart/related";
+    public static final String MIME_APPLICATION_DIME = "application/dime";
+    public static final String NS_PREFIX = "jaxmtst";
+    public static final String NS_URI = "http://www.jcommerce.net/soap/jaxm/TestJaxm";
+
+    public int saveMsgWithAttachments(OutputStream os) throws Exception {
+        MessageFactory mf = MessageFactory.newInstance();
+        SOAPMessage msg = mf.createMessage();
+
+        SOAPPart sp = msg.getSOAPPart();
+        SOAPEnvelope envelope = sp.getEnvelope();
+        SOAPHeader header = envelope.getHeader();
+        SOAPBody body = envelope.getBody();
+
+        SOAPElement el = header.addHeaderElement(envelope.createName("field4", NS_PREFIX, NS_URI));
+        SOAPElement el2 = el.addChildElement("field4b", NS_PREFIX);
+        SOAPElement el3 = el2.addTextNode("field4value");
+
+        el = body.addBodyElement(envelope.createName("bodyfield3", NS_PREFIX, NS_URI));
+        el2 = el.addChildElement("bodyfield3a", NS_PREFIX);
+        el2.addTextNode("bodyvalue3a");
+        el2 = el.addChildElement("bodyfield3b", NS_PREFIX);
+        el2.addTextNode("bodyvalue3b");
+        el2 = el.addChildElement("datefield", NS_PREFIX);
+
+        AttachmentPart ap = msg.createAttachmentPart();
+        ap.setContent("some attachment text...", "text/plain");
+        msg.addAttachmentPart(ap);
+
+        String jpgfilename = "./test-resources/axis.jpg";
+        File myfile = new File(jpgfilename);
+        FileDataSource fds = new FileDataSource(myfile);
+        DataHandler dh = new DataHandler(fds);
+        AttachmentPart ap2 = msg.createAttachmentPart(dh);
+        ap2.setContentType("image/jpg");
+        msg.addAttachmentPart(ap2);
+
+        MimeHeaders headers = msg.getMimeHeaders();
+        assertTrue(headers != null);
+        String [] contentType = headers.getHeader("Content-Type");  
+        assertTrue(contentType != null);
+        
+        msg.writeTo(os);
+        os.flush();
+        msg.writeTo(System.out);
+        return msg.countAttachments();
+    }
+
+    public int loadMsgWithAttachments(InputStream is) throws Exception {
+        MimeHeaders headers = new MimeHeaders();
+        headers.setHeader("Content-Type", MIME_MULTIPART_RELATED);
+        MessageFactory mf = MessageFactory.newInstance();
+        SOAPMessage msg = mf.createMessage(headers, is);
+        SOAPPart sp = msg.getSOAPPart();
+        SOAPEnvelope envelope = sp.getEnvelope();
+        assertTrue(sp != null);
+        assertTrue(envelope != null);
+        return msg.countAttachments();
+    }
+}

Added: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentTest.java?rev=265739&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentTest.java (added)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/AttachmentTest.java Thu Sep  1 07:36:53 2005
@@ -0,0 +1,128 @@
+package org.apache.axis2.saaj;
+
+import javax.xml.soap.AttachmentPart;
+import javax.xml.soap.MessageFactory;
+import javax.xml.soap.SOAPConnection;
+import javax.xml.soap.SOAPConnectionFactory;
+import javax.xml.soap.SOAPMessage;
+import javax.activation.DataHandler;
+import javax.activation.DataSource;
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.ByteArrayInputStream;
+
+import junit.framework.TestCase;
+
+public class AttachmentTest extends TestCase {
+
+    public AttachmentTest(String name) {
+        super(name);
+    }
+    
+    public void testStringAttachment() throws Exception {
+    	SOAPConnectionFactory scFactory = SOAPConnectionFactory.newInstance();
+    	SOAPConnection con = scFactory.createConnection();
+    	
+    	MessageFactory factory = MessageFactory.newInstance();
+    	SOAPMessage message = factory.createMessage();
+    	AttachmentPart attachment = message.createAttachmentPart();
+    	String stringContent = "Update address for Sunny Skies " +
+    			"Inc., to 10 Upbeat Street, Pleasant Grove, CA 95439";
+    	
+    	attachment.setContent(stringContent, "text/plain");
+    	attachment.setContentId("update_address");
+    	message.addAttachmentPart(attachment);
+    	
+    	assertTrue(message.countAttachments()==1);
+    	
+    	java.util.Iterator it = message.getAttachments();
+    	while (it.hasNext()) {
+    		attachment = (AttachmentPart) it.next();
+    		Object content = attachment.getContent();
+    		String id = attachment.getContentId();
+    		System.out.println("Attachment " + id + " contains: " + content);
+    		assertEquals(content,stringContent);
+    	}
+    	System.out.println("Here is what the XML message looks like:");
+    	message.writeTo(System.out);
+    	
+    	message.removeAllAttachments();
+    	assertTrue(message.countAttachments()==0);
+    }
+    
+    public void testMultipleAttachments() throws Exception {
+        SOAPConnectionFactory scFactory = SOAPConnectionFactory.newInstance();
+        SOAPConnection con = scFactory.createConnection();
+
+        MessageFactory factory = MessageFactory.newInstance();
+        SOAPMessage msg = factory.createMessage();
+        java.net.URL url1 = new java.net.URL("http://slashdot.org/slashdot.xml");
+        java.net.URL url2 = new java.net.URL("http://www.apache.org/LICENSE.txt");
+
+        AttachmentPart a1 = msg.createAttachmentPart(new javax.activation.DataHandler(url1));
+        a1.setContentType("text/xml");
+        msg.addAttachmentPart(a1);
+        AttachmentPart a2 = msg.createAttachmentPart(new javax.activation.DataHandler(url1));
+        a2.setContentType("text/xml");
+        msg.addAttachmentPart(a2);
+        AttachmentPart a3 = msg.createAttachmentPart(new javax.activation.DataHandler(url2));
+        a3.setContentType("text/plain");
+        msg.addAttachmentPart(a3);
+
+        assertTrue(msg.countAttachments()==3);
+
+        javax.xml.soap.MimeHeaders mimeHeaders = new javax.xml.soap.MimeHeaders();
+        mimeHeaders.addHeader("Content-Type", "text/xml");
+
+        int nAttachments = 0;
+        java.util.Iterator iterator = msg.getAttachments(mimeHeaders);
+	    while (iterator.hasNext()) {
+            nAttachments++;
+	        AttachmentPart ap = (AttachmentPart)iterator.next();
+	        assertTrue(ap.equals(a1) || ap.equals(a2));
+	    }
+        assertTrue(nAttachments==2);
+    }
+    
+    public void testBadAttSize() throws Exception {
+        MessageFactory factory = MessageFactory.newInstance();
+        SOAPMessage message = factory.createMessage();
+
+        ByteArrayInputStream ins=new ByteArrayInputStream(new byte[5]);
+        DataHandler dh=new DataHandler(new Src(ins,"text/plain"));
+        AttachmentPart part = message.createAttachmentPart(dh);
+        assertEquals("Size should match",5,part.getSize());
+    }
+
+    class Src implements DataSource{
+        InputStream m_src;
+        String m_type;
+
+        public Src(InputStream data, String type){
+            m_src=data;
+            m_type=type;
+        }
+        public String getContentType(){
+            return m_type;
+        }
+        public InputStream getInputStream() throws IOException{
+            m_src.reset();
+            return m_src;
+        }
+        public String getName(){
+            return "Some-Data";
+        }
+        public OutputStream getOutputStream(){
+            throw new UnsupportedOperationException("I don't give output streams");
+        }
+    }
+    
+    public static void main(String[] args) throws Exception {
+        AttachmentTest tester = new AttachmentTest("TestSAAJ");
+        tester.testMultipleAttachments();
+        tester.testStringAttachment();
+        tester.testBadAttSize();
+    }
+
+}

Modified: webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/EnvelopeTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/EnvelopeTest.java?rev=265739&r1=265738&r2=265739&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/EnvelopeTest.java (original)
+++ webservices/axis2/trunk/java/modules/saaj/test/org/apache/axis2/saaj/EnvelopeTest.java Thu Sep  1 07:36:53 2005
@@ -132,24 +132,24 @@
     	}
     }
     
-////    public void testHeaderElements() throws Exception {
-//    	SOAPEnvelope envelope = getSOAPEnvelope();
-//    	SOAPBody body = envelope.getBody();
-//    	SOAPHeader hdr = envelope.getHeader();
-////
-//    	SOAPHeaderElement she1 = hdr.addHeaderElement(envelope.createName("foo1", "f1", "foo1-URI"));
-////    	she1.setActor("actor-URI");
-//    	java.util.Iterator iterator = hdr.extractHeaderElements("actor-URI");
-////    	int cnt = 0;
-////    	while (iterator.hasNext()) {
-////    		cnt++;
-//    		SOAPHeaderElement she = (SOAPHeaderElement) iterator.next();
-//    		assertTrue(she.equals(she1));
-//    	}
-//    	assertTrue(cnt == 1);
-//    	iterator = hdr.extractHeaderElements("actor-URI");
-//    	assertTrue(!iterator.hasNext());
-//    }
+    public void testHeaderElements() throws Exception {
+    	SOAPEnvelope envelope = getSOAPEnvelope();
+    	SOAPBody body = envelope.getBody();
+    	SOAPHeader hdr = envelope.getHeader();
+
+    	SOAPHeaderElement she1 = hdr.addHeaderElement(envelope.createName("foo1", "f1", "foo1-URI"));
+    	she1.setActor("actor-URI");
+    	java.util.Iterator iterator = hdr.extractHeaderElements("actor-URI");
+    	int cnt = 0;
+    	while (iterator.hasNext()) {
+    		cnt++;
+    		SOAPHeaderElement she = (SOAPHeaderElement) iterator.next();
+    		assertTrue(she.equals(she1));
+    	}
+    	assertTrue(cnt == 1);
+    	iterator = hdr.extractHeaderElements("actor-URI");
+    	assertTrue(!iterator.hasNext());
+    }
     
     public void testText1() throws Exception {
     	SOAPEnvelope envelope = getSOAPEnvelope();