1.1 --- a/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/staxex/Base64Data.java Thu Apr 04 19:05:24 2013 -0700 1.2 +++ b/src/share/jaxws_classes/com/sun/xml/internal/org/jvnet/staxex/Base64Data.java Tue Apr 09 14:51:13 2013 +0100 1.3 @@ -1,5 +1,5 @@ 1.4 /* 1.5 - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 1.6 + * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 1.7 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 1.8 * 1.9 * This code is free software; you can redistribute it and/or modify it 1.10 @@ -36,11 +36,13 @@ 1.11 import java.io.OutputStream; 1.12 import javax.xml.stream.XMLStreamException; 1.13 import javax.xml.stream.XMLStreamWriter; 1.14 +import java.util.logging.Level; 1.15 +import java.util.logging.Logger; 1.16 1.17 // for testing method 1.18 //import com.sun.xml.internal.stream.writers.XMLStreamWriterImpl; 1.19 //import java.io.FileNotFoundException; 1.20 -//import java.io.StringWriter; 1.21 +//import java.io.FileWriter; 1.22 //import javax.activation.FileDataSource; 1.23 1.24 /** 1.25 @@ -59,8 +61,8 @@ 1.26 // (note that having both is allowed) 1.27 1.28 private DataHandler dataHandler; 1.29 + private byte[] data; 1.30 1.31 - private byte[] data; 1.32 /** 1.33 * Length of the valid data in {@link #data}. 1.34 */ 1.35 @@ -84,6 +86,8 @@ 1.36 public Base64Data() { 1.37 } 1.38 1.39 + private static final Logger logger = Logger.getLogger(Base64Data.class.getName()); 1.40 + 1.41 /** 1.42 * Clone constructor 1.43 * @param that needs to be cloned 1.44 @@ -429,15 +433,30 @@ 1.45 Base64Encoder.print(data, 0, dataLen, buf, start); 1.46 } 1.47 1.48 + private static final int CHUNK_SIZE; 1.49 + static { 1.50 + int bufSize = 1024; 1.51 + try { 1.52 + String bufSizeStr = getProperty("com.sun.xml.internal.org.jvnet.staxex.Base64DataStreamWriteBufferSize"); 1.53 + if (bufSizeStr != null) { 1.54 + bufSize = Integer.parseInt(bufSizeStr); 1.55 + } 1.56 + } catch (Exception e) { 1.57 + logger.log(Level.INFO, "Error reading com.sun.xml.internal.org.jvnet.staxex.Base64DataStreamWriteBufferSize property", e); 1.58 + } 1.59 + CHUNK_SIZE = bufSize; 1.60 + } 1.61 + 1.62 public void writeTo(XMLStreamWriter output) throws IOException, XMLStreamException { 1.63 if (data==null) { 1.64 try { 1.65 InputStream is = dataHandler.getDataSource().getInputStream(); 1.66 ByteArrayOutputStream outStream = new ByteArrayOutputStream(); // dev-null stream 1.67 Base64EncoderStream encWriter = new Base64EncoderStream(output, outStream); 1.68 - int b = -1; 1.69 - while ((b = is.read()) != -1) { 1.70 - encWriter.write(b); 1.71 + int b; 1.72 + byte[] buffer = new byte[CHUNK_SIZE]; 1.73 + while ((b = is.read(buffer)) != -1) { 1.74 + encWriter.write(buffer, 0, b); 1.75 } 1.76 outStream.close(); 1.77 encWriter.close(); 1.78 @@ -457,17 +476,33 @@ 1.79 return new Base64Data(this); 1.80 } 1.81 1.82 + static String getProperty(final String propName) { 1.83 + if (System.getSecurityManager() == null) { 1.84 + return System.getProperty(propName); 1.85 + } else { 1.86 + return (String) java.security.AccessController.doPrivileged( 1.87 + new java.security.PrivilegedAction() { 1.88 + public java.lang.Object run() { 1.89 + return System.getProperty(propName); 1.90 + } 1.91 + }); 1.92 + } 1.93 + } 1.94 + 1.95 // public static void main(String[] args) throws FileNotFoundException, IOException, XMLStreamException { 1.96 // Base64Data data = new Base64Data(); 1.97 // 1.98 -// data.set(new DataHandler(new FileDataSource(new File("/home/snajper/Desktop/a.txt")))); 1.99 +// File f = new File("/Users/snajper/work/builds/weblogic/wls1211_dev.zip"); 1.100 +// FileDataSource fds = new FileDataSource(f); 1.101 +// DataHandler dh = new DataHandler(fds); 1.102 +// data.set(dh); 1.103 // 1.104 -// StringWriter sw = new StringWriter(); 1.105 -// XMLStreamWriterImpl wi = new XMLStreamWriterImpl(sw, null); 1.106 +// FileWriter fw = new FileWriter(new File("/Users/snajper/Desktop/b.txt")); 1.107 +// XMLStreamWriterImpl wi = new XMLStreamWriterImpl(fw, null); 1.108 // 1.109 // data.writeTo(wi); 1.110 -// wi.flush();sw.flush(); 1.111 -// System.out.println("SW: " + sw.toString()); 1.112 +// wi.flush();fw.flush(); 1.113 +// //System.out.println("SW: " + sw.toString()); 1.114 // 1.115 // } 1.116