You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2021/05/14 00:37:53 UTC
svn commit: r1889871 [2/17] - in /poi: site/src/documentation/content/xdocs/
site/src/documentation/content/xdocs/components/ trunk/ trunk/maven/
trunk/osgi/ trunk/osgi/src/test/java/org/apache/poi/osgi/
trunk/poi-examples/src/main/java/org/apache/poi/...
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/SignatureLine.java Fri May 14 00:37:50 2021
@@ -32,7 +32,6 @@ import java.awt.geom.AffineTransform;
import java.awt.geom.Dimension2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.AttributedCharacterIterator;
import java.text.AttributedString;
@@ -46,6 +45,7 @@ import com.microsoft.schemas.vml.CTGroup
import com.microsoft.schemas.vml.CTImageData;
import com.microsoft.schemas.vml.CTShape;
import com.microsoft.schemas.vml.STExt;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.common.usermodel.PictureType;
import org.apache.poi.hpsf.ClassID;
import org.apache.poi.ooxml.POIXMLException;
@@ -290,7 +290,7 @@ public abstract class SignatureLine {
xsl.setSuggestedsigneremail(suggestedSignerEmail);
}
if (setupId == null) {
- setupId = new ClassID("{"+ UUID.randomUUID().toString()+"}");
+ setupId = new ClassID("{"+ UUID.randomUUID() +"}");
}
xsl.setId(setupId.toString());
xsl.setAllowcomments(STTrueFalse.T);
@@ -344,7 +344,7 @@ public abstract class SignatureLine {
rnd.drawImage(gfx, new Rectangle2D.Double(0, 0, defaultWidth, defaultHeight));
gfx.dispose();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream();
ImageIO.write(bi, "PNG", bos);
return bos.toByteArray();
}
@@ -429,7 +429,7 @@ public abstract class SignatureLine {
gfx.dispose();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream();
ImageIO.write(bi, "PNG", bos);
return bos.toByteArray();
}
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/facets/XAdESXLSignatureFacet.java Fri May 14 00:37:50 2021
@@ -28,7 +28,6 @@ import static org.apache.poi.ooxml.POIXM
import static org.apache.poi.poifs.crypt.dsig.facets.XAdESSignatureFacet.insertXChild;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.cert.CRLException;
@@ -47,6 +46,7 @@ import java.util.UUID;
import javax.xml.crypto.MarshalException;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
@@ -104,8 +104,8 @@ public class XAdESXLSignatureFacet imple
SignatureConfig signatureConfig = signatureInfo.getSignatureConfig();
- QualifyingPropertiesDocument qualDoc = null;
- QualifyingPropertiesType qualProps = null;
+ QualifyingPropertiesDocument qualDoc;
+ QualifyingPropertiesType qualProps;
// check for XAdES-BES
NodeList qualNl = document.getElementsByTagNameNS(XADES_132_NS, "QualifyingProperties");
@@ -289,7 +289,7 @@ public class XAdESXLSignatureFacet imple
}
public static byte[] getC14nValue(List<Node> nodeList, String c14nAlgoId) {
- ByteArrayOutputStream c14nValue = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream c14nValue = new UnsynchronizedByteArrayOutputStream();
try {
for (Node node : nodeList) {
/*
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java Fri May 14 00:37:50 2021
@@ -24,7 +24,8 @@
package org.apache.poi.poifs.crypt.dsig.services;
-import java.io.ByteArrayOutputStream;
+import static org.apache.logging.log4j.util.Unbox.box;
+
import java.io.IOException;
import java.io.OutputStream;
import java.math.BigInteger;
@@ -44,6 +45,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.message.SimpleMessage;
@@ -72,8 +74,6 @@ import org.bouncycastle.tsp.TimeStampReq
import org.bouncycastle.tsp.TimeStampResponse;
import org.bouncycastle.tsp.TimeStampToken;
-import static org.apache.logging.log4j.util.Unbox.box;
-
/**
* A TSP time-stamp service implementation.
*/
@@ -95,7 +95,8 @@ public class TSPTimeStampService impleme
}
}
- @SuppressWarnings({"unchecked","squid:S2647"})
+ @Override
+ @SuppressWarnings({"squid:S2647"})
public byte[] timeStamp(SignatureInfo signatureInfo, byte[] data, RevocationData revocationData) throws Exception {
SignatureConfig signatureConfig = signatureInfo.getSignatureConfig();
@@ -124,7 +125,7 @@ public class TSPTimeStampService impleme
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(InetAddress.getByName(host), (port == -1 ? 80 : port)));
}
- ByteArrayOutputStream bos;
+ UnsynchronizedByteArrayOutputStream bos;
String contentType;
HttpURLConnection huc = (HttpURLConnection)new URL(signatureConfig.getTspUrl()).openConnection(proxy);
try {
@@ -163,7 +164,7 @@ public class TSPTimeStampService impleme
throw new RuntimeException("missing Content-Type header");
}
- bos = new ByteArrayOutputStream();
+ bos = new UnsynchronizedByteArrayOutputStream();
IOUtils.copy(huc.getInputStream(), bos);
LOG.atDebug().log(() -> new SimpleMessage("response content: " + HexDump.dump(bos.toByteArray(), 0, 0)));
} finally {
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/SVGRenderExtension.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/SVGRenderExtension.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/SVGRenderExtension.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/draw/SVGRenderExtension.java Fri May 14 00:37:50 2021
@@ -43,7 +43,6 @@ import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.WritableRaster;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.ref.WeakReference;
import java.nio.charset.StandardCharsets;
@@ -60,6 +59,7 @@ import org.apache.batik.svggen.SVGGenera
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.svggen.SVGPaintDescriptor;
import org.apache.batik.svggen.SVGTexturePaint;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.sl.draw.BitmapImageRenderer;
import org.apache.poi.sl.draw.DrawTexturePaint;
import org.apache.poi.sl.draw.Drawable;
@@ -274,12 +274,12 @@ public class SVGRenderExtension extends
null, SVG_VIEW_BOX_ATTRIBUTE, x+" "+ y+" "+ w+" "+h
);
- org.apache.poi.sl.usermodel.Shape slShape = fill.getShape();
+ org.apache.poi.sl.usermodel.Shape<?,?> slShape = fill.getShape();
// TODO: the rotation handling is incomplete and the scale handling is missing
// see DrawTexturePaint on how to do it for AWT
if (!fill.isRotatedWithShape() && slShape instanceof SimpleShape) {
- double rot = ((SimpleShape)slShape).getRotation();
+ double rot = ((SimpleShape<?,?>)slShape).getRotation();
if (rot != 0) {
setAttribute(genCtx, patternDef,
null, SVG_PATTERN_TRANSFORM_ATTRIBUTE, "rotate(" + genCtx.doubleString(-rot) + ")");
@@ -311,7 +311,7 @@ public class SVGRenderExtension extends
}
if (imgData == null) {
BufferedImage bi = imgRdr.getImage();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream();
try {
ImageIO.write(bi, "PNG", bos);
} catch (IOException e) {
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFObjectShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFObjectShape.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFObjectShape.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFObjectShape.java Fri May 14 00:37:50 2021
@@ -19,14 +19,14 @@
package org.apache.poi.xslf.usermodel;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
+import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.poi.hpsf.ClassID;
import org.apache.poi.ooxml.POIXMLDocumentPart.RelationPart;
import org.apache.poi.ooxml.POIXMLException;
@@ -68,7 +68,7 @@ public class XSLFObjectShape extends XSL
private static final QName[] OLE_OBJ = { new QName(PML_NS, "oleObj") };
private static final QName[] CT_PICTURE = { new QName(PML_NS, "pic") };
- private CTOleObject _oleObject;
+ private final CTOleObject _oleObject;
private XSLFPictureData _data;
/*package*/ XSLFObjectShape(CTGraphicalObjectFrame shape, XSLFSheet sheet){
@@ -193,56 +193,45 @@ public class XSLFObjectShape extends XSL
_oleObject.setProgId(md.getProgId());
_oleObject.setName(md.getObjectName());
- return new XSLFObjectOutputStream(rp.getDocumentPart().getPackagePart(),md);
+ return new ByteArrayOutputStream() {
+ @Override
+ public void close() throws IOException {
+ addUpdatedData(rp.getDocumentPart().getPackagePart(),md,this);
+ }
+ };
}
- private static class XSLFObjectOutputStream extends ByteArrayOutputStream {
- final PackagePart objectPart;
- final ObjectMetaData metaData;
- private XSLFObjectOutputStream(final PackagePart objectPart, final ObjectMetaData metaData) {
- super(100000);
- this.objectPart = objectPart;
- this.metaData = metaData;
- }
-
- public void close() throws IOException {
- objectPart.clear();
- try (final OutputStream os = objectPart.getOutputStream()) {
- final ByteArrayInputStream bis = new ByteArrayInputStream(this.buf, 0, size());
- final FileMagic fm = FileMagic.valueOf(this.buf);
-
- if (fm == FileMagic.OLE2) {
- try (final POIFSFileSystem poifs = new POIFSFileSystem(bis)) {
- poifs.getRoot().setStorageClsid(metaData.getClassID());
- poifs.writeFilesystem(os);
- }
- } else if (metaData.getOleEntry() == null) {
- // OLE Name hasn't been specified, pass the input through
- os.write(this.buf, 0, size());
- } else {
- try (final POIFSFileSystem poifs = new POIFSFileSystem()) {
- final ClassID clsId = metaData.getClassID();
- if (clsId != null) {
- poifs.getRoot().setStorageClsid(clsId);
- }
- poifs.createDocument(bis, metaData.getOleEntry());
-
- Ole10Native.createOleMarkerEntry(poifs);
-
- poifs.writeFilesystem(os);
+ private void addUpdatedData(PackagePart objectPart, ObjectMetaData metaData, ByteArrayOutputStream baos) throws IOException {
+ objectPart.clear();
+ try (InputStream bis = FileMagic.prepareToCheckMagic(baos.toInputStream());
+ final OutputStream os = objectPart.getOutputStream()) {
+ final FileMagic fm = FileMagic.valueOf(bis);
+
+ if (fm == FileMagic.OLE2) {
+ try (final POIFSFileSystem poifs = new POIFSFileSystem(bis)) {
+ poifs.getRoot().setStorageClsid(metaData.getClassID());
+ poifs.writeFilesystem(os);
+ }
+ } else if (metaData.getOleEntry() == null) {
+ // OLE Name hasn't been specified, pass the input through
+ baos.writeTo(os);
+ } else {
+ try (final POIFSFileSystem poifs = new POIFSFileSystem()) {
+ final ClassID clsId = metaData.getClassID();
+ if (clsId != null) {
+ poifs.getRoot().setStorageClsid(clsId);
}
+ poifs.createDocument(bis, metaData.getOleEntry());
+ Ole10Native.createOleMarkerEntry(poifs);
+ poifs.writeFilesystem(os);
}
}
}
}
-
/**
- *
- *
* @param shapeId 1-based shapeId
* @param picRel relationship to the picture data in the ooxml package
- * @return
*/
static CTGraphicalObjectFrame prototype(int shapeId, String picRel){
CTGraphicalObjectFrame frame = CTGraphicalObjectFrame.Factory.newInstance();
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java Fri May 14 00:37:50 2021
@@ -25,8 +25,6 @@ import java.awt.Insets;
import java.awt.geom.Dimension2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
@@ -35,6 +33,7 @@ import javax.imageio.ImageIO;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ooxml.util.POIXMLUnits;
@@ -127,6 +126,7 @@ public class XSLFPictureShape extends XS
* Return the data on the (internal) picture.
* For an external linked picture, will return null
*/
+ @Override
public XSLFPictureData getPictureData() {
if(_data == null){
String blipId = getBlipId();
@@ -320,16 +320,16 @@ public class XSLFPictureShape extends XS
: new Rectangle2D.Double(0,0, Units.pixelToPoints((int)dim.getWidth()), Units.pixelToPoints((int)dim.getHeight()));
PictureType pt = (previewType != null) ? previewType : PictureType.PNG;
- if (pt != PictureType.JPEG || pt != PictureType.GIF || pt != PictureType.PNG) {
+ if (pt != PictureType.JPEG && pt != PictureType.GIF && pt != PictureType.PNG) {
pt = PictureType.PNG;
}
BufferedImage thmBI = renderer.getImage(dim);
- ByteArrayOutputStream bos = new ByteArrayOutputStream(100000);
+ UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(100000);
// use extension instead of enum name, because of "jpeg"
ImageIO.write(thmBI, pt.extension.substring(1), bos);
- XSLFPictureData pngPic = sheet.getSlideShow().addPicture(new ByteArrayInputStream(bos.toByteArray()), pt);
+ XSLFPictureData pngPic = sheet.getSlideShow().addPicture(bos.toInputStream(), pt);
XSLFPictureShape shape = sheet.createPicture(pngPic);
shape.setAnchor(anc);
@@ -375,7 +375,6 @@ public class XSLFPictureShape extends XS
if(blip.isSetExtLst()) {
// TODO: check for SVG copying
CTOfficeArtExtensionList extLst = blip.getExtLst();
- //noinspection deprecation
for(CTOfficeArtExtension ext : extLst.getExtArray()){
String xpath = "declare namespace a14='"+ MS_DML_NS +"' $this//a14:imgProps/a14:imgLayer";
XmlObject[] obj = ext.selectPath(xpath);
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/DummyFormat.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/DummyFormat.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/DummyFormat.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/DummyFormat.java Fri May 14 00:37:50 2021
@@ -18,7 +18,6 @@
package org.apache.poi.xslf.util;
import java.awt.Graphics2D;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -26,14 +25,16 @@ import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
+
public class DummyFormat implements OutputFormat {
- private final ByteArrayOutputStream bos;
+ private final UnsynchronizedByteArrayOutputStream bos;
private final DummyGraphics2d dummy2d;
public DummyFormat() {
try {
- bos = new ByteArrayOutputStream();
+ bos = new UnsynchronizedByteArrayOutputStream();
dummy2d = new DummyGraphics2d(new PrintStream(bos, true, StandardCharsets.UTF_8.name()));
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
@@ -41,7 +42,7 @@ public class DummyFormat implements Outp
}
@Override
- public Graphics2D addSlide(double width, double height) throws IOException {
+ public Graphics2D addSlide(double width, double height) {
bos.reset();
return dummy2d;
}
@@ -55,7 +56,7 @@ public class DummyFormat implements Outp
}
@Override
- public void writeDocument(MFProxy proxy, File outFile) throws IOException {
+ public void writeDocument(MFProxy proxy, File outFile) {
}
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/util/PPTX2PNG.java Fri May 14 00:37:50 2021
@@ -121,6 +121,7 @@ public final class PPTX2PNG {
private PPTX2PNG() {
}
+ @SuppressWarnings("AssignmentToForLoopParameter")
private boolean parseCommandLine(String[] args) {
if (args.length == 0) {
usage(null);
@@ -403,6 +404,7 @@ public final class PPTX2PNG {
}
GenericRecord gr = proxy.getRoot();
try (GenericRecordJsonWriter fw = new GenericRecordJsonWriter(dumpfile) {
+ @Override
protected boolean printBytes(String name, Object o) {
return false;
}
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFChartSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFChartSheet.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFChartSheet.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFChartSheet.java Fri May 14 00:37:50 2021
@@ -20,13 +20,13 @@ package org.apache.poi.xssf.usermodel;
import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.namespace.QName;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.ooxml.POIXMLException;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.xmlbeans.XmlException;
@@ -95,7 +95,7 @@ public class XSSFChartSheet extends XSSF
}
private static byte[] blankWorksheet(){
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
try {
new XSSFSheet().write(out);
} catch (IOException e){
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFObjectData.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFObjectData.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFObjectData.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFObjectData.java Fri May 14 00:37:50 2021
@@ -17,7 +17,6 @@
package org.apache.poi.xssf.usermodel;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -68,9 +67,6 @@ public class XSSFObjectData extends XSSF
/**
* Prototype with the default structure of a new auto-shape.
*/
- /**
- * Prototype with the default structure of a new auto-shape.
- */
protected static CTShape prototype() {
final String drawNS = "http://schemas.microsoft.com/office/drawing/2010/main";
@@ -92,7 +88,7 @@ public class XSSFObjectData extends XSSF
cur.insertNamespace("a14", drawNS);
cur.insertAttributeWithValue("spid", "_x0000_s1");
cur.dispose();
-
+
nv.addNewCNvSpPr();
CTShapeProperties sp = shape.addNewSpPr();
@@ -113,16 +109,16 @@ public class XSSFObjectData extends XSSF
return prototype;
}
-
-
-
+
+
+
@Override
public String getOLE2ClassName() {
return getOleObject().getProgId();
}
/**
- * @return the CTOleObject associated with the shape
+ * @return the CTOleObject associated with the shape
*/
public CTOleObject getOleObject() {
if (oleObject == null) {
@@ -134,16 +130,14 @@ public class XSSFObjectData extends XSSF
}
return oleObject;
}
-
+
@Override
public byte[] getObjectData() throws IOException {
- InputStream is = getObjectPart().getInputStream();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- IOUtils.copy(is, bos);
- is.close();
- return bos.toByteArray();
+ try (InputStream is = getObjectPart().getInputStream()) {
+ return IOUtils.toByteArray(is);
+ }
}
-
+
/**
* @return the package part of the object data
*/
@@ -184,7 +178,7 @@ public class XSSFObjectData extends XSSF
public String getFileName() {
return getObjectPart().getPartName().getName();
}
-
+
protected XSSFSheet getSheet() {
return (XSSFSheet)getDrawing().getParent();
}
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java Fri May 14 00:37:50 2021
@@ -21,8 +21,6 @@ import static org.apache.poi.ooxml.POIXM
import static org.apache.poi.xssf.usermodel.helpers.XSSFPasswordHelper.setPassword;
import static org.apache.poi.xssf.usermodel.helpers.XSSFPasswordHelper.validatePassword;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -43,6 +41,7 @@ import javax.xml.namespace.QName;
import org.apache.commons.collections4.ListValuedMap;
import org.apache.commons.collections4.multimap.ArrayListValuedHashMap;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.hpsf.ClassIDPredefined;
@@ -485,7 +484,7 @@ public class XSSFWorkbook extends POIXML
protected static OPCPackage newPackage(XSSFWorkbookType workbookType) {
OPCPackage pkg = null;
try {
- pkg = OPCPackage.create(new ByteArrayOutputStream()); // NOSONAR - we do not want to close this here
+ pkg = OPCPackage.create(new UnsynchronizedByteArrayOutputStream()); // NOSONAR - we do not want to close this here
// Main part
PackagePartName corePartName = PackagingURIHelper.createPartName(XSSFRelation.WORKBOOK.getDefaultFileName());
// Create main part relationship
@@ -639,9 +638,9 @@ public class XSSFWorkbook extends POIXML
}
- try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+ try (UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream()) {
srcSheet.write(out);
- try (ByteArrayInputStream bis = new ByteArrayInputStream(out.toByteArray())) {
+ try (InputStream bis = out.toInputStream()) {
clonedSheet.read(bis);
}
} catch (IOException e){
@@ -2346,12 +2345,12 @@ public class XSSFWorkbook extends POIXML
Ole10Native ole10 = new Ole10Native(label, fileName, command, oleData);
- try (ByteArrayOutputStream bos = new ByteArrayOutputStream(oleData.length+500)) {
+ try (UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(oleData.length+500)) {
ole10.writeOut(bos);
try (POIFSFileSystem poifs = new POIFSFileSystem()) {
DirectoryNode root = poifs.getRoot();
- root.createDocument(Ole10Native.OLE10_NATIVE, new ByteArrayInputStream(bos.toByteArray()));
+ root.createDocument(Ole10Native.OLE10_NATIVE, bos.toInputStream());
root.setStorageClsid(ClassIDPredefined.OLE_V1_PACKAGE.getClassID());
// TODO: generate CombObj stream
Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java Fri May 14 00:37:50 2021
@@ -20,7 +20,6 @@ package org.apache.poi.xwpf.usermodel;
import static org.apache.poi.ooxml.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
-import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -36,6 +35,7 @@ import java.util.Map;
import javax.xml.namespace.QName;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.ooxml.POIXMLDocument;
@@ -65,19 +65,37 @@ import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff1;
-import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDocument1;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFtnEdn;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSdtBlock;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyles;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.CommentsDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.DocumentDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.EndnotesDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.FootnotesDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.NumberingDocument;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STDocProtect;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHdrFtr;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.StylesDocument;
/**
- * <p>High(ish) level class for working with .docx files.</p>
+ * High(ish) level class for working with .docx files.
* <p>
- * <p>This class tries to hide some of the complexity
+ * This class tries to hide some of the complexity
* of the underlying file format, but as it's not a
* mature and stable API yet, certain parts of the
* XML structure come through. You'll therefore almost
* certainly need to refer to the OOXML specifications
* from
* http://www.ecma-international.org/publications/standards/Ecma-376.htm
- * at some point in your use.</p>
+ * at some point in your use.
*/
@SuppressWarnings("unused")
public class XWPFDocument extends POIXMLDocument implements Document, IBody {
@@ -103,9 +121,9 @@ public class XWPFDocument extends POIXML
/**
* Keeps track on all id-values used in this document and included parts, like headers, footers, etc.
*/
- private IdentifierManager drawingIdManager = new IdentifierManager(0L, 4294967295L);
+ private final IdentifierManager drawingIdManager = new IdentifierManager(0L, 4294967295L);
- private FootnoteEndnoteIdManager footnoteIdManager = new FootnoteEndnoteIdManager(this);
+ private final FootnoteEndnoteIdManager footnoteIdManager = new FootnoteEndnoteIdManager(this);
/**
* Handles the joy of different headers/footers for different pages
@@ -137,7 +155,7 @@ public class XWPFDocument extends POIXML
protected static OPCPackage newPackage() {
OPCPackage pkg = null;
try {
- pkg = OPCPackage.create(new ByteArrayOutputStream()); // NOSONAR - we do not want to close this here
+ pkg = OPCPackage.create(new UnsynchronizedByteArrayOutputStream()); // NOSONAR - we do not want to close this here
// Main part
PackagePartName corePartName = PackagingURIHelper.createPartName(XWPFRelation.DOCUMENT.getDefaultFileName());
// Create main part relationship
@@ -306,8 +324,6 @@ public class XWPFDocument extends POIXML
/**
* returns an Iterator with paragraphs and tables
- *
- * @see IBody#getBodyElements()
*/
@Override
public List<IBodyElement> getBodyElements() {
@@ -318,17 +334,11 @@ public class XWPFDocument extends POIXML
return bodyElements.iterator();
}
- /**
- * @see IBody#getParagraphs()
- */
@Override
public List<XWPFParagraph> getParagraphs() {
return Collections.unmodifiableList(paragraphs);
}
- /**
- * @see IBody#getTables()
- */
@Override
public List<XWPFTable> getTables() {
return Collections.unmodifiableList(tables);
@@ -341,9 +351,6 @@ public class XWPFDocument extends POIXML
return Collections.unmodifiableList(charts);
}
- /**
- * @see IBody#getTableArray(int)
- */
@Override
public XWPFTable getTableArray(int pos) {
if (pos >= 0 && pos < tables.size()) {
@@ -755,8 +762,6 @@ public class XWPFDocument extends POIXML
/**
* verifies that cursor is on the right position
- *
- * @param cursor
*/
private boolean isCursorInBody(XmlCursor cursor) {
XmlCursor verify = cursor.newCursor();
@@ -818,9 +823,6 @@ public class XWPFDocument extends POIXML
/**
* Gets the index of the relation we're trying to create
- *
- * @param relation
- * @return i
*/
private int getRelationIndex(XWPFRelation relation) {
int i = 1;
@@ -843,11 +845,11 @@ public class XWPFDocument extends POIXML
paragraphs.add(p);
return p;
}
-
-
+
+
/**
* Creates an empty comments for the document if one does not already exist
- *
+ *
* @return comments
*/
public XWPFComments createComments() {
@@ -953,7 +955,6 @@ public class XWPFDocument extends POIXML
/**
* remove a BodyElement from bodyElements array list
*
- * @param pos
* @return true if removing was successfully, else return false
*/
public boolean removeBodyElement(int pos) {
@@ -977,9 +978,6 @@ public class XWPFDocument extends POIXML
/**
* copies content of a paragraph to a existing paragraph in the list paragraphs at position pos
- *
- * @param paragraph
- * @param pos
*/
public void setParagraph(XWPFParagraph paragraph, int pos) {
paragraphs.set(pos, paragraph);
@@ -1012,10 +1010,6 @@ public class XWPFDocument extends POIXML
/**
* Create an empty table with a number of rows and cols specified
- *
- * @param rows
- * @param cols
- * @return table
*/
public XWPFTable createTable(int rows, int cols) {
XWPFTable table = new XWPFTable(ctDocument.getBody().addNewTbl(), this, rows, cols);
@@ -1045,9 +1039,6 @@ public class XWPFDocument extends POIXML
/**
* Replace content of table in array tables at position pos with a
- *
- * @param pos
- * @param table
*/
public void setTable(int pos, XWPFTable table) {
tables.set(pos, table);
@@ -1289,7 +1280,6 @@ public class XWPFDocument extends POIXML
/**
* Validates the existing password
*
- * @param password
* @return true, only if password was set and equals, false otherwise
*/
public boolean validateProtectionPassword(String password) {
@@ -1324,7 +1314,7 @@ public class XWPFDocument extends POIXML
/**
* Check if revision tracking is turned on.
*
- * @return <code>true</code> if revision tracking is turned on
+ * @return {@code true} if revision tracking is turned on
*/
public boolean isTrackRevisions() {
return settings.isTrackRevisions();
@@ -1333,7 +1323,7 @@ public class XWPFDocument extends POIXML
/**
* Enable or disable revision tracking.
*
- * @param enable <code>true</code> to turn on revision tracking, <code>false</code> to turn off revision tracking
+ * @param enable {@code true} to turn on revision tracking, {@code false} to turn off revision tracking
*/
public void setTrackRevisions(boolean enable) {
settings.setTrackRevisions(enable);
@@ -1394,9 +1384,6 @@ public class XWPFDocument extends POIXML
/**
* inserts an existing XWPFTable to the arrays bodyElements and tables
- *
- * @param pos
- * @param table
*/
@Override
public void insertTable(int pos, XWPFTable table) {
@@ -1506,7 +1493,6 @@ public class XWPFDocument extends POIXML
/**
* get the next free ImageNumber
*
- * @param format
* @return the next free ImageNumber
* @throws InvalidFormatException If the format of the picture is not known.
*/
@@ -1525,7 +1511,6 @@ public class XWPFDocument extends POIXML
/**
* returns the PictureData by blipID
*
- * @param blipID
* @return XWPFPictureData of a specificID
*/
public XWPFPictureData getPictureDataByID(String blipID) {
@@ -1567,9 +1552,7 @@ public class XWPFDocument extends POIXML
/**
* get a table by its CTTbl-Object
*
- * @param ctTbl
* @return a table by its CTTbl-Object or null
- * @see IBody#getTable(CTTbl)
*/
@Override
public XWPFTable getTable(CTTbl ctTbl) {
@@ -1591,8 +1574,6 @@ public class XWPFDocument extends POIXML
/**
* Returns the paragraph that of position pos
- *
- * @see IBody#getParagraphArray(int)
*/
@Override
public XWPFParagraph getParagraphArray(int pos) {
@@ -1606,8 +1587,6 @@ public class XWPFDocument extends POIXML
* returns the Part, to which the body belongs, which you need for adding relationship to other parts
* Actually it is needed of the class XWPFTableCell. Because you have to know to which part the tableCell
* belongs.
- *
- * @see IBody#getPart()
*/
@Override
public POIXMLDocumentPart getPart() {
@@ -1618,8 +1597,6 @@ public class XWPFDocument extends POIXML
/**
* get the PartType of the body, for example
* DOCUMENT, HEADER, FOOTER, FOOTNOTE,
- *
- * @see IBody#getPartType()
*/
@Override
public BodyType getPartType() {
@@ -1628,8 +1605,6 @@ public class XWPFDocument extends POIXML
/**
* get the TableCell which belongs to the TableCell
- *
- * @param cell
*/
@Override
public XWPFTableCell getTableCell(CTTc cell) {
@@ -1668,8 +1643,6 @@ public class XWPFDocument extends POIXML
* no need to read MS-Word file and modify charts
*
* @return This method return object of XWPFChart Object with default height and width
- * @throws InvalidFormatException
- * @throws IOException
* @since POI 4.0.0
*/
public XWPFChart createChart() throws InvalidFormatException, IOException {
@@ -1683,8 +1656,6 @@ public class XWPFDocument extends POIXML
* @param width width of chart in document
* @param height height of chart in document
* @return This method return object of XWPFChart
- * @throws InvalidFormatException
- * @throws IOException
* @since POI 4.0.0
*/
public XWPFChart createChart(int width, int height) throws InvalidFormatException, IOException {
@@ -1697,8 +1668,6 @@ public class XWPFDocument extends POIXML
* @param width in EMU.
* @param height in EMU.
* @return the new chart.
- * @throws InvalidFormatException
- * @throws IOException
* @since POI 4.1.2
*/
public XWPFChart createChart(XWPFRun run, int width, int height) throws InvalidFormatException, IOException {
@@ -1729,8 +1698,7 @@ public class XWPFDocument extends POIXML
public XWPFFootnote createFootnote() {
XWPFFootnotes footnotes = this.createFootnotes();
- XWPFFootnote footnote = footnotes.createFootnote();
- return footnote;
+ return footnotes.createFootnote();
}
/**
@@ -1757,8 +1725,7 @@ public class XWPFDocument extends POIXML
public XWPFEndnote createEndnote() {
XWPFEndnotes endnotes = this.createEndnotes();
- XWPFEndnote endnote = endnotes.createEndnote();
- return endnote;
+ return endnotes.createEndnote();
}
Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLDocument.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLDocument.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLDocument.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/ooxml/TestPOIXMLDocument.java Fri May 14 00:37:50 2021
@@ -17,6 +17,7 @@
package org.apache.poi.ooxml;
+import static org.apache.commons.io.output.NullOutputStream.NULL_OUTPUT_STREAM;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -25,7 +26,6 @@ import static org.junit.jupiter.api.Asse
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
import java.io.ByteArrayInputStream;
import java.io.File;
@@ -46,7 +46,6 @@ import org.apache.poi.openxml4j.opc.OPCP
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationshipTypes;
import org.apache.poi.util.IOUtils;
-import org.apache.poi.util.NullOutputStream;
import org.apache.poi.util.TempFile;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xssf.usermodel.XSSFRelation;
@@ -142,7 +141,7 @@ public final class TestPOIXMLDocument {
// Should not be able to write a document that has been closed
doc.close();
- IOException e2 = assertThrows(IOException.class, () -> doc.write(new NullOutputStream()),
+ IOException e2 = assertThrows(IOException.class, () -> doc.write(NULL_OUTPUT_STREAM),
"Should not be able to write a document that has been closed.");
assertEquals("Cannot write data, document seems to have been closed already", e2.getMessage());
@@ -292,7 +291,7 @@ public final class TestPOIXMLDocument {
XMLSlideShow ppt = new XMLSlideShow(is)) {
POIXMLDocumentPart doc = ppt.getSlides().get(12).getRelationById("rId3");
assertNotNull(doc);
- assertEquals(POIXMLDocumentPart.class, doc.getClass());
+ assertSame(POIXMLDocumentPart.class, doc.getClass());
}
}
@@ -334,6 +333,7 @@ public final class TestPOIXMLDocument {
private static class UncaughtHandler implements UncaughtExceptionHandler {
Throwable e;
+ @Override
public synchronized void uncaughtException(Thread t, Throwable e) {
this.e = e;
}
Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/OpenXML4JTestDataSamples.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/OpenXML4JTestDataSamples.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/OpenXML4JTestDataSamples.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/OpenXML4JTestDataSamples.java Fri May 14 00:37:50 2021
@@ -25,7 +25,7 @@ import java.io.InputStream;
import java.io.IOException;
/**
- * Centralises logic for finding/opening sample files for ooxml4j unit tests
+ * Centralises logic for finding/opening sample files for ooxml4j unit tests
*/
public final class OpenXML4JTestDataSamples {
private static final POIDataSamples _samples = POIDataSamples.getOpenXML4JInstance();
@@ -40,19 +40,13 @@ public final class OpenXML4JTestDataSamp
public static String getSampleFileName(String sampleFileName) {
return getSampleFile(sampleFileName).getAbsolutePath();
}
-
+
public static File getSampleFile(String sampleFileName) {
return _samples.getFile(sampleFileName);
}
-
- public static File getOutputFile(String outputFileName) throws IOException {
- String suffix = outputFileName.substring(outputFileName.lastIndexOf('.'));
- return TempFile.createTempFile(outputFileName, suffix);
- }
-
- public static InputStream openComplianceSampleStream(String sampleFileName) {
- return _samples.openResourceAsStream(sampleFileName);
+ public static File getOutputFile(String outputFileName) throws IOException {
+ int idx = outputFileName.lastIndexOf('.');
+ return TempFile.createTempFile(outputFileName.substring(0,idx), outputFileName.substring(idx));
}
-
}
Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackage.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackage.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackage.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackage.java Fri May 14 00:37:50 2021
@@ -33,7 +33,6 @@ import static org.junit.jupiter.api.Asse
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -58,6 +57,8 @@ import com.google.common.io.Files;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.apache.commons.io.output.CountingOutputStream;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.EncryptedDocumentException;
@@ -217,7 +218,7 @@ public final class TestPackage {
*/
@Test
void createPackageWithCoreDocument() throws IOException, InvalidFormatException, URISyntaxException, SAXException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
try (OPCPackage pkg = OPCPackage.create(baos)) {
// Add a core document
@@ -675,7 +676,7 @@ public final class TestPackage {
@Test
void zipBombCreateAndHandle()
throws IOException, EncryptedDocumentException {
- ByteArrayOutputStream bos = new ByteArrayOutputStream(2500000);
+ UnsynchronizedByteArrayOutputStream bos = new UnsynchronizedByteArrayOutputStream(2500000);
try (ZipFile zipFile = ZipHelper.openZipFile(getSampleFile("sample.xlsx"));
ZipArchiveOutputStream append = new ZipArchiveOutputStream(bos)) {
@@ -693,21 +694,19 @@ public final class TestPackage {
append.putArchiveEntry(eOut);
if (!eOut.isDirectory()) {
try (InputStream is = zipFile.getInputStream(eIn)) {
- if (eOut.getName().equals("[Content_Types].xml")) {
- ByteArrayOutputStream bos2 = new ByteArrayOutputStream();
- IOUtils.copy(is, bos2);
- long size = bos2.size() - "</Types>".length();
- append.write(bos2.toByteArray(), 0, (int) size);
+ if ("[Content_Types].xml".equals(eOut.getName())) {
+ byte[] suffix = "</Types>".getBytes(StandardCharsets.UTF_8);
+ CountingOutputStream cos = new CountingOutputStream(append);
+ IOUtils.copy(is, cos, eOut.getSize() - suffix.length);
+
byte[] spam = new byte[0x7FFF];
Arrays.fill(spam, (byte) ' ');
// 0x7FFF0000 is the maximum for 32-bit zips, but less still works
- while (size < 0x7FFF00) {
- append.write(spam);
- size += spam.length;
+ while (cos.getByteCount() < 0x7FFF00) {
+ cos.write(spam);
}
- append.write("</Types>".getBytes(StandardCharsets.UTF_8));
- size += 8;
- eOut.setSize(size);
+ cos.write(suffix);
+ eOut.setSize(cos.getByteCount());
} else {
IOUtils.copy(is, append);
}
@@ -717,10 +716,7 @@ public final class TestPackage {
}
}
- IOException ex = assertThrows(
- IOException.class,
- () -> WorkbookFactory.create(new ByteArrayInputStream(bos.toByteArray()))
- );
+ IOException ex = assertThrows(IOException.class, () -> WorkbookFactory.create(bos.toInputStream()));
assertTrue(ex.getMessage().contains("Zip bomb detected!"));
}
Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestPackageCoreProperties.java Fri May 14 00:37:50 2021
@@ -17,8 +17,17 @@
package org.apache.poi.openxml4j.opc;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
+import static org.apache.poi.openxml4j.OpenXML4JTestDataSamples.getSampleFileName;
+import static org.apache.poi.openxml4j.OpenXML4JTestDataSamples.openSampleStream;
+import static org.apache.poi.openxml4j.opc.PackageRelationshipTypes.CORE_DOCUMENT;
+import static org.apache.poi.openxml4j.opc.PackageRelationshipTypes.CORE_PROPERTIES;
+import static org.apache.poi.openxml4j.opc.PackageRelationshipTypes.EXTENDED_PROPERTIES;
+import static org.apache.poi.openxml4j.opc.TestContentType.isOldXercesActive;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
import java.io.File;
import java.io.InputStream;
import java.text.ParsePosition;
@@ -27,6 +36,7 @@ import java.util.Date;
import java.util.Locale;
import java.util.Optional;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.POIDataSamples;
import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
@@ -36,9 +46,6 @@ import org.apache.poi.xssf.usermodel.XSS
import org.junit.jupiter.api.Test;
import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperty;
-import static org.apache.poi.openxml4j.opc.TestContentType.isOldXercesActive;
-import static org.junit.jupiter.api.Assertions.*;
-
public final class TestPackageCoreProperties {
/**
* Test package core properties getters.
@@ -47,7 +54,7 @@ public final class TestPackageCoreProper
void testGetProperties() throws Exception {
// Open the package
@SuppressWarnings("resource")
- OPCPackage p = OPCPackage.open(OpenXML4JTestDataSamples.openSampleStream("TestPackageCoreProperiesGetters.docx"));
+ OPCPackage p = OPCPackage.open(openSampleStream("TestPackageCoreProperiesGetters.docx"));
compareProperties(p);
p.revert();
}
@@ -57,7 +64,7 @@ public final class TestPackageCoreProper
*/
@Test
void testSetProperties() throws Exception {
- String inputPath = OpenXML4JTestDataSamples.getSampleFileName("TestPackageCoreProperiesSetters.docx");
+ String inputPath = getSampleFileName("TestPackageCoreProperiesSetters.docx");
File outputFile = OpenXML4JTestDataSamples.getOutputFile("TestPackageCoreProperiesSettersOUTPUT.docx");
@@ -75,28 +82,28 @@ public final class TestPackageCoreProper
//test various date formats
props.setCreatedProperty("2007-05-12T08:00:00Z");
- assertEquals(dateToInsert, props.getCreatedProperty().get());
+ assertEquals(dateToInsert, props.getCreatedProperty().orElse(null));
props.setCreatedProperty("2007-05-12T08:00:00"); //no Z, assume Z
- assertEquals(dateToInsert, props.getCreatedProperty().get());
+ assertEquals(dateToInsert, props.getCreatedProperty().orElse(null));
props.setCreatedProperty("2007-05-12T08:00:00.123Z");//millis
- assertEquals(msdf.parse("2007-05-12T08:00:00.123Z"), props.getCreatedProperty().get());
+ assertEquals(msdf.parse("2007-05-12T08:00:00.123Z"), props.getCreatedProperty().orElse(null));
props.setCreatedProperty("2007-05-12T10:00:00+0200");
- assertEquals(dateToInsert, props.getCreatedProperty().get());
+ assertEquals(dateToInsert, props.getCreatedProperty().orElse(null));
props.setCreatedProperty("2007-05-12T10:00:00+02:00");//colon in tz
- assertEquals(dateToInsert, props.getCreatedProperty().get());
+ assertEquals(dateToInsert, props.getCreatedProperty().orElse(null));
props.setCreatedProperty("2007-05-12T06:00:00-0200");
- assertEquals(dateToInsert, props.getCreatedProperty().get());
+ assertEquals(dateToInsert, props.getCreatedProperty().orElse(null));
props.setCreatedProperty("2015-07-27");
- assertEquals(msdf.parse("2015-07-27T00:00:00.000Z"), props.getCreatedProperty().get());
+ assertEquals(msdf.parse("2015-07-27T00:00:00.000Z"), props.getCreatedProperty().orElse(null));
props.setCreatedProperty("2007-05-12T10:00:00.123+0200");
- assertEquals(msdf.parse("2007-05-12T08:00:00.123Z"), props.getCreatedProperty().get());
+ assertEquals(msdf.parse("2007-05-12T08:00:00.123Z"), props.getCreatedProperty().orElse(null));
props.setCategoryProperty("MyCategory");
props.setContentStatusProperty("MyContentStatus");
@@ -122,7 +129,7 @@ public final class TestPackageCoreProper
OPCPackage p2 = OPCPackage.open(outputFile.getAbsolutePath(), PackageAccess.READ);
compareProperties(p2);
p2.revert();
- outputFile.delete();
+ assertTrue(outputFile.delete());
}
private void compareProperties(OPCPackage p) throws InvalidFormatException {
@@ -132,22 +139,22 @@ public final class TestPackageCoreProper
// Gets the core properties
PackageProperties props = p.getPackageProperties();
- assertEquals("MyCategory", props.getCategoryProperty().get());
- assertEquals("MyContentStatus", props.getContentStatusProperty().get());
- assertEquals("MyContentType", props.getContentTypeProperty().get());
- assertEquals(expectedDate, props.getCreatedProperty().get());
- assertEquals("MyCreator", props.getCreatorProperty().get());
- assertEquals("MyDescription", props.getDescriptionProperty().get());
- assertEquals("MyIdentifier", props.getIdentifierProperty().get());
- assertEquals("MyKeywords", props.getKeywordsProperty().get());
- assertEquals("MyLanguage", props.getLanguageProperty().get());
- assertEquals("Julien Chable", props.getLastModifiedByProperty().get());
- assertEquals(expectedDate, props.getLastPrintedProperty().get());
- assertEquals(expectedDate, props.getModifiedProperty().get());
- assertEquals("2", props.getRevisionProperty().get());
- assertEquals("MySubject", props.getSubjectProperty().get());
- assertEquals("MyTitle", props.getTitleProperty().get());
- assertEquals("2", props.getVersionProperty().get());
+ assertEquals("MyCategory", props.getCategoryProperty().orElse(null));
+ assertEquals("MyContentStatus", props.getContentStatusProperty().orElse(null));
+ assertEquals("MyContentType", props.getContentTypeProperty().orElse(null));
+ assertEquals(expectedDate, props.getCreatedProperty().orElse(null));
+ assertEquals("MyCreator", props.getCreatorProperty().orElse(null));
+ assertEquals("MyDescription", props.getDescriptionProperty().orElse(null));
+ assertEquals("MyIdentifier", props.getIdentifierProperty().orElse(null));
+ assertEquals("MyKeywords", props.getKeywordsProperty().orElse(null));
+ assertEquals("MyLanguage", props.getLanguageProperty().orElse(null));
+ assertEquals("Julien Chable", props.getLastModifiedByProperty().orElse(null));
+ assertEquals(expectedDate, props.getLastPrintedProperty().orElse(null));
+ assertEquals(expectedDate, props.getModifiedProperty().orElse(null));
+ assertEquals("2", props.getRevisionProperty().orElse(null));
+ assertEquals("MySubject", props.getSubjectProperty().orElse(null));
+ assertEquals("MyTitle", props.getTitleProperty().orElse(null));
+ assertEquals("2", props.getVersionProperty().orElse(null));
}
@Test
@@ -157,90 +164,92 @@ public final class TestPackageCoreProper
String strDate = "2007-05-12T08:00:00Z";
Date date = df.parse(strDate);
- OPCPackage pkg = new ZipPackage();
- PackagePropertiesPart props = (PackagePropertiesPart)pkg.getPackageProperties();
+ try (OPCPackage pkg = new ZipPackage()) {
+ PackagePropertiesPart props = (PackagePropertiesPart) pkg.getPackageProperties();
- // created
- assertEquals("", props.getCreatedPropertyString());
- assertFalse(props.getCreatedProperty().isPresent());
- props.setCreatedProperty((String)null);
- assertEquals("", props.getCreatedPropertyString());
- assertFalse(props.getCreatedProperty().isPresent());
- props.setCreatedProperty(Optional.empty());
- assertEquals("", props.getCreatedPropertyString());
- assertFalse(props.getCreatedProperty().isPresent());
- props.setCreatedProperty(Optional.of(date));
- assertEquals(strDate, props.getCreatedPropertyString());
- assertEquals(date, props.getCreatedProperty().get());
- props.setCreatedProperty(strDate);
- assertEquals(strDate, props.getCreatedPropertyString());
- assertEquals(date, props.getCreatedProperty().get());
-
- // lastPrinted
- assertEquals("", props.getLastPrintedPropertyString());
- assertFalse(props.getLastPrintedProperty().isPresent());
- props.setLastPrintedProperty((String)null);
- assertEquals("", props.getLastPrintedPropertyString());
- assertFalse(props.getLastPrintedProperty().isPresent());
- props.setLastPrintedProperty(Optional.empty());
- assertEquals("", props.getLastPrintedPropertyString());
- assertFalse(props.getLastPrintedProperty().isPresent());
- props.setLastPrintedProperty(Optional.of(date));
- assertEquals(strDate, props.getLastPrintedPropertyString());
- assertEquals(date, props.getLastPrintedProperty().get());
- props.setLastPrintedProperty(strDate);
- assertEquals(strDate, props.getLastPrintedPropertyString());
- assertEquals(date, props.getLastPrintedProperty().get());
-
- // modified
- assertFalse(props.getModifiedProperty().isPresent());
- props.setModifiedProperty((String)null);
- assertFalse(props.getModifiedProperty().isPresent());
- props.setModifiedProperty(Optional.empty());
- assertFalse(props.getModifiedProperty().isPresent());
- props.setModifiedProperty(Optional.of(date));
- assertEquals(strDate, props.getModifiedPropertyString());
- assertEquals(date, props.getModifiedProperty().get());
- props.setModifiedProperty(strDate);
- assertEquals(strDate, props.getModifiedPropertyString());
- assertEquals(date, props.getModifiedProperty().get());
-
- // Tidy
- pkg.close();
+ // created
+ assertEquals("", props.getCreatedPropertyString());
+ assertFalse(props.getCreatedProperty().isPresent());
+ props.setCreatedProperty((String) null);
+ assertEquals("", props.getCreatedPropertyString());
+ assertFalse(props.getCreatedProperty().isPresent());
+ props.setCreatedProperty(Optional.empty());
+ assertEquals("", props.getCreatedPropertyString());
+ assertFalse(props.getCreatedProperty().isPresent());
+ props.setCreatedProperty(Optional.of(date));
+ assertEquals(strDate, props.getCreatedPropertyString());
+ assertEquals(date, props.getCreatedProperty().get());
+ props.setCreatedProperty(strDate);
+ assertEquals(strDate, props.getCreatedPropertyString());
+ assertEquals(date, props.getCreatedProperty().get());
+
+ // lastPrinted
+ assertEquals("", props.getLastPrintedPropertyString());
+ assertFalse(props.getLastPrintedProperty().isPresent());
+ props.setLastPrintedProperty((String) null);
+ assertEquals("", props.getLastPrintedPropertyString());
+ assertFalse(props.getLastPrintedProperty().isPresent());
+ props.setLastPrintedProperty(Optional.empty());
+ assertEquals("", props.getLastPrintedPropertyString());
+ assertFalse(props.getLastPrintedProperty().isPresent());
+ props.setLastPrintedProperty(Optional.of(date));
+ assertEquals(strDate, props.getLastPrintedPropertyString());
+ assertEquals(date, props.getLastPrintedProperty().get());
+ props.setLastPrintedProperty(strDate);
+ assertEquals(strDate, props.getLastPrintedPropertyString());
+ assertEquals(date, props.getLastPrintedProperty().get());
+
+ // modified
+ assertFalse(props.getModifiedProperty().isPresent());
+ props.setModifiedProperty((String) null);
+ assertFalse(props.getModifiedProperty().isPresent());
+ props.setModifiedProperty(Optional.empty());
+ assertFalse(props.getModifiedProperty().isPresent());
+ props.setModifiedProperty(Optional.of(date));
+ assertEquals(strDate, props.getModifiedPropertyString());
+ assertEquals(date, props.getModifiedProperty().get());
+ props.setModifiedProperty(strDate);
+ assertEquals(strDate, props.getModifiedPropertyString());
+ assertEquals(date, props.getModifiedProperty().get());
+ }
}
@Test
void testGetPropertiesLO() throws Exception {
+ UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
// Open the package
- OPCPackage pkg1 = OPCPackage.open(OpenXML4JTestDataSamples.openSampleStream("51444.xlsx"));
- PackageProperties props1 = pkg1.getPackageProperties();
- assertFalse(props1.getTitleProperty().isPresent());
- props1.setTitleProperty("Bug 51444 fixed");
- ByteArrayOutputStream out = new ByteArrayOutputStream();
- pkg1.save(out);
- out.close();
- pkg1.close();
-
- OPCPackage pkg2 = OPCPackage.open(new ByteArrayInputStream(out.toByteArray()));
- PackageProperties props2 = pkg2.getPackageProperties();
- props2.setTitleProperty("Bug 51444 fixed");
- pkg2.close();
+ try (OPCPackage pkg1 = OPCPackage.open(openSampleStream("51444.xlsx"))) {
+ PackageProperties props1 = pkg1.getPackageProperties();
+ assertFalse(props1.getTitleProperty().isPresent());
+ props1.setTitleProperty("Bug 51444 fixed");
+ pkg1.save(out);
+ }
+
+ try (OPCPackage pkg2 = OPCPackage.open(out.toInputStream())) {
+ PackageProperties props2 = pkg2.getPackageProperties();
+ props2.setTitleProperty("Bug 51444 fixed");
+ }
}
@Test
void testEntitiesInCoreProps_56164() throws Exception {
- try (InputStream is = OpenXML4JTestDataSamples.openSampleStream("CorePropertiesHasEntities.ooxml");
- OPCPackage p = OPCPackage.open(is)) {
+ try (InputStream is = openSampleStream("CorePropertiesHasEntities.ooxml");
+ OPCPackage p = OPCPackage.open(is)) {
// Should have 3 root relationships
boolean foundDocRel = false, foundCorePropRel = false, foundExtPropRel = false;
for (PackageRelationship pr : p.getRelationships()) {
- if (pr.getRelationshipType().equals(PackageRelationshipTypes.CORE_DOCUMENT))
- foundDocRel = true;
- if (pr.getRelationshipType().equals(PackageRelationshipTypes.CORE_PROPERTIES))
- foundCorePropRel = true;
- if (pr.getRelationshipType().equals(PackageRelationshipTypes.EXTENDED_PROPERTIES))
- foundExtPropRel = true;
+ switch (pr.getRelationshipType()) {
+ case CORE_DOCUMENT:
+ foundDocRel = true;
+ break;
+ case CORE_PROPERTIES:
+ foundCorePropRel = true;
+ break;
+ case EXTENDED_PROPERTIES:
+ foundExtPropRel = true;
+ break;
+ }
}
assertTrue(foundDocRel, "Core Doc Relationship not found in " + p.getRelationships());
assertTrue(foundCorePropRel, "Core Props Relationship not found in " + p.getRelationships());
@@ -257,67 +266,68 @@ public final class TestPackageCoreProper
@Test
void testListOfCustomProperties() throws Exception {
File inp = POIDataSamples.getSpreadSheetInstance().getFile("ExcelWithAttachments.xlsm");
- OPCPackage pkg = OPCPackage.open(inp, PackageAccess.READ);
- XSSFWorkbook wb = new XSSFWorkbook(pkg);
+ try (OPCPackage pkg = OPCPackage.open(inp, PackageAccess.READ);
+ XSSFWorkbook wb = new XSSFWorkbook(pkg)) {
- assertNotNull(wb.getProperties());
- assertNotNull(wb.getProperties().getCustomProperties());
+ assertNotNull(wb.getProperties());
+ assertNotNull(wb.getProperties().getCustomProperties());
- for (CTProperty prop : wb.getProperties().getCustomProperties().getUnderlyingProperties().getPropertyList()) {
- assertNotNull(prop);
+ for (CTProperty prop : wb.getProperties().getCustomProperties().getUnderlyingProperties().getPropertyList()) {
+ assertNotNull(prop);
+ }
}
-
- wb.close();
- pkg.close();
}
@Test
void testAlternateCorePropertyTimezones() throws Exception {
- InputStream is = OpenXML4JTestDataSamples.openSampleStream("OPCCompliance_CoreProperties_AlternateTimezones.docx");
- OPCPackage pkg = OPCPackage.open(is);
- PackagePropertiesPart props = (PackagePropertiesPart)pkg.getPackageProperties();
- is.close();
-
// We need predictable dates for testing!
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ROOT);
df.setTimeZone(LocaleUtil.TIMEZONE_UTC);
- // Check text properties first
- assertEquals("Lorem Ipsum", props.getTitleProperty().get());
- assertEquals("Apache POI", props.getCreatorProperty().get());
-
- // Created at has a +3 timezone and milliseconds
- // 2006-10-13T18:06:00.123+03:00
- // = 2006-10-13T15:06:00.123+00:00
- assertEquals("2006-10-13T15:06:00Z", props.getCreatedPropertyString());
- assertEquals("2006-10-13T15:06:00.123Z", df.format(props.getCreatedProperty().get()));
-
- // Modified at has a -13 timezone but no milliseconds
- // 2007-06-20T07:59:00-13:00
- // = 2007-06-20T20:59:00-13:00
- assertEquals("2007-06-20T20:59:00Z", props.getModifiedPropertyString());
- assertEquals("2007-06-20T20:59:00.000Z", df.format(props.getModifiedProperty().get()));
-
-
- // Ensure we can change them with other timezones and still read back OK
- props.setCreatedProperty("2007-06-20T20:57:00+13:00");
- props.setModifiedProperty("2007-06-20T20:59:00.123-13:00");
-
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- pkg.save(baos);
- pkg = OPCPackage.open(new ByteArrayInputStream(baos.toByteArray()));
-
- // Check text properties first - should be unchanged
- assertEquals("Lorem Ipsum", props.getTitleProperty().get());
- assertEquals("Apache POI", props.getCreatorProperty().get());
-
- // Check the updated times
- // 2007-06-20T20:57:00+13:00
- // = 2007-06-20T07:57:00Z
- assertEquals("2007-06-20T07:57:00.000Z", df.format(props.getCreatedProperty().get()));
-
- // 2007-06-20T20:59:00.123-13:00
- // = 2007-06-21T09:59:00.123Z
- assertEquals("2007-06-21T09:59:00.123Z", df.format(props.getModifiedProperty().get()));
+ UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
+ try (InputStream is = openSampleStream("OPCCompliance_CoreProperties_AlternateTimezones.docx");
+ OPCPackage pkg1 = OPCPackage.open(is)) {
+ PackagePropertiesPart props1 = (PackagePropertiesPart) pkg1.getPackageProperties();
+
+ // Check text properties first
+ assertEquals("Lorem Ipsum", props1.getTitleProperty().orElse(null));
+ assertEquals("Apache POI", props1.getCreatorProperty().orElse(null));
+
+ // Created at has a +3 timezone and milliseconds
+ // 2006-10-13T18:06:00.123+03:00
+ // = 2006-10-13T15:06:00.123+00:00
+ assertEquals("2006-10-13T15:06:00Z", props1.getCreatedPropertyString());
+ assertEquals("2006-10-13T15:06:00.123Z", df.format(props1.getCreatedProperty().orElse(null)));
+
+ // Modified at has a -13 timezone but no milliseconds
+ // 2007-06-20T07:59:00-13:00
+ // = 2007-06-20T20:59:00-13:00
+ assertEquals("2007-06-20T20:59:00Z", props1.getModifiedPropertyString());
+ assertEquals("2007-06-20T20:59:00.000Z", df.format(props1.getModifiedProperty().orElse(null)));
+
+
+ // Ensure we can change them with other timezones and still read back OK
+ props1.setCreatedProperty("2007-06-20T20:57:00+13:00");
+ props1.setModifiedProperty("2007-06-20T20:59:00.123-13:00");
+
+ pkg1.save(baos);
+ }
+ try (OPCPackage pkg2 = OPCPackage.open(baos.toInputStream())) {
+ PackagePropertiesPart props2 = (PackagePropertiesPart) pkg2.getPackageProperties();
+
+ // Check text properties first - should be unchanged
+ assertEquals("Lorem Ipsum", props2.getTitleProperty().orElse(null));
+ assertEquals("Apache POI", props2.getCreatorProperty().orElse(null));
+
+ // Check the updated times
+ // 2007-06-20T20:57:00+13:00
+ // = 2007-06-20T07:57:00Z
+ assertEquals("2007-06-20T07:57:00.000Z", df.format(props2.getCreatedProperty().orElse(null)));
+
+ // 2007-06-20T20:59:00.123-13:00
+ // = 2007-06-21T09:59:00.123Z
+ // CoreProperties are stored as xs:dateTime -> no milliseconds are saved!
+ assertEquals("2007-06-21T09:59:00.000Z", df.format(props2.getModifiedProperty().orElse(null)));
+ }
}
}
Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestRelationships.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestRelationships.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestRelationships.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/TestRelationships.java Fri May 14 00:37:50 2021
@@ -24,12 +24,11 @@ import static org.junit.jupiter.api.Asse
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URI;
import java.util.regex.Pattern;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.poi.openxml4j.OpenXML4JTestDataSamples;
@@ -198,18 +197,16 @@ class TestRelationships {
// Write out and re-load
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
pkg.save(baos);
// use revert to not re-write the input file
pkg.revert();
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- pkg = OPCPackage.open(bais);
+ pkg = OPCPackage.open(baos.toInputStream());
// Check again
- sheet = pkg.getPart(
- PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
+ sheet = pkg.getPart(PackagingURIHelper.createPartName(SHEET_WITH_COMMENTS));
assertEquals(6, sheet.getRelationshipsByType(HYPERLINK_REL_TYPE).size());
@@ -228,7 +225,7 @@ class TestRelationships {
@Test
void testCreateRelationsFromScratch() throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
OPCPackage pkg = OPCPackage.create(baos);
PackagePart partA =
@@ -255,8 +252,7 @@ class TestRelationships {
// Save, and re-load
pkg.close();
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- pkg = OPCPackage.open(bais);
+ pkg = OPCPackage.open(baos.toInputStream());
partA = pkg.getPart(PackagingURIHelper.createPartName("/partA"));
partB = pkg.getPart(PackagingURIHelper.createPartName("/partB"));
@@ -297,20 +293,17 @@ class TestRelationships {
@Test
void testTargetWithSpecialChars() throws Exception{
- OPCPackage pkg;
-
String filepath = OpenXML4JTestDataSamples.getSampleFileName("50154.xlsx");
- pkg = OPCPackage.open(filepath);
+ OPCPackage pkg = OPCPackage.open(filepath);
assert_50154(pkg);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
pkg.save(baos);
// use revert to not re-write the input file
pkg.revert();
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- pkg = OPCPackage.open(bais);
+ pkg = OPCPackage.open(baos.toInputStream());
assert_50154(pkg);
}
@@ -359,7 +352,7 @@ class TestRelationships {
@Test
void testSelfRelations_bug51187() throws Exception {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
PackageRelationship rel1;
try (OPCPackage pkg = OPCPackage.create(baos)) {
@@ -374,8 +367,7 @@ class TestRelationships {
// Save, and re-load
}
- ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
- try (OPCPackage pkg = OPCPackage.open(bais)) {
+ try (OPCPackage pkg = OPCPackage.open(baos.toInputStream())) {
PackagePart partA = pkg.getPart(PackagingURIHelper.createPartName("/partA"));
@@ -406,11 +398,10 @@ class TestRelationships {
assertEquals("mailto:nobody@nowhere.uk%C2%A0", targetUri.toASCIIString());
assertEquals("nobody@nowhere.uk\u00A0", targetUri.getSchemeSpecificPart());
- ByteArrayOutputStream out = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream out = new UnsynchronizedByteArrayOutputStream();
pkg1.save(out);
- out.close();
- try (OPCPackage pkg2 = OPCPackage.open(new ByteArrayInputStream(out.toByteArray()))) {
+ try (OPCPackage pkg2 = OPCPackage.open(out.toInputStream())) {
sheetRels = pkg2.getPartsByName(Pattern.compile("/xl/worksheets/sheet1.xml")).get(0).getRelationships();
assertEquals(3, sheetRels.size());
rId1 = sheetRels.getRelationshipByID("rId1");
Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/ZipFileAssert.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/ZipFileAssert.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/ZipFileAssert.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/ZipFileAssert.java Fri May 14 00:37:50 2021
@@ -24,7 +24,6 @@ import static org.junit.jupiter.api.Asse
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -33,6 +32,7 @@ import java.util.TreeMap;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.util.IOUtils;
import org.junit.jupiter.api.Assertions;
import org.xmlunit.builder.DiffBuilder;
@@ -52,15 +52,15 @@ public final class ZipFileAssert {
}
private static void equals(
- TreeMap<String, ByteArrayOutputStream> file1,
- TreeMap<String, ByteArrayOutputStream> file2) {
+ TreeMap<String, UnsynchronizedByteArrayOutputStream> file1,
+ TreeMap<String, UnsynchronizedByteArrayOutputStream> file2) {
Set<String> listFile1 = file1.keySet();
Assertions.assertEquals(listFile1.size(), file2.keySet().size(), "not the same number of files in zip:");
for (String fileName : listFile1) {
// extract the contents for both
- ByteArrayOutputStream contain1 = file1.get(fileName);
- ByteArrayOutputStream contain2 = file2.get(fileName);
+ UnsynchronizedByteArrayOutputStream contain1 = file1.get(fileName);
+ UnsynchronizedByteArrayOutputStream contain2 = file2.get(fileName);
assertNotNull(contain2, fileName + " not found in 2nd zip");
// no need to check for contain1. The key come from it
@@ -84,11 +84,11 @@ public final class ZipFileAssert {
}
}
- private static TreeMap<String, ByteArrayOutputStream> decompress(
+ private static TreeMap<String, UnsynchronizedByteArrayOutputStream> decompress(
File filename) throws IOException {
// store the zip content in memory
// let s assume it is not Go ;-)
- TreeMap<String, ByteArrayOutputStream> zipContent = new TreeMap<>();
+ TreeMap<String, UnsynchronizedByteArrayOutputStream> zipContent = new TreeMap<>();
try (
/* Open file to decompress */
@@ -106,7 +106,7 @@ public final class ZipFileAssert {
while ((entree = zis.getNextEntry()) != null) {
/* Create a array for the current entry */
- ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream byteArray = new UnsynchronizedByteArrayOutputStream();
IOUtils.copy(zis, byteArray);
zipContent.put(entree.getName(), byteArray);
}
Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java?rev=1889871&r1=1889870&r2=1889871&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/openxml4j/opc/compliance/TestOPCComplianceCoreProperties.java Fri May 14 00:37:50 2021
@@ -17,7 +17,8 @@
package org.apache.poi.openxml4j.opc.compliance;
-import static org.apache.poi.openxml4j.OpenXML4JTestDataSamples.openComplianceSampleStream;
+import static org.apache.poi.openxml4j.OpenXML4JTestDataSamples.getOutputFile;
+import static org.apache.poi.openxml4j.OpenXML4JTestDataSamples.getSampleFile;
import static org.apache.poi.openxml4j.OpenXML4JTestDataSamples.openSampleStream;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -26,8 +27,6 @@ import static org.junit.jupiter.api.Asse
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -35,7 +34,7 @@ import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
-import org.apache.poi.POIDataSamples;
+import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
import org.apache.poi.openxml4j.opc.ContentTypes;
@@ -44,7 +43,6 @@ import org.apache.poi.openxml4j.opc.Pack
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.util.IOUtils;
-import org.apache.poi.util.TempFile;
import org.junit.jupiter.api.Test;
/**
@@ -81,13 +79,13 @@ public final class TestOPCComplianceCore
@Test
void testCorePropertiesPart() throws IOException {
- try (InputStream is = openComplianceSampleStream("OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx")) {
+ try (InputStream is = openSampleStream("OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx")) {
assertDoesNotThrow(() -> OPCPackage.open(is).close());
}
}
private static String extractInvalidFormatMessage(String sampleNameSuffix) throws IOException {
- try (InputStream is = openComplianceSampleStream("OPCCompliance_CoreProperties_" + sampleNameSuffix)) {
+ try (InputStream is = openSampleStream("OPCCompliance_CoreProperties_" + sampleNameSuffix)) {
InvalidFormatException e = assertThrows(InvalidFormatException.class,
() -> OPCPackage.open(is).revert(), "expected OPC compliance exception was not thrown");
return e.getMessage();
@@ -137,7 +135,7 @@ public final class TestOPCComplianceCore
*/
@Test
void testOnlyOneCorePropertiesPart_AddRelationship() throws IOException, InvalidFormatException {
- try (InputStream is = openComplianceSampleStream("OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx")) {
+ try (InputStream is = openSampleStream("OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx")) {
OPCPackage pkg = OPCPackage.open(is);
URI partUri = createURI("/docProps/core2.xml");
InvalidOperationException e = assertThrows(InvalidOperationException.class, () ->
@@ -155,7 +153,7 @@ public final class TestOPCComplianceCore
@Test
void testOnlyOneCorePropertiesPart_AddPart() throws InvalidFormatException, IOException {
String sampleFileName = "OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx";
- try (OPCPackage pkg = OPCPackage.open(POIDataSamples.getOpenXML4JInstance().getFile(sampleFileName).getPath())) {
+ try (OPCPackage pkg = OPCPackage.open(getSampleFile(sampleFileName).getPath())) {
URI partUri = createURI("/docProps/core2.xml");
InvalidOperationException e = assertThrows(InvalidOperationException.class, () ->
@@ -218,9 +216,9 @@ public final class TestOPCComplianceCore
@Test
void testNoCoreProperties_saveNew() throws Exception {
String sampleFileName = "OPCCompliance_NoCoreProperties.xlsx";
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ UnsynchronizedByteArrayOutputStream baos = new UnsynchronizedByteArrayOutputStream();
- try (OPCPackage pkg = OPCPackage.open(POIDataSamples.getOpenXML4JInstance().getFile(sampleFileName).getPath())) {
+ try (OPCPackage pkg = OPCPackage.open(getSampleFile(sampleFileName).getPath())) {
// Verify it has empty properties
assertEquals(0, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
assertNotNull(pkg.getPackageProperties());
@@ -232,7 +230,7 @@ public final class TestOPCComplianceCore
pkg.revert();
}
- try (OPCPackage pkg = OPCPackage.open(new ByteArrayInputStream(baos.toByteArray()))) {
+ try (OPCPackage pkg = OPCPackage.open(baos.toInputStream())) {
// An Empty Properties part has been added in the save/load
assertEquals(1, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
assertNotNull(pkg.getPackageProperties());
@@ -241,14 +239,14 @@ public final class TestOPCComplianceCore
}
// Open a new copy of it
- try (OPCPackage pkg = OPCPackage.open(POIDataSamples.getOpenXML4JInstance().getFile(sampleFileName).getPath())) {
+ try (OPCPackage pkg = OPCPackage.open(getSampleFile(sampleFileName).getPath())) {
// Save and re-load, without having touched the properties yet
baos.reset();
pkg.save(baos);
pkg.revert();
}
- try (OPCPackage pkg = OPCPackage.open(new ByteArrayInputStream(baos.toByteArray()))) {
+ try (OPCPackage pkg = OPCPackage.open(baos.toInputStream())) {
// Check that this too added empty properties without error
assertEquals(1, pkg.getPartsByContentType(ContentTypes.CORE_PROPERTIES_PART).size());
assertNotNull(pkg.getPackageProperties());
@@ -266,9 +264,9 @@ public final class TestOPCComplianceCore
String sampleFileName = "OPCCompliance_NoCoreProperties.xlsx";
// Copy this into a temp file, so we can play with it
- File tmp = TempFile.createTempFile("poi-test", ".opc");
+ File tmp = getOutputFile("poi-test.opc");
try (FileOutputStream out = new FileOutputStream(tmp);
- InputStream in = POIDataSamples.getOpenXML4JInstance().openResourceAsStream(sampleFileName)) {
+ InputStream in = openSampleStream(sampleFileName)) {
IOUtils.copy(in, out);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org