jaxws/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java
changeset 23959 f37ffa18553c
parent 23782 953bfc3fbe31
child 24598 6203ccb62532
equal deleted inserted replaced
23816:b47e02119575 23959:f37ffa18553c
    60 
    60 
    61     protected static final Logger log =
    61     protected static final Logger log =
    62         Logger.getLogger(LogDomainConstants.SOAP_DOMAIN,
    62         Logger.getLogger(LogDomainConstants.SOAP_DOMAIN,
    63                          "com.sun.xml.internal.messaging.saaj.soap.LocalStrings");
    63                          "com.sun.xml.internal.messaging.saaj.soap.LocalStrings");
    64 
    64 
    65     static {
       
    66         try {
       
    67             CommandMap map = CommandMap.getDefaultCommandMap();
       
    68             if (map instanceof MailcapCommandMap) {
       
    69                 MailcapCommandMap mailMap = (MailcapCommandMap) map;
       
    70                 String hndlrStr = ";;x-java-content-handler=";
       
    71                 mailMap.addMailcap(
       
    72                     "text/xml"
       
    73                         + hndlrStr
       
    74                         + "com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
       
    75                 mailMap.addMailcap(
       
    76                     "application/xml"
       
    77                         + hndlrStr
       
    78                         + "com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
       
    79                 mailMap.addMailcap(
       
    80                     "application/fastinfoset"
       
    81                         + hndlrStr
       
    82                         + "com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler");
       
    83                 /* Image DataContentHandler handles all image types
       
    84                 mailMap.addMailcap(
       
    85                     "image/jpeg"
       
    86                         + hndlrStr
       
    87                         + "com.sun.xml.internal.messaging.saaj.soap.JpegDataContentHandler");
       
    88                 mailMap.addMailcap(
       
    89                     "image/gif"
       
    90                         + hndlrStr
       
    91                         + "com.sun.xml.internal.messaging.saaj.soap.GifDataContentHandler"); */
       
    92                 /*mailMap.addMailcap(
       
    93                     "multipart/*"
       
    94                         + hndlrStr
       
    95                         + "com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");*/
       
    96                 mailMap.addMailcap(
       
    97                     "image/*"
       
    98                         + hndlrStr
       
    99                         + "com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler");
       
   100                 mailMap.addMailcap(
       
   101                     "text/plain"
       
   102                         + hndlrStr
       
   103                         + "com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler");
       
   104             } else {
       
   105                 throw new SOAPExceptionImpl("Default CommandMap is not a MailcapCommandMap");
       
   106             }
       
   107         } catch (Throwable t) {
       
   108             log.log(
       
   109                 Level.SEVERE,
       
   110                 "SAAJ0508.soap.cannot.register.handlers",
       
   111                 t);
       
   112             if (t instanceof RuntimeException) {
       
   113                 throw (RuntimeException) t;
       
   114             } else {
       
   115                 throw new RuntimeException(t.getLocalizedMessage());
       
   116             }
       
   117         }
       
   118     };
       
   119 
       
   120     private final MimeHeaders headers;
    65     private final MimeHeaders headers;
   121     private MimeBodyPart rawContent = null;
    66     private MimeBodyPart rawContent = null;
   122     private DataHandler dataHandler = null;
    67     private DataHandler dataHandler = null;
   123 
    68 
   124     //alternate impl that uses a MIMEPart
    69     //alternate impl that uses a MIMEPart
   125     private MIMEPart mimePart = null;
    70     private MIMEPart mimePart = null;
   126 
    71 
   127     public AttachmentPartImpl() {
    72     public AttachmentPartImpl() {
   128         headers = new MimeHeaders();
    73         headers = new MimeHeaders();
       
    74 
       
    75         // initialization from here should cover most of cases;
       
    76         // if not, it would be necessary to call
       
    77         //   AttachmentPartImpl.initializeJavaActivationHandlers()
       
    78         // explicitly by programmer
       
    79         initializeJavaActivationHandlers();
   129     }
    80     }
   130 
    81 
   131     public AttachmentPartImpl(MIMEPart part) {
    82     public AttachmentPartImpl(MIMEPart part) {
   132         headers = new MimeHeaders();
    83         headers = new MimeHeaders();
   133         mimePart = part;
    84         mimePart = part;
   617 
   568 
   618     public MimeHeaders getMimeHeaders() {
   569     public MimeHeaders getMimeHeaders() {
   619         return headers;
   570         return headers;
   620     }
   571     }
   621 
   572 
       
   573     public static void initializeJavaActivationHandlers() {
       
   574         // DataHandler.writeTo() may search for DCH. So adding some default ones.
       
   575         try {
       
   576             CommandMap map = CommandMap.getDefaultCommandMap();
       
   577             if (map instanceof MailcapCommandMap) {
       
   578                 MailcapCommandMap mailMap = (MailcapCommandMap) map;
       
   579 
       
   580                 // registering our DCH since javamail's DCH doesn't handle
       
   581                 if (!cmdMapInitialized(mailMap)) {
       
   582                     mailMap.addMailcap("text/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
       
   583                     mailMap.addMailcap("application/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
       
   584                     mailMap.addMailcap("application/fastinfoset;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler");
       
   585                     mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");
       
   586                     mailMap.addMailcap("image/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler");
       
   587                     mailMap.addMailcap("text/plain;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler");
       
   588                 }
       
   589             }
       
   590         } catch (Throwable t) {
       
   591             // ignore the exception.
       
   592         }
       
   593     }
       
   594 
       
   595     private static boolean cmdMapInitialized(MailcapCommandMap mailMap) {
       
   596 
       
   597         // checking fastinfoset handler, since this one is specific to SAAJ
       
   598         CommandInfo[] commands = mailMap.getAllCommands("application/fastinfoset");
       
   599         if (commands == null || commands.length == 0) {
       
   600             return false;
       
   601         }
       
   602 
       
   603         String saajClassName = "com.sun.xml.internal.ws.binding.FastInfosetDataContentHandler";
       
   604         for (CommandInfo command : commands) {
       
   605             String commandClass = command.getCommandClass();
       
   606             if (saajClassName.equals(commandClass)) {
       
   607                 return true;
       
   608             }
       
   609         }
       
   610         return false;
       
   611     }
   622 }
   612 }