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();



Reply via email to