Handle NPE issues in POIXMLProperties
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1837007 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
83b60f4777
commit
3be215e070
@ -68,17 +68,20 @@ public class POIXMLProperties {
|
|||||||
this.pkg = docPackage;
|
this.pkg = docPackage;
|
||||||
|
|
||||||
// Core properties
|
// Core properties
|
||||||
core = new CoreProperties((PackagePropertiesPart)pkg.getPackageProperties() );
|
core = new CoreProperties((PackagePropertiesPart)pkg.getPackageProperties());
|
||||||
|
|
||||||
// Extended properties
|
// Extended properties
|
||||||
PackageRelationshipCollection extRel =
|
PackageRelationshipCollection extRel =
|
||||||
pkg.getRelationshipsByType(PackageRelationshipTypes.EXTENDED_PROPERTIES);
|
pkg.getRelationshipsByType(PackageRelationshipTypes.EXTENDED_PROPERTIES);
|
||||||
if(extRel.size() == 1) {
|
if(extRel.size() == 1) {
|
||||||
extPart = pkg.getPart( extRel.getRelationship(0));
|
extPart = pkg.getPart(extRel.getRelationship(0));
|
||||||
|
if (extPart == null) {
|
||||||
|
ext = new ExtendedProperties((org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument)NEW_EXT_INSTANCE.copy());
|
||||||
|
} else {
|
||||||
org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument.Factory.parse(
|
org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument.Factory.parse(
|
||||||
extPart.getInputStream(), DEFAULT_XML_OPTIONS
|
extPart.getInputStream(), DEFAULT_XML_OPTIONS);
|
||||||
);
|
|
||||||
ext = new ExtendedProperties(props);
|
ext = new ExtendedProperties(props);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
extPart = null;
|
extPart = null;
|
||||||
ext = new ExtendedProperties((org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument)NEW_EXT_INSTANCE.copy());
|
ext = new ExtendedProperties((org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument)NEW_EXT_INSTANCE.copy());
|
||||||
@ -88,11 +91,14 @@ public class POIXMLProperties {
|
|||||||
PackageRelationshipCollection custRel =
|
PackageRelationshipCollection custRel =
|
||||||
pkg.getRelationshipsByType(PackageRelationshipTypes.CUSTOM_PROPERTIES);
|
pkg.getRelationshipsByType(PackageRelationshipTypes.CUSTOM_PROPERTIES);
|
||||||
if(custRel.size() == 1) {
|
if(custRel.size() == 1) {
|
||||||
custPart = pkg.getPart( custRel.getRelationship(0));
|
custPart = pkg.getPart(custRel.getRelationship(0));
|
||||||
|
if (custPart == null) {
|
||||||
|
cust = new CustomProperties((org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument)NEW_CUST_INSTANCE.copy());
|
||||||
|
} else {
|
||||||
org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument.Factory.parse(
|
org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument props = org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument.Factory.parse(
|
||||||
custPart.getInputStream(), DEFAULT_XML_OPTIONS
|
custPart.getInputStream(), DEFAULT_XML_OPTIONS);
|
||||||
);
|
|
||||||
cust = new CustomProperties(props);
|
cust = new CustomProperties(props);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
custPart = null;
|
custPart = null;
|
||||||
cust = new CustomProperties((org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument)NEW_CUST_INSTANCE.copy());
|
cust = new CustomProperties((org.openxmlformats.schemas.officeDocument.x2006.customProperties.PropertiesDocument)NEW_CUST_INSTANCE.copy());
|
||||||
@ -197,9 +203,9 @@ public class POIXMLProperties {
|
|||||||
* @throws IOException if the properties can't be saved
|
* @throws IOException if the properties can't be saved
|
||||||
* @throws POIXMLException if the properties are erroneous
|
* @throws POIXMLException if the properties are erroneous
|
||||||
*/
|
*/
|
||||||
public void commit() throws IOException{
|
public void commit() throws IOException {
|
||||||
|
|
||||||
if(extPart == null && !NEW_EXT_INSTANCE.toString().equals(ext.props.toString())){
|
if(extPart == null && ext != null && ext.props != null && !NEW_EXT_INSTANCE.toString().equals(ext.props.toString())){
|
||||||
try {
|
try {
|
||||||
PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/app.xml");
|
PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/app.xml");
|
||||||
pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties");
|
pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties");
|
||||||
@ -208,7 +214,7 @@ public class POIXMLProperties {
|
|||||||
throw new POIXMLException(e);
|
throw new POIXMLException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(custPart == null && !NEW_CUST_INSTANCE.toString().equals(cust.props.toString())){
|
if(custPart == null && cust != null && cust.props != null && !NEW_CUST_INSTANCE.toString().equals(cust.props.toString())){
|
||||||
try {
|
try {
|
||||||
PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/custom.xml");
|
PackagePartName prtname = PackagingURIHelper.createPartName("/docProps/custom.xml");
|
||||||
pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties");
|
pkg.addRelationship(prtname, TargetMode.INTERNAL, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties");
|
||||||
@ -218,17 +224,17 @@ public class POIXMLProperties {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(extPart != null){
|
if(extPart != null){
|
||||||
OutputStream out = extPart.getOutputStream();
|
try (OutputStream out = extPart.getOutputStream()) {
|
||||||
if (extPart.getSize() > 0) {
|
if (extPart.getSize() > 0) {
|
||||||
extPart.clear();
|
extPart.clear();
|
||||||
}
|
}
|
||||||
ext.props.save(out, DEFAULT_XML_OPTIONS);
|
ext.props.save(out, DEFAULT_XML_OPTIONS);
|
||||||
out.close();
|
}
|
||||||
}
|
}
|
||||||
if(custPart != null){
|
if(custPart != null){
|
||||||
OutputStream out = custPart.getOutputStream();
|
try (OutputStream out = custPart.getOutputStream()) {
|
||||||
cust.props.save(out, DEFAULT_XML_OPTIONS);
|
cust.props.save(out, DEFAULT_XML_OPTIONS);
|
||||||
out.close();
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -724,6 +724,18 @@ public class TestXSLFBugs {
|
|||||||
ppt.close();
|
ppt.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
@Test
|
||||||
|
public void testDivinoRevelado() throws IOException {
|
||||||
|
XMLSlideShow ppt = XSLFTestDataSamples.openSampleDocument("Divino_Revelado.pptx");
|
||||||
|
try {
|
||||||
|
XMLSlideShow saved = XSLFTestDataSamples.writeOutAndReadBack(ppt);
|
||||||
|
} catch (IOException e) {
|
||||||
|
fail("Could not read back saved presentation.");
|
||||||
|
}
|
||||||
|
ppt.close();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void bug62051() throws IOException {
|
public void bug62051() throws IOException {
|
||||||
final Function<List<XSLFShape>, int[]> ids = (shapes) ->
|
final Function<List<XSLFShape>, int[]> ids = (shapes) ->
|
||||||
|
BIN
test-data/slideshow/Divino_Revelado.pptx
Normal file
BIN
test-data/slideshow/Divino_Revelado.pptx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user