ASF Bugzilla – Attachment 34231 Details for
Bug 60102
Improve error message when writing a document that has been closed
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Replace OpenXML4J return boolean with throws OpenXML4JException
bug_60102_output_stream_closed.patch (text/plain), 24.57 KB, created by
Javen O'Neal
on 2016-09-10 23:30:31 UTC
(
hide
)
Description:
Replace OpenXML4J return boolean with throws OpenXML4JException
Filename:
MIME Type:
Creator:
Javen O'Neal
Created:
2016-09-10 23:30:31 UTC
Size:
24.57 KB
patch
obsolete
>Index: src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/PackagePart.java (working copy) >@@ -687,8 +687,9 @@ > * Output stream to save this part. > * @throws OpenXML4JException > * If any exception occur. >+ * @throws IOException > */ >- public abstract boolean save(OutputStream zos) throws OpenXML4JException; >+ public abstract void save(OutputStream zos) throws OpenXML4JException, IOException; > > /** > * Load the content of this part. >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/StreamHelper.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/StreamHelper.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/StreamHelper.java (working copy) >@@ -31,20 +31,25 @@ > import javax.xml.transform.dom.DOMSource; > import javax.xml.transform.stream.StreamResult; > >+import org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller; >+import org.apache.poi.util.POILogFactory; >+import org.apache.poi.util.POILogger; > import org.w3c.dom.Document; > > public final class StreamHelper { > >+ private static final POILogger logger = POILogFactory.getLogger(StreamHelper.class); >+ > private StreamHelper() { > // Do nothing > } >- >- private static final TransformerFactory transformerFactory = TransformerFactory.newInstance(); >- >- private static synchronized Transformer getIdentityTransformer() throws TransformerException { >- return transformerFactory.newTransformer(); >- } > >+ private static final TransformerFactory transformerFactory = TransformerFactory.newInstance(); >+ >+ private static synchronized Transformer getIdentityTransformer() throws TransformerException { >+ return transformerFactory.newTransformer(); >+ } >+ > /** > * Save the document object in the specified output stream. > * >@@ -52,36 +57,31 @@ > * The XML document. > * @param outStream > * The OutputStream in which the XML document will be written. >- * @return <b>true</b> if the xml is successfully written in the stream, >- * else <b>false</b>. >+ * @throws TransformerException if an error occurred while transforming XML Source. >+ * @throws IOException if the output stream is closed. > */ >- public static boolean saveXmlInStream(Document xmlContent, >- OutputStream outStream) { >- try { >- Transformer trans = getIdentityTransformer(); >- Source xmlSource = new DOMSource(xmlContent); >- // prevent close of stream by transformer: >- Result outputTarget = new StreamResult(new FilterOutputStream( >- outStream) { >- @Override >- public void write(byte b[], int off, int len) >- throws IOException { >- out.write(b, off, len); >- } >+ public static void saveXmlInStream(Document xmlContent, >+ OutputStream outStream) throws TransformerException, IOException { >+ Transformer trans = getIdentityTransformer(); >+ Source xmlSource = new DOMSource(xmlContent); >+ // prevent close of stream by transformer: >+ Result outputTarget = new StreamResult(new FilterOutputStream( >+ outStream) { >+ @Override >+ public void write(byte b[], int off, int len) >+ throws IOException { >+ out.write(b, off, len); >+ } > >- @Override >- public void close() throws IOException { >- out.flush(); // only flush, don't close! >- } >- }); >- trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); >- trans.setOutputProperty(OutputKeys.INDENT, "yes"); >- trans.setOutputProperty(OutputKeys.STANDALONE, "yes"); >- trans.transform(xmlSource, outputTarget); >- } catch (TransformerException e) { >- return false; >- } >- return true; >+ @Override >+ public void close() throws IOException { >+ out.flush(); // only flush, don't close! >+ } >+ }); >+ trans.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); >+ trans.setOutputProperty(OutputKeys.INDENT, "yes"); >+ trans.setOutputProperty(OutputKeys.STANDALONE, "yes"); >+ trans.transform(xmlSource, outputTarget); > } > > /** >@@ -91,18 +91,14 @@ > * The source stream. > * @param outStream > * The destination stream. >- * @return <b>true</b> if the operation succeed, else return <b>false</b>. >+ * throws IOException if the input stream cannot be read or the output stream cannot be written to. >+ * Verify that both streams are open. > */ >- public static boolean copyStream(InputStream inStream, OutputStream outStream) { >- try { >- byte[] buffer = new byte[1024]; >- int bytesRead; >- while ((bytesRead = inStream.read(buffer)) >= 0) { >- outStream.write(buffer, 0, bytesRead); >- } >- } catch (Exception e) { >- return false; >+ public static void copyStream(InputStream inStream, OutputStream outStream) throws IOException { >+ byte[] buffer = new byte[1024]; >+ int bytesRead; >+ while ((bytesRead = inStream.read(buffer)) >= 0) { >+ outStream.write(buffer, 0, bytesRead); > } >- return true; > } > } >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java (working copy) >@@ -473,12 +473,16 @@ > throwExceptionIfReadOnly(); > > final ZipOutputStream zos; >+ final boolean newZOSWasCreated; > try { >- if (!(outputStream instanceof ZipOutputStream)) >+ if (!(outputStream instanceof ZipOutputStream)) { > zos = new ZipOutputStream(outputStream); >- else >+ newZOSWasCreated = true; >+ } else { > zos = (ZipOutputStream) outputStream; >- >+ newZOSWasCreated = false; >+ } >+ > // If the core properties part does not exist in the part list, > // we save it as well > if (this.getPartsByRelationshipType(PackageRelationshipTypes.CORE_PROPERTIES).size() == 0 && >@@ -525,23 +529,31 @@ > PartMarshaller marshaller = partMarshallers > .get(part._contentType); > if (marshaller != null) { >- if (!marshaller.marshall(part, zos)) { >- throw new OpenXML4JException( >- "The part " >- + part.getPartName().getURI() >- + " fail to be saved in the stream with marshaller " >- + marshaller); >+ try { >+ marshaller.marshall(part, zos); >+ } catch (final OpenXML4JException e) { >+ final String msg = "The part " >+ + part.getPartName().getURI() >+ + " fail to be saved in the stream with marshaller " >+ + marshaller; >+ throw new OpenXML4JException(msg, e); > } > } else { >- if (!defaultPartMarshaller.marshall(part, zos)) >- throw new OpenXML4JException( >- "The part " >- + part.getPartName().getURI() >- + " fail to be saved in the stream with marshaller " >- + defaultPartMarshaller); >+ try { >+ defaultPartMarshaller.marshall(part, zos); >+ } catch (final OpenXML4JException e) { >+ final String msg = "The part " >+ + part.getPartName().getURI() >+ + " fail to be saved in the stream with marshaller " >+ + defaultPartMarshaller; >+ throw new OpenXML4JException(msg, e); >+ } > } > } >- zos.close(); >+ >+ if (newZOSWasCreated) { >+ zos.close(); >+ } > } catch (OpenXML4JRuntimeException e) { > // no need to wrap this type of Exception > throw e; >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackagePart.java (working copy) >@@ -120,8 +120,8 @@ > } > > @Override >- public boolean save(OutputStream os) throws OpenXML4JException { >- return new ZipPartMarshaller().marshall(this, os); >+ public void save(OutputStream os) throws OpenXML4JException, IOException { >+ new ZipPartMarshaller().marshall(this, os); > } > > @Override >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ContentTypeManager.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ContentTypeManager.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ContentTypeManager.java (working copy) >@@ -409,8 +409,9 @@ > * The output stream use to save the XML content of the content > * types part. > * @return <b>true</b> if the operation success, else <b>false</b>. >+ * @throws IOException > */ >- public boolean save(OutputStream outStream) { >+ public void save(OutputStream outStream) throws IOException { > Document xmlOutDoc = DocumentHelper.createDocument(); > > // Building namespace >@@ -432,7 +433,7 @@ > xmlOutDoc.normalize(); > > // Save content in the specified output stream >- return this.saveImpl(xmlOutDoc, outStream); >+ this.saveImpl(xmlOutDoc, outStream); > } > > /** >@@ -475,5 +476,5 @@ > * @param out > * The output stream use to write the content type XML. > */ >- public abstract boolean saveImpl(Document content, OutputStream out); >+ public abstract void saveImpl(Document content, OutputStream out) throws IOException; > } >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/MemoryPackagePart.java (working copy) >@@ -108,8 +108,9 @@ > } > > @Override >- public boolean save(OutputStream os) throws OpenXML4JException { >- return new ZipPartMarshaller().marshall(this, os); >+ public void save(OutputStream os) throws OpenXML4JException, IOException { >+ ZipPartMarshaller marshaller = new ZipPartMarshaller(); >+ marshaller.marshall(this, os); > } > > @Override >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PackagePropertiesPart.java (working copy) >@@ -653,7 +653,7 @@ > } > > @Override >- public boolean save(OutputStream zos) { >+ public void save(OutputStream zos) { > throw new InvalidOperationException("Operation not authorized. This part may only be manipulated using the getters and setters on PackagePropertiesPart"); > } > >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PartMarshaller.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PartMarshaller.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/PartMarshaller.java (working copy) >@@ -17,6 +17,7 @@ > > package org.apache.poi.openxml4j.opc.internal; > >+import java.io.IOException; > import java.io.OutputStream; > > import org.apache.poi.openxml4j.exceptions.OpenXML4JException; >@@ -43,7 +44,8 @@ > * @throws OpenXML4JException > * Throws only if any other exceptions are thrown by inner > * methods. >+ * @throws IOException if an error occurred while writing to output stream. Verify that {@code out} is open for writing. > */ >- public boolean marshall(PackagePart part, OutputStream out) >- throws OpenXML4JException; >+ public void marshall(PackagePart part, OutputStream out) >+ throws OpenXML4JException, IOException; > } >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipContentTypeManager.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipContentTypeManager.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipContentTypeManager.java (working copy) >@@ -23,6 +23,8 @@ > import java.util.zip.ZipEntry; > import java.util.zip.ZipOutputStream; > >+import javax.xml.transform.TransformerException; >+ > import org.apache.poi.openxml4j.exceptions.InvalidFormatException; > import org.apache.poi.openxml4j.opc.OPCPackage; > import org.apache.poi.openxml4j.opc.StreamHelper; >@@ -38,7 +40,7 @@ > * @see ContentTypeManager > */ > public class ZipContentTypeManager extends ContentTypeManager { >- private static POILogger logger = POILogFactory.getLogger(ZipContentTypeManager.class); >+ private static final POILogger logger = POILogFactory.getLogger(ZipContentTypeManager.class); > > /** > * Delegate constructor to the super constructor. >@@ -56,7 +58,7 @@ > > @SuppressWarnings("resource") > @Override >- public boolean saveImpl(Document content, OutputStream out) { >+ public void saveImpl(Document content, OutputStream out) throws IOException { > ZipOutputStream zos = null; > if (out instanceof ZipOutputStream) > zos = (ZipOutputStream) out; >@@ -68,15 +70,16 @@ > // Referenced in ZIP > zos.putNextEntry(partEntry); > // Saving data in the ZIP file >- if (!StreamHelper.saveXmlInStream(content, zos)) { >- return false; >- } >+ StreamHelper.saveXmlInStream(content, zos); > zos.closeEntry(); >- } catch (IOException ioe) { >- logger.log(POILogger.ERROR, "Cannot write: " + CONTENT_TYPES_PART_NAME >- + " in Zip !", ioe); >- return false; >+ } catch (IOException e) { >+ final String msg = "Cannot write: " + CONTENT_TYPES_PART_NAME + " in Zip !"; >+ logger.log(POILogger.ERROR, msg, e); >+ throw new IOException(msg, e); >+ } catch (TransformerException e) { >+ final String msg = "Cannot write: " + CONTENT_TYPES_PART_NAME + " in Zip !"; >+ logger.log(POILogger.ERROR, msg, e); >+ throw new IOException(msg, e); > } >- return true; > } > } >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/DefaultMarshaller.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/DefaultMarshaller.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/DefaultMarshaller.java (working copy) >@@ -17,6 +17,7 @@ > > package org.apache.poi.openxml4j.opc.internal.marshallers; > >+import java.io.IOException; > import java.io.OutputStream; > > import org.apache.poi.openxml4j.exceptions.OpenXML4JException; >@@ -37,9 +38,10 @@ > * > * @throws OpenXML4JException > * If any error occur. >+ * @throws IOException > */ >- public boolean marshall(PackagePart part, OutputStream out) >- throws OpenXML4JException { >- return part.save(out); >+ public void marshall(PackagePart part, OutputStream out) >+ throws OpenXML4JException, IOException { >+ part.save(out); > } > } >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/PackagePropertiesMarshaller.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/PackagePropertiesMarshaller.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/PackagePropertiesMarshaller.java (working copy) >@@ -87,7 +87,7 @@ > * <code>true</code>. > */ > @Override >- public boolean marshall(PackagePart part, OutputStream out) >+ public void marshall(PackagePart part, OutputStream out) > throws OpenXML4JException { > if (!(part instanceof PackagePropertiesPart)) > throw new IllegalArgumentException( >@@ -120,7 +120,6 @@ > addSubject(); > addTitle(); > addVersion(); >- return true; > } > > /** >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPackagePropertiesMarshaller.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPackagePropertiesMarshaller.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPackagePropertiesMarshaller.java (working copy) >@@ -22,6 +22,8 @@ > import java.util.zip.ZipEntry; > import java.util.zip.ZipOutputStream; > >+import javax.xml.transform.TransformerException; >+ > import org.apache.poi.openxml4j.exceptions.OpenXML4JException; > import org.apache.poi.openxml4j.opc.PackagePart; > import org.apache.poi.openxml4j.opc.StreamHelper; >@@ -35,7 +37,7 @@ > public final class ZipPackagePropertiesMarshaller extends PackagePropertiesMarshaller { > > @Override >- public boolean marshall(PackagePart part, OutputStream out) >+ public void marshall(PackagePart part, OutputStream out) > throws OpenXML4JException { > if (!(out instanceof ZipOutputStream)) { > throw new IllegalArgumentException("ZipOutputStream expected!"); >@@ -51,13 +53,12 @@ > zos.putNextEntry(ctEntry); // Add entry in ZIP > super.marshall(part, out); // Marshall the properties inside a XML > // Document >- if (!StreamHelper.saveXmlInStream(xmlDoc, out)) { >- return false; >- } >+ StreamHelper.saveXmlInStream(xmlDoc, out); > zos.closeEntry(); > } catch (IOException e) { > throw new OpenXML4JException(e.getLocalizedMessage(), e); >+ } catch (TransformerException e) { >+ throw new OpenXML4JException(e.getLocalizedMessage(), e); > } >- return true; > } > } >Index: src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java >=================================================================== >--- src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java (revision 1760210) >+++ src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java (working copy) >@@ -24,6 +24,8 @@ > import java.util.zip.ZipEntry; > import java.util.zip.ZipOutputStream; > >+import javax.xml.transform.TransformerException; >+ > import org.apache.poi.openxml4j.exceptions.OpenXML4JException; > import org.apache.poi.openxml4j.opc.PackageNamespaces; > import org.apache.poi.openxml4j.opc.PackagePart; >@@ -48,7 +50,7 @@ > * @author Julien Chable > */ > public final class ZipPartMarshaller implements PartMarshaller { >- private static POILogger logger = POILogFactory.getLogger(ZipPartMarshaller.class); >+ private static final POILogger logger = POILogFactory.getLogger(ZipPartMarshaller.class); > > /** > * Save the specified part. >@@ -56,8 +58,8 @@ > * @throws OpenXML4JException > * Throws if an internal exception is thrown. > */ >- public boolean marshall(PackagePart part, OutputStream os) >- throws OpenXML4JException { >+ public void marshall(PackagePart part, OutputStream os) >+ throws IOException, OpenXML4JException { > if (!(os instanceof ZipOutputStream)) { > logger.log(POILogger.ERROR,"Unexpected class " + os.getClass().getName()); > throw new OpenXML4JException("ZipOutputStream expected !"); >@@ -68,7 +70,7 @@ > // check if there is anything to save for some parts. We don't do this for all parts as some code > // might depend on empty parts being saved, e.g. some unit tests verify this currently. > if(part.getSize() == 0 && part.getPartName().getName().equals(XSSFRelation.SHARED_STRINGS.getDefaultFileName())) { >- return true; >+ return; > } > > ZipOutputStream zos = (ZipOutputStream) os; >@@ -92,9 +94,9 @@ > } > zos.closeEntry(); > } catch (IOException ioe) { >- logger.log(POILogger.ERROR,"Cannot write: " + part.getPartName() + ": in ZIP", >- ioe); >- return false; >+ final String msg = "Cannot write: " + part.getPartName() + ": in ZIP"; >+ logger.log(POILogger.ERROR, msg, ioe); >+ throw new IOException(msg, ioe); > } > > // Saving relationship part >@@ -106,7 +108,6 @@ > relationshipPartName, zos); > > } >- return true; > } > > /** >@@ -119,10 +120,13 @@ > * @param zos > * Zip output stream in which to save the XML content of the > * relationships serialization. >+ * @throws IOException if an error occurred while saving the relationship part >+ * to the output stream. This is often because the output stream is closed. >+ * @throws OpenXML4JException if an error occurred while transforming the XML source. > */ >- public static boolean marshallRelationshipPart( >+ public static void marshallRelationshipPart( > PackageRelationshipCollection rels, PackagePartName relPartName, >- ZipOutputStream zos) { >+ ZipOutputStream zos) throws IOException, OpenXML4JException { > // Building xml > Document xmlOutDoc = DocumentHelper.createDocument(); > // make something like <Relationships >@@ -178,14 +182,16 @@ > relPartName.getURI().toASCIIString()).getPath()); > try { > zos.putNextEntry(ctEntry); >- if (!StreamHelper.saveXmlInStream(xmlOutDoc, zos)) { >- return false; >- } >+ StreamHelper.saveXmlInStream(xmlOutDoc, zos); > zos.closeEntry(); > } catch (IOException e) { >- logger.log(POILogger.ERROR,"Cannot create zip entry " + relPartName, e); >- return false; >+ logger.log(POILogger.ERROR, >+ "Cannot create zip entry " + relPartName + ". Verify output stream has not been closed.", e); >+ throw e; >+ } catch (final TransformerException e) { >+ final String msg = "An error occurred while transforming the XML source for " + relPartName + "."; >+ logger.log(POILogger.ERROR, msg, e); >+ throw new OpenXML4JException(msg, e); > } >- return true; // success > } > } >Index: src/ooxml/testcases/org/apache/poi/TestPOIXMLDocument.java >=================================================================== >--- src/ooxml/testcases/org/apache/poi/TestPOIXMLDocument.java (revision 1760210) >+++ src/ooxml/testcases/org/apache/poi/TestPOIXMLDocument.java (working copy) >@@ -132,7 +132,7 @@ > // FIXME: A better exception class (IOException?) and message should be raised > // indicating that the document could not be written because the output stream is closed. > // see {@link org.apache.poi.openxml4j.opc.ZipPackage#saveImpl(java.io.OutputStream)} >- if (e.getMessage().matches("Fail to save: an error occurs while saving the package : The part .+ fail to be saved in the stream with marshaller .+")) { >+ if (e.getMessage().contains("Stream Closed")) { > // expected > } else { > throw e; >Index: src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java >=================================================================== >--- src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java (revision 1760210) >+++ src/ooxml/testcases/org/apache/poi/openxml4j/opc/TestPackage.java (working copy) >@@ -44,6 +44,8 @@ > import java.util.zip.ZipFile; > import java.util.zip.ZipOutputStream; > >+import javax.xml.transform.TransformerException; >+ > import org.apache.poi.EncryptedDocumentException; > import org.apache.poi.POIDataSamples; > import org.apache.poi.POITestCase; >@@ -148,7 +150,7 @@ > * Test package creation. > */ > @Test >- public void createPackageAddPart() throws IOException, InvalidFormatException { >+ public void createPackageAddPart() throws IOException, InvalidFormatException, TransformerException { > File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestCreatePackageTMP.docx"); > > File expectedFile = OpenXML4JTestDataSamples.getSampleFile("TestCreatePackageOUTPUT.docx"); >@@ -298,7 +300,7 @@ > * Test package opening. > */ > @Test >- public void openPackage() throws IOException, InvalidFormatException { >+ public void openPackage() throws IOException, InvalidFormatException, TransformerException { > File targetFile = OpenXML4JTestDataSamples.getOutputFile("TestOpenPackageTMP.docx"); > > File inputFile = OpenXML4JTestDataSamples.getSampleFile("TestOpenPackageINPUT.docx"); >Index: src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestZipPackagePropertiesMarshaller.java >=================================================================== >--- src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestZipPackagePropertiesMarshaller.java (revision 1760210) >+++ src/ooxml/testcases/org/apache/poi/openxml4j/opc/internal/TestZipPackagePropertiesMarshaller.java (working copy) >@@ -18,6 +18,7 @@ > package org.apache.poi.openxml4j.opc.internal; > > import java.io.ByteArrayOutputStream; >+import java.io.IOException; > import java.io.OutputStream; > > import org.apache.poi.openxml4j.exceptions.OpenXML4JException; >@@ -27,7 +28,7 @@ > public class TestZipPackagePropertiesMarshaller { > > @Test(expected=IllegalArgumentException.class) >- public void nonZipOutputStream() throws OpenXML4JException { >+ public void nonZipOutputStream() throws OpenXML4JException, IOException { > PartMarshaller marshaller = new ZipPackagePropertiesMarshaller(); > OutputStream notAZipOutputStream = new ByteArrayOutputStream(0); > marshaller.marshall(null, notAZipOutputStream);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 60102
:
34228
| 34231