You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/12/28 10:24:04 UTC

svn commit: r1896470 - in /poi/trunk/poi-ooxml/src/main/java/org/apache/poi: xslf/usermodel/ xssf/usermodel/ xwpf/usermodel/

Author: fanningpj
Date: Tue Dec 28 10:24:04 2021
New Revision: 1896470

URL: http://svn.apache.org/viewvc?rev=1896470&view=rev
Log:
close cursors in finally blocks

Modified:
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFObjectShape.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPictureShape.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPropertiesDelegate.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFShape.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFAbstractFootnoteEndnote.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComment.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFChart.java Tue Dec 28 10:24:04 2021
@@ -139,10 +139,13 @@ public final class XSLFChart extends XDD
 
         CTGraphicalObjectData gr = frame.addNewGraphic().addNewGraphicData();
         XmlCursor grCur = gr.newCursor();
-        grCur.toNextToken();
-        grCur.beginElement(new QName(CHART_URI, "chart"));
-        grCur.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, rID);
-        grCur.dispose();
+        try {
+            grCur.toNextToken();
+            grCur.beginElement(new QName(CHART_URI, "chart"));
+            grCur.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, rID);
+        } finally {
+            grCur.dispose();
+        }
 
         gr.setUri(CHART_URI);
         return frame;

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFGraphicFrame.java Tue Dec 28 10:24:04 2021
@@ -191,9 +191,12 @@ public class XSLFGraphicFrame extends XS
             XmlObject[] obj = getGraphicalData().selectPath(xpath);
             if (obj != null && obj.length == 1) {
                 XmlCursor c = obj[0].newCursor();
-                QName idQualifiedName = new QName(CORE_PROPERTIES_ECMA376_NS, "id");
-                id = c.getAttributeText(idQualifiedName);
-                c.dispose();
+                try {
+                    QName idQualifiedName = new QName(CORE_PROPERTIES_ECMA376_NS, "id");
+                    id = c.getAttributeText(idQualifiedName);
+                } finally {
+                    c.dispose();
+                }
             }
             if (id == null) {
                 return null;
@@ -251,8 +254,9 @@ public class XSLFGraphicFrame extends XS
                 }
             } catch (InvalidFormatException | IOException e) {
                 throw new POIXMLException(e);
+            } finally {
+                c.dispose();
             }
-            c.dispose();
         }
     }
 
@@ -287,8 +291,9 @@ public class XSLFGraphicFrame extends XS
 
             } catch (InvalidFormatException e){
                 throw new POIXMLException(e);
+            } finally {
+                c.dispose();
             }
-            c.dispose();
         }
     }
 

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=1896470&r1=1896469&r2=1896470&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 Tue Dec 28 10:24:04 2021
@@ -251,44 +251,46 @@ public class XSLFObjectShape extends XSL
         CTGraphicalObjectData gr = frame.addNewGraphic().addNewGraphicData();
         gr.setUri(OLE_URI);
         XmlCursor grCur = gr.newCursor();
-        grCur.toEndToken();
-        grCur.beginElement(new QName(PML_NS, "oleObj"));
-        grCur.insertElement(new QName(PML_NS, "embed"));
-
-
-        CTGroupShape grpShp = CTGroupShape.Factory.newInstance();
-        CTPicture pic = grpShp.addNewPic();
-        CTPictureNonVisual nvPicPr = pic.addNewNvPicPr();
-        CTNonVisualDrawingProps cNvPr = nvPicPr.addNewCNvPr();
-        cNvPr.setName("");
-        cNvPr.setId(0);
-        nvPicPr.addNewCNvPicPr();
-        nvPicPr.addNewNvPr();
-
-
-        CTBlipFillProperties blip = pic.addNewBlipFill();
-        blip.addNewBlip().setEmbed(picRel);
-        blip.addNewStretch().addNewFillRect();
-
-        CTShapeProperties spPr = pic.addNewSpPr();
-        CTTransform2D xfrm = spPr.addNewXfrm();
-        CTPoint2D off = xfrm.addNewOff();
-        off.setX(1270000);
-        off.setY(1270000);
-        CTPositiveSize2D xext = xfrm.addNewExt();
-        xext.setCx(1270000);
-        xext.setCy(1270000);
-
-        spPr.addNewPrstGeom().setPrst(STShapeType.RECT);
-
-
-        XmlCursor picCur = grpShp.newCursor();
-        picCur.toStartDoc();
-        picCur.moveXmlContents(grCur);
-        picCur.dispose();
-
-        grCur.dispose();
-
+        try {
+            grCur.toEndToken();
+            grCur.beginElement(new QName(PML_NS, "oleObj"));
+            grCur.insertElement(new QName(PML_NS, "embed"));
+
+            CTGroupShape grpShp = CTGroupShape.Factory.newInstance();
+            CTPicture pic = grpShp.addNewPic();
+            CTPictureNonVisual nvPicPr = pic.addNewNvPicPr();
+            CTNonVisualDrawingProps cNvPr = nvPicPr.addNewCNvPr();
+            cNvPr.setName("");
+            cNvPr.setId(0);
+            nvPicPr.addNewCNvPicPr();
+            nvPicPr.addNewNvPr();
+
+
+            CTBlipFillProperties blip = pic.addNewBlipFill();
+            blip.addNewBlip().setEmbed(picRel);
+            blip.addNewStretch().addNewFillRect();
+
+            CTShapeProperties spPr = pic.addNewSpPr();
+            CTTransform2D xfrm = spPr.addNewXfrm();
+            CTPoint2D off = xfrm.addNewOff();
+            off.setX(1270000);
+            off.setY(1270000);
+            CTPositiveSize2D xext = xfrm.addNewExt();
+            xext.setCx(1270000);
+            xext.setCy(1270000);
+
+            spPr.addNewPrstGeom().setPrst(STShapeType.RECT);
+
+            XmlCursor picCur = grpShp.newCursor();
+            try {
+                picCur.toStartDoc();
+                picCur.moveXmlContents(grCur);
+            } finally {
+                picCur.dispose();
+            }
+        } finally {
+            grCur.dispose();
+        }
 
         return frame;
     }

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=1896470&r1=1896469&r2=1896470&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 Tue Dec 28 10:24:04 2021
@@ -241,11 +241,14 @@ public class XSLFPictureShape extends XS
             extBitmap = extLst.addNewExt();
             extBitmap.setUri(BITMAP_URI);
             XmlCursor cur = extBitmap.newCursor();
-            cur.toEndToken();
-            cur.beginElement(new QName(MS_DML_NS, "useLocalDpi", "a14"));
-            cur.insertNamespace("a14", MS_DML_NS);
-            cur.insertAttributeWithValue("val", "0");
-            cur.dispose();
+            try {
+                cur.toEndToken();
+                cur.beginElement(new QName(MS_DML_NS, "useLocalDpi", "a14"));
+                cur.insertNamespace("a14", MS_DML_NS);
+                cur.insertAttributeWithValue("val", "0");
+            } finally {
+                cur.dispose();
+            }
         }
 
         final int svgId = getExt(extLst, SVG_URI);
@@ -261,11 +264,14 @@ public class XSLFPictureShape extends XS
         CTOfficeArtExtension svgBitmap = extLst.addNewExt();
         svgBitmap.setUri(SVG_URI);
         XmlCursor cur = svgBitmap.newCursor();
-        cur.toEndToken();
-        cur.beginElement(new QName(MS_SVG_NS, "svgBlip", "asvg"));
-        cur.insertNamespace("asvg", MS_SVG_NS);
-        cur.insertAttributeWithValue(EMBED_TAG, svgRelId);
-        cur.dispose();
+        try {
+            cur.toEndToken();
+            cur.beginElement(new QName(MS_SVG_NS, "svgBlip", "asvg"));
+            cur.insertNamespace("asvg", MS_SVG_NS);
+            cur.insertAttributeWithValue(EMBED_TAG, svgRelId);
+        } finally {
+            cur.dispose();
+        }
     }
 
     @Override
@@ -424,12 +430,15 @@ public class XSLFPictureShape extends XS
             for(CTOfficeArtExtension ext : extLst.getExtArray()){
                 String xpath = "declare namespace a14='"+ MS_DML_NS +"' $this//a14:imgProps/a14:imgLayer";
                 XmlObject[] obj = ext.selectPath(xpath);
-                if(obj != null && obj.length == 1){
+                if(obj != null && obj.length == 1) {
                     XmlCursor c = obj[0].newCursor();
-                    String id = c.getAttributeText(EMBED_TAG);
-                    String newId = getSheet().importBlip(id, p.getSheet());
-                    c.setAttributeText(EMBED_TAG, newId);
-                    c.dispose();
+                    try {
+                        String id = c.getAttributeText(EMBED_TAG);
+                        String newId = getSheet().importBlip(id, p.getSheet());
+                        c.setAttributeText(EMBED_TAG, newId);
+                    } finally {
+                        c.dispose();
+                    }
                 }
             }
         }

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPropertiesDelegate.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPropertiesDelegate.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPropertiesDelegate.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFPropertiesDelegate.java Tue Dec 28 10:24:04 2021
@@ -1155,9 +1155,12 @@ import org.openxmlformats.schemas.presen
         @Override
         public boolean isLineStyle() {
             XmlCursor cur = props.newCursor();
-            String name = cur.getName().getLocalPart();
-            cur.dispose();
-            return "lnRef".equals(name);
+            try {
+                String name = cur.getName().getLocalPart();
+                return "lnRef".equals(name);
+            } finally {
+                cur.dispose();
+            }
         }
     }
 

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFShape.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFShape.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFShape.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFShape.java Tue Dec 28 10:24:04 2021
@@ -255,15 +255,18 @@ public abstract class XSLFShape implemen
      */
     @SuppressWarnings({"unchecked", "WeakerAccess", "unused", "SameParameterValue"})
     protected <T extends XmlObject> T getChild(Class<T> childClass, String namespace, String nodename) {
-        XmlCursor cur = getXmlObject().newCursor();
         T child = null;
-        if (cur.toChild(namespace, nodename)) {
-            child = (T)cur.getObject();
-        }
-        if (cur.toChild(XSLFRelation.NS_DRAWINGML, nodename)) {
-            child = (T)cur.getObject();
+        XmlCursor cur = getXmlObject().newCursor();
+        try {
+            if (cur.toChild(namespace, nodename)) {
+                child = (T)cur.getObject();
+            }
+            if (cur.toChild(XSLFRelation.NS_DRAWINGML, nodename)) {
+                child = (T)cur.getObject();
+            }
+        } finally {
+            cur.dispose();
         }
-        cur.dispose();
         return child;
     }
 
@@ -457,12 +460,15 @@ public abstract class XSLFShape implemen
         } else {
             return null;
         }
-        XmlCursor cur = styleLst.newCursor();
         XSLFFillProperties fp = null;
-        if (cur.toChild(Math.toIntExact(childIdx))) {
-            fp = XSLFPropertiesDelegate.getFillDelegate(cur.getObject());
+        XmlCursor cur = styleLst.newCursor();
+        try {
+            if (cur.toChild(Math.toIntExact(childIdx))) {
+                fp = XSLFPropertiesDelegate.getFillDelegate(cur.getObject());
+            }
+        } finally {
+            cur.dispose();
         }
-        cur.dispose();
 
         CTSchemeColor phClr = fillRef.getSchemeClr();
         PaintStyle res =  selectPaint(fp, phClr, theme.getPackagePart(), theme, hasPlaceholder);

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFSheet.java Tue Dec 28 10:24:04 2021
@@ -142,7 +142,7 @@ implements XSLFShapeContainer, Sheet<XSL
         List<XSLFShape> shapes = new ArrayList<>();
         XmlCursor cur = spTree.newCursor();
         try {
-            for (boolean b=cur.toFirstChild();b;b=cur.toNextSibling()) {
+            for (boolean b = cur.toFirstChild(); b; b = cur.toNextSibling()) {
                 XmlObject ch = cur.getObject();
                 if(ch instanceof CTShape){
                     // simple shape

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTable.java Tue Dec 28 10:24:04 2021
@@ -261,17 +261,22 @@ public class XSLFTable extends XSLFGraph
         frame.addNewXfrm();
         CTGraphicalObjectData gr = frame.addNewGraphic().addNewGraphicData();
         XmlCursor grCur = gr.newCursor();
-        grCur.toNextToken();
-        grCur.beginElement(new QName(XSLFRelation.NS_DRAWINGML, "tbl"));
+        try {
+            grCur.toNextToken();
+            grCur.beginElement(new QName(XSLFRelation.NS_DRAWINGML, "tbl"));
 
-        CTTable tbl = CTTable.Factory.newInstance();
-        tbl.addNewTblPr();
-        tbl.addNewTblGrid();
-        XmlCursor tblCur = tbl.newCursor();
-
-        tblCur.moveXmlContents(grCur);
-        tblCur.dispose();
-        grCur.dispose();
+            CTTable tbl = CTTable.Factory.newInstance();
+            tbl.addNewTblPr();
+            tbl.addNewTblGrid();
+            XmlCursor tblCur = tbl.newCursor();
+            try {
+                tblCur.moveXmlContents(grCur);
+            } finally {
+                tblCur.dispose();
+            }
+        } finally {
+            grCur.dispose();
+        }
         gr.setUri(TABLE_URI);
         return frame;
     }

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xslf/usermodel/XSLFTextParagraph.java Tue Dec 28 10:24:04 2021
@@ -768,11 +768,17 @@ public class XSLFTextParagraph implement
         }
 
         XmlCursor thisC = thisP.newCursor();
-        thisC.toEndToken();
-        XmlCursor otherC = otherP.newCursor();
-        otherC.copyXmlContents(thisC);
-        otherC.dispose();
-        thisC.dispose();
+        try {
+            thisC.toEndToken();
+            XmlCursor otherC = otherP.newCursor();
+            try {
+                otherC.copyXmlContents(thisC);
+            } finally {
+                otherC.dispose();
+            }
+        } finally {
+            thisC.dispose();
+        }
 
         for (XSLFTextRun tr : other.getTextRuns()) {
             XmlObject xo = tr.getXmlObject();

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java Tue Dec 28 10:24:04 2021
@@ -461,27 +461,33 @@ public final class XSSFDrawing extends P
         ole1.setShapeId(shapeId);
         ole1.setId(olePR.getId());
 
-        XmlCursor cur1 = ole1.newCursor();
-        cur1.toEndToken();
-        cur1.beginElement("objectPr", XSSFRelation.NS_SPREADSHEETML);
-        cur1.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, imgSheetPR.getId());
-        cur1.insertAttributeWithValue("defaultSize", "0");
-        cur1.beginElement("anchor", XSSFRelation.NS_SPREADSHEETML);
-        cur1.insertAttributeWithValue("moveWithCells", "1");
-
-        CTTwoCellAnchor ctAnchor = createTwoCellAnchor((XSSFClientAnchor) anchor);
-
-        XmlCursor cur2 = ctAnchor.newCursor();
-        cur2.copyXmlContents(cur1);
-        cur2.dispose();
-
-        cur1.toParent();
-        cur1.toFirstChild();
-        cur1.setName(new QName(XSSFRelation.NS_SPREADSHEETML, "from"));
-        cur1.toNextSibling();
-        cur1.setName(new QName(XSSFRelation.NS_SPREADSHEETML, "to"));
+        CTTwoCellAnchor ctAnchor;
+        final XmlCursor cur1 = ole1.newCursor();
+        try {
+            cur1.toEndToken();
+            cur1.beginElement("objectPr", XSSFRelation.NS_SPREADSHEETML);
+            cur1.insertAttributeWithValue("id", PackageRelationshipTypes.CORE_PROPERTIES_ECMA376_NS, imgSheetPR.getId());
+            cur1.insertAttributeWithValue("defaultSize", "0");
+            cur1.beginElement("anchor", XSSFRelation.NS_SPREADSHEETML);
+            cur1.insertAttributeWithValue("moveWithCells", "1");
+
+            ctAnchor = createTwoCellAnchor((XSSFClientAnchor) anchor);
+
+            final XmlCursor cur2 = ctAnchor.newCursor();
+            try {
+                cur2.copyXmlContents(cur1);
+            } finally {
+                cur2.dispose();
+            }
 
-        cur1.dispose();
+            cur1.toParent();
+            cur1.toFirstChild();
+            cur1.setName(new QName(XSSFRelation.NS_SPREADSHEETML, "from"));
+            cur1.toNextSibling();
+            cur1.setName(new QName(XSSFRelation.NS_SPREADSHEETML, "to"));
+        } finally {
+            cur1.dispose();
+        }
 
         // add a new shape and link OLE & image part
         CTShape ctShape = ctAnchor.addNewSp();
@@ -498,9 +504,12 @@ public final class XSSFDrawing extends P
         cNvPr.setName("Object " + shapeId);
 
         XmlCursor extCur = cNvPr.getExtLst().getExtArray(0).newCursor();
-        extCur.toFirstChild();
-        extCur.setAttributeText(new QName("spid"), "_x0000_s" + shapeId);
-        extCur.dispose();
+        try {
+            extCur.toFirstChild();
+            extCur.setAttributeText(new QName("spid"), "_x0000_s" + shapeId);
+        } finally {
+            extCur.dispose();
+        }
 
         XSSFObjectData shape = new XSSFObjectData(this, ctShape);
         shape.anchor = (XSSFClientAnchor) anchor;
@@ -682,8 +691,8 @@ public final class XSSFDrawing extends P
         QName uriName = new QName(null, "uri");
         String xquery = "declare namespace a='" + XSSFRelation.NS_DRAWINGML + "' .//a:extLst/a:ext";
         XmlCursor cur = shape.newCursor();
-        cur.selectPath(xquery);
         try {
+            cur.selectPath(xquery);
             while (cur.toNextSelection()) {
                 String uri = cur.getAttributeText(uriName);
                 if ("{63B3BB69-23CF-44E3-9099-C40C66FF867C}".equals(uri)) {
@@ -701,10 +710,13 @@ public final class XSSFDrawing extends P
 
         XmlObject parentXbean = null;
         XmlCursor cursor = obj.newCursor();
-        if (cursor.toParent()) {
-            parentXbean = cursor.getObject();
+        try {
+            if (cursor.toParent()) {
+                parentXbean = cursor.getObject();
+            }
+        } finally {
+            cursor.dispose();
         }
-        cursor.dispose();
         if (parentXbean != null) {
             if (parentXbean instanceof CTTwoCellAnchor) {
                 CTTwoCellAnchor ct = (CTTwoCellAnchor) parentXbean;

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFAbstractFootnoteEndnote.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFAbstractFootnoteEndnote.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFAbstractFootnoteEndnote.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFAbstractFootnoteEndnote.java Tue Dec 28 10:24:04 2021
@@ -246,16 +246,21 @@ public abstract class XWPFAbstractFootno
      */
     @Override
     public XWPFTableCell getTableCell(CTTc cell) {
-        XmlCursor cursor = cell.newCursor();
-        cursor.toParent();
-        XmlObject o = cursor.getObject();
-        if (!(o instanceof CTRow)) {
-            return null;
+        XmlObject o;
+        CTRow row;
+        final XmlCursor cursor = cell.newCursor();
+        try {
+            cursor.toParent();
+            o = cursor.getObject();
+            if (!(o instanceof CTRow)) {
+                return null;
+            }
+            row = (CTRow) o;
+            cursor.toParent();
+            o = cursor.getObject();
+        } finally {
+            cursor.dispose();
         }
-        CTRow row = (CTRow) o;
-        cursor.toParent();
-        o = cursor.getObject();
-        cursor.dispose();
         if (!(o instanceof CTTbl)) {
             return null;
         }

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComment.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComment.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComment.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFComment.java Tue Dec 28 10:24:04 2021
@@ -255,17 +255,22 @@ public class XWPFComment implements IBod
 
     @Override
     public XWPFTableCell getTableCell(CTTc cell) {
-        XmlCursor cursor = cell.newCursor();
-        cursor.toParent();
-        XmlObject o = cursor.getObject();
-        if (!(o instanceof CTRow)) {
+        XmlObject o;
+        CTRow row;
+        final XmlCursor cursor = cell.newCursor();
+        try {
+            cursor.toParent();
+            o = cursor.getObject();
+            if (!(o instanceof CTRow)) {
+                cursor.dispose();
+                return null;
+            }
+            row = (CTRow) o;
+            cursor.toParent();
+            o = cursor.getObject();
+        } finally {
             cursor.dispose();
-            return null;
         }
-        CTRow row = (CTRow) o;
-        cursor.toParent();
-        o = cursor.getObject();
-        cursor.dispose();
         if (!(o instanceof CTTbl)) {
             return null;
         }

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=1896470&r1=1896469&r2=1896470&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 Tue Dec 28 10:24:04 2021
@@ -1651,16 +1651,21 @@ public class XWPFDocument extends POIXML
      */
     @Override
     public XWPFTableCell getTableCell(CTTc cell) {
-        XmlCursor cursor = cell.newCursor();
-        cursor.toParent();
-        XmlObject o = cursor.getObject();
-        if (!(o instanceof CTRow)) {
-            return null;
+        XmlObject o;
+        CTRow row;
+        final XmlCursor cursor = cell.newCursor();
+        try {
+            cursor.toParent();
+            o = cursor.getObject();
+            if (!(o instanceof CTRow)) {
+                return null;
+            }
+            row = (CTRow) o;
+            cursor.toParent();
+            o = cursor.getObject();
+        } finally {
+            cursor.dispose();
         }
-        CTRow row = (CTRow) o;
-        cursor.toParent();
-        o = cursor.getObject();
-        cursor.dispose();
         if (!(o instanceof CTTbl)) {
             return null;
         }

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java Tue Dec 28 10:24:04 2021
@@ -56,19 +56,22 @@ public class XWPFHeader extends XWPFHead
     public XWPFHeader(XWPFDocument doc, CTHdrFtr hdrFtr) {
         super(doc, hdrFtr);
         XmlCursor cursor = headerFooter.newCursor();
-        cursor.selectPath("./*");
-        while (cursor.toNextSelection()) {
-            XmlObject o = cursor.getObject();
-            if (o instanceof CTP) {
-                XWPFParagraph p = new XWPFParagraph((CTP) o, this);
-                paragraphs.add(p);
-            }
-            if (o instanceof CTTbl) {
-                XWPFTable t = new XWPFTable((CTTbl) o, this);
-                tables.add(t);
+        try {
+            cursor.selectPath("./*");
+            while (cursor.toNextSelection()) {
+                XmlObject o = cursor.getObject();
+                if (o instanceof CTP) {
+                    XWPFParagraph p = new XWPFParagraph((CTP) o, this);
+                    paragraphs.add(p);
+                }
+                if (o instanceof CTTbl) {
+                    XWPFTable t = new XWPFTable((CTTbl) o, this);
+                    tables.add(t);
+                }
             }
+        } finally {
+            cursor.dispose();
         }
-        cursor.dispose();
     }
 
     /**

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java Tue Dec 28 10:24:04 2021
@@ -331,8 +331,11 @@ public abstract class XWPFHeaderFooter e
         if (paragraphs.contains(paragraph)) {
             CTP ctP = paragraph.getCTP();
             XmlCursor c = ctP.newCursor();
-            c.removeXml();
-            c.dispose();
+            try {
+                c.removeXml();
+            } finally {
+                c.dispose();
+            }
             paragraphs.remove(paragraph);
             bodyElements.remove(paragraph);
         }
@@ -347,8 +350,11 @@ public abstract class XWPFHeaderFooter e
         if (tables.contains(table)) {
             CTTbl ctTbl = table.getCTTbl();
             XmlCursor c = ctTbl.newCursor();
-            c.removeXml();
-            c.dispose();
+            try {
+                c.removeXml();
+            } finally {
+                c.dispose();
+            }
             tables.remove(table);
             bodyElements.remove(table);
         }
@@ -359,8 +365,11 @@ public abstract class XWPFHeaderFooter e
      */
     public void clearHeaderFooter() {
        XmlCursor c = headerFooter.newCursor();
-       c.removeXmlContents();
-       c.dispose();
+       try {
+           c.removeXmlContents();
+       } finally {
+           c.dispose();
+       }
        paragraphs.clear();
        tables.clear();
        bodyElements.clear();
@@ -391,19 +400,25 @@ public abstract class XWPFHeaderFooter e
                 paragraphs.add(pos, newP);
             }
             int i = 0;
-            XmlCursor p2 = p.newCursor();
-            cursor.toCursor(p2);
-            p2.dispose();
+            final XmlCursor p2 = p.newCursor();
+            try {
+                cursor.toCursor(p2);
+            } finally {
+                p2.dispose();
+            }
             while (cursor.toPrevSibling()) {
                 o = cursor.getObject();
                 if (o instanceof CTP || o instanceof CTTbl)
                     i++;
             }
             bodyElements.add(i, newP);
-            p2 = p.newCursor();
-            cursor.toCursor(p2);
-            cursor.toEndToken();
-            p2.dispose();
+            final XmlCursor p3 = p.newCursor();
+            try {
+                cursor.toCursor(p3);
+                cursor.toEndToken();
+            } finally {
+                p3.dispose();
+            }
             return newP;
         }
         return null;
@@ -434,19 +449,25 @@ public abstract class XWPFHeaderFooter e
                 tables.add(pos, newT);
             }
             int i = 0;
-            XmlCursor cursor2 = t.newCursor();
-            while (cursor2.toPrevSibling()) {
-                o = cursor2.getObject();
-                if (o instanceof CTP || o instanceof CTTbl) {
-                    i++;
+            final XmlCursor cursor2 = t.newCursor();
+            try {
+                while (cursor2.toPrevSibling()) {
+                    o = cursor2.getObject();
+                    if (o instanceof CTP || o instanceof CTTbl) {
+                        i++;
+                    }
                 }
+            } finally {
+                cursor2.dispose();
             }
-            cursor2.dispose();
             bodyElements.add(i, newT);
-            cursor2 = t.newCursor();
-            cursor.toCursor(cursor2);
-            cursor.toEndToken();
-            cursor2.dispose();
+            final XmlCursor cursor3 = t.newCursor();
+            try {
+                cursor.toCursor(cursor3);
+                cursor.toEndToken();
+            } finally {
+                cursor3.dispose();
+            }
             return newT;
         }
         return null;
@@ -457,10 +478,13 @@ public abstract class XWPFHeaderFooter e
      */
     private boolean isCursorInHdrF(XmlCursor cursor) {
         XmlCursor verify = cursor.newCursor();
-        verify.toParent();
-        boolean result = (verify.getObject() == this.headerFooter);
-        verify.dispose();
-        return result;
+        try {
+            verify.toParent();
+            boolean result = (verify.getObject() == this.headerFooter);
+            return result;
+        } finally {
+            verify.dispose();
+        }
     }
 
 
@@ -503,21 +527,24 @@ public abstract class XWPFHeaderFooter e
         // parse the document with cursor and add
         // the XmlObject to its lists
         XmlCursor cursor = headerFooter.newCursor();
-        cursor.selectPath("./*");
-        while (cursor.toNextSelection()) {
-            XmlObject o = cursor.getObject();
-            if (o instanceof CTP) {
-                XWPFParagraph p = new XWPFParagraph((CTP) o, this);
-                paragraphs.add(p);
-                bodyElements.add(p);
-            }
-            if (o instanceof CTTbl) {
-                XWPFTable t = new XWPFTable((CTTbl) o, this);
-                tables.add(t);
-                bodyElements.add(t);
+        try {
+            cursor.selectPath("./*");
+            while (cursor.toNextSelection()) {
+                XmlObject o = cursor.getObject();
+                if (o instanceof CTP) {
+                    XWPFParagraph p = new XWPFParagraph((CTP) o, this);
+                    paragraphs.add(p);
+                    bodyElements.add(p);
+                }
+                if (o instanceof CTTbl) {
+                    XWPFTable t = new XWPFTable((CTTbl) o, this);
+                    tables.add(t);
+                    bodyElements.add(t);
+                }
             }
+        } finally {
+            cursor.dispose();
         }
-        cursor.dispose();
     }
 
     /**
@@ -525,17 +552,21 @@ public abstract class XWPFHeaderFooter e
      */
     @Override
     public XWPFTableCell getTableCell(CTTc cell) {
-        XmlCursor cursor = cell.newCursor();
-        cursor.toParent();
-        XmlObject o = cursor.getObject();
-        if (!(o instanceof CTRow)) {
+        XmlObject o;
+        CTRow row;
+        final XmlCursor cursor = cell.newCursor();
+        try {
+            cursor.toParent();
+            o = cursor.getObject();
+            if (!(o instanceof CTRow)) {
+                return null;
+            }
+            row = (CTRow) o;
+            cursor.toParent();
+            o = cursor.getObject();
+        } finally {
             cursor.dispose();
-            return null;
         }
-        CTRow row = (CTRow) o;
-        cursor.toParent();
-        o = cursor.getObject();
-        cursor.dispose();
         if (!(o instanceof CTTbl)) {
             return null;
         }

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java Tue Dec 28 10:24:04 2021
@@ -73,33 +73,36 @@ public class XWPFParagraph implements IB
             // Check for bits that only apply when attached to a core document
             // TODO Make this nicer by tracking the XWPFFootnotes directly
             XmlCursor c = r.newCursor();
-            c.selectPath("child::*");
-            while (c.toNextSelection()) {
-                XmlObject o = c.getObject();
-                if (o instanceof CTFtnEdnRef) {
-                    CTFtnEdnRef ftn = (CTFtnEdnRef) o;
-                    footnoteText.append(" [").append(ftn.getId()).append(": ");
-                    XWPFAbstractFootnoteEndnote footnote =
-                            ftn.getDomNode().getLocalName().equals("footnoteReference") ?
-                                    document.getFootnoteByID(ftn.getId().intValue()) :
-                                    document.getEndnoteByID(ftn.getId().intValue());
-                    if (null != footnote) {
-                        boolean first = true;
-                        for (XWPFParagraph p : footnote.getParagraphs()) {
-                            if (!first) {
-                                footnoteText.append("\n");
+            try {
+                c.selectPath("child::*");
+                while (c.toNextSelection()) {
+                    XmlObject o = c.getObject();
+                    if (o instanceof CTFtnEdnRef) {
+                        CTFtnEdnRef ftn = (CTFtnEdnRef) o;
+                        footnoteText.append(" [").append(ftn.getId()).append(": ");
+                        XWPFAbstractFootnoteEndnote footnote =
+                                ftn.getDomNode().getLocalName().equals("footnoteReference") ?
+                                        document.getFootnoteByID(ftn.getId().intValue()) :
+                                        document.getEndnoteByID(ftn.getId().intValue());
+                        if (null != footnote) {
+                            boolean first = true;
+                            for (XWPFParagraph p : footnote.getParagraphs()) {
+                                if (!first) {
+                                    footnoteText.append("\n");
+                                }
+                                first = false;
+                                footnoteText.append(p.getText());
                             }
-                            first = false;
-                            footnoteText.append(p.getText());
+                        } else {
+                            footnoteText.append("!!! End note with ID \"").append(ftn.getId()).append("\" not found in document.");
                         }
-                    } else {
-                        footnoteText.append("!!! End note with ID \"").append(ftn.getId()).append("\" not found in document.");
-                    }
-                    footnoteText.append("] ");
+                        footnoteText.append("] ");
 
+                    }
                 }
+            } finally {
+                c.dispose();
             }
-            c.dispose();
         }
     }
 
@@ -111,58 +114,61 @@ public class XWPFParagraph implements IB
     @SuppressWarnings("deprecation")
     private void buildRunsInOrderFromXml(XmlObject object) {
         XmlCursor c = object.newCursor();
-        c.selectPath("child::*");
-        while (c.toNextSelection()) {
-            XmlObject o = c.getObject();
-            if (o instanceof CTR) {
-                XWPFRun r = new XWPFRun((CTR) o, this);
-                runs.add(r);
-                iruns.add(r);
-            }
-            if (o instanceof CTHyperlink) {
-                CTHyperlink link = (CTHyperlink)o;
-                for (CTR r : link.getRArray()) {
-                    XWPFHyperlinkRun hr = new XWPFHyperlinkRun(link, r, this);
-                    runs.add(hr);
-                    iruns.add(hr);
+        try {
+            c.selectPath("child::*");
+            while (c.toNextSelection()) {
+                XmlObject o = c.getObject();
+                if (o instanceof CTR) {
+                    XWPFRun r = new XWPFRun((CTR) o, this);
+                    runs.add(r);
+                    iruns.add(r);
                 }
-            }
-            if (o instanceof CTSimpleField) {
-                CTSimpleField field = (CTSimpleField)o;
-                for (CTR r : field.getRArray()) {
-                    XWPFFieldRun fr = new XWPFFieldRun(field, r, this);
-                    runs.add(fr);
-                    iruns.add(fr);
+                if (o instanceof CTHyperlink) {
+                    CTHyperlink link = (CTHyperlink)o;
+                    for (CTR r : link.getRArray()) {
+                        XWPFHyperlinkRun hr = new XWPFHyperlinkRun(link, r, this);
+                        runs.add(hr);
+                        iruns.add(hr);
+                    }
                 }
-            }
-            if (o instanceof CTSdtBlock) {
-                XWPFSDT cc = new XWPFSDT((CTSdtBlock) o, part);
-                iruns.add(cc);
-            }
-            if (o instanceof CTSdtRun) {
-                XWPFSDT cc = new XWPFSDT((CTSdtRun) o, part);
-                iruns.add(cc);
-            }
-            if (o instanceof CTRunTrackChange) {
-                for (CTR r : ((CTRunTrackChange) o).getRArray()) {
-                    XWPFRun cr = new XWPFRun(r, this);
-                    runs.add(cr);
-                    iruns.add(cr);
+                if (o instanceof CTSimpleField) {
+                    CTSimpleField field = (CTSimpleField)o;
+                    for (CTR r : field.getRArray()) {
+                        XWPFFieldRun fr = new XWPFFieldRun(field, r, this);
+                        runs.add(fr);
+                        iruns.add(fr);
+                    }
                 }
-            }
-            if (o instanceof CTSmartTagRun) {
-                // Smart Tags can be nested many times.
-                // This implementation does not preserve the tagging information
-                buildRunsInOrderFromXml(o);
-            }
-            if (o instanceof CTRunTrackChange) {
-                // add all the insertions as text
-                for (CTRunTrackChange change : ((CTRunTrackChange) o).getInsArray()) {
-                    buildRunsInOrderFromXml(change);
+                if (o instanceof CTSdtBlock) {
+                    XWPFSDT cc = new XWPFSDT((CTSdtBlock) o, part);
+                    iruns.add(cc);
+                }
+                if (o instanceof CTSdtRun) {
+                    XWPFSDT cc = new XWPFSDT((CTSdtRun) o, part);
+                    iruns.add(cc);
+                }
+                if (o instanceof CTRunTrackChange) {
+                    for (CTR r : ((CTRunTrackChange) o).getRArray()) {
+                        XWPFRun cr = new XWPFRun(r, this);
+                        runs.add(cr);
+                        iruns.add(cr);
+                    }
+                }
+                if (o instanceof CTSmartTagRun) {
+                    // Smart Tags can be nested many times.
+                    // This implementation does not preserve the tagging information
+                    buildRunsInOrderFromXml(o);
+                }
+                if (o instanceof CTRunTrackChange) {
+                    // add all the insertions as text
+                    for (CTRunTrackChange change : ((CTRunTrackChange) o).getInsArray()) {
+                        buildRunsInOrderFromXml(change);
+                    }
                 }
             }
+        } finally {
+            c.dispose();
         }
-        c.dispose();
     }
 
     @Internal

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java Tue Dec 28 10:24:04 2021
@@ -87,29 +87,32 @@ public class XWPFTableCell implements IB
         tables = new ArrayList<>();
 
         XmlCursor cursor = ctTc.newCursor();
-        cursor.selectPath("./*");
-        while (cursor.toNextSelection()) {
-            XmlObject o = cursor.getObject();
-            if (o instanceof CTP) {
-                XWPFParagraph p = new XWPFParagraph((CTP) o, this);
-                paragraphs.add(p);
-                bodyElements.add(p);
-            }
-            if (o instanceof CTTbl) {
-                XWPFTable t = new XWPFTable((CTTbl) o, this);
-                tables.add(t);
-                bodyElements.add(t);
-            }
-            if (o instanceof CTSdtBlock) {
-                XWPFSDT c = new XWPFSDT((CTSdtBlock) o, this);
-                bodyElements.add(c);
-            }
-            if (o instanceof CTSdtRun) {
-                XWPFSDT c = new XWPFSDT((CTSdtRun) o, this);
-                bodyElements.add(c);
+        try {
+            cursor.selectPath("./*");
+            while (cursor.toNextSelection()) {
+                XmlObject o = cursor.getObject();
+                if (o instanceof CTP) {
+                    XWPFParagraph p = new XWPFParagraph((CTP) o, this);
+                    paragraphs.add(p);
+                    bodyElements.add(p);
+                }
+                if (o instanceof CTTbl) {
+                    XWPFTable t = new XWPFTable((CTTbl) o, this);
+                    tables.add(t);
+                    bodyElements.add(t);
+                }
+                if (o instanceof CTSdtBlock) {
+                    XWPFSDT c = new XWPFSDT((CTSdtBlock) o, this);
+                    bodyElements.add(c);
+                }
+                if (o instanceof CTSdtRun) {
+                    XWPFSDT c = new XWPFSDT((CTSdtRun) o, this);
+                    bodyElements.add(c);
+                }
             }
+        } finally {
+            cursor.dispose();
         }
-        cursor.dispose();
     }
 
     @Internal
@@ -276,18 +279,24 @@ public class XWPFTableCell implements IB
             paragraphs.add(pos, newP);
         }
         int i = 0;
-        XmlCursor p2 = p.newCursor();
-        cursor.toCursor(p2);
-        p2.dispose();
+        final XmlCursor p2 = p.newCursor();
+        try {
+            cursor.toCursor(p2);
+        } finally {
+            p2.dispose();
+        }
         while (cursor.toPrevSibling()) {
             o = cursor.getObject();
             if (o instanceof CTP || o instanceof CTTbl)
                 i++;
         }
         bodyElements.add(i, newP);
-        p2 = p.newCursor();
-        cursor.toCursor(p2);
-        p2.dispose();
+        final XmlCursor p3 = p.newCursor();
+        try {
+            cursor.toCursor(p3);
+        } finally {
+            p3.dispose();
+        }
         cursor.toEndToken();
         return newP;
     }
@@ -313,18 +322,24 @@ public class XWPFTableCell implements IB
                 tables.add(pos, newT);
             }
             int i = 0;
-            XmlCursor cursor2 = t.newCursor();
-            while (cursor2.toPrevSibling()) {
-                o = cursor2.getObject();
-                if (o instanceof CTP || o instanceof CTTbl)
-                    i++;
+            final XmlCursor cursor2 = t.newCursor();
+            try {
+                while (cursor2.toPrevSibling()) {
+                    o = cursor2.getObject();
+                    if (o instanceof CTP || o instanceof CTTbl)
+                        i++;
+                }
+            } finally {
+                cursor2.dispose();
             }
-            cursor2.dispose();
             bodyElements.add(i, newT);
-            cursor2 = t.newCursor();
-            cursor.toCursor(cursor2);
-            cursor.toEndToken();
-            cursor2.dispose();
+            final XmlCursor cursor3 = t.newCursor();
+            try {
+                cursor.toCursor(cursor3);
+                cursor.toEndToken();
+            } finally {
+                cursor3.dispose();
+            }
             return newT;
         }
         return null;
@@ -335,10 +350,13 @@ public class XWPFTableCell implements IB
      */
     private boolean isCursorInTableCell(XmlCursor cursor) {
         XmlCursor verify = cursor.newCursor();
-        verify.toParent();
-        boolean result = (verify.getObject() == this.ctTc);
-        verify.dispose();
-        return result;
+        try {
+            verify.toParent();
+            boolean result = (verify.getObject() == this.ctTc);
+            return result;
+        } finally {
+            verify.dispose();
+        }
     }
 
     @Override
@@ -475,16 +493,21 @@ public class XWPFTableCell implements IB
      */
     @Override
     public XWPFTableCell getTableCell(CTTc cell) {
-        XmlCursor cursor = cell.newCursor();
-        cursor.toParent();
-        XmlObject o = cursor.getObject();
-        if (!(o instanceof CTRow)) {
-            return null;
+        XmlObject o;
+        CTRow row;
+        final XmlCursor cursor = cell.newCursor();
+        try {
+            cursor.toParent();
+            o = cursor.getObject();
+            if (!(o instanceof CTRow)) {
+                return null;
+            }
+            row = (CTRow) o;
+            cursor.toParent();
+            o = cursor.getObject();
+        } finally {
+            cursor.dispose();
         }
-        CTRow row = (CTRow) o;
-        cursor.toParent();
-        o = cursor.getObject();
-        cursor.dispose();
         if (!(o instanceof CTTbl)) {
             return null;
         }

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java?rev=1896470&r1=1896469&r2=1896470&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xwpf/usermodel/XWPFTableRow.java Tue Dec 28 10:24:04 2021
@@ -181,16 +181,19 @@ public class XWPFTableRow {
         //Can't use ctRow.getTcList because that only gets table cells
         //Can't use ctRow.getSdtList because that only gets sdts that are at cell level
         XmlCursor cursor = ctRow.newCursor();
-        cursor.selectPath("./*");
-        while (cursor.toNextSelection()) {
-            XmlObject o = cursor.getObject();
-            if (o instanceof CTTc) {
-                cells.add(new XWPFTableCell((CTTc) o, this, table.getBody()));
-            } else if (o instanceof CTSdtCell) {
-                cells.add(new XWPFSDTCell((CTSdtCell) o, this, table.getBody()));
+        try {
+            cursor.selectPath("./*");
+            while (cursor.toNextSelection()) {
+                XmlObject o = cursor.getObject();
+                if (o instanceof CTTc) {
+                    cells.add(new XWPFTableCell((CTTc) o, this, table.getBody()));
+                } else if (o instanceof CTSdtCell) {
+                    cells.add(new XWPFSDTCell((CTSdtCell) o, this, table.getBody()));
+                }
             }
+        } finally {
+            cursor.dispose();
         }
-        cursor.dispose();
         return cells;
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org