Package test.md5attach

Source Code of test.md5attach.MD5AttachTest

package test.md5attach;

import java.io.*;
import org.apache.axis.*;
import org.apache.axis.client.ServiceClient;
import org.apache.axis.transport.http.HTTPTransport ;
import org.apache.axis.utils.*;

/**
* A convenient little test program which will send a message as is to
* the server.  Useful for debugging interoperability problems or
* handling of ill-formed messages that are hard to reproduce programmatically.
*
* Accepts the standard options, followed by a list of files containing
* the contents to be sent.
*/
public class MD5AttachTest {
    static void main(String[] args) throws Exception {
        Options opts = new Options(args);
        String action = opts.isValueSet('a');

        ServiceClient sc = new ServiceClient(opts.getURL());
        //if (action != null) sc.set(HTTPTransport.ACTION, action);
        sc.set(HTTPTransport.ACTION, "");
 
            args = opts.getRemainingArgs();

           if(null == args || args.length != 1)  {
              System.err.println("Must specify file to send as an attachment!");
              System.exit(8);
            }

            //Create the attachment.
            javax.activation.DataHandler dh= new javax.activation.DataHandler( new javax.activation.FileDataSource( args[0] ));

            org.apache.axis.message.SOAPEnvelope env= new org.apache.axis.message.SOAPEnvelope();

            //Build the body elements.
            javax.xml.parsers.DocumentBuilderFactory dbf= javax.xml.parsers.DocumentBuilderFactory.newInstance();
            javax.xml.parsers.DocumentBuilder db= dbf.newDocumentBuilder();
            org.w3c.dom.Document doc= db.newDocument();
            org.w3c.dom.Element methodElement=   doc.createElementNS("foo", "foo:MD5Attach");
            org.w3c.dom.Element paramElement=   doc.createElementNS("foo", "foo:thefile");
            long startTime= System.currentTimeMillis();
            methodElement.appendChild(paramElement);
            paramElement.appendChild( doc.createTextNode(""+startTime));


            org.apache.axis.message.SOAPBodyElement sbe= new org.apache.axis.message.SOAPBodyElement( methodElement);
            env.addBodyElement(sbe);
           
            org.apache.axis.Message msg=  new org.apache.axis.Message(env);

            //Add the attachment content to the message.
            org.apache.axis.attachments.Attachments attachments= msg.getAttachments();
            org.apache.axis.Part attachmentPart= attachments.createAttachmentPart(dh);
            String href= attachmentPart.getContentId();
            //Have the parameter element set an href attribute to the attachment.
            paramElement.setAttribute(org.apache.axis.Constants.ATTR_HREF, href );
            env.clearBody();
            env.addBodyElement(sbe);

            msg.getSOAPPart().setSOAPEnvelope(env);

            sc.setRequestMessage(msg);
            //go on now....
            sc.invoke();
       
            MessageContext mc = sc.getMessageContext();
            // System.out.println(mc.getResponseMessage().getAsString());
           
            env =  mc.getResponseMessage().getSOAPPart().getAsSOAPEnvelope();
            sbe= env.getFirstBody();
            org.w3c.dom.Element sbElement= sbe.getAsDOM();
            //get the first level accessor  ie parameter
            org.w3c.dom.Node n= sbElement.getFirstChild();
            for(; n != null && !(n instanceof org.w3c.dom.Element); n= n.getNextSibling());
            paramElement= (org.w3c.dom.Element)n;

            org.w3c.dom.Node respNode= paramElement.getFirstChild();
            long elapsedTime= -1;
            if(respNode!= null && respNode instanceof org.w3c.dom.Text){
             
              String respStr= ((org.w3c.dom.Text) respNode).getData();
              String timeStr= null;
              String MD5String= null;
              java.util.StringTokenizer st = new java.util.StringTokenizer(respStr);
               while (st.hasMoreTokens()) {
                   String s= st.nextToken().trim();
                   if(s.startsWith("elapsedTime=")) timeStr= s.substring(12);
                   else if(s.startsWith("MD5=")) MD5String= s.substring(4);
               }
               if(timeStr != null){
                 long time = Long.parseLong(timeStr);
                 timeStr= (time/100.0) + " sec.";
               }else{
                 timeStr= "Unknown";
               }
               System.out.println("The time to send was:" + timeStr);
               if(MD5String == null){
                 System.err.println("Sorry no MD5 data was received.");
               }else{
                 System.out.println("Calculating MD5 for local file...");
                 java.security.MessageDigest md= java.security.MessageDigest.getInstance("MD5");
                 byte[] MD5received= org.apache.axis.encoding.Base64.decode(MD5String);
                  java.io.InputStream attachmentStream=  dh.getInputStream();
                  int bread=0;
                  byte[] buf= new byte[64*1024];
                  do{
                    bread= attachmentStream.read(buf);
                    if(bread >0){
                      md.update(buf, 0, bread);
                    }
                  }while(bread > -1);
                  attachmentStream.close();
                  buf= null;
                  //Add the mime type to the digest.
                  String contentType= dh.getContentType();
                  if(contentType != null && contentType.length() != 0){
                    md.update( contentType.getBytes("US-ASCII"));
                  }
                  byte[] MD5orginal= md.digest();
                  if( java.util.Arrays.equals(MD5orginal, MD5received)){
                    System.out.println("All is well with Axis's attachment support!");
                    System.exit(0);
                  }else{
                    System.err.println("Miss match in MD5");
                  }
               }
            }else{
            System.err.println("Sorry no returned data.");
            }
          System.err.println("You've found a bug:\"http://nagoya.apache.org/bugzilla/\"");
          System.exit(8);
        }

}
TOP

Related Classes of test.md5attach.MD5AttachTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.