我面临以下例外:
Mar 26, 2012 1:20:34 PM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.
Could not load org.apache.log4j.spi.ThrowableInformation.
The eventual following stack trace is caused by an error thrown for debugging purposes
as well as to attempt to terminate the thread which caused the illegal access, and has
no functional impact.
java.lang.IllegalStateException
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1562)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:165)
at org.apache.log4j.Category.forcedLog(Category.java:391)
at org.apache.log4j.Category.error(Category.java:322)
at com.abc.supervisionmanager.Monitoring.run(Monitoring.java:205)
at java.lang.Thread.run(Thread.java:662)
Exception in thread "Thread_Monitoring" java.lang.NoClassDefFoundError: org/apache/log4j/spi/ThrowableInformation
at org.apache.log4j.spi.LoggingEvent.<init>(LoggingEvent.java:165)
at …Run Code Online (Sandbox Code Playgroud) 我试图了解应该如何使用avro的逻辑类型。首先,让我举例说明我要达到的目标。我想写一个新的Logical Type(RegExLogicalType)来验证输入字符串并接受它或引发一些异常。
或让我们说说我期望以这种方式使用的现有受支持的avro逻辑类型(十进制)之一:
org.apache.avro.AvroRuntimeException: Field test_decimal type:BYTES pos:2 not set and has no default value我在文档中找到的只是谈论读/反序列化,而我不知道写/反序列化
语言实现在读取时必须忽略未知的逻辑类型,并应使用基础的Avro类型。如果逻辑类型无效,例如小数位数大于其精度的小数位数,则实现应忽略该逻辑类型并使用基础的Avro类型。
我不希望上面提到的序列化/反序列化行为,我需要有一些与XSD限制(模式)等效的东西,用于根据模式验证数据
如果架构如下,则显示在avro中
{"namespace": "com.stackoverflow.avro",
"type": "record",
"name": "Request",
"fields": [
{"name": "caller_jwt", "type": "string", "logicalType": "regular-expression", "pattern": "[a-zA-Z0-9]*\\.[a-zA-Z0-9]*\\.[a-zA-Z0-9]*"},
{"name": "test_decimal", "type": "bytes", "logicalType": "decimal", "precision": 4, "scale": 2}
]
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试构建一个对象并将其序列化为:
DatumWriter<Request> userDatumWriter = new SpecificDatumWriter<>(Request.class);
DataFileWriter<Request> dataFileWriter = new DataFileWriter<>(userDatumWriter);
ByteBuffer badDecimal = ByteBuffer.wrap("bad".getBytes());
Request request = Request.newBuilder()
.setTestDecimal(badDecimal) // bad decimal
.setCallerJwt("qsdsqdqsd").build(); // bad value according to …Run Code Online (Sandbox Code Playgroud)