Dharmraj Gocher created GERONIMO-6852:
-----------------------------------------

             Summary: No default DataContentHandler like 
ObjectDataContentHandler present inside jakartaee-api-9.1.1-tomcat.jar of tomee 
9.1.0
                 Key: GERONIMO-6852
                 URL: https://issues.apache.org/jira/browse/GERONIMO-6852
             Project: Geronimo
          Issue Type: Bug
      Security Level: public (Regular issues)
          Components: general
            Reporter: Dharmraj Gocher


 In jakartaee-api-9.1.1-tomcat.jar of tomee 9.1.0, we could see a new package 
jakarta.activation introduced which contains classes like 
jakarta.activation.DataHandler.class etc. which were present in 
jakarta.activation.jar earlier in tomee 8.0.15 but not in 
javaee-api-8.0-6-tomcat.jar. 

The implementation for jakarta.activation.DataHandler inside  
jakartaee-api-9.1.1-tomcat.jar does not have any default DataContentHandler. 
 

The below code used to work until tomee 8.0.15

 
{code:java}
String attachment = "Some base 64 encoded content";
MimeBodyPart emailAttachment = new MimeBodyPart();
emailAttachment.setContent(Base64.getMimeDecoder().decode(attachment), 
"application/octet-stream");
{code}
 

 

The above same code is failing in tomee 9.1.0 with error -

*ERROR-*
Caused by: jakarta.activation.UnsupportedDataTypeException: 
application/octet-stream
at jakarta.activation.DataHandler.writeTo(DataHandler.java:75)
at jakarta.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:489)
at jakarta.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:255)
at 
org.apache.geronimo.mail.handlers.MultipartHandler.writeTo(MultipartHandler.java:57)
at jakarta.activation.DataHandler.writeTo(DataHandler.java:77)
at jakarta.mail.internet.MimeMessage.writeTo(MimeMessage.java:1287)
at jakarta.mail.internet.MimeMessage.writeTo(MimeMessage.java:1256)

 

Instead of making mandatory to pass DataContentHandler can we provide some 
default handler like ObjectDataContentHandler similar to jakarta 
activation.jar? This ensures backward compatibility.

Something like -
{code:java}
        private synchronized DataContentHandler getDataContentHandler() {
                Class var2 = DataHandler.class;      
                DataContentHandlerFactory localFactory;      
                synchronized(DataHandler.class) {
                        if (factory != this.originalFactory) {

                                this.dch = null;
                                this.originalFactory = factory;
                                }
                        localFactory = this.originalFactory;
                        }
                if (this.dch == null) {

                String mimeType = this.getMimeType(this.ds.getContentType());
        if (localFactory != null) {
         this.dch = localFactory.createDataContentHandler(mimeType);
         }
                if (this.dch == null) {
                        if (this.commandMap != null) {
                                this.dch = 
this.commandMap.createDataContentHandler(mimeType);
                        } else {
                                this.dch = 
CommandMap.getDefaultCommandMap().createDataContentHandler(mimeType);
                        }         
                }
                 }
                   if(this.dch == null){
                            this.dch = <Some default data handler>;
                   }

                   return this.dch;
                }
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to