import org.apache.poi.xwpf.usermodel.*; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import java.math.BigInteger; public class DeleteAbstractNumBug { public static void main(String[] args){ XWPFDocument doc = new XWPFDocument(); XWPFNumbering numbering = doc.createNumbering(); for(int i = 10; i >= 0; i--){ addNumberingWithAbstractId(numbering, i); //add numbers in reverse order } printAbstractNums(numbering); //print the AbstractNumIds numbering.removeAbstractNum(BigInteger.valueOf(2)); //attempt to remove item with numId 2 //actually removes item with numId 8 (index 2) printAbstractNums(numbering); } private static void printAbstractNums(XWPFNumbering numbering) { for (int i = 0; i <= 10; i++) { XWPFAbstractNum abstractNum = numbering.getAbstractNum(BigInteger.valueOf(i)); if (abstractNum != null) System.out.printf("%d ", abstractNum.getCTAbstractNum().getAbstractNumId()); } System.out.print("\n"); } private static BigInteger addNumberingWithAbstractId(XWPFNumbering documentNumbering, int id){ CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance(); //create a numbering scheme cTAbstractNum.setAbstractNumId(BigInteger.valueOf(id)); //give the scheme an ID XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum); BigInteger abstractNumID = documentNumbering.addAbstractNum(abstractNum); /*return an ID for the numbering*/ BigInteger bigInteger = documentNumbering.addNum(abstractNumID); return bigInteger; } }