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; |
402 } catch (Exception e) { |
353 } catch (Exception e) { |
403 log.log(Level.SEVERE, "SAAJ0578.soap.attachment.setbase64content.exception", e); |
354 log.log(Level.SEVERE, "SAAJ0578.soap.attachment.setbase64content.exception", e); |
404 throw new SOAPExceptionImpl(e.getLocalizedMessage()); |
355 throw new SOAPExceptionImpl(e.getLocalizedMessage()); |
405 } finally { |
356 } finally { |
406 try { |
357 try { |
407 decoded.close(); |
358 decoded.close(); |
408 } catch (IOException ex) { |
359 } catch (IOException ex) { |
409 throw new SOAPException(ex); |
360 throw new SOAPException(ex); |
410 } |
361 } |
411 } |
362 } |
412 } |
363 } |
611 |
562 |
612 public MimeHeaders getMimeHeaders() { |
563 public MimeHeaders getMimeHeaders() { |
613 return headers; |
564 return headers; |
614 } |
565 } |
615 |
566 |
|
567 public static void initializeJavaActivationHandlers() { |
|
568 // DataHandler.writeTo() may search for DCH. So adding some default ones. |
|
569 try { |
|
570 CommandMap map = CommandMap.getDefaultCommandMap(); |
|
571 if (map instanceof MailcapCommandMap) { |
|
572 MailcapCommandMap mailMap = (MailcapCommandMap) map; |
|
573 |
|
574 // registering our DCH since javamail's DCH doesn't handle |
|
575 if (!cmdMapInitialized(mailMap)) { |
|
576 mailMap.addMailcap("text/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler"); |
|
577 mailMap.addMailcap("application/xml;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.XmlDataContentHandler"); |
|
578 mailMap.addMailcap("application/fastinfoset;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.FastInfosetDataContentHandler"); |
|
579 mailMap.addMailcap("multipart/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.MultipartDataContentHandler"); |
|
580 mailMap.addMailcap("image/*;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.ImageDataContentHandler"); |
|
581 mailMap.addMailcap("text/plain;;x-java-content-handler=com.sun.xml.internal.messaging.saaj.soap.StringDataContentHandler"); |
|
582 } |
|
583 } |
|
584 } catch (Throwable t) { |
|
585 // ignore the exception. |
|
586 } |
|
587 } |
|
588 |
|
589 private static boolean cmdMapInitialized(MailcapCommandMap mailMap) { |
|
590 |
|
591 // checking fastinfoset handler, since this one is specific to SAAJ |
|
592 CommandInfo[] commands = mailMap.getAllCommands("application/fastinfoset"); |
|
593 if (commands == null || commands.length == 0) { |
|
594 return false; |
|
595 } |
|
596 |
|
597 String saajClassName = "com.sun.xml.internal.ws.binding.FastInfosetDataContentHandler"; |
|
598 for (CommandInfo command : commands) { |
|
599 String commandClass = command.getCommandClass(); |
|
600 if (saajClassName.equals(commandClass)) { |
|
601 return true; |
|
602 } |
|
603 } |
|
604 return false; |
|
605 } |
616 } |
606 } |