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 13cc7f3b7..dd011e367 100644
--- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
+++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTableCell.java
@@ -224,20 +224,23 @@ public class XWPFTableCell implements IBody, ICell {
ctshd.setFill(rgbStr);
}
- /**
- * Get the vertical alignment of the cell.
- *
- * @return the cell alignment enum value
- */
- public XWPFVertAlign getVerticalAlignment() {
- XWPFVertAlign vAlign = null;
- CTTcPr tcpr = ctTc.getTcPr();
- if (tcpr != null) {
- CTVerticalJc va = tcpr.getVAlign();
- vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
- }
- return vAlign;
- }
+ /**
+ * Get the vertical alignment of the cell.
+ *
+ * @return the cell alignment enum value or null
+ * if no vertical alignment is set.
+ */
+ public XWPFVertAlign getVerticalAlignment() {
+ XWPFVertAlign vAlign = null;
+ CTTcPr tcpr = ctTc.getTcPr();
+ if (tcpr != null) {
+ CTVerticalJc va = tcpr.getVAlign();
+ if (va != null && va.getVal() != null) {
+ vAlign = stVertAlignTypeMap.get(va.getVal().intValue());
+ }
+ }
+ return vAlign;
+ }
/**
* Set the vertical alignment of the cell.
diff --git a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java
index f793742c3..ab2fad84b 100644
--- a/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java
+++ b/src/ooxml/testcases/org/apache/poi/xwpf/usermodel/TestXWPFTableCell.java
@@ -19,8 +19,11 @@
package org.apache.poi.xwpf.usermodel;
+import java.util.List;
+
import junit.framework.TestCase;
+import org.apache.poi.xwpf.XWPFTestDataSamples;
import org.apache.poi.xwpf.usermodel.XWPFTableCell.XWPFVertAlign;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTShd;
@@ -103,4 +106,20 @@ public class TestXWPFTableCell extends TestCase {
CTTcBorders tblBorders = tcPr.addNewTcBorders();
CTVMerge vMerge = tcPr.addNewVMerge();
}
+
+ public void testCellVerticalAlign() throws Exception{
+ XWPFDocument docx = XWPFTestDataSamples.openSampleDocument("59030.docx");
+ List tables = docx.getTables();
+ assertEquals(1, tables.size());
+
+ XWPFTable table = tables.get(0);
+
+ List tableRows = table.getRows();
+ assertEquals(2, tableRows.size());
+
+ assertNull(tableRows.get(0).getCell(0).getVerticalAlignment());
+ assertEquals(XWPFVertAlign.BOTTOM, tableRows.get(0).getCell(1).getVerticalAlignment());
+ assertEquals(XWPFVertAlign.CENTER, tableRows.get(1).getCell(0).getVerticalAlignment());
+ assertNull(tableRows.get(1).getCell(1).getVerticalAlignment());
+ }
}
diff --git a/test-data/document/59030.docx b/test-data/document/59030.docx
new file mode 100644
index 000000000..cf40dd221
Binary files /dev/null and b/test-data/document/59030.docx differ