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

changeset 494
2fcd3ddb57a6
parent 368
0989ad8c0860
child 545
ce46e4af2b1d
equal deleted inserted replaced
493:b549c5ea34ab 494:2fcd3ddb57a6
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 }

mercurial