<classpathentry kind="lib" path="lib/ant-1.10.1.jar"/>
<classpathentry kind="lib" path="lib/ant-launcher-1.10.1.jar"/>
<classpathentry kind="lib" path="lib/log4j-1.2.17.jar"/>
- <classpathentry exported="true" kind="lib" path="ooxml-lib/xmlbeans-2.6.0.jar" sourcepath="ooxml-lib/xmlbeans-2.6.0.jar"/>
+ <classpathentry exported="true" kind="lib" path="ooxml-lib/xmlbeans-3.0.0.jar" sourcepath="ooxml-lib/xmlbeans-3.0.0.jar"/>
<classpathentry kind="lib" path="lib/hamcrest-core-1.3.jar"/>
<classpathentry kind="lib" path="lib/junit-4.12.jar"/>
<classpathentry kind="lib" path="ooxml-lib/curvesapi-1.05.jar"/>
}
}
+repositories {
+ maven { url "https://repository.apache.org/content/repositories/staging" }
+ mavenCentral()
+}
+
+
// Only add the plugin for Sonar if enabled
if (project.hasProperty('enableSonar')) {
println 'Enabling Sonar support'
compileJava.dependsOn 'ant-compile-ooxml-xsds'
dependencies {
- compile 'org.apache.xmlbeans:xmlbeans:2.6.0'
+ compile 'org.apache.xmlbeans:xmlbeans:3.0.0'
compile 'org.apache.commons:commons-collections4:4.1'
compile 'org.apache.commons:commons-math3:3.6.1'
compile 'org.apache.commons:commons-compress:1.17'
<property name="ooxml.curvesapi.jar" location="${ooxml.lib}/curvesapi-1.05.jar"/>
<property name="ooxml.curvesapi.url"
value="${repository.m2}/maven2/com/github/virtuald/curvesapi/1.05/curvesapi-1.05.jar"/>
- <property name="ooxml.xmlbeans.jar" location="${ooxml.lib}/xmlbeans-2.6.0.jar"/>
+ <property name="ooxml.xmlbeans.jar" location="${ooxml.lib}/xmlbeans-3.0.0.jar"/>
<property name="ooxml.xmlbeans.url"
- value="${repository.m2}/maven2/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0.jar"/>
+ value="https://repository.apache.org/content/repositories/staging/org/apache/xmlbeans/xmlbeans/3.0.0/xmlbeans-3.0.0.jar"/>
<property name="ooxml.commons-compress.jar" location="${main.lib}/commons-compress-1.17.jar"/>
<property name="ooxml.commons-compress.url"
value="${repository.m2}/maven2/org/apache/commons/commons-compress/1.17/commons-compress-1.17.jar"/>
<include name="ooxml-security-1.0.jar"/>
<include name="curvesapi-1.03.jar"/>
<include name="curvesapi-1.04.jar"/>
- <include name="xmlbeans-2.3.0.jar*"/>
+ <include name="xmlbeans-2.*.jar*"/>
</fileset>
<fileset dir="${compile.lib}">
<include name="xercesImpl-*.jar"/>
<target name="fetch-ooxml-jars" depends="check-ooxml-jars" unless="ooxml.jars.present">
<mkdir dir="${ooxml.lib}"/>
<downloadfile src="${ooxml.curvesapi.url}" dest="${ooxml.curvesapi.jar}"/>
- <downloadfile src="${ooxml.xmlbeans.url}" dest="${ooxml.xmlbeans.jar}.orig"/>
+ <downloadfile src="${ooxml.xmlbeans.url}" dest="${ooxml.xmlbeans.jar}"/>
<downloadfile src="${ooxml.commons-compress.url}" dest="${ooxml.commons-compress.jar}"/>
- <!-- remove piccolo parser, so we don't use unsafe calls to it instead of using jaxp -->
- <zip destfile="${ooxml.xmlbeans.jar}">
- <zipfileset src="${ooxml.xmlbeans.jar}.orig" excludes="org/apache/xmlbeans/impl/piccolo/**"/>
- </zip>
</target>
<target name="check-svn-jars">
<condition property="svn.jars.present">
<taskdef name="xmlbean"
classname="org.apache.xmlbeans.impl.tool.XMLBean"
- classpath="${ooxml.xmlbeans.jar}.orig"/>
+ classpath="${ooxml.xmlbeans.jar}"/>
<property name="xmlbean.xsds.dir" location="build/xmlbean-xsds"/>
<property name="xmlbean.sources.dir" location="build/xmlbean-sources"/>
nopvr="@{nopvr}"
>
<classpath>
- <path location="${ooxml.xmlbeans.jar}.orig"/>
+ <path location="${ooxml.xmlbeans.jar}"/>
</classpath>
</xmlbean>
<globmapper from="*" to="${zipdir}/lib/*"/>
</mappedresources>
<mappedresources cache="true">
- <fileset dir="${ooxml.lib}" includes="xmlbeans-2.6.0.jar.orig,curvesapi-*.jar"/>
- <regexpmapper from="^(.*\.jar)(\.orig)?$$" to="${zipdir}/ooxml-lib/\1"/>
+ <fileset dir="${ooxml.lib}" includes="xmlbeans-3.0.0.jar,curvesapi-*.jar"/>
+ <regexpmapper from="^(.*\.jar)$$" to="${zipdir}/ooxml-lib/\1"/>
</mappedresources>
<mappedresources cache="true">
<fileset dir="${dist.dir}/maven" includes="**/*.jar" excludes="**/*-javadoc.jar,**/*-sources.jar"/>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
- <version>2.6.0</version>
+ <version>3.0.0</version>
</dependency>
</dependencies>
</project>
<sonar.scm.disabled>true</sonar.scm.disabled>
<!-- define some of the third-party or plugin-versions globally to use the same in all modules -->
- <xmlbeans.version>2.6.0</xmlbeans.version>
+ <xmlbeans.version>3.0.0</xmlbeans.version>
<junit.version>4.12</junit.version>
<xmlunit.version>2.5.1</xmlunit.version>
<mockito.version>2.13.0</mockito.version>
</fileset>
<fileset dir="../../ooxml-lib">
<include name="ooxml-schemas-*.jar"/>
- <include name="xmlbeans-*.jar"/>
- <exclude name="xmlbeans-2.3.*.jar"/>
+ <include name="xmlbeans-3.*.jar"/>
+ <exclude name="xmlbeans-2.*.jar"/>
</fileset>
</path>
--- /dev/null
+package org.apache.poi.xssf.streaming;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.util.TempFile;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class TestSXSSFUnicodeSurrogates {
+
+ private static String unicodeText = "𝝊𝝋𝝌𝝍𝝎𝝏𝝐𝝑𝝒𝝓𝝔𝝕𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮𝝯𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺";
+
+ @Test
+ public void testWriteUnicodeSurrogates() throws IOException {
+ String sheetName = "Sheet1";
+ File tf = TempFile.createTempFile("poi-xmlbeans-test", ".xlsx");
+ try (SXSSFWorkbook wb = new SXSSFWorkbook()) {
+ Sheet sheet = wb.createSheet(sheetName);
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ cell.setCellValue(unicodeText);
+ try (FileOutputStream os = new FileOutputStream(tf)) {
+ wb.write(os);
+ }
+ try (FileInputStream fis = new FileInputStream(tf);
+ XSSFWorkbook wb2 = new XSSFWorkbook(fis)) {
+ Sheet sheet2 = wb2.getSheet(sheetName);
+ Cell cell2 = sheet2.getRow(0).getCell(0);
+ Assert.assertEquals(unicodeText, cell2.getStringCellValue());
+ }
+ } finally {
+ tf.delete();
+ }
+ }
+}
--- /dev/null
+package org.apache.poi.xssf.usermodel;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.util.TempFile;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+public class TestXSSFUnicodeSurrogates {
+
+ private static String unicodeText = "𝝊𝝋𝝌𝝍𝝎𝝏𝝐𝝑𝝒𝝓𝝔𝝕𝝖𝝗𝝘𝝙𝝚𝝛𝝜𝝝𝝞𝝟𝝠𝝡𝝢𝝣𝝤𝝥𝝦𝝧𝝨𝝩𝝪𝝫𝝬𝝭𝝮𝝯𝝰𝝱𝝲𝝳𝝴𝝵𝝶𝝷𝝸𝝹𝝺";
+
+ @Test
+ public void testWriteUnicodeSurrogates() throws IOException {
+ String sheetName = "Sheet1";
+ File tf = TempFile.createTempFile("poi-xmlbeans-test", ".xlsx");
+ try (XSSFWorkbook wb = new XSSFWorkbook()) {
+ Sheet sheet = wb.createSheet(sheetName);
+ Row row = sheet.createRow(0);
+ Cell cell = row.createCell(0);
+ cell.setCellValue(unicodeText);
+ try (FileOutputStream os = new FileOutputStream(tf)) {
+ wb.write(os);
+ }
+ try (FileInputStream fis = new FileInputStream(tf);
+ XSSFWorkbook wb2 = new XSSFWorkbook(fis)) {
+ Sheet sheet2 = wb2.getSheet(sheetName);
+ Cell cell2 = sheet2.getRow(0).getCell(0);
+ Assert.assertEquals(unicodeText, cell2.getStringCellValue());
+ }
+ } finally {
+ tf.delete();
+ }
+ }
+}
+