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