2.7.0-SNAPSHOT
This commit is contained in:
83
src/test/java/org/redkale/test/convert/ConvertCoderTest.java
Normal file
83
src/test/java/org/redkale/test/convert/ConvertCoderTest.java
Normal file
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.math.BigInteger;
|
||||
import java.util.*;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.ConvertCoder;
|
||||
import org.redkale.convert.bson.BsonConvert;
|
||||
import org.redkale.convert.ext.BigIntegerSimpledCoder.BigIntegerHexJsonSimpledCoder;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class ConvertCoderTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
ConvertCoderTest test = new ConvertCoderTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
JsonConvert convert = JsonConvert.root();
|
||||
BigMessage msg = new BigMessage();
|
||||
msg.big = new BigInteger("255");
|
||||
msg.big2 = new BigInteger("255");
|
||||
msg.big3 = new BigInteger("255");
|
||||
msg.map = new HashMap<>();
|
||||
msg.map.put("haha", new BigInteger("254"));
|
||||
|
||||
BigMessage2 msg2 = new BigMessage2();
|
||||
msg2.big = new BigInteger("255");
|
||||
msg2.big2 = new BigInteger("255");
|
||||
msg2.big3 = new BigInteger("255");
|
||||
msg2.map = new HashMap<>();
|
||||
msg2.map.put("haha", new BigInteger("254"));
|
||||
|
||||
System.out.println(convert.convertTo(msg));
|
||||
String json = "{\"big\":\"0xff\",\"big2\":\"0xff\",\"big3\":\"255\",\"map\":{\"haha\":\"0xfe\"},\"num1\":0}";
|
||||
if (!main) Assertions.assertEquals(convert.convertTo(msg), json);
|
||||
BigMessage msg12 = convert.convertFrom(BigMessage.class, json);
|
||||
if (!main) Assertions.assertEquals(convert.convertTo(msg12), json);
|
||||
|
||||
byte[] bs1 = BsonConvert.root().convertTo(msg);
|
||||
byte[] bs2 = BsonConvert.root().convertTo(msg2);
|
||||
if (!main) Assertions.assertEquals(Arrays.toString(bs1), Arrays.toString(bs2));
|
||||
}
|
||||
|
||||
public static class BigMessage {
|
||||
|
||||
@ConvertCoder(coder = BigIntegerHexJsonSimpledCoder.class)
|
||||
public BigInteger big;
|
||||
|
||||
@ConvertCoder(encoder = BigIntegerHexJsonSimpledCoder.class, decoder = BigIntegerHexJsonSimpledCoder.class)
|
||||
public BigInteger big2;
|
||||
|
||||
public BigInteger big3;
|
||||
|
||||
public int num1;
|
||||
|
||||
@ConvertCoder(coder = BigIntegerHexJsonSimpledCoder.class)
|
||||
public Map<String, BigInteger> map;
|
||||
}
|
||||
|
||||
public static class BigMessage2 {
|
||||
|
||||
public BigInteger big;
|
||||
|
||||
public BigInteger big2;
|
||||
|
||||
public BigInteger big3;
|
||||
|
||||
public int num1;
|
||||
|
||||
public Map<String, BigInteger> map;
|
||||
}
|
||||
}
|
||||
222
src/test/java/org/redkale/test/convert/CustMessage2Test.java
Normal file
222
src/test/java/org/redkale/test/convert/CustMessage2Test.java
Normal file
@@ -0,0 +1,222 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
import static java.lang.annotation.ElementType.TYPE;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import java.util.function.*;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class CustMessage2Test {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
CustMessage2Test test = new CustMessage2Test();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
final BiFunction<Attribute, Object, Object> objFieldFunc = (Attribute t, Object u) -> {
|
||||
if (t.field().equals("retinfo")) return null;
|
||||
return t.get(u);
|
||||
};
|
||||
OnPlayerLeaveMessage msg1 = new OnPlayerLeaveMessage(100, "haha");
|
||||
System.out.println(msg1);
|
||||
OnPlayerLeaveMessage2 msg2 = new OnPlayerLeaveMessage2(100, "haha");
|
||||
System.out.println(msg2);
|
||||
if (!main) Assertions.assertEquals(msg1.toString(), msg2.toString());
|
||||
System.out.println();
|
||||
|
||||
String json = msg1.toString();
|
||||
OnPlayerLeaveMessage2 newmsg2 = JsonConvert.root().convertFrom(OnPlayerLeaveMessage2.class, json);
|
||||
System.out.println(newmsg2);
|
||||
System.out.println();
|
||||
|
||||
JsonConvert convert = JsonConvert.root().newConvert(objFieldFunc);
|
||||
System.out.println(convert.convertTo(msg1));
|
||||
System.out.println(convert.convertTo(msg2));
|
||||
if (!main) Assertions.assertEquals(convert.convertTo(msg1), convert.convertTo(msg2));
|
||||
|
||||
}
|
||||
|
||||
public static interface BaseMessage {
|
||||
|
||||
@Inherited
|
||||
@Documented
|
||||
@Target({TYPE})
|
||||
@Retention(RUNTIME)
|
||||
public @interface MessageName {
|
||||
|
||||
String value();
|
||||
}
|
||||
|
||||
public static String getMessageName(Class<?> clazz) {
|
||||
MessageName mn = clazz.getAnnotation(MessageName.class);
|
||||
if (mn != null) return mn.value();
|
||||
char[] fieldChars = clazz.getSimpleName().toCharArray();
|
||||
fieldChars[0] = Character.toLowerCase(fieldChars[0]);
|
||||
return new String(fieldChars);
|
||||
}
|
||||
|
||||
public static Encodeable<Writer, BaseMessage> createConvertEnCoder(final ConvertFactory factory, final Class<? extends BaseMessage> clazz) {
|
||||
Encodeable valEncoder = factory.createEncoder(clazz, true);
|
||||
final String eventName = getMessageName(clazz);
|
||||
ObjectEncoder encoder = new ObjectEncoder<Writer, BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitEnMember(ConvertFactory factory) {
|
||||
Function func1 = t -> eventName;
|
||||
Attribute attribute1 = Attribute.create(clazz, "event", String.class, func1, null);
|
||||
EnMember member1 = new EnMember(attribute1, factory.loadEncoder(String.class), null, null);
|
||||
setIndex(member1, 1);
|
||||
setPosition(member1, 1);
|
||||
initForEachEnMember(factory, member1);
|
||||
|
||||
Function func2 = t -> t;
|
||||
Attribute attribute2 = Attribute.create(clazz, "result", clazz, func2, null);
|
||||
EnMember member2 = new EnMember(attribute2, valEncoder, null, null);
|
||||
setIndex(member2, 2);
|
||||
setPosition(member2, 2);
|
||||
initForEachEnMember(factory, member2);
|
||||
this.members = new EnMember[]{member1, member2};
|
||||
}
|
||||
};
|
||||
encoder.init(factory);
|
||||
return encoder;
|
||||
}
|
||||
|
||||
public static Decodeable<Reader, BaseMessage> createConvertDeCoder(final ConvertFactory factory, final Class<? extends BaseMessage> clazz) {
|
||||
Decodeable valDecoder = factory.createDecoder(clazz, true);
|
||||
final String eventName = getMessageName(clazz);
|
||||
ObjectDecoder decoder = new ObjectDecoder<Reader, BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitDeMember(ConvertFactory factory) {
|
||||
Function func1 = t -> eventName;
|
||||
Attribute attribute1 = Attribute.create(clazz, "event", String.class, func1, null);
|
||||
DeMember member1 = new DeMember(attribute1, factory.loadDecoder(String.class), null, null);
|
||||
setIndex(member1, 1);
|
||||
setPosition(member1, 1);
|
||||
initForEachDeMember(factory, member1);
|
||||
|
||||
this.creator = (Creator) objs -> new Object[1];
|
||||
Function func2 = t -> t;
|
||||
BiConsumer consumer2 = (t, v) -> ((Object[]) t)[0] = v;
|
||||
Attribute attribute2 = Attribute.create(clazz, "result", clazz, func2, consumer2);
|
||||
DeMember member2 = new DeMember(attribute2, valDecoder, null, null);
|
||||
setIndex(member2, 2);
|
||||
setPosition(member2, 2);
|
||||
initForEachDeMember(factory, member2);
|
||||
this.members = new DeMember[]{member1, member2};
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseMessage convertFrom(Reader in) {
|
||||
Object result = (Object) super.convertFrom(in);
|
||||
return (BaseMessage) ((Object[]) result)[0];
|
||||
}
|
||||
};
|
||||
decoder.init(factory);
|
||||
return decoder;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@BaseMessage.MessageName("onPlayerLeaveMessage")
|
||||
public static class OnPlayerLeaveMessage2 implements BaseMessage {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveMessage2() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage2(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveMessage {
|
||||
|
||||
private String event = "onPlayerLeaveMessage";
|
||||
|
||||
private OnPlayerLeaveContent result;
|
||||
|
||||
public OnPlayerLeaveMessage() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid) {
|
||||
this.result = new OnPlayerLeaveContent(userid);
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid, String retinfo) {
|
||||
this.result = new OnPlayerLeaveContent(userid, retinfo);
|
||||
}
|
||||
|
||||
public String getEvent() {
|
||||
return event;
|
||||
}
|
||||
|
||||
public void setEvent(String event) {
|
||||
this.event = event;
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public void setResult(OnPlayerLeaveContent result) {
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveContent {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveContent() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid) {
|
||||
this.userid = userid;
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
196
src/test/java/org/redkale/test/convert/CustMessageTest.java
Normal file
196
src/test/java/org/redkale/test/convert/CustMessageTest.java
Normal file
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
import static java.lang.annotation.ElementType.*;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import java.util.function.*;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class CustMessageTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
CustMessageTest test = new CustMessageTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
final BiFunction<Attribute, Object, Object> objFieldFunc = (Attribute t, Object u) -> {
|
||||
if (t.field().equals("retinfo")) return null;
|
||||
return t.get(u);
|
||||
};
|
||||
OnPlayerLeaveMessage msg1 = new OnPlayerLeaveMessage(100, "haha");
|
||||
System.out.println(msg1);
|
||||
OnPlayerLeaveMessage2 msg2 = new OnPlayerLeaveMessage2(100, "haha");
|
||||
System.out.println(msg2);
|
||||
if (!main) Assertions.assertEquals(msg1.toString(), msg2.toString());
|
||||
System.out.println();
|
||||
|
||||
String json = msg1.toString();
|
||||
OnPlayerLeaveMessage2 newmsg2 = JsonConvert.root().convertFrom(OnPlayerLeaveMessage2.class, json);
|
||||
System.out.println(newmsg2);
|
||||
System.out.println();
|
||||
|
||||
JsonConvert convert = JsonConvert.root().newConvert(objFieldFunc);
|
||||
System.out.println(convert.convertTo(msg1));
|
||||
System.out.println(convert.convertTo(msg2));
|
||||
if (!main) Assertions.assertEquals(convert.convertTo(msg1), convert.convertTo(msg2));
|
||||
|
||||
}
|
||||
|
||||
public static interface BaseMessage {
|
||||
|
||||
@Inherited
|
||||
@Documented
|
||||
@Target({TYPE})
|
||||
@Retention(RUNTIME)
|
||||
public @interface MessageName {
|
||||
|
||||
String value();
|
||||
}
|
||||
|
||||
public static String getMessageName(Class<?> clazz) {
|
||||
MessageName mn = clazz.getAnnotation(MessageName.class);
|
||||
if (mn != null) return mn.value();
|
||||
char[] fieldChars = clazz.getSimpleName().toCharArray();
|
||||
fieldChars[0] = Character.toLowerCase(fieldChars[0]);
|
||||
return new String(fieldChars);
|
||||
}
|
||||
|
||||
public static Encodeable<Writer, BaseMessage> createConvertEnCoder(ConvertFactory factory, Class<?> clazz) {
|
||||
Encodeable valEncoder = factory.createEncoder(clazz, true);
|
||||
ObjectEncoder encoder = new ObjectEncoder<Writer, BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitEnMember(ConvertFactory factory) {
|
||||
Function func = t -> t;
|
||||
Attribute attribute = Attribute.create(clazz, getMessageName(clazz), clazz, func, null);
|
||||
EnMember member = new EnMember(attribute, valEncoder, null, null);
|
||||
setIndex(member, 1);
|
||||
setPosition(member, 1);
|
||||
initForEachEnMember(factory, member);
|
||||
this.members = new EnMember[]{member};
|
||||
}
|
||||
};
|
||||
encoder.init(factory);
|
||||
return encoder;
|
||||
}
|
||||
|
||||
public static Decodeable<Reader, BaseMessage> createConvertDeCoder(ConvertFactory factory, Class<?> clazz) {
|
||||
Decodeable valDecoder = factory.createDecoder(clazz, true);
|
||||
ObjectDecoder decoder = new ObjectDecoder<Reader, BaseMessage>(clazz) {
|
||||
@Override
|
||||
protected void afterInitDeMember(ConvertFactory factory) {
|
||||
this.creator = (Creator) objs -> new Object[1];
|
||||
Function func = t -> t;
|
||||
BiConsumer consumer = (t, v) -> ((Object[]) t)[0] = v;
|
||||
Attribute attribute = Attribute.create(clazz, getMessageName(clazz), clazz, func, consumer);
|
||||
DeMember member = new DeMember(attribute, valDecoder, null, null);
|
||||
setIndex(member, 1);
|
||||
setPosition(member, 1);
|
||||
initForEachDeMember(factory, member);
|
||||
this.members = new DeMember[]{member};
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseMessage convertFrom(Reader in) {
|
||||
Object result = (Object) super.convertFrom(in);
|
||||
return (BaseMessage) ((Object[]) result)[0];
|
||||
}
|
||||
};
|
||||
decoder.init(factory);
|
||||
return decoder;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@BaseMessage.MessageName("onPlayerLeaveMessage")
|
||||
public static class OnPlayerLeaveMessage2 implements BaseMessage {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveMessage2() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage2(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveMessage {
|
||||
|
||||
private OnPlayerLeaveContent onPlayerLeaveMessage;
|
||||
|
||||
public OnPlayerLeaveMessage() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid) {
|
||||
this.onPlayerLeaveMessage = new OnPlayerLeaveContent(userid);
|
||||
}
|
||||
|
||||
public OnPlayerLeaveMessage(int userid, String retinfo) {
|
||||
this.onPlayerLeaveMessage = new OnPlayerLeaveContent(userid, retinfo);
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent getOnPlayerLeaveMessage() {
|
||||
return onPlayerLeaveMessage;
|
||||
}
|
||||
|
||||
public void setOnPlayerLeaveMessage(OnPlayerLeaveContent onPlayerLeaveMessage) {
|
||||
this.onPlayerLeaveMessage = onPlayerLeaveMessage;
|
||||
}
|
||||
|
||||
public static class OnPlayerLeaveContent {
|
||||
|
||||
@ConvertColumn(index = 1)
|
||||
public int userid;
|
||||
|
||||
@ConvertColumn(index = 2)
|
||||
public String retinfo;
|
||||
|
||||
public OnPlayerLeaveContent() {
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid) {
|
||||
this.userid = userid;
|
||||
}
|
||||
|
||||
public OnPlayerLeaveContent(int userid, String retinfo) {
|
||||
this.userid = userid;
|
||||
this.retinfo = retinfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.util.*;
|
||||
import org.redkale.convert.*;
|
||||
import org.redkale.convert.bson.*;
|
||||
import org.redkale.convert.json.*;
|
||||
@@ -32,20 +33,25 @@ public class InnerCoderEntity {
|
||||
/**
|
||||
* 该方法提供给Convert组件自动加载。
|
||||
* 1) 方法名可以随意。
|
||||
2) 方法必须是static
|
||||
3)方法的参数有且只能有一个, 且必须是org.redkale.convert.ConvertFactory或子类。
|
||||
—3.1) 参数类型为org.redkale.convert.ConvertFactory 表示适合JSON和BSON。
|
||||
—3.2) 参数类型为org.redkale.convert.json.JsonFactory 表示仅适合JSON。
|
||||
—3.3) 参数类型为org.redkale.convert.bson.BsonFactory 表示仅适合BSON。
|
||||
4)方法的返回类型必须是org.redkale.convert.Decodeable/org.redkale.convert.Encodeable/org.redkale.convert.SimpledCoder
|
||||
若返回类型不是org.redkale.convert.SimpledCoder, 就必须提供两个方法: 一个返回Decodeable 一个返回 Encodeable。
|
||||
* 2) 方法必须是static
|
||||
* 3)方法的参数有且只能有一个, 且必须是org.redkale.convert.ConvertFactory或子类。
|
||||
* —3.1) 参数类型为org.redkale.convert.ConvertFactory 表示适合JSON和BSON。
|
||||
* —3.2) 参数类型为org.redkale.convert.json.JsonFactory 表示仅适合JSON。
|
||||
* —3.3) 参数类型为org.redkale.convert.bson.BsonFactory 表示仅适合BSON。
|
||||
* 4)方法的返回类型必须是org.redkale.convert.Decodeable/org.redkale.convert.Encodeable/org.redkale.convert.SimpledCoder
|
||||
* 若返回类型不是org.redkale.convert.SimpledCoder, 就必须提供两个方法: 一个返回Decodeable 一个返回 Encodeable。
|
||||
*
|
||||
* @param factory
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private static SimpledCoder<Reader, Writer, InnerCoderEntity> createConvertCoder(final org.redkale.convert.ConvertFactory factory) {
|
||||
static SimpledCoder<Reader, Writer, InnerCoderEntity> createConvertCoder(final org.redkale.convert.ConvertFactory factory) {
|
||||
return new SimpledCoder<Reader, Writer, InnerCoderEntity>() {
|
||||
|
||||
private Map<String, DeMember> deMemberFieldMap;
|
||||
|
||||
private Map<Integer, DeMember> deMemberTagMap;
|
||||
|
||||
//必须与EnMember[] 顺序一致
|
||||
private final DeMember[] deMembers = new DeMember[]{
|
||||
DeMember.create(factory, InnerCoderEntity.class, "id"),
|
||||
@@ -56,6 +62,15 @@ public class InnerCoderEntity {
|
||||
EnMember.create(factory, InnerCoderEntity.class, "id"),
|
||||
EnMember.create(factory, InnerCoderEntity.class, "val")};
|
||||
|
||||
{
|
||||
this.deMemberFieldMap = new HashMap<>(this.deMembers.length);
|
||||
this.deMemberTagMap = new HashMap<>(this.deMembers.length);
|
||||
for (DeMember member : this.deMembers) {
|
||||
this.deMemberFieldMap.put(member.getAttribute().field(), member);
|
||||
this.deMemberTagMap.put(member.getTag(), member);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void convertTo(Writer out, InnerCoderEntity value) {
|
||||
if (value == null) {
|
||||
@@ -75,7 +90,7 @@ public class InnerCoderEntity {
|
||||
int index = 0;
|
||||
final Object[] params = new Object[deMembers.length];
|
||||
while (in.hasNext()) {
|
||||
DeMember member = in.readFieldName(deMembers); //读取字段名
|
||||
DeMember member = in.readFieldName(deMembers, deMemberFieldMap, deMemberTagMap); //读取字段名
|
||||
in.readBlank(); //读取字段名与字段值之间的间隔符,JSON则是跳过冒号:
|
||||
if (member == null) {
|
||||
in.skipValue(); //跳过不存在的字段的值, 一般不会发生
|
||||
|
||||
86
src/test/java/org/redkale/test/convert/Json5Test.java
Normal file
86
src/test/java/org/redkale/test/convert/Json5Test.java
Normal file
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.util.*;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class Json5Test {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
Json5Test test = new Json5Test();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
JsonConvert convert = JsonConvert.root();
|
||||
Json5Bean bean = new Json5Bean();
|
||||
bean.id = 500;
|
||||
bean.decmails = 3.2f;
|
||||
bean.value = 44444;
|
||||
bean.name = "haha";
|
||||
String json = "{/*多行\r\n注释**/\"decmails\":3.2,//单行注释\r\n\"id\":0x1F4,\"name\":\"haha\",\"value\":44444,}";
|
||||
Json5Bean bean2 = convert.convertFrom(Json5Bean.class, json);
|
||||
if (!main) Assertions.assertTrue(bean.equals(bean2));
|
||||
System.out.println(convert.convertTo(bean2));
|
||||
|
||||
String arrayJson = "[" + json + "," + json + "," + "]";
|
||||
Json5Bean[] beans = convert.convertFrom(Json5Bean[].class, arrayJson);
|
||||
System.out.println(convert.convertTo(beans));
|
||||
|
||||
String intjson = "[1,2,3,4,]";
|
||||
int[] ints1 = convert.convertFrom(int[].class, intjson);
|
||||
System.out.println(Arrays.toString(ints1));
|
||||
}
|
||||
|
||||
public static class Json5Bean {
|
||||
|
||||
public int id;
|
||||
|
||||
public float decmails;
|
||||
|
||||
public long value;
|
||||
|
||||
public String name;
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 7;
|
||||
hash = 47 * hash + this.id;
|
||||
hash = 47 * hash + Float.floatToIntBits(this.decmails);
|
||||
hash = 47 * hash + (int) (this.value ^ (this.value >>> 32));
|
||||
hash = 47 * hash + Objects.hashCode(this.name);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
final Json5Bean other = (Json5Bean) obj;
|
||||
if (this.id != other.id)
|
||||
return false;
|
||||
if (Float.floatToIntBits(this.decmails) != Float.floatToIntBits(other.decmails))
|
||||
return false;
|
||||
if (this.value != other.value)
|
||||
return false;
|
||||
if (!Objects.equals(this.name, other.name))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,19 @@ import org.redkale.convert.json.*;
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class JsonTestMain {
|
||||
public class JsonMainTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
JsonMainTest test = new JsonMainTest();
|
||||
test.main = true;
|
||||
test.run1();
|
||||
test.run2();
|
||||
test.run3();
|
||||
test.run4();
|
||||
test.run5();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run1() throws Throwable {
|
||||
@@ -33,7 +45,7 @@ public class JsonTestMain {
|
||||
byte[] bs = new byte[buffers[0].remaining()];
|
||||
buffers[0].get(bs);
|
||||
System.out.println(new String(bs));
|
||||
Assertions.assertEquals(rs, new String(bs));
|
||||
Assertions.assertEquals(rs, new String(bs));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -88,4 +100,11 @@ public class JsonTestMain {
|
||||
java.sql.Date rs = convert.convertFrom(java.sql.Date.class, json);
|
||||
System.out.println(convert.convertTo(rs));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run5() throws Throwable {
|
||||
final JsonConvert convert = JsonConvert.root();
|
||||
long v = convert.convertFrom(long.class, "100");
|
||||
Assertions.assertEquals(100, v);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class JsonMultiDecoderTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
JsonMultiDecoderTest test = new JsonMultiDecoderTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
JsonConvert convert = JsonConvert.root();
|
||||
String json = "[\"aaaa\",{\"name\":\"haha\"}]";
|
||||
Type[] types = new Type[]{String.class, JsonConvert.TYPE_MAP_STRING_STRING};
|
||||
Object[] objs = convert.convertFrom(types, json);
|
||||
System.out.println(convert.convertTo(objs));
|
||||
if (!main) Assertions.assertEquals(convert.convertTo(objs), json);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.ConvertImpl;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class JsonMultiObjectDecoderTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
JsonMultiObjectDecoderTest test = new JsonMultiObjectDecoderTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
{
|
||||
String json = "{\"a0\":\"000\",\"a6\":\"666\"}";
|
||||
AbstractBean bean = JsonConvert.root().convertFrom(AbstractBean.class, json);
|
||||
if (!main) Assertions.assertEquals(bean.getClass().getName(), Bean69.class.getName());
|
||||
System.out.println(bean);
|
||||
}
|
||||
{
|
||||
String json = "{\"a0\":\"000\",\"a2\":\"222\",\"a4\":\"444\"}";
|
||||
AbstractBean bean = JsonConvert.root().convertFrom(AbstractBean.class, json);
|
||||
if (!main) Assertions.assertEquals(bean.getClass().getName(), Bean423.class.getName());
|
||||
System.out.println(bean);
|
||||
}
|
||||
{
|
||||
String json = "{\"a0\":\"000\",\"a6\":\"666\",\"a5\":\"555\"}";
|
||||
AbstractBean bean = JsonConvert.root().convertFrom(AbstractBean.class, json);
|
||||
if (!main) Assertions.assertEquals(bean.getClass().getName(), Bean65.class.getName());
|
||||
System.out.println(bean);
|
||||
}
|
||||
}
|
||||
|
||||
//[{"1", "2", "3"}, {"2", "3"}, {"4", "2", "3"}, {"6", "7", "8"}, {"6", "5"}, {"6", "9"}]
|
||||
@ConvertImpl(types = {Bean123.class, Bean23.class, Bean423.class, Bean678.class, Bean65.class, Bean69.class})
|
||||
public static abstract class AbstractBean {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonConvert.root().convertTo(this);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Bean123 extends AbstractBean {
|
||||
|
||||
public String a1;
|
||||
|
||||
public String a2;
|
||||
|
||||
public String a3;
|
||||
}
|
||||
|
||||
public static class Bean23 extends AbstractBean {
|
||||
|
||||
public String a2;
|
||||
|
||||
public String a3;
|
||||
}
|
||||
|
||||
public static class Bean423 extends AbstractBean {
|
||||
|
||||
public String a4;
|
||||
|
||||
public String a2;
|
||||
|
||||
public String a3;
|
||||
}
|
||||
|
||||
public static class Bean678 extends AbstractBean {
|
||||
|
||||
public String a6;
|
||||
|
||||
public String a7;
|
||||
|
||||
public String a8;
|
||||
}
|
||||
|
||||
public static class Bean69 extends AbstractBean {
|
||||
|
||||
public String a6;
|
||||
|
||||
public String a9;
|
||||
|
||||
public Bean69(String a9) {
|
||||
this.a9 = a9;
|
||||
}
|
||||
}
|
||||
|
||||
public static class Bean65 extends AbstractBean {
|
||||
|
||||
private String a6;
|
||||
|
||||
private String a5;
|
||||
|
||||
public Bean65(String a5) {
|
||||
this.a5 = a5;
|
||||
}
|
||||
|
||||
public String getA6() {
|
||||
return a6;
|
||||
}
|
||||
|
||||
public void setA6(String a6) {
|
||||
this.a6 = a6;
|
||||
}
|
||||
|
||||
public String getA5() {
|
||||
return a5;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
116
src/test/java/org/redkale/test/convert/ObjectOrStringTest.java
Normal file
116
src/test/java/org/redkale/test/convert/ObjectOrStringTest.java
Normal file
@@ -0,0 +1,116 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.*;
|
||||
import org.redkale.convert.json.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class ObjectOrStringTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
ObjectOrStringTest test = new ObjectOrStringTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
JsonConvert convert = JsonConvert.root();
|
||||
String json = "[\"aaaaa\",{\"id\":200,\"name\":\"haha\"}]";
|
||||
AbstractBean[] beans = convert.convertFrom(AbstractBean[].class, json);
|
||||
System.out.println(convert.convertTo(beans[0]));
|
||||
System.out.println(convert.convertTo(beans[1]));
|
||||
System.out.println(convert.convertTo(beans));
|
||||
if (!main) Assertions.assertEquals(json, convert.convertTo(beans));
|
||||
}
|
||||
|
||||
public static abstract class AbstractBean {
|
||||
|
||||
//必须声明为private, 否则加载StringBean时配置Decoder会采用此方法
|
||||
private static Decodeable<JsonReader, AbstractBean> createDecoder(final org.redkale.convert.json.JsonFactory factory) {
|
||||
Decodeable<JsonReader, StringBean> stringDecoder = factory.loadDecoder(StringBean.class);
|
||||
Decodeable<JsonReader, ObjectBean> objectDecoder = factory.loadDecoder(ObjectBean.class);
|
||||
return new Decodeable<JsonReader, AbstractBean>() {
|
||||
@Override
|
||||
public AbstractBean convertFrom(JsonReader in) {
|
||||
Decodeable coder = in.isNextObject() ? objectDecoder : stringDecoder;
|
||||
return (AbstractBean) coder.convertFrom(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return AbstractBean.class;
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public static class ObjectBean extends AbstractBean {
|
||||
|
||||
private int id;
|
||||
|
||||
private String name;
|
||||
|
||||
public int getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(int id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class StringBean extends AbstractBean {
|
||||
|
||||
private String value;
|
||||
|
||||
public StringBean() {
|
||||
}
|
||||
|
||||
public StringBean(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public void setValue(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
static SimpledCoder<Reader, Writer, StringBean> createConvertCoder(final org.redkale.convert.ConvertFactory factory) {
|
||||
return new SimpledCoder<Reader, Writer, StringBean>() {
|
||||
@Override
|
||||
public void convertTo(Writer out, StringBean val) {
|
||||
out.writeString(val == null ? null : val.value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StringBean convertFrom(Reader in) {
|
||||
String val = in.readString();
|
||||
return new StringBean(val);
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
52
src/test/java/org/redkale/test/convert/OneOrListTest.java
Normal file
52
src/test/java/org/redkale/test/convert/OneOrListTest.java
Normal file
@@ -0,0 +1,52 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.util.OneOrList;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class OneOrListTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
OneOrListTest test = new OneOrListTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
JsonConvert convert = JsonConvert.root();
|
||||
String json = "[\"aaaaa\"]";
|
||||
{
|
||||
StringOneList sol = convert.convertFrom(StringOneList.class, json);
|
||||
System.out.println("sol.list = " + convert.convertTo(sol.getList()));
|
||||
if (!main) Assertions.assertEquals(json, convert.convertTo(sol));
|
||||
System.out.println(convert.convertTo(sol));
|
||||
}
|
||||
{
|
||||
String2OneList sol2 = convert.convertFrom(String2OneList.class, json);
|
||||
System.out.println("sol2.list = " + convert.convertTo(sol2.getList()));
|
||||
if (!main) Assertions.assertEquals(json, convert.convertTo(sol2));
|
||||
System.out.println(convert.convertTo(sol2));
|
||||
}
|
||||
{
|
||||
OneOrList<String> sol3 = convert.convertFrom(OneOrList.TYPE_OL_STRING, json);
|
||||
System.out.println("sol3.list = " + convert.convertTo(sol3.getList()));
|
||||
if (!main) Assertions.assertEquals(json, convert.convertTo(OneOrList.TYPE_OL_STRING, sol3));
|
||||
System.out.println(convert.convertTo(OneOrList.TYPE_OL_STRING, sol3));
|
||||
}
|
||||
}
|
||||
|
||||
public static class StringOneList extends OneOrList<String> {
|
||||
}
|
||||
|
||||
public static class String2OneList extends StringOneList {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.util.StringWrapper;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class StringWrapperTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
StringWrapperTest test = new StringWrapperTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
JsonConvert convert = JsonConvert.root();
|
||||
{
|
||||
String val = "{}";
|
||||
StringWrapper wrapper = new StringWrapper(val);
|
||||
if (!main) Assertions.assertEquals(val, convert.convertTo(wrapper));
|
||||
if (!main) Assertions.assertEquals(val, new String(convert.convertToBytes(wrapper)));
|
||||
System.out.println(convert.convertTo(wrapper));
|
||||
System.out.println(new String(convert.convertToBytes(wrapper)));
|
||||
}
|
||||
{
|
||||
String val = "{id:'带中文'}";
|
||||
StringWrapper wrapper = new StringWrapper(val);
|
||||
if (!main) Assertions.assertEquals(val, convert.convertTo(wrapper));
|
||||
if (!main) Assertions.assertEquals(val, new String(convert.convertToBytes(wrapper), StandardCharsets.UTF_8));
|
||||
System.out.println(convert.convertTo(wrapper));
|
||||
System.out.println(new String(convert.convertToBytes(wrapper), StandardCharsets.UTF_8));
|
||||
}
|
||||
}
|
||||
}
|
||||
48
src/test/java/org/redkale/test/convert/TinyTest.java
Normal file
48
src/test/java/org/redkale/test/convert/TinyTest.java
Normal file
@@ -0,0 +1,48 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.convert;
|
||||
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.json.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class TinyTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
TinyTest test = new TinyTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
TinyRecord record = new TinyRecord();
|
||||
record.id = 5;
|
||||
{
|
||||
JsonFactory factory = JsonFactory.create().tiny(true);
|
||||
JsonConvert convert = factory.getConvert();
|
||||
String json = "{\"id\":5}";
|
||||
if (!main) Assertions.assertEquals(json, convert.convertTo(record));
|
||||
System.out.println(convert.convertTo(record));
|
||||
}
|
||||
{
|
||||
JsonFactory factory = JsonFactory.create().tiny(false);
|
||||
JsonConvert convert = factory.getConvert();
|
||||
String json = "{\"id\":5,\"name\":\"\"}";
|
||||
if (!main) Assertions.assertEquals(json, convert.convertTo(record));
|
||||
System.out.println(convert.convertTo(record));
|
||||
}
|
||||
}
|
||||
|
||||
public static class TinyRecord {
|
||||
|
||||
public String name = "";
|
||||
|
||||
public int id;
|
||||
}
|
||||
}
|
||||
@@ -105,7 +105,7 @@ public class FilterNodeTest {
|
||||
FilterNode joinNode1 = FilterJoinNode.create(UserTestTable.class, new String[]{"userid", "username"}, "username", LIKE, bean.username)
|
||||
.or(FilterJoinNode.create(UserTestTable.class, new String[]{"userid", "username"}, "createtime", GREATERTHAN, bean.createtime));
|
||||
FilterNode joinNode2 = FilterJoinNode.create(CarTypeTestTable.class, "cartype", "typename", LIKE, bean.typename);
|
||||
final FilterNode node = CarTestBean.caridTransient() ? (joinNode2.or(joinNode1)) : FilterNode.create("carid", GREATERTHAN, bean.carid).and(joinNode1).or(joinNode2);
|
||||
final FilterNode node = CarTestBean.caridTransient() ? (joinNode2.or(joinNode1)) : FilterNode.filter("carid", GREATERTHAN, bean.carid).and(joinNode1).or(joinNode2);
|
||||
final FilterNode beanNode = FilterNodeBean.createFilterNode(bean);
|
||||
System.out.println("node.string = " + node);
|
||||
System.out.println("bean.string = " + beanNode);
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
package org.redkale.test.source;
|
||||
|
||||
import org.redkale.source.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class JDBCTest {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
DataSource source = DataSources.createDataSource(null, ""); //耗时:37415
|
||||
int count = 1000;
|
||||
LoginTestRecord last = null;
|
||||
long s = System.currentTimeMillis();
|
||||
int c = 0;
|
||||
try {
|
||||
for (int i = 0; i < count; i++) {
|
||||
LoginTestRecord record = new LoginTestRecord();
|
||||
record.setSessionid(Long.toHexString(System.nanoTime()));
|
||||
record.setLoginagent("win7");
|
||||
record.setLogintime(System.currentTimeMillis());
|
||||
record.setLoginip("127.0.0.1");
|
||||
record.setUserid(i);
|
||||
source.insert(record);
|
||||
last = record;
|
||||
c = i;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.out.println("异常了: " + c);
|
||||
e.printStackTrace();
|
||||
}
|
||||
long e = System.currentTimeMillis() - s;
|
||||
System.out.println("耗时:" + e);
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import java.util.*;
|
||||
import javax.persistence.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.source.*;
|
||||
import org.redkale.util.AnyValue.DefaultAnyValue;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -60,11 +61,13 @@ public class JsonRecord {
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
Properties properties = new Properties();
|
||||
properties.put("javax.persistence.jdbc.url", "jdbc:mysql://localhost:3306/center?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true");
|
||||
properties.put("javax.persistence.jdbc.user", "root");
|
||||
properties.put("javax.persistence.jdbc.password", "");
|
||||
DataSource source = DataSources.createDataSource("", properties);
|
||||
DefaultAnyValue conf = DefaultAnyValue.create();
|
||||
conf.addValue("name", "");
|
||||
conf.addValue("url", "jdbc:mysql://localhost:3306/center?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true");
|
||||
conf.addValue("user", "root");
|
||||
conf.addValue("password", "");
|
||||
DataJdbcSource source = new DataJdbcSource();
|
||||
source.init(conf);
|
||||
JsonRecord record = JsonRecord.create();
|
||||
source.insert(record);
|
||||
source.updateColumn(JsonRecord.class, record.getRecordid(), ColumnValue.mov("recordname", "my name 2"));
|
||||
|
||||
@@ -66,7 +66,7 @@ public class TestSourceCache {
|
||||
|
||||
final Flipper flipper = new Flipper(2);
|
||||
flipper.setSort("userid DESC, createtime DESC");
|
||||
final FilterNode node = FilterNode.create("userid", FilterExpress.GREATERTHAN, 1000).and("username", FilterExpress.LIKE, "用户");
|
||||
final FilterNode node = FilterNode.filter("userid", FilterExpress.GREATERTHAN, 1000).and("username", FilterExpress.LIKE, "用户");
|
||||
System.out.println("node = " + node);
|
||||
Sheet<TestEntity> sheet = info.getCache().querySheet(null, flipper, node);
|
||||
System.out.println(sheet);
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.util;
|
||||
|
||||
import java.util.Properties;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.util.AnyValue;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class AnyValuePropertiesTest {
|
||||
|
||||
@Test
|
||||
public void run1() {
|
||||
Properties properties = new Properties();
|
||||
properties.put("redkale.aaa.ooo", "value o");
|
||||
properties.put("redkale.aaa.ppp", "value p");
|
||||
properties.put("redkale.bbb.qqq.rrr", "value r");
|
||||
properties.put("redkale.bbb.sss", "value s");
|
||||
properties.put("redkale.source[my].sss", "my s");
|
||||
properties.put("redkale.source[my].ttt", "my t");
|
||||
properties.put("redkale.source[you].sss", "you s");
|
||||
properties.put("redkale.source[you].ttt", "you t");
|
||||
properties.put("redkale.ddd[2].ww", "ww 2");
|
||||
properties.put("redkale.ddd[2].nn", "nn 2");
|
||||
properties.put("redkale.ddd[0].ww", "ww 0");
|
||||
properties.put("redkale.ddd[0].nn", "nn 0");
|
||||
properties.put("redkale.ddd[10].ww", "ww 10");
|
||||
properties.put("redkale.ddd[10].nn", "nn 10");
|
||||
properties.put("redkale.mmm.node[5]", "n5");
|
||||
properties.put("redkale.mmm.node[0]", "n0");
|
||||
properties.put("redkale.mmm.node[20]", "n20");
|
||||
|
||||
String result = "{\r\n"
|
||||
+ " 'redkale': '{\r\n"
|
||||
+ " 'source': '{\r\n"
|
||||
+ " 'my': '{\r\n"
|
||||
+ " 'sss': 'my s',\r\n"
|
||||
+ " 'ttt': 'my t',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " 'you': '{\r\n"
|
||||
+ " 'ttt': 'you t',\r\n"
|
||||
+ " 'sss': 'you s',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " 'ddd': '{\r\n"
|
||||
+ " 'ww': 'ww 0',\r\n"
|
||||
+ " 'nn': 'nn 0',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " 'ddd': '{\r\n"
|
||||
+ " 'ww': 'ww 2',\r\n"
|
||||
+ " 'nn': 'nn 2',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " 'ddd': '{\r\n"
|
||||
+ " 'ww': 'ww 10',\r\n"
|
||||
+ " 'nn': 'nn 10',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " 'mmm': '{\r\n"
|
||||
+ " 'node': 'n0',\r\n"
|
||||
+ " 'node': 'n5',\r\n"
|
||||
+ " 'node': 'n20',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " 'bbb': '{\r\n"
|
||||
+ " 'sss': 'value s',\r\n"
|
||||
+ " 'qqq': '{\r\n"
|
||||
+ " 'rrr': 'value r',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " 'aaa': '{\r\n"
|
||||
+ " 'ppp': 'value p',\r\n"
|
||||
+ " 'ooo': 'value o',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ " }',\r\n"
|
||||
+ "}";
|
||||
Assertions.assertEquals(result, AnyValue.loadFromProperties(properties).toString());
|
||||
}
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import java.lang.annotation.*;
|
||||
import static java.lang.annotation.ElementType.FIELD;
|
||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||
import java.lang.reflect.Field;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.json.JsonConvert;
|
||||
import org.redkale.util.*;
|
||||
|
||||
@@ -17,25 +18,35 @@ import org.redkale.util.*;
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class ResourceInjectMain {
|
||||
public class ResourceAnnotationTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
ResourceFactory factory = ResourceFactory.create();
|
||||
factory.register(new CustomConfLoader());
|
||||
InjectBean bean = new InjectBean();
|
||||
factory.inject(bean);
|
||||
ResourceAnnotationTest test = new ResourceAnnotationTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
public static class CustomConfLoader implements ResourceInjectLoader<CustomConf> {
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
ResourceFactory factory = ResourceFactory.create();
|
||||
factory.register(new CustomConfProvider());
|
||||
InjectBean bean = new InjectBean();
|
||||
factory.inject(bean);
|
||||
if (!main) Assertions.assertEquals(new File("conf/test.xml").toString(), bean.conf.toString());
|
||||
}
|
||||
|
||||
public static class CustomConfProvider implements ResourceAnnotationProvider<CustomConf> {
|
||||
|
||||
@Override
|
||||
public void load(ResourceFactory factory, Object src, CustomConf annotation, Field field, Object attachment) {
|
||||
public void load(ResourceFactory factory, String srcResourceName, Object srcObj, CustomConf annotation, Field field, Object attachment) {
|
||||
try {
|
||||
field.set(src, new File(annotation.path()));
|
||||
field.set(srcObj, new File(annotation.path()));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println("对象是 src =" + src + ", path=" + annotation.path());
|
||||
System.out.println("对象是 src =" + srcObj + ", path=" + annotation.path());
|
||||
}
|
||||
|
||||
@Override
|
||||
68
src/test/java/org/redkale/test/util/ResourceLoaderTest.java
Normal file
68
src/test/java/org/redkale/test/util/ResourceLoaderTest.java
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
*/
|
||||
package org.redkale.test.util;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.redkale.convert.json.JsonFactory;
|
||||
import org.redkale.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author zhangjx
|
||||
*/
|
||||
public class ResourceLoaderTest {
|
||||
|
||||
private boolean main;
|
||||
|
||||
public static void main(String[] args) throws Throwable {
|
||||
ResourceLoaderTest test = new ResourceLoaderTest();
|
||||
test.main = true;
|
||||
test.run();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void run() throws Exception {
|
||||
ResourceFactory factory = ResourceFactory.create();
|
||||
factory.register("a.id", 1234);
|
||||
factory.register("a.name", "my a name");
|
||||
factory.register("b.id", 4321);
|
||||
factory.register("b.name", "my b name");
|
||||
Bean bean = new Bean();
|
||||
factory.register("a", bean);
|
||||
factory.inject("a", bean);
|
||||
|
||||
ParentBean pb = new ParentBean();
|
||||
factory.inject(pb);
|
||||
if (!main) Assertions.assertEquals(new Bean(1234, "my a name").toString(), pb.bean.toString());
|
||||
System.out.println(pb.bean);
|
||||
}
|
||||
|
||||
public static class ParentBean {
|
||||
|
||||
@Resource(name = "a")
|
||||
public Bean bean;
|
||||
}
|
||||
|
||||
public static class Bean {
|
||||
|
||||
@Resource(name = "$.id")
|
||||
public int id;
|
||||
|
||||
@Resource(name = "$.name")
|
||||
public String name;
|
||||
|
||||
public Bean() {
|
||||
}
|
||||
|
||||
public Bean(int id, String name) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JsonFactory.root().getConvert().convertTo(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user