- Do these changes "guarantee" that when a content-id header is gotten
that the href will have a "cid:" prefix this is a must in order to identify
the reference as a content-id and not a relative location reference. I
don't think I should worry about this as an application since the
content-id
is supposed from an application perspective be a handle to the attachment.
- Where does it state the when an attachment is created that it many not be
automatically assigned a content-id? This is preferable since
content-id's should be considered "global unique immutable" handle to the
attachment and the previous logic did it's best to maintain this.
-The logic before allowed me as a handler to just create the attachment and
ask for it's content-id value and the use that in an href attribute to
associate the attachment. Now to that I need to generate my own, and then
set it?
- As far as every example I have read every attachment should have a
content-id value when sent regardless if it as being used to reference
the attachment. Does this change now still do that?
- Not a major point the content-id generation logic seems specific to
attachments why has it been moved to SOAPUtils ?
I still need to study this changes some more. As of right now I don't
believe anything that was implemented before violated JAX-RPC or JAX-M
specification. If this is the reason for changes, please I'd kindly
appreciate pointing out the specific sections. If the changes are solely
to facilitate TCK verification, then I argue logic prior to these change is
a VALID and more appropriate implementation of the JAX-RPC and JAX-M
specification with regard to providing useable attachment support and my
position is to VOTE a -1 to these changes.
Rick Rineholt
"The truth is out there... All you need is a better search engine!"
[EMAIL PROTECTED]
[EMAIL PROTECTED] on 07/01/2002 04:01:40 PM
Please respond to [EMAIL PROTECTED]
To: [EMAIL PROTECTED]
cc:
Subject: cvs commit: xml-axis/java/test/saaj TestAttachment.java
dims 2002/07/01 13:01:39
Modified: java/src/org/apache/axis/attachments AttachmentPart.java
AttachmentsImpl.java MimeUtils.java
MultiPartDimeInputStream.java
MultiPartRelatedInputStream.java
java/src/org/apache/axis/encoding/ser
JAFDataHandlerSerializer.java
java/test/md5attach MD5AttachTest.java
java/src/org/apache/axis SOAPPart.java
java/test/saaj TestAttachment.java
Log:
Fixes for SAAJ compliance.
Revision Changes Path
1.18 +5 -24
xml-axis/java/src/org/apache/axis/attachments/AttachmentPart.java
Index: AttachmentPart.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/AttachmentPart.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- AttachmentPart.java 1 Jul 2002 17:40:29 -0000 1.17
+++ AttachmentPart.java 1 Jul 2002 20:01:39 -0000 1.18
@@ -96,7 +96,6 @@
* Constructor AttachmentPart
*/
public AttachmentPart() {
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
SOAPUtils.getNewContentIdValue());
}
/**
@@ -105,11 +104,9 @@
* @param dh
*/
public AttachmentPart(javax.activation.DataHandler dh) {
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
- SOAPUtils.getNewContentIdValue());
datahandler = dh;
if(dh != null)
- addMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE,
dh.getContentType());
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_TYPE,
dh.getContentType());
}
/**
@@ -137,7 +134,7 @@
* @param value
*/
public void addMimeHeader(String header, String value) {
- mimeHeaders.setHeader(header, value);
+ mimeHeaders.addHeader(header, value);
}
/**
@@ -191,7 +188,7 @@
* @param loc
*/
public void setContentLocation(String loc) {
- addMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION, loc);
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION, loc);
}
/**
@@ -201,10 +198,7 @@
* @returns void
*/
public void setContentId(String newCid) {
- if (newCid!=null && !newCid.toLowerCase().startsWith("cid:")) {
- newCid = "cid:" + newCid;
- }
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID, newCid);
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_ID, newCid);
}
/**
@@ -213,20 +207,7 @@
* @return
*/
public String getContentId() {
- String ret =
getFirstMimeHeader(HTTPConstants.HEADER_CONTENT_ID);
- // Do not let the contentID ever be empty.
- if (ret == null) {
- ret = SOAPUtils.getNewContentIdValue();
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID, ret);
- }
-
- ret = ret.trim();
- if (ret.length() == 0) {
- ret = SOAPUtils.getNewContentIdValue();
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID, ret);
- }
-
- return ret;
+ return getFirstMimeHeader(HTTPConstants.HEADER_CONTENT_ID);
}
/**
1.22 +11 -11
xml-axis/java/src/org/apache/axis/attachments/AttachmentsImpl.java
Index: AttachmentsImpl.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/AttachmentsImpl.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- AttachmentsImpl.java 1 Jul 2002 17:40:29 -0000 1.21
+++ AttachmentsImpl.java 1 Jul 2002 20:01:39 -0000 1.22
@@ -223,7 +223,8 @@
Part removedPart = getAttachmentByReference(reference);
if (removedPart != null) {
- attachments.remove(removedPart.getContentId());
+ if(removedPart.getContentId()!=null)
+ attachments.remove(removedPart.getContentId());
attachments.remove(removedPart.getContentLocation());
orderedAttachments.remove(removedPart);
}
@@ -250,7 +251,9 @@
mergeinAttachments();
- Part oldPart = (Part) attachments.put(newPart.getContentId(),
newPart);
+ Part oldPart = null;
+ if(newPart.getContentId()!=null)
+ oldPart = (Part) attachments.put(newPart.getContentId(),
newPart);
if (oldPart != null) {
orderedAttachments.remove(oldPart);
@@ -475,6 +478,8 @@
AttachmentPart part= (AttachmentPart)i.next();
DataHandler dh= AttachmentUtils.
getActivationDataHandler(part);
+ if(part.getContentId() == null)
+
part.setContentId(org.apache.axis.utils.SOAPUtils.getNewContentIdValue
());
dimemultipart.addBodyPart(new
DimeBodyPart(dh,part.getContentId()));
}
@@ -586,15 +591,10 @@
log.warn(JavaUtils.getMessage("exception00"));
}
- java.util.Iterator iterator = attachments.values().iterator();
- while(iterator.hasNext()){
- Part removedPart = (Part) iterator.next();
- if (removedPart != null) {
- attachments.remove(removedPart.getContentId());
- attachments.remove(removedPart.getContentLocation());
- orderedAttachments.remove(removedPart);
- }
- }
+ multipart = null;
+ dimemultipart = null;
+ attachments.clear();
+ orderedAttachments.clear();
}
/**
1.19 +4 -48
xml-axis/java/src/org/apache/axis/attachments/MimeUtils.java
Index: MimeUtils.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/MimeUtils.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- MimeUtils.java 1 Jul 2002 17:40:29 -0000 1.18
+++ MimeUtils.java 1 Jul 2002 20:01:39 -0000 1.19
@@ -267,12 +267,7 @@
javax.mail.internet.MimeMultipart multipart = null;
try {
- String rootCID = getNewContentIdValue();
-
- if (rootCID.startsWith("cid:")) {
- rootCID = rootCID.substring(4);
- }
-
+ String rootCID =
org.apache.axis.utils.SOAPUtils.getNewContentIdValue();
multipart = new javax.mail.internet.MimeMultipart(
"related; type=\"text/xml\"; start=\"<" + rootCID +
">\"");
@@ -293,11 +288,11 @@
javax.activation.DataHandler dh =
org.apache.axis.attachments.AttachmentUtils.getActivationDataHandler
part);
+ if(part.getContentId()==null){
+
part.setContentId(org.apache.axis.utils.SOAPUtils.getNewContentIdValue
());
+ }
String contentID = part.getContentId();
- if (contentID.startsWith("cid:")) {
- contentID = contentID.substring(4);
- }
messageBodyPart = new javax.mail.internet.MimeBodyPart
();
@@ -337,44 +332,5 @@
}
return multipart;
- }
-
- /** Field thisHost */
- static String thisHost = null;
-
- /** Field count */
- private static int count = (int) (Math.random() * 100);
-
- /**
- * Method getNewContentIdValue
- *
- * @return
- */
- public static String getNewContentIdValue() {
-
- int lcount;
-
- synchronized (org.apache.axis.Message.class) {
- lcount = ++count;
- }
-
- if (null == thisHost) {
- try {
- thisHost = java.net.InetAddress.getLocalHost
().getHostName();
- } catch (java.net.UnknownHostException e) {
- log.error(JavaUtils.getMessage
("javaNetUnknownHostException00"),
- e);
-
- thisHost = "localhost";
- }
- }
-
- StringBuffer s = new StringBuffer();
-
- // Unique string is
<hashcode>.<currentTime>.apache-soap.<hostname>
- s.append("cid:").append(lcount).append(s.hashCode()).append
('.').append(
- System.currentTimeMillis()).append
(".AXIS@").append(thisHost);
-
- return s.toString();
}
}
1.4 +5 -1
xml-axis/java/src/org/apache/axis/attachments/MultiPartDimeInputStream.java
Index: MultiPartDimeInputStream.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/MultiPartDimeInputStream.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- MultiPartDimeInputStream.java 1 Jul 2002 17:40:29 -0000 1.3
+++ MultiPartDimeInputStream.java 1 Jul 2002 20:01:39 -0000 1.4
@@ -101,6 +101,8 @@
super(null); //don't cache this stream.
soapStream = dimeDelimitedStream = new
DimeDelimitedInputStream(is); //The Soap stream must always be
first
contentId = dimeDelimitedStream.getContentId();
+ if(contentId == null)
+ contentId =
org.apache.axis.utils.SOAPUtils.getNewContentIdValue();
}
public Part getAttachmentByReference(final String[] id)
@@ -189,6 +191,8 @@
if (null != dimeDelimitedStream) {
do {
String contentId = dimeDelimitedStream.getContentId
();
+ if(contentId == null)
+ contentId =
org.apache.axis.utils.SOAPUtils.getNewContentIdValue();
String type = dimeDelimitedStream.getType();
if (type != null &&
!dimeDelimitedStream.getDimeTypeNameFormat
().equals(DimeTypeNameFormat.MIME)) {
@@ -202,7 +206,7 @@
AttachmentPart ap = new AttachmentPart(dh);
if (contentId != null)
-
ap.addMimeHeader(HTTPConstants.HEADER_CONTENT_ID, contentId);
+
ap.setMimeHeader(HTTPConstants.HEADER_CONTENT_ID, contentId);
addPart(contentId, "", ap);
1.18 +4 -18
xml-axis/java/src/org/apache/axis/attachments/MultiPartRelatedInputStream.java
Index: MultiPartRelatedInputStream.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/MultiPartRelatedInputStream.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- MultiPartRelatedInputStream.java 1 Jul 2002 17:40:29 -0000
1.17
+++ MultiPartRelatedInputStream.java 1 Jul 2002 20:01:39 -0000
1.18
@@ -162,10 +162,6 @@
rootPartContentId = rootPartContentId.substring(0,
rootPartContentId.length() - 1);
}
-
- if (!rootPartContentId.startsWith("cid:")) {
- rootPartContentId = "cid:" + rootPartContentId;
- }
}
// if start is null then the first attachment is the
rootpart
@@ -239,12 +235,6 @@
}
contentId = contentId.trim();
-
- if (!contentId.startsWith("cid:")) {
- contentId =
- "cid:"
- + contentId; // make sure its
identified as cid
- }
}
contentLocation =
@@ -297,12 +287,12 @@
AttachmentPart ap = new AttachmentPart(dh);
if (contentId != null) {
-
ap.addMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
+
ap.setMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
contentId);
}
if (contentLocation != null) {
-
ap.addMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION,
+
ap.setMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION,
contentLocation);
}
@@ -519,10 +509,6 @@
contentId.substring(0,
contentId.length() - 1);
}
- if (!contentId.startsWith("cid:")) {
- contentId = "cid:" + contentId;
- }
-
contentId = contentId.trim();
}
@@ -565,12 +551,12 @@
AttachmentPart ap = new AttachmentPart(dh);
if (contentId != null) {
-
ap.addMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
+
ap.setMimeHeader(HTTPConstants.HEADER_CONTENT_ID,
contentId);
}
if (contentLocation != null) {
-
ap.addMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION,
+
ap.setMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION,
contentLocation);
}
1.13 +1 -0
xml-axis/java/src/org/apache/axis/encoding/ser/JAFDataHandlerSerializer.java
Index: JAFDataHandlerSerializer.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/JAFDataHandlerSerializer.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- JAFDataHandlerSerializer.java 1 Jul 2002 17:40:31 -0000 1.12
+++ JAFDataHandlerSerializer.java 1 Jul 2002 20:01:39 -0000 1.13
@@ -111,6 +111,7 @@
//Add the attachment content to the message.
Attachments attachments= context.getCurrentMessage
().getAttachmentsImpl();
Part attachmentPart= attachments.createAttachmentPart(dh);
+
attachmentPart.setContentId(org.apache.axis.utils.SOAPUtils.getNewContentIdValue
));
String href= attachmentPart.getContentId();
AttributesImpl attrs = new AttributesImpl();
1.5 +1 -0 xml-axis/java/test/md5attach/MD5AttachTest.java
Index: MD5AttachTest.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/md5attach/MD5AttachTest.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- MD5AttachTest.java 29 May 2002 14:30:02 -0000 1.4
+++ MD5AttachTest.java 1 Jul 2002 20:01:39 -0000 1.5
@@ -54,6 +54,7 @@
//Add the attachment content to the message.
org.apache.axis.attachments.Attachments attachments =
msg.getAttachmentsImpl();
org.apache.axis.Part attachmentPart =
attachments.createAttachmentPart(dh);
+
attachmentPart.setContentId(org.apache.axis.utils.SOAPUtils.getNewContentIdValue
));
String href = attachmentPart.getContentId();
//Have the parameter element set an href attribute to the
attachment.
paramElement.setAttribute(org.apache.axis.Constants.ATTR_HREF,
href);
1.30 +11 -27 xml-axis/java/src/org/apache/axis/SOAPPart.java
Index: SOAPPart.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/SOAPPart.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- SOAPPart.java 1 Jul 2002 17:40:29 -0000 1.29
+++ SOAPPart.java 1 Jul 2002 20:01:39 -0000 1.30
@@ -127,7 +127,7 @@
* object is."
*/
private Object currentMessage ;
-
+
/**
* Message object this part is tied to. Used for serialization
settings.
*/
@@ -145,9 +145,7 @@
* "Just something to us working..."
*/
public SOAPPart(Message parent, Object initialContents, boolean
isBodyStream) {
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID ,
SOAPUtils.getNewContentIdValue());
-
-
+ mimeHeaders.setHeader("Content-Type", "text/xml");
msgObject=parent;
// originalMessage = initialContents;
int form = FORM_STRING;
@@ -171,7 +169,7 @@
log.debug("Exit: SOAPPart ctor()");
}
}
- /* This could be rather costly with attachments.
+ /* This could be rather costly with attachments.
public Object getOriginalMessage() {
return originalMessage;
@@ -215,15 +213,15 @@
}
}
/**
- * This set the SOAP Envelope for this part.
- *
+ * This set the SOAP Envelope for this part.
+ *
* Note: It breaks the chicken/egg created.
* I need a message to create an attachment...
* From the attachment I should be able to get a reference...
* I now want to edit elements in the envelope in order to
* place the attachment reference to it.
* How do I now update the SOAP envelope with what I've changed?
- *
+ *
*/
public void setSOAPEnvelope(org.apache.axis.message.SOAPEnvelope
env){
@@ -463,7 +461,7 @@
}
setCurrentMessage(dser.getEnvelope(), FORM_SOAPENVELOPE);
-
+
log.debug("Exit: SOAPPart::getAsSOAPEnvelope");
return (SOAPEnvelope)currentMessage;
}
@@ -472,7 +470,7 @@
* Add the specified MIME header, as per JAXM.
*/
public void addMimeHeader (String header, String value) {
- mimeHeaders.setHeader(header, value);
+ mimeHeaders.addHeader(header, value);
}
/**
@@ -501,7 +499,7 @@
* Set content location.
*/
public void setContentLocation(String loc) {
- addMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION, loc);
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_LOCATION, loc);
}
/**
@@ -511,28 +509,14 @@
* @returns void
*/
public void setContentId(String newCid){
- if(newCid!=null && !newCid.toLowerCase().startsWith
("cid:")){
- newCid="cid:"+newCid;
- }
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID,newCid);
+ setMimeHeader(HTTPConstants.HEADER_CONTENT_ID,newCid);
}
/**
* Content ID.
*/
public String getContentId() {
- String ret= getFirstMimeHeader(HTTPConstants.HEADER_CONTENT_ID);
- //Do not let the contentID ever be empty.
- if(ret == null){
- ret=SOAPUtils.getNewContentIdValue();
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID , ret);
- }
- ret= ret.trim();
- if(ret.length() ==0){
- ret=SOAPUtils.getNewContentIdValue();
- addMimeHeader(HTTPConstants.HEADER_CONTENT_ID , ret);
- }
- return ret;
+ return getFirstMimeHeader(HTTPConstants.HEADER_CONTENT_ID);
}
1.4 +1 -0 xml-axis/java/test/saaj/TestAttachment.java
Index: TestAttachment.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/saaj/TestAttachment.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestAttachment.java 24 Jun 2002 13:19:10 -0000 1.3
+++ TestAttachment.java 1 Jul 2002 20:01:39 -0000 1.4
@@ -19,6 +19,7 @@
MessageFactory factory = MessageFactory.newInstance();
SOAPMessage message = factory.createMessage();
AttachmentPart attachment = message.createAttachmentPart();
+
attachment.setContentId(org.apache.axis.utils.SOAPUtils.getNewContentIdValue
));
String stringContent = "Update address for Sunny Skies " +
"Inc., to 10 Upbeat Street, Pleasant Grove, CA 95439";