From 48ef63e2c50e528d8dacab929a214293f27bcb23 Mon Sep 17 00:00:00 2001 From: Maxim Valyanskiy Date: Thu, 28 Oct 2010 13:02:43 +0000 Subject: [PATCH] Ensure that XWPFParagraph.getDocument() is not null (Null getDocument() causes NPE when looking for comments in XWPFWordExtractorDecorator) git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1028283 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/POIXMLDocumentPart.java | 22 ++++++++++-- .../java/org/apache/poi/POIXMLFactory.java | 3 +- .../poi/xssf/usermodel/XSSFFactory.java | 6 ++-- .../xwpf/model/XWPFHeaderFooterPolicy.java | 6 ++-- .../org/apache/poi/xwpf/usermodel/IBody.java | 10 ++++-- .../poi/xwpf/usermodel/XWPFComment.java | 4 +-- .../poi/xwpf/usermodel/XWPFDocument.java | 25 +++++++------ .../poi/xwpf/usermodel/XWPFFactory.java | 15 +++++--- .../apache/poi/xwpf/usermodel/XWPFFooter.java | 19 +++++----- .../apache/poi/xwpf/usermodel/XWPFHeader.java | 17 +++++---- .../poi/xwpf/usermodel/XWPFHeaderFooter.java | 35 ++++++++++++++----- .../poi/xwpf/usermodel/XWPFParagraph.java | 18 ++++------ .../poi/xwpf/usermodel/XWPFTableCell.java | 9 +++-- .../org/apache/poi/TestPOIXMLDocument.java | 2 +- .../poi/xwpf/usermodel/TestXWPFHeader.java | 14 ++++---- .../poi/xwpf/usermodel/TestXWPFTable.java | 22 ++++++++---- 16 files changed, 139 insertions(+), 88 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java index 6c360990af..993413c1b0 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java @@ -37,7 +37,7 @@ import org.apache.poi.openxml4j.opc.*; * @author Yegor Kozlov */ public class POIXMLDocumentPart { - private static POILogger logger = POILogFactory.getLogger(POIXMLDocumentPart.class); + private static final POILogger logger = POILogFactory.getLogger(POIXMLDocumentPart.class); public static final XmlOptions DEFAULT_XML_OPTIONS; static { @@ -86,7 +86,23 @@ public class POIXMLDocumentPart { this.packagePart = part; this.packageRel = rel; } - + + /** + * Creates an POIXMLDocumentPart representing the given package part, relationship and parent + * Called by {@link #read(POIXMLFactory, java.util.Map)} when reading in an exisiting file. + * + * @param parent - Parent part + * @param part - The package part that holds xml data represenring this sheet. + * @param rel - the relationship of the given package part + * @see #read(POIXMLFactory, java.util.Map) + */ + public POIXMLDocumentPart(POIXMLDocumentPart parent, PackagePart part, PackageRelationship rel){ + this.relations = new LinkedList(); + this.packagePart = part; + this.packageRel = rel; + this.parent = parent; + } + /** * When you open something like a theme, call this to * re-base the XML Document onto the core child of the @@ -274,7 +290,7 @@ public class POIXMLDocumentPart { } if (!context.containsKey(p)) { - POIXMLDocumentPart childPart = factory.createDocumentPart(rel, p); + POIXMLDocumentPart childPart = factory.createDocumentPart(this, rel, p); childPart.parent = this; addRelation(childPart); if(p != null){ diff --git a/src/ooxml/java/org/apache/poi/POIXMLFactory.java b/src/ooxml/java/org/apache/poi/POIXMLFactory.java index a434765bad..6eebbd9c2e 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLFactory.java +++ b/src/ooxml/java/org/apache/poi/POIXMLFactory.java @@ -30,11 +30,12 @@ public abstract class POIXMLFactory { * Create a POIXMLDocumentPart from existing package part and relation. This method is called * from {@link POIXMLDocument#load(POIXMLFactory)} when parsing a document * + * @param parent parent part * @param rel the package part relationship * @param part the PackagePart representing the created instance * @return A new instance of a POIXMLDocumentPart. */ - public abstract POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part); + public abstract POIXMLDocumentPart createDocumentPart(POIXMLDocumentPart parent, PackageRelationship rel, PackagePart part); /** * Create a new POIXMLDocumentPart using the supplied descriptor. This method is used when adding new parts diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java index 34400ee436..7855e42458 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java @@ -34,7 +34,7 @@ import org.apache.poi.util.POILogger; * @author Yegor Kozlov */ public final class XSSFFactory extends POIXMLFactory { - private static POILogger logger = POILogFactory.getLogger(XSSFFactory.class); + private static final POILogger logger = POILogFactory.getLogger(XSSFFactory.class); private XSSFFactory(){ @@ -46,7 +46,8 @@ public final class XSSFFactory extends POIXMLFactory { return inst; } - public POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part){ + @Override + public POIXMLDocumentPart createDocumentPart(POIXMLDocumentPart parent, PackageRelationship rel, PackagePart part){ POIXMLRelation descriptor = XSSFRelation.getInstance(rel.getRelationshipType()); if(descriptor == null || descriptor.getRelationClass() == null){ logger.log(POILogger.DEBUG, "using default POIXMLDocumentPart for " + rel.getRelationshipType()); @@ -62,6 +63,7 @@ public final class XSSFFactory extends POIXMLFactory { } } + @Override public POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor){ try { Class cls = descriptor.getRelationClass(); diff --git a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java index 3316435190..3a5b77effd 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java +++ b/src/ooxml/java/org/apache/poi/xwpf/model/XWPFHeaderFooterPolicy.java @@ -109,7 +109,7 @@ public class XWPFHeaderFooterPolicy { PackagePart hdrPart = doc.getPartById(ref.getId()); HdrDocument hdrDoc = HdrDocument.Factory.parse(hdrPart.getInputStream()); CTHdrFtr hdrFtr = hdrDoc.getHdr(); - XWPFHeader hdr = new XWPFHeader(hdrFtr); + XWPFHeader hdr = new XWPFHeader(doc, hdrFtr); // Assign it Enum type = ref.getType(); @@ -119,7 +119,7 @@ public class XWPFHeaderFooterPolicy { // Get the footer CTHdrFtrRef ref = sectPr.getFooterReferenceArray(i); PackagePart ftrPart = doc.getPartById(ref.getId()); - XWPFFooter ftr = new XWPFFooter( + XWPFFooter ftr = new XWPFFooter(doc, FtrDocument.Factory.parse(ftrPart.getInputStream()).getFtr()); // Assign it @@ -460,6 +460,6 @@ public class XWPFHeaderFooterPolicy { shapeTextPath.setString(text); pict.set(group); // end watermark paragraph - return new XWPFParagraph(p, null); + return new XWPFParagraph(p, doc); } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/IBody.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/IBody.java index 6525bfd0cc..a85ec7408a 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/IBody.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/IBody.java @@ -62,8 +62,7 @@ public interface IBody { * the text of the header or footer. */ public List getParagraphs(); - - + /** * Return the table(s) that holds the text * of the IBodyPart, for complex cases @@ -123,6 +122,11 @@ public interface IBody { * @param cell */ XWPFTableCell getTableCell(CTTc cell); - + + /** + * Return XWPFDocument + */ + public XWPFDocument getXWPFDocument(); + } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java index 1f8e799fc2..d193983c79 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFComment.java @@ -31,7 +31,7 @@ public class XWPFComment protected String author; protected StringBuffer text; - public XWPFComment(CTComment comment) + public XWPFComment(CTComment comment, XWPFDocument document) { text = new StringBuffer(); id = comment.getId().toString(); @@ -39,7 +39,7 @@ public class XWPFComment for(CTP ctp : comment.getPList()) { - XWPFParagraph p = new XWPFParagraph(ctp, null); + XWPFParagraph p = new XWPFParagraph(ctp, document); text.append(p.getText()); } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java index 7335c89086..d4c2204591 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFDocument.java @@ -165,25 +165,18 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { String relation = p.getPackageRelationship().getRelationshipType(); if(relation.equals(XWPFRelation.STYLES.getRelation())){ this.styles = (XWPFStyles) p; - } - else if(relation.equals(XWPFRelation.NUMBERING.getRelation())){ + } else if (relation.equals(XWPFRelation.NUMBERING.getRelation())){ this.numbering = (XWPFNumbering) p; - - } - else if(relation.equals(XWPFRelation.FOOTER.getRelation())){ + } else if (relation.equals(XWPFRelation.FOOTER.getRelation())){ footers.add((XWPFFooter)p); - } - else if(relation.equals(XWPFRelation.HEADER.getRelation())){ + } else if (relation.equals(XWPFRelation.HEADER.getRelation())){ headers.add((XWPFHeader)p); - } - - else if(relation.equals(XWPFRelation.COMMENT.getRelation())){ + } else if (relation.equals(XWPFRelation.COMMENT.getRelation())){ CommentsDocument cmntdoc = CommentsDocument.Factory.parse(p.getPackagePart().getInputStream()); for(CTComment ctcomment : cmntdoc.getComments().getCommentList()) { - comments.add(new XWPFComment(ctcomment)); + comments.add(new XWPFComment(ctcomment, this)); } - } - else if(relation.equals(XWPFRelation.SETTINGS.getRelation())){ + } else if (relation.equals(XWPFRelation.SETTINGS.getRelation())){ settings = (XWPFSettings)p; } } @@ -254,6 +247,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { /** * Create a new CTWorkbook with all values set to default */ + @Override protected void onDocumentCreate() { hyperlinks = new ArrayList(); comments = new ArrayList(); @@ -429,6 +423,7 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { /** * Get the document's embedded files. */ + @Override public List getAllEmbedds() throws OpenXML4JException { List embedds = new LinkedList(); @@ -1116,4 +1111,8 @@ public class XWPFDocument extends POIXMLDocument implements Document, IBody { } return tableRow.getTableCell(cell); } + + public XWPFDocument getXWPFDocument() { + return this; + } }//end class diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java index b6c641b4ad..c6b2c2d3e4 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFactory.java @@ -33,7 +33,7 @@ import org.apache.poi.util.POILogger; */ public final class XWPFFactory extends POIXMLFactory { - private static POILogger logger = POILogFactory.getLogger(XWPFFactory.class); + private static final POILogger logger = POILogFactory.getLogger(XWPFFactory.class); private XWPFFactory(){ @@ -45,7 +45,8 @@ public final class XWPFFactory extends POIXMLFactory { return inst; } - public POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part){ + @Override + public POIXMLDocumentPart createDocumentPart(POIXMLDocumentPart parent, PackageRelationship rel, PackagePart part){ POIXMLRelation descriptor = XWPFRelation.getInstance(rel.getRelationshipType()); if(descriptor == null || descriptor.getRelationClass() == null){ logger.log(POILogger.DEBUG, "using default POIXMLDocumentPart for " + rel.getRelationshipType()); @@ -54,13 +55,19 @@ public final class XWPFFactory extends POIXMLFactory { try { Class cls = descriptor.getRelationClass(); - Constructor constructor = cls.getDeclaredConstructor(PackagePart.class, PackageRelationship.class); - return constructor.newInstance(part, rel); + try { + Constructor constructor = cls.getDeclaredConstructor(POIXMLDocumentPart.class, PackagePart.class, PackageRelationship.class); + return constructor.newInstance(parent, part, rel); + } catch (NoSuchMethodException e) { + Constructor constructor = cls.getDeclaredConstructor(PackagePart.class, PackageRelationship.class); + return constructor.newInstance(part, rel); + } } catch (Exception e){ throw new POIXMLException(e); } } + @Override public POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor){ try { Class cls = descriptor.getRelationClass(); diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFooter.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFooter.java index 1bce85fb47..73834d7672 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFooter.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFFooter.java @@ -25,6 +25,7 @@ import java.util.Map; import javax.xml.namespace.QName; +import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.openxml4j.opc.PackageRelationship; import org.apache.xmlbeans.XmlCursor; @@ -41,13 +42,12 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.FtrDocument; * Sketch of XWPF footer class */ public class XWPFFooter extends XWPFHeaderFooter { - public XWPFFooter() { - super(); - } - - - public XWPFFooter(CTHdrFtr hdrFtr) throws IOException { - super(hdrFtr); + public XWPFFooter() { + super(); + } + + public XWPFFooter(XWPFDocument doc, CTHdrFtr hdrFtr) throws IOException { + super(doc, hdrFtr); bodyElements = new ArrayList(); paragraphs = new ArrayList(); tables = new ArrayList(); @@ -69,8 +69,8 @@ public class XWPFFooter extends XWPFHeaderFooter { getAllPictures(); } - public XWPFFooter(PackagePart part, PackageRelationship rel) throws IOException { - super(part, rel); + public XWPFFooter(POIXMLDocumentPart parent, PackagePart part, PackageRelationship rel) throws IOException { + super(parent, part, rel); } /** @@ -149,5 +149,4 @@ public class XWPFFooter extends XWPFHeaderFooter { public BodyType getPartType() { return BodyType.FOOTER; } - } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java index 624a740c95..d49aa5d7ec 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeader.java @@ -42,17 +42,16 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.HdrDocument; * Sketch of XWPF header class */ public class XWPFHeader extends XWPFHeaderFooter { - - public XWPFHeader() { - super(); - } - - public XWPFHeader(PackagePart part, PackageRelationship rel) throws IOException { - super(part, rel); + public XWPFHeader() { + super(); + } + + public XWPFHeader(POIXMLDocumentPart parent, PackagePart part, PackageRelationship rel) throws IOException { + super(parent, part, rel); } - public XWPFHeader(CTHdrFtr hdrFtr) throws IOException { - super(hdrFtr); + public XWPFHeader(XWPFDocument doc, CTHdrFtr hdrFtr) throws IOException { + super(doc, hdrFtr); paragraphs = new ArrayList(); tables = new ArrayList(); XmlCursor cursor = headerFooter.newCursor(); diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java index 0bdff96a85..5aedc15f9b 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.java @@ -51,18 +51,31 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo protected XWPFDocument document; protected List bodyElements; - protected XWPFHeaderFooter(CTHdrFtr hdrFtr){ + protected XWPFHeaderFooter(XWPFDocument doc, CTHdrFtr hdrFtr){ + if (doc==null) { + throw new NullPointerException(); + } + + document = doc; headerFooter = hdrFtr; readHdrFtr(); } - protected XWPFHeaderFooter() { - this(CTHdrFtr.Factory.newInstance()); - } - public XWPFHeaderFooter(PackagePart part, PackageRelationship rel) throws IOException { - super(part, rel); + protected XWPFHeaderFooter() { + headerFooter = CTHdrFtr.Factory.newInstance(); + readHdrFtr(); + } + + + public XWPFHeaderFooter(POIXMLDocumentPart parent, PackagePart part, PackageRelationship rel) throws IOException { + super(parent, part, rel); this.document = (XWPFDocument)getParent(); - onDocumentRead(); + + if (this.document==null) { + throw new NullPointerException(); + } + + onDocumentRead(); } @Internal @@ -523,5 +536,11 @@ public abstract class XWPFHeaderFooter extends POIXMLDocumentPart implements IBo return tableRow.getTableCell(cell); } - + public XWPFDocument getXWPFDocument() { + if (document!=null) { + return document; + } else { + return (XWPFDocument)getParent(); + } + } }//end class diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java index 6a299fafdf..7b33d48c04 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFParagraph.java @@ -55,7 +55,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTextAlignment; * Sketch of XWPF paragraph class */ public class XWPFParagraph implements IBodyElement{ - private CTP paragraph; + private final CTP paragraph; protected IBody part; /** For access to the document's hyperlink, comments, tables etc */ protected XWPFDocument document; @@ -63,22 +63,16 @@ public class XWPFParagraph implements IBodyElement{ private StringBuffer footnoteText = new StringBuffer(); - public XWPFParagraph(CTP prgrph) { - this(prgrph, null); - } - - public XWPFParagraph(CTP prgrph, IBody part) { this.paragraph = prgrph; this.part = part; - // We only care about the document (for comments, - // hyperlinks etc) if we're attached to the - // core document - if(part instanceof XWPFDocument) { - this.document = (XWPFDocument)part; + this.document = part.getXWPFDocument(); + + if (document==null) { + throw new NullPointerException(); } - + runs = new ArrayList(); // Get all our child nodes in order, and process them diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java index 7685a6f00a..656bf307a8 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java @@ -30,8 +30,7 @@ import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; public class XWPFTableCell implements IBody { - - private CTTc ctTc; + private final CTTc ctTc; protected List paragraphs = null; protected List tables = null; protected List bodyElements = null; @@ -256,7 +255,7 @@ public class XWPFTableCell implements IBody { * @see org.apache.poi.xwpf.usermodel.IBody#getPart() */ public IBody getPart() { - return (IBody) tableRow.getTable().getPart(); + return tableRow.getTable().getPart(); } @@ -351,4 +350,8 @@ public class XWPFTableCell implements IBody { } return tableRow.getTableCell(cell); } + + public XWPFDocument getXWPFDocument() { + return part.getXWPFDocument(); + } }// end class diff --git a/src/ooxml/testcases/org/apache/poi/TestPOIXMLDocument.java b/src/ooxml/testcases/org/apache/poi/TestPOIXMLDocument.java index e495df7676..4e7f788e67 100644 --- a/src/ooxml/testcases/org/apache/poi/TestPOIXMLDocument.java +++ b/src/ooxml/testcases/org/apache/poi/TestPOIXMLDocument.java @@ -57,7 +57,7 @@ public final class TestPOIXMLDocument extends TestCase { public TestFactory() { // } - public POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part){ + public POIXMLDocumentPart createDocumentPart(POIXMLDocumentPart parent, PackageRelationship rel, PackagePart part){ return new POIXMLDocumentPart(part, rel); } diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java index 8526a2005b..b46f8d32ac 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFHeader.java @@ -76,12 +76,12 @@ public final class TestXWPFHeader extends TestCase { CTText t3 = ctR3.addNewT(); t3.setStringValue("Second paragraph for the footer"); - XWPFParagraph p1 = new XWPFParagraph(ctP1); + XWPFParagraph p1 = new XWPFParagraph(ctP1, sampleDoc); XWPFParagraph[] pars = new XWPFParagraph[1]; pars[0] = p1; - XWPFParagraph p2 = new XWPFParagraph(ctP2); - XWPFParagraph p3 = new XWPFParagraph(ctP3, null); + XWPFParagraph p2 = new XWPFParagraph(ctP2, sampleDoc); + XWPFParagraph p3 = new XWPFParagraph(ctP3, sampleDoc); XWPFParagraph[] pars2 = new XWPFParagraph[2]; pars2[0] = p2; pars2[1] = p3; @@ -98,7 +98,7 @@ public final class TestXWPFHeader extends TestCase { assertNotNull(policy.getDefaultFooter()); // ....and that the footer object captured above contains two // paragraphs of text. - assertEquals(footer.getParagraphs().size(), 2); + assertEquals(2, footer.getParagraphs().size()); // As an additional check, recover the defauls footer and // make sure that it contains two paragraphs of text and that @@ -111,9 +111,9 @@ public final class TestXWPFHeader extends TestCase { paras[i++] = p; } - assertEquals(paras.length, 2); - assertEquals(paras[0].getText(), "First paragraph for the footer"); - assertEquals(paras[1].getText(), "Second paragraph for the footer"); + assertEquals(2, paras.length); + assertEquals("First paragraph for the footer", paras[0].getText()); + assertEquals("Second paragraph for the footer", paras[1].getText()); } public void testSetWatermark() { diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java index 6e8fe1e8ea..91f43f4dff 100644 --- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java +++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTable.java @@ -42,15 +42,16 @@ public class TestXWPFTable extends TestCase { } public void testConstructor() { + XWPFDocument doc = new XWPFDocument(); CTTbl ctTable = CTTbl.Factory.newInstance(); - XWPFTable xtab = new XWPFTable(ctTable, null); + XWPFTable xtab = new XWPFTable(ctTable, doc); assertNotNull(xtab); assertEquals(1, ctTable.sizeOfTrArray()); assertEquals(1, ctTable.getTrArray(0).sizeOfTcArray()); assertNotNull(ctTable.getTrArray(0).getTcArray(0).getPArray(0)); ctTable = CTTbl.Factory.newInstance(); - xtab = new XWPFTable(ctTable, null, 3, 2); + xtab = new XWPFTable(ctTable, doc, 3, 2); assertNotNull(xtab); assertEquals(3, ctTable.sizeOfTrArray()); assertEquals(2, ctTable.getTrArray(0).sizeOfTcArray()); @@ -59,6 +60,7 @@ public class TestXWPFTable extends TestCase { public void testGetText() { + XWPFDocument doc = new XWPFDocument(); CTTbl table = CTTbl.Factory.newInstance(); CTRow row = table.addNewTr(); CTTc cell = row.addNewTc(); @@ -67,12 +69,14 @@ public class TestXWPFTable extends TestCase { CTText text = run.addNewT(); text.setStringValue("finally I can write!"); - XWPFTable xtab = new XWPFTable(table, null); + XWPFTable xtab = new XWPFTable(table, doc); assertEquals("finally I can write!\n", xtab.getText()); } public void testCreateRow() { + XWPFDocument doc = new XWPFDocument(); + CTTbl table = CTTbl.Factory.newInstance(); CTRow r1 = table.addNewTr(); r1.addNewTc().addNewP(); @@ -84,7 +88,7 @@ public class TestXWPFTable extends TestCase { r3.addNewTc().addNewP(); r3.addNewTc().addNewP(); - XWPFTable xtab = new XWPFTable(table, null); + XWPFTable xtab = new XWPFTable(table, doc); assertEquals(3, xtab.getNumberOfRows()); assertNotNull(xtab.getRow(2)); @@ -95,16 +99,18 @@ public class TestXWPFTable extends TestCase { assertEquals(2, table.getTrArray(0).sizeOfTcArray()); //check creation of first row - xtab = new XWPFTable(CTTbl.Factory.newInstance(), null); + xtab = new XWPFTable(CTTbl.Factory.newInstance(), doc); assertEquals(1, xtab.getCTTbl().getTrArray(0).sizeOfTcArray()); } public void testSetGetWidth() { + XWPFDocument doc = new XWPFDocument(); + CTTbl table = CTTbl.Factory.newInstance(); table.addNewTblPr().addNewTblW().setW(new BigInteger("1000")); - XWPFTable xtab = new XWPFTable(table, null); + XWPFTable xtab = new XWPFTable(table, doc); assertEquals(1000, xtab.getWidth()); @@ -113,9 +119,11 @@ public class TestXWPFTable extends TestCase { } public void testSetGetHeight() { + XWPFDocument doc = new XWPFDocument(); + CTTbl table = CTTbl.Factory.newInstance(); - XWPFTable xtab = new XWPFTable(table, null); + XWPFTable xtab = new XWPFTable(table, doc); XWPFTableRow row = xtab.createRow(); row.setHeight(20); assertEquals(20, row.getHeight()); -- 2.39.5