KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > axis > handlers > MD5AttachHandler


1 /*
2  * Copyright 2001-2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */

16
17 package org.apache.axis.handlers;
18
19
20 import org.apache.axis.AxisFault;
21 import org.apache.axis.Message;
22 import org.apache.axis.MessageContext;
23 import org.apache.axis.components.logger.LogFactory;
24 import org.apache.axis.soap.SOAPConstants;
25 import org.apache.axis.utils.Messages;
26 import org.apache.commons.logging.Log;
27
28
29 /**
30  *
31  * @author Doug Davis (dug@us.ibm.com)
32  * @author Rick Rineholt
33  */

34 public class MD5AttachHandler extends org.apache.axis.handlers.BasicHandler {
35     protected static Log log =
36         LogFactory.getLog(MD5AttachHandler.class.getName());
37
38     public void invoke(MessageContext msgContext) throws AxisFault {
39         log.debug("Enter: MD5AttachHandler::invoke");
40         try {
41             // log.debug("IN MD5");
42
Message msg = msgContext.getRequestMessage();
43             SOAPConstants soapConstants = msgContext.getSOAPConstants();
44             org.apache.axis.message.SOAPEnvelope env = (org.apache.axis.message.SOAPEnvelope) msg.getSOAPEnvelope();
45             org.apache.axis.message.SOAPBodyElement sbe = env.getFirstBody();//env.getBodyByName("ns1", "addedfile");
46
org.w3c.dom.Element JavaDoc sbElement = sbe.getAsDOM();
47             //get the first level accessor ie parameter
48
org.w3c.dom.Node JavaDoc n = sbElement.getFirstChild();
49
50             for (; n != null && !(n instanceof org.w3c.dom.Element JavaDoc); n = n.getNextSibling());
51             org.w3c.dom.Element JavaDoc paramElement = (org.w3c.dom.Element JavaDoc) n;
52             //Get the href associated with the attachment.
53
String JavaDoc href = paramElement.getAttribute(soapConstants.getAttrHref());
54             org.apache.axis.Part ap = msg.getAttachmentsImpl().getAttachmentByReference(href);
55             javax.activation.DataHandler JavaDoc dh = org.apache.axis.attachments.AttachmentUtils.getActivationDataHandler(ap);
56             org.w3c.dom.Node JavaDoc timeNode = paramElement.getFirstChild();
57             long startTime = -1;
58
59             if (timeNode != null && timeNode instanceof org.w3c.dom.Text JavaDoc) {
60                 String JavaDoc startTimeStr = ((org.w3c.dom.Text JavaDoc) timeNode).getData();
61
62                 startTime = Long.parseLong(startTimeStr);
63             }
64             // log.debug("GOTIT");
65

66             long receivedTime = System.currentTimeMillis();
67             long elapsedTime = -1;
68
69             // log.debug("startTime=" + startTime);
70
// log.debug("receivedTime=" + receivedTime);
71
if (startTime > 0) elapsedTime = receivedTime - startTime;
72             String JavaDoc elapsedTimeStr = elapsedTime + "";
73             // log.debug("elapsedTimeStr=" + elapsedTimeStr);
74

75             java.security.MessageDigest JavaDoc md = java.security.MessageDigest.getInstance("MD5");
76             java.io.InputStream JavaDoc attachmentStream = dh.getInputStream();
77             int bread = 0;
78             byte[] buf = new byte[64 * 1024];
79
80             do {
81                 bread = attachmentStream.read(buf);
82                 if (bread > 0) {
83                     md.update(buf, 0, bread);
84                 }
85             }
86             while (bread > -1);
87             attachmentStream.close();
88             buf = null;
89             //Add the mime type to the digest.
90
String JavaDoc contentType = dh.getContentType();
91
92             if (contentType != null && contentType.length() != 0) {
93                 md.update( contentType.getBytes("US-ASCII"));
94             }
95
96             sbe = env.getFirstBody();
97             sbElement = sbe.getAsDOM();
98             //get the first level accessor ie parameter
99
n = sbElement.getFirstChild();
100             for (; n != null && !(n instanceof org.w3c.dom.Element JavaDoc); n = n.getNextSibling());
101             paramElement = (org.w3c.dom.Element JavaDoc) n;
102             // paramElement.setAttribute(soapConstants.getAttrHref(), respHref);
103
String JavaDoc MD5String = org.apache.axis.encoding.Base64.encode(md.digest());
104             String JavaDoc senddata = " elapsedTime=" + elapsedTimeStr + " MD5=" + MD5String;
105
106             // log.debug("senddata=" + senddata);
107
paramElement.appendChild( paramElement.getOwnerDocument().createTextNode(senddata));
108
109             sbe = new org.apache.axis.message.SOAPBodyElement(sbElement);
110             env.clearBody();
111             env.addBodyElement(sbe);
112             msg = new Message( env );
113
114             msgContext.setResponseMessage( msg );
115         }
116         catch ( Exception JavaDoc e ) {
117             log.error( Messages.getMessage("exception00"), e );
118             throw AxisFault.makeFault(e);
119         }
120         
121         log.debug("Exit: MD5AttachHandler::invoke");
122     }
123
124 }
125
Popular Tags