# HG changeset patch # User paulb # Date 1093724659 0 # Node ID d2b3c44bb50b37ade88ddddcc92b113c88702315 # Parent 98ddf103692c11dd815cc83fa26182c5f4c67860 [project @ 2004-08-28 20:24:19 by paulb] Replaced FieldStorage with various Java mail classes, but this seems to break the JythonServlet stuff. diff -r 98ddf103692c -r d2b3c44bb50b WebStack/JavaServlet.py --- a/WebStack/JavaServlet.py Sat Aug 28 17:01:15 2004 +0000 +++ b/WebStack/JavaServlet.py Sat Aug 28 20:24:19 2004 +0000 @@ -8,7 +8,12 @@ from StringIO import StringIO from Helpers.Request import Cookie, get_body_fields, get_storage_items import javax.servlet.http.Cookie -from cgi import FieldStorage + +# Form data decoding. + +import javax.mail.internet.MimeMessage +import javax.mail.Session +import java.util.Properties class Stream: @@ -245,26 +250,13 @@ NOTE: not be pertinent. """ - # Where the content type is "multipart/form-data", we use the - # FieldStorage class from the standard library. Otherwise, we use the - # Servlet API's parameter access methods. + # Where the content type is "multipart/form-data", we use javax.mail + # functionality. Otherwise, we use the Servlet API's parameter access + # methods. if self.get_content_type() and self.get_content_type().content_type == "multipart/form-data": - - # NOTE: Taken from WebStack.CGI.get_fields_from_body. - - if self.storage_body is None: - self.storage_body = FieldStorage(fp=self.get_request_stream(), headers=self.get_headers(), - environ={"REQUEST_METHOD" : self.get_request_method()}, keep_blank_values=1) + fields = self._get_fields_from_message() - # Avoid strange design issues with FieldStorage by checking the internal - # field list directly. - - if self.storage_body.list is not None: - - # Traverse the storage, finding each field value. - - fields = get_body_fields(get_storage_items(self.storage_body), None) else: fields = {} parameter_map = self.request.getParameterMap() @@ -440,6 +432,38 @@ self.user = username + # Special Java-specific methods. + + def _get_fields_from_message(self): + + "Get fields from a multipart message." + + session = javax.mail.Session.getDefaultInstance(java.util.Properties()) + message = javax.mail.internet.MimeMessage(session, self.get_request_stream()) + content = message.getContent() + return self._get_fields_from_multipart(content) + + def _get_fields_from_multipart(self, content): + + "Get fields from multipart 'content'." + + fields = {} + for i in range(0, content.getCount()): + part = content.getBodyPart(i) + subcontent = part.getContent() + + # Record string content. + + if type(subcontent) == type(""): + name = part.getDisposition() + if not fields.has_key(name): + fields[name] = [] + fields[name].append(subcontent) + else: + fields.update(self._get_fields_from_multipart(subcontent)) + + return fields + class Session: """