rineholt 2002/06/30 19:46:28
Modified: java/samples/attachments EchoAttachment.java
EchoAttachmentsService.java
java/src/org/apache/axis/attachments DimeBodyPart.java
DimeDelimitedInputStream.java
Log:
Update attachments sample to show how to send using DIME format.
Minor fix for when the attachment is 0 length.
Revision Changes Path
1.16 +26 -5 xml-axis/java/samples/attachments/EchoAttachment.java
Index: EchoAttachment.java
===================================================================
RCS file: /home/cvs/xml-axis/java/samples/attachments/EchoAttachment.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- EchoAttachment.java 19 Jun 2002 19:11:49 -0000 1.15
+++ EchoAttachment.java 1 Jul 2002 02:46:27 -0000 1.16
@@ -91,6 +91,8 @@
Options opts = null;
+ static boolean doTheDIME= false;
+
public EchoAttachment( Options opts) {
this.opts = opts;
}
@@ -137,6 +139,10 @@
call.setPassword( opts.getPassword() );
+ if(doTheDIME)
+ call.setProperty(call.ATTACHMENT_ENCAPSULATION_FORMAT,
+ call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
+
Object ret = call.invoke( new Object[] {
dhSource
@@ -207,9 +213,9 @@
//call.setScopedProperty(MessageContext.HTTP_TRANSPORT_VERSION,HTTPConstants.HEADER_PROTOCOL_V11);
Hashtable myhttp= new Hashtable();
- myhttp.put("dddd","yyy");
+ myhttp.put("dddd","yyy"); //Send extra soap headers
myhttp.put("SOAPAction","dyyy");
- myhttp.put("SOAPActions","kkk");
+ myhttp.put("SOAPActions","prova");
//myhttp.put(HTTPConstants.HEADER_TRANSFER_ENCODING,HTTPConstants.HEADER_TRANSFER_ENCODING_CHUNKED);
call.setScopedProperty(HTTPConstants.REQUEST_HEADERS,myhttp);
@@ -233,6 +239,10 @@
call.setPassword( opts.getPassword() );
+ if(doTheDIME)
+ call.setProperty(call.ATTACHMENT_ENCAPSULATION_FORMAT,
+ call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);
+
Object ret = call.invoke( new Object[] {
attachments
}
@@ -302,13 +312,24 @@
EchoAttachment echoattachment = new EchoAttachment(opts);
args = opts.getRemainingArgs();
+ int argpos=0;
if(args == null || args.length == 0){
System.err.println("Need a file or directory argument.");
System.exit(8);
}
- String argFile = args[0];
+ if( args[0].trim().equalsIgnoreCase("+FDR")){
+ doTheDIME= true;
+ ++argpos;
+ }
+
+ if(argpos >= args.length){
+ System.err.println("Need a file or directory argument.");
+ System.exit(8);
+ }
+
+ String argFile = args[argpos];
java.io.File source = new java.io.File(argFile);
@@ -318,7 +339,7 @@
}
if (source.isFile()) {
- if (echoattachment.echo(args[0])) {
+ if (echoattachment.echo(argFile)) {
System.out.println("Attachment sent and received ok!");
System.exit(0);
}
@@ -328,7 +349,7 @@
}
}
else { //a directory?
- if (echoattachment.echoDir(args[0])) {
+ if (echoattachment.echoDir(argFile)) {
System.out.println("Attachments sent and received ok!");
System.exit(0);
}
1.3 +22 -0 xml-axis/java/samples/attachments/EchoAttachmentsService.java
Index: EchoAttachmentsService.java
===================================================================
RCS file: /home/cvs/xml-axis/java/samples/attachments/EchoAttachmentsService.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- EchoAttachmentsService.java 17 Nov 2001 00:06:50 -0000 1.2
+++ EchoAttachmentsService.java 1 Jul 2002 02:46:27 -0000 1.3
@@ -77,6 +77,17 @@
*/
public DataHandler echo( DataHandler dh) {
System.err.println("In echo");
+
+ //Attachments are sent by default back as a MIME stream if no attachments
were
+ // received. If attachments are received the same format that was received
will
+ // be the default stream type for any attachments sent.
+
+ //The following two commented lines would force any attachments sent back.
+ // to be in DIME format.
+
+ //Message rspmsg=AxisEngine.getCurrentMessageContext().getResponseMessage();
+
//rspmsg.getAttachmentsImpl().setSendType(org.apache.axis.attachments.Attachments.SEND_TYPE_DIME);
+
if (dh == null ) System.err.println("dh is null");
else System.err.println("Received \""+dh.getClass().getName()+"\".");
return dh;
@@ -88,6 +99,17 @@
*/
public DataHandler[] echoDir( DataHandler[] attachments) {
System.err.println("In echoDir");
+
+ //Attachments are sent by default back as a MIME stream if no attachments
were
+ // received. If attachments are received the same format that was received
will
+ // be the default stream type for any attachments sent.
+
+ //The following two commented lines would force any attachments sent back.
+ // to be in DIME format.
+
+ //Message rspmsg=AxisEngine.getCurrentMessageContext().getResponseMessage();
+
//rspmsg.getAttachmentsImpl().setSendType(org.apache.axis.attachments.Attachments.SEND_TYPE_DIME);
+
if (attachments == null ) System.err.println("attachments is null!");
else System.err.println("Got " + attachments.length + " attachments!");
return attachments;
1.2 +11 -8 xml-axis/java/src/org/apache/axis/attachments/DimeBodyPart.java
Index: DimeBodyPart.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/attachments/DimeBodyPart.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DimeBodyPart.java 30 Jun 2002 19:59:04 -0000 1.1
+++ DimeBodyPart.java 1 Jul 2002 02:46:27 -0000 1.2
@@ -401,7 +401,6 @@
long getTransmissionSize(long chunkSize) {
long size = 0;
-
size += id.length;
size += dimePadding(id.length);
size += type.length;
@@ -409,15 +408,19 @@
//no options.
long dataSize = getDataSize();
- long fullChunks = dataSize / chunkSize;
- long lastChunkSize = dataSize % chunkSize;
+ if(0 == dataSize){
+ size+=12; //header size.
+ }else{
- if (0 != lastChunkSize) size += 12; //12 bytes for fixed header
- size += 12 * fullChunks; //add additional header size for each chunk.
- size += fullChunks * dimePadding(chunkSize);
- size += dimePadding(lastChunkSize);
- size += dataSize;
+ long fullChunks = dataSize / chunkSize;
+ long lastChunkSize = dataSize % chunkSize;
+ if (0 != lastChunkSize) size += 12; //12 bytes for fixed header
+ size += 12 * fullChunks; //add additional header size for each chunk.
+ size += fullChunks * dimePadding(chunkSize);
+ size += dimePadding(lastChunkSize);
+ size += dataSize;
+ }
return size;
}
1.2 +10 -3
xml-axis/java/src/org/apache/axis/attachments/DimeDelimitedInputStream.java
Index: DimeDelimitedInputStream.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/attachments/DimeDelimitedInputStream.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DimeDelimitedInputStream.java 30 Jun 2002 19:59:04 -0000 1.1
+++ DimeDelimitedInputStream.java 1 Jul 2002 02:46:27 -0000 1.2
@@ -176,6 +176,7 @@
private final int readFromStream(final byte[] b,
final int start, final int length)
throws IOException {
+ if (length == 0) return 0;
int br = 0;
int brTotal = 0;
@@ -186,12 +187,12 @@
} catch (IOException e) {
streamInError = e;
throw e;
- };
+ }
if (br > 0) brTotal += br;
}
while (br > -1 && brTotal < length);
- return brTotal != 0 ? brTotal : br;
+ return br > -1 ? brTotal : br;
}
/**
@@ -224,7 +225,7 @@
}
/**
- * Read from the boundary delimited stream.
+ * Read from the DIME stream.
* @param b is the array to read into.
* @param off is the offset
* @return the number of bytes read. -1 if endof stream.
@@ -258,8 +259,14 @@
if (0 == len) return 0; //quick.
+ if(recordLength == 0 && bytesRead == 0 && !moreChunks){
+ ++bytesRead; //odd case no data to read -- give back 0 next time -1;
+ if(ME) theEnd = true;
+ return 0;
+ }
if (bytesRead >= recordLength && !moreChunks) {
dataPadLength -= readPad(dataPadLength);
+ if(ME) theEnd = true;
return -1;
}