Code Monkey home page Code Monkey logo

xxl-tool's Introduction

XXL-TOOL

XXL-TOOL, a series of tools that keep Java efficient.
-- Home Page --

Introduction

XXL-Tool is a Java tool library that makes Java development more efficient. The tools include "collection, cache, concurrency, string, IO, Excel, emoji ..." and so on.

XXL-TOOL 是一个Java工具类库,致力于让Java开发更高效。包含 “集合、缓存、并发、字符串、IO、Excel、Emoji……” 等数十个模块。

Documentation

Modules

模块 说明
Core模块 包含集合、缓存、日期……等基础组件工具
Excel模块 一个灵活的Java对象和Excel文档相互转换的工具。一行代码完成Java对象和Excel之间的转换
Emoji模块 一个灵活可扩展的Emoji表情编解码库,可快速实现Emoji表情的编解码
Json模块 json序列化、反序列化库
Fiber模块 Java协程库,基于quasar封装实现
... ...

Communication

Contributing

Contributions are welcome! Open a pull request to fix a bug, or open an Issue to discuss a new feature or change.

欢迎参与项目贡献!比如提交PR修复一个bug,或者新建 Issue 讨论新特性或者变更。

接入登记

更多接入的公司,欢迎在 登记地址 登记,登记仅仅为了产品推广。

Copyright and License

This product is open source and free, and will continue to provide free community technical support. Individual or enterprise users are free to access and use.

  • Licensed under the Apache License, Version 2.0.
  • Copyright (c) 2015-present, xuxueli.

产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。

Donate

No matter how much the amount is enough to express your thought, thank you very much :) To donate

无论金额多少都足够表达您这份心意,非常感谢 :) 前往捐赠

xxl-tool's People

Contributors

xuxueli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xxl-tool's Issues

Cannot get a STRING value from a NUMERIC cell

java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:1077)
at org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:395)
at org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:347)
at com.xuxueli.poi.excel.ExcelImportUtil.importExcel(ExcelImportUtil.java:70)
at com.xuxueli.poi.excel.ExcelImportUtil.importExcel(ExcelImportUtil.java:135)

提一些使用建议和遇到的问题

1:导入结果如果存在数据为空的格子,就会报空指针问题,如果sheet名称不对,也会单纯的报空指针
2:导出列并非与导入列头对应,能否支持导入列头与Bean相对应
3:Bean中如果添加一个与导出项目无关的属性,则肯定会报错,无论是否添加注解

对于将excel转换为List<Bean>的一个建议

将excel转为List必须要保证Bean中的属性的顺序跟excel的列的顺序保持一致,是不是有点太死板了。如果不保持一致,就会导致List出现错位的情况。

StackOverflowError caused by xxl-tool parsing of untrusted JSON String

StackOverflowError caused by xxl-tool parsing of untrusted JSON String

Description

Using xxl-tool to parse untrusted JSON String may be vulnerable to denial of service (DOS) attacks. If the parser is running on user supplied input, an attacker may supply content that causes the parser to crash by stackoverflow.

Error Log

Exception in thread "main" java.lang.StackOverflowError
	at java.base/java.lang.String.charAt(String.java:693)
	at com.xxl.tool.json.reader.BasicJsonReader.trimTrailingCharacter(BasicJsonReader.java:168)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:75)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)
	at com.xxl.tool.json.reader.BasicJsonReader.parseInternal(BasicJsonReader.java:53)
	at com.xxl.tool.json.reader.BasicJsonReader.parseMapInternal(BasicJsonReader.java:79)

PoC

        <dependency>
            <groupId>com.xuxueli</groupId>
            <artifactId>xxl-tool</artifactId>
            <version>1.2.0</version>
        </dependency>
import com.xxl.tool.json.reader.BasicJsonReader;

public class PoC {
    public final static String TOO_DEEP_Object = "{" + _nestedDoc(10000, "\"a\": { ", "} ", "1") + "}";

    public static String _nestedDoc(int nesting, String open, String close, String content) {
        StringBuilder sb = new StringBuilder(nesting * (open.length() + close.length()));
        for (int i = 0; i < nesting; ++i) {
            sb.append(open);
            if ((i & 31) == 0) {
                sb.append("\n");
            }
        }
        sb.append("\n").append(content).append("\n");
        for (int i = 0; i < nesting; ++i) {
            sb.append(close);
            if ((i & 31) == 0) {
                sb.append("\n");
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        BasicJsonReader basicJsonReader = new BasicJsonReader();
//        basicJsonReader.parseList(NestUtil.TOO_DEEP_Array);
        basicJsonReader.parseMap(TOO_DEEP_Object);
    }
}

Rectification Solution

  1. Refer to the solution of jackson-databind: Add the depth variable to record the current parsing depth. If the parsing depth exceeds a certain threshold, an exception is thrown. (FasterXML/jackson-databind@fcfc499)

  2. Refer to the GSON solution: Change the recursive processing on deeply nested arrays or JSON objects to stack+iteration processing.((google/gson@2d01d6a20f39881c692977564c1ea591d9f39027))

References

  1. jettison-json/jettison#52
  2. https://github.com/jettison-json/jettison/pull/53/files

配合代码生成器

是否可以提供一个mybatis逆向工程,在生成实体的时候进行可配置生成excel导出注解。只是一个想法。

希望能支持枚举类型

type must be Integer not int Long not long etc, type=class cn.xxx.OprTypeEnum

at com.xuxueli.poi.excel.util.FieldReflectionUtil.formatValue(FieldReflectionUtil.java:175)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.