src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java

changeset 494
2fcd3ddb57a6
parent 368
0989ad8c0860
child 545
ce46e4af2b1d
     1.1 --- a/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java	Fri Dec 13 17:20:01 2013 -0800
     1.2 +++ b/src/share/jaxws_classes/com/sun/xml/internal/messaging/saaj/soap/AttachmentPartImpl.java	Sun Dec 15 23:35:45 2013 +0100
     1.3 @@ -62,61 +62,6 @@
     1.4          Logger.getLogger(LogDomainConstants.SOAP_DOMAIN,
     1.5                           "com.sun.xml.internal.messaging.saaj.soap.LocalStrings");
     1.6  
     1.7 -    static {
     1.8 -        try {
     1.9 -            CommandMap map = CommandMap.getDefaultCommandMap();
    1.10 -            if (map instanceof MailcapCommandMap) {
    1.11 -                MailcapCommandMap mailMap = (MailcapCommandMap) map;
    1.12 -                String hndlrStr = ";;x-java-content-handler=";
    1.13 -                mailMap.addMailcap(
    1.14 -                    "text/xml"
    1.15 -                        + hndlrStr
    1.16 -                        + "com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
    1.17 -                mailMap.addMailcap(
    1.18 -                    "application/xml"
    1.19 -                        + hndlrStr
    1.20 -                        + "com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
    1.21 -                mailMap.addMailcap(
    1.22 -                    "application/fastinfoset"
    1.23 -                        + hndlrStr
    1.24 -                        + "com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler");
    1.25 -                /* Image DataContentHandler handles all image types
    1.26 -                mailMap.addMailcap(
    1.27 -                    "image/jpeg"
    1.28 -                        + hndlrStr
    1.29 -                        + "com.sun.xml.internal.messaging.saaj.soap.JpegDataContentHandler");
    1.30 -                mailMap.addMailcap(
    1.31 -                    "image/gif"
    1.32 -                        + hndlrStr
    1.33 -                        + "com.sun.xml.internal.messaging.saaj.soap.GifDataContentHandler"); */
    1.34 -                /*mailMap.addMailcap(
    1.35 -                    "multipart/*"
    1.36 -                        + hndlrStr
    1.37 -                        + "com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");*/
    1.38 -                mailMap.addMailcap(
    1.39 -                    "image/*"
    1.40 -                        + hndlrStr
    1.41 -                        + "com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler");
    1.42 -                mailMap.addMailcap(
    1.43 -                    "text/plain"
    1.44 -                        + hndlrStr
    1.45 -                        + "com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler");
    1.46 -            } else {
    1.47 -                throw new SOAPExceptionImpl("Default CommandMap is not a MailcapCommandMap");
    1.48 -            }
    1.49 -        } catch (Throwable t) {
    1.50 -            log.log(
    1.51 -                Level.SEVERE,
    1.52 -                "SAAJ0508.soap.cannot.register.handlers",
    1.53 -                t);
    1.54 -            if (t instanceof RuntimeException) {
    1.55 -                throw (RuntimeException) t;
    1.56 -            } else {
    1.57 -                throw new RuntimeException(t.getLocalizedMessage());
    1.58 -            }
    1.59 -        }
    1.60 -    };
    1.61 -
    1.62      private final MimeHeaders headers;
    1.63      private MimeBodyPart rawContent = null;
    1.64      private DataHandler dataHandler = null;
    1.65 @@ -126,6 +71,12 @@
    1.66  
    1.67      public AttachmentPartImpl() {
    1.68          headers = new MimeHeaders();
    1.69 +
    1.70 +        // initialization from here should cover most of cases;
    1.71 +        // if not, it would be necessary to call
    1.72 +        //   AttachmentPartImpl.initializeJavaActivationHandlers()
    1.73 +        // explicitly by programmer
    1.74 +        initializeJavaActivationHandlers();
    1.75      }
    1.76  
    1.77      public AttachmentPartImpl(MIMEPart part) {
    1.78 @@ -404,7 +355,7 @@
    1.79              throw new SOAPExceptionImpl(e.getLocalizedMessage());
    1.80          } finally {
    1.81              try {
    1.82 -                decoded.close();
    1.83 +                    decoded.close();
    1.84              } catch (IOException ex) {
    1.85                  throw new SOAPException(ex);
    1.86              }
    1.87 @@ -613,4 +564,43 @@
    1.88          return headers;
    1.89      }
    1.90  
    1.91 +    public static void initializeJavaActivationHandlers() {
    1.92 +        // DataHandler.writeTo() may search for DCH. So adding some default ones.
    1.93 +        try {
    1.94 +            CommandMap map = CommandMap.getDefaultCommandMap();
    1.95 +            if (map instanceof MailcapCommandMap) {
    1.96 +                MailcapCommandMap mailMap = (MailcapCommandMap) map;
    1.97 +
    1.98 +                // registering our DCH since javamail's DCH doesn't handle
    1.99 +                if (!cmdMapInitialized(mailMap)) {
   1.100 +                    mailMap.addMailcap("text/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
   1.101 +                    mailMap.addMailcap("application/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler");
   1.102 +                    mailMap.addMailcap("application/fastinfoset;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler");
   1.103 +                    mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler");
   1.104 +                    mailMap.addMailcap("image/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler");
   1.105 +                    mailMap.addMailcap("text/plain;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler");
   1.106 +                }
   1.107 +            }
   1.108 +        } catch (Throwable t) {
   1.109 +            // ignore the exception.
   1.110 +        }
   1.111 +    }
   1.112 +
   1.113 +    private static boolean cmdMapInitialized(MailcapCommandMap mailMap) {
   1.114 +
   1.115 +        // checking fastinfoset handler, since this one is specific to SAAJ
   1.116 +        CommandInfo[] commands = mailMap.getAllCommands("application/fastinfoset");
   1.117 +        if (commands == null || commands.length == 0) {
   1.118 +            return false;
   1.119 +        }
   1.120 +
   1.121 +        String saajClassName = "com.sun.xml.internal.ws.binding.FastInfosetDataContentHandler";
   1.122 +        for (CommandInfo command : commands) {
   1.123 +            String commandClass = command.getCommandClass();
   1.124 +            if (saajClassName.equals(commandClass)) {
   1.125 +                return true;
   1.126 +            }
   1.127 +        }
   1.128 +        return false;
   1.129 +    }
   1.130  }

mercurial