Browse Source

Merge pull request #282 in CORE/base-third from ~HARRISON/base-third:feature/10.0 to feature/10.0

* commit '2581cb327ad8b04967c50f84c7f7b1cd8c20ca99':
  CHART-10607 linux下缺失了系统供应商信息的文件会导致栈溢出
  REPORT-20433 html片段导出table表格被压缩
  REPORT-20372 CVE-2017-5644 fix
  CUSTBUG-43276 pdf导出后。html显示的图片被裁切了
  DEC-8889 jackson高危漏洞
  KERNER-724 j2v8升级
  DEC-8173 脏数据导致quartz启动失败
  DEC-7569 定时调度模块启动异常
  无JIRA任务 打包失败,job未初始化
  DEC-7376 定时调度任务表中存在脏数据的时候,不能影响整个scheduler
  DEC-7376 定时调度任务表中存在脏数据的时候,不能影响整个scheduler
  无 jira 任务, final --> persist 回复一下
  无 jira 任务, final --> persist 少了一个空行
  无 jira 任务, 解决打包冲突 还是有问题, 删掉 gradle
  无 jira 任务, 解决打包冲突
  升级apache工具类
  build.third_step0.gradle edited online with Bitbucket
research/11.0
ju.ju 5 years ago
parent
commit
1dc9cf5efe
  1. 2
      .gitignore
  2. 3
      build.third_step0.gradle
  3. 32
      fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java
  4. 7
      fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfChunk.java
  5. 8
      fine-j2v8/src/com/eclipsesource/v8/PlatformDetector.java
  6. 55
      fine-poi/src/com/fr/third/v2/org/apache/poi/POIXMLTypeLoader.java
  7. 65
      fine-poi/src/com/fr/third/v2/org/apache/poi/util/DocumentHelper.java

2
.gitignore vendored

@ -1,3 +1,3 @@
*.iml
.idea/
.gradle/
.gradle/

3
build.third_step0.gradle

@ -53,8 +53,7 @@ configurations {
}
dependencies {
// @branch -
thirdjar "com.fr.third:fine-third:10.0-FEATURE-SNAPSHOT"
thirdjar "com.fr.third:fine-third-base:10.0-BASE-SNAPSHOT"
sigar "com.fr.third:sigar:1.6.0"
testCompile 'junit:junit:4.12'
}

32
fine-itext/src/com/fr/third/v2/lowagie/text/html/simpleparser/IncTable.java

@ -72,20 +72,20 @@ public class IncTable {
public IncTable(HashMap props) {
this.props.putAll(props);
}
public void addCol(PdfPCell cell) {
if (cols == null)
cols = new ArrayList();
cols.add(cell);
}
public void addCols(ArrayList ncols) {
if (cols == null)
cols = new ArrayList(ncols);
else
cols.addAll(ncols);
}
public void endRow(float rowHeight) {
rowHeights.add(rowHeight);
if (cols != null) {
@ -94,27 +94,35 @@ public class IncTable {
cols = null;
}
}
public ArrayList getRows() {
return rows;
}
public PdfPTable buildTable() {
if (rows.isEmpty())
return new PdfPTable(1);
int ncol = 0;
ArrayList c0 = (ArrayList)rows.get(0);
ArrayList<Float> colWidths = new ArrayList<Float>();
float widthSum = 0;
for (int k = 0; k < c0.size(); ++k) {
PdfPCell pCell = ((PdfPCell)c0.get(k));
int cellCols = pCell.getColspan();
ncol += cellCols;
//不取 0 ,后面可能需要求比值
float styleWidth = pCell.getStyleWidth();
if(cellCols > 1){
float avgWidth = styleWidth / cellCols;
float width = 0 == avgWidth ? 1 : avgWidth;
widthSum = width * cellCols;
for(int a = 0; a < cellCols ; a++){
colWidths.add(pCell.getStyleWidth()/cellCols);
colWidths.add(width);
}
}else {
colWidths.add(pCell.getStyleWidth());
float width = 0 == styleWidth ? 1 : styleWidth;
widthSum += width;
colWidths.add(width);
}
}
@ -132,8 +140,8 @@ public class IncTable {
//解析单元格宽度
float totalWidth = CSSUtils.parseFloat(width);
float[] floats = new float[colWidths.size()];
for (int a = 0; a < colWidths.size(); a++){
floats[a] = colWidths.get(a);
for (int a = 0; a < colWidths.size(); a++) {
floats[a] = totalWidth * colWidths.get(a) / widthSum;
}
//解析px数值
table.setTotalWidth(totalWidth);
@ -161,11 +169,11 @@ public class IncTable {
return table;
}
public void processRowHeight(PdfPTable table){
Float height = CSSUtils.parseFloat((String)props.get("height"));
public void processRowHeight(PdfPTable table) {
Float height = CSSUtils.parseFloat((String) props.get("height"));
Float eachHeight = height / table.getRows().size();
//调整行高
for(int a = 0; a < rowHeights.size(); a++){
for (int a = 0; a < rowHeights.size(); a++) {
table.getRow(a).setStyleHeight(Math.max(eachHeight, rowHeights.get(a)));
}
}

7
fine-itext/src/com/fr/third/v2/lowagie/text/pdf/PdfChunk.java

@ -788,10 +788,11 @@ public class PdfChunk {
public String toHtmlString() {
StringBuffer htmlString = new StringBuffer();
if(this.isImage()){
htmlString.append("<img src='").append(image.getSrcString()).append("'").append("/>");
if (this.isImage()) {
htmlString.append("<img src='").append(image.getSrcString()).append("'").
append(" style='width:").append(image.getPlainWidth()).append("px").
append(" height:").append(image.getPlainHeight()).append("px'").append("/>");
return htmlString.toString();
}
//todo 需要添加其他样式属性
htmlString.append("<span style='");

8
fine-j2v8/src/com/eclipsesource/v8/PlatformDetector.java

@ -125,7 +125,9 @@ public class PlatformDetector {
return "google";
}
throw new UnsatisfiedLinkError("Unsupported vendor: " + getName());
//如果if条件全部不符合,就会陷入死循环,代码存在风险
//throw new UnsatisfiedLinkError("Unsupported vendor: " + getName());
return "";
}
private static String getLinuxOsReleaseId() {
@ -144,7 +146,9 @@ public class PlatformDetector {
return parseLinuxRedhatReleaseFile(file);
}
throw new UnsatisfiedLinkError("Unsupported linux vendor: " + getName());
//linux系统下如果缺失/etc/os-release,/usr/lib/os-release,/etc/redhat-release三个文件,就会和getName方法就会一直互相调用
//throw new UnsatisfiedLinkError("Unsupported linux vendor: " + getName());
return "";
}
private static String parseLinuxOsReleaseFile(final File file) {

55
fine-poi/src/com/fr/third/v2/org/apache/poi/POIXMLTypeLoader.java

@ -18,9 +18,11 @@
package com.fr.third.v2.org.apache.poi;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.StringReader;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
@ -28,6 +30,7 @@ import java.util.Map;
import javax.xml.stream.XMLStreamReader;
import com.fr.third.v2.org.apache.poi.util.DocumentHelper;
import com.fr.third.v2.org.apache.xmlbeans.SchemaType;
import com.fr.third.v2.org.apache.xmlbeans.XmlBeans;
import com.fr.third.v2.org.apache.xmlbeans.XmlException;
@ -35,19 +38,26 @@ import com.fr.third.v2.org.apache.xmlbeans.XmlObject;
import com.fr.third.v2.org.apache.xmlbeans.XmlOptions;
import com.fr.third.v2.org.apache.xmlbeans.xml.stream.XMLInputStream;
import com.fr.third.v2.org.apache.xmlbeans.xml.stream.XMLStreamException;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
@SuppressWarnings("deprecation")
public class POIXMLTypeLoader {
public static final XmlOptions DEFAULT_XML_OPTIONS;
static {
DEFAULT_XML_OPTIONS = new XmlOptions();
DEFAULT_XML_OPTIONS.setSaveOuter();
DEFAULT_XML_OPTIONS.setUseDefaultNamespace();
DEFAULT_XML_OPTIONS.setSaveAggressiveNamespaces();
DEFAULT_XML_OPTIONS.setCharacterEncoding("UTF-8");
DEFAULT_XML_OPTIONS.setLoadEntityBytesLimit(4096);
// Piccolo is disabled for POI builts, i.e. JAXP is used for parsing
// so only user code using XmlObject/XmlToken.Factory.parse
// directly can bypass the entity check, which is probably unlikely (... and not within our responsibility :))
// DEFAULT_XML_OPTIONS.setLoadEntityBytesLimit(4096);
Map<String, String> map = new HashMap<String, String>();
map.put("http://schemas.openxmlformats.org/drawingml/2006/main", "a");
@ -66,10 +76,9 @@ public class POIXMLTypeLoader {
map.put("urn:schemas-microsoft-com:vml", "v");
DEFAULT_XML_OPTIONS.setSaveSuggestedPrefixes(Collections.unmodifiableMap(map));
}
private static XmlOptions getXmlOptions(XmlOptions options) {
XmlOptions opt = (options == null) ? DEFAULT_XML_OPTIONS : options;
return opt;
return options == null ? DEFAULT_XML_OPTIONS : options;
}
public static XmlObject newInstance(SchemaType type, XmlOptions options) {
@ -77,19 +86,38 @@ public class POIXMLTypeLoader {
}
public static XmlObject parse(String xmlText, SchemaType type, XmlOptions options) throws XmlException {
return XmlBeans.getContextTypeLoader().parse(xmlText, type, getXmlOptions(options));
try {
return parse(new StringReader(xmlText), type, options);
} catch (IOException e) {
throw new XmlException("Unable to parse xml bean", e);
}
}
public static XmlObject parse(File file, SchemaType type, XmlOptions options) throws XmlException, IOException {
return XmlBeans.getContextTypeLoader().parse(file, type, getXmlOptions(options));
InputStream is = new FileInputStream(file);
try {
return parse(is, type, options);
} finally {
is.close();
}
}
public static XmlObject parse(URL file, SchemaType type, XmlOptions options) throws XmlException, IOException {
return XmlBeans.getContextTypeLoader().parse(file, type, getXmlOptions(options));
InputStream is = file.openStream();
try {
return parse(is, type, options);
} finally {
is.close();
}
}
public static XmlObject parse(InputStream jiois, SchemaType type, XmlOptions options) throws XmlException, IOException {
return XmlBeans.getContextTypeLoader().parse(jiois, type, getXmlOptions(options));
try {
Document doc = DocumentHelper.readDocument(jiois);
return XmlBeans.getContextTypeLoader().parse(doc.getDocumentElement(), type, getXmlOptions(options));
} catch (SAXException e) {
throw new IOException("Unable to parse xml bean", e);
}
}
public static XmlObject parse(XMLStreamReader xsr, SchemaType type, XmlOptions options) throws XmlException {
@ -97,7 +125,12 @@ public class POIXMLTypeLoader {
}
public static XmlObject parse(Reader jior, SchemaType type, XmlOptions options) throws XmlException, IOException {
return XmlBeans.getContextTypeLoader().parse(jior, type, getXmlOptions(options));
try {
Document doc = DocumentHelper.readDocument(new InputSource(jior));
return XmlBeans.getContextTypeLoader().parse(doc.getDocumentElement(), type, getXmlOptions(options));
} catch (SAXException e) {
throw new XmlException("Unable to parse xml bean", e);
}
}
public static XmlObject parse(Node node, SchemaType type, XmlOptions options) throws XmlException {
@ -107,8 +140,8 @@ public class POIXMLTypeLoader {
public static XmlObject parse(XMLInputStream xis, SchemaType type, XmlOptions options) throws XmlException, XMLStreamException {
return XmlBeans.getContextTypeLoader().parse(xis, type, getXmlOptions(options));
}
public static XMLInputStream newValidatingXMLInputStream ( XMLInputStream xis, SchemaType type, XmlOptions options ) throws XmlException, XMLStreamException {
public static XMLInputStream newValidatingXMLInputStream(XMLInputStream xis, SchemaType type, XmlOptions options) throws XmlException, XMLStreamException {
return XmlBeans.getContextTypeLoader().newValidatingXMLInputStream(xis, type, getXmlOptions(options));
}
}

65
fine-poi/src/com/fr/third/v2/org/apache/poi/util/DocumentHelper.java

@ -29,12 +29,55 @@ import javax.xml.stream.events.Namespace;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public final class DocumentHelper {
private static POILogger logger = POILogFactory.getLogger(DocumentHelper.class);
private DocumentHelper() {}
private DocumentHelper() {
}
private static class DocHelperErrorHandler implements ErrorHandler {
public void warning(SAXParseException exception) throws SAXException {
printError(POILogger.WARN, exception);
}
public void error(SAXParseException exception) throws SAXException {
printError(POILogger.ERROR, exception);
}
public void fatalError(SAXParseException exception) throws SAXException {
printError(POILogger.FATAL, exception);
throw exception;
}
/**
* Prints the error message.
*/
private void printError(int type, SAXParseException ex) {
StringBuilder sb = new StringBuilder();
String systemId = ex.getSystemId();
if (systemId != null) {
int index = systemId.lastIndexOf('/');
if (index != -1)
systemId = systemId.substring(index + 1);
sb.append(systemId);
}
sb.append(':');
sb.append(ex.getLineNumber());
sb.append(':');
sb.append(ex.getColumnNumber());
sb.append(": ");
sb.append(ex.getMessage());
logger.log(type, sb.toString(), ex);
}
}
/**
* Creates a new document builder, with sensible defaults
@ -43,6 +86,7 @@ public final class DocumentHelper {
try {
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
documentBuilder.setEntityResolver(SAXHelper.IGNORING_ENTITY_RESOLVER);
documentBuilder.setErrorHandler(new DocHelperErrorHandler());
return documentBuilder;
} catch (ParserConfigurationException e) {
throw new IllegalStateException("cannot create a DocumentBuilder", e);
@ -50,6 +94,7 @@ public final class DocumentHelper {
}
private static final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
static {
documentBuilderFactory.setNamespaceAware(true);
documentBuilderFactory.setValidating(false);
@ -66,10 +111,10 @@ public final class DocumentHelper {
logger.log(POILogger.WARN, "Cannot set SAX feature because outdated XML parser in classpath", feature, ame);
}
}
private static void trySetXercesSecurityManager(DocumentBuilderFactory documentBuilderFactory) {
// Try built-in JVM one first, standalone if not
for (String securityManagerClassName : new String[] {
for (String securityManagerClassName : new String[]{
"com.sun.org.apache.xerces.internal.util.SecurityManager",
"org.apache.xerces.util.SecurityManager"
}) {
@ -89,13 +134,25 @@ public final class DocumentHelper {
/**
* Parses the given stream via the default (sensible)
* DocumentBuilder
*
* @param inp Stream to read the XML data from
* @return the parsed Document
* @return the parsed Document
*/
public static Document readDocument(InputStream inp) throws IOException, SAXException {
return newDocumentBuilder().parse(inp);
}
/**
* Parses the given stream via the default (sensible)
* DocumentBuilder
*
* @param inp sax source to read the XML data from
* @return the parsed Document
*/
public static Document readDocument(InputSource inp) throws IOException, SAXException {
return newDocumentBuilder().parse(inp);
}
// must only be used to create empty documents, do not use it for parsing!
private static final DocumentBuilder documentBuilderSingleton = newDocumentBuilder();

Loading…
Cancel
Save