You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fory.apache.org by ch...@apache.org on 2026/03/04 11:58:45 UTC
(fory) branch main updated: refactor: clean java serialize api (#3454)
This is an automated email from the ASF dual-hosted git repository.
chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory.git
The following commit(s) were added to refs/heads/main by this push:
new 9ee1bef8f refactor: clean java serialize api (#3454)
9ee1bef8f is described below
commit 9ee1bef8f4250cbec289e62e757f9f9ce495301b
Author: Shawn Yang <sh...@gmail.com>
AuthorDate: Wed Mar 4 19:58:40 2026 +0800
refactor: clean java serialize api (#3454)
## Why?
Refactor and simplify the Java-facing API before release: remove
duplicate legacy entry points, unify resolver access, and keep xlang
behavior aligned across runtimes.
## What does this PR do?
- Removes legacy Java serialization APIs from `Fory`/`BaseFory`:
- `serializeJavaObject` / `deserializeJavaObject`
- `serializeJavaObjectAndClass` / `deserializeJavaObjectAndClass`
- Keeps the unified API pair: `serialize` + `deserialize` overloads
(including typed overloads).
- Unifies resolver APIs:
- Removes `getClassResolver` / `getXtypeResolver` from public API.
- Keeps `getTypeResolver` as the only resolver entry.
- Removes `ClassChecker` API and standardizes on `TypeChecker`.
- Updates internal and callsite usages (including Scala/Kotlin) to use
`TypeResolver`, casting to `ClassResolver` only where
class-resolver-only APIs are required.
- Refactors `Fory` internals to use a single `TypeResolver` field
instead of separate `classResolver`/`xtypeResolver` fields.
- Cleans up unified read/write paths in `Fory`, including INT64
handling:
- `Types.INT64` uses `LongSerializer.writeInt64` /
`LongSerializer.readInt64`
- `Types.VARINT64` uses varint methods
- `Types.TAGGED_INT64` uses tagged int64 methods
- Temporarily disables TypeMeta compression for xlang in
Java/Python/Rust/Go/C++ paths and adds comments explaining that some
runtimes do not yet support TypeMeta decompression.
- Updates docs/examples/tests across modules to remove deleted APIs and
reflect the unified API/resolver model.
## Related issues
N/A
## Does this PR introduce any user-facing change?
Yes. Java public API is simplified by removing legacy
serialization/deserialization entry points and exposing a single
resolver accessor (`getTypeResolver`).
- [x] Does this PR introduce any public API change?
- [ ] Does this PR introduce any binary protocol compatibility change?
## Benchmark
N/A (refactor/API cleanup + compatibility alignment; no
performance-targeted optimization in this PR)
---
README.md | 2 +-
cpp/fory/serialization/type_resolver.cc | 3 +-
docs/guide/java/basic-serialization.md | 16 +-
docs/guide/java/schema-evolution.md | 4 +-
docs/guide/java/troubleshooting.md | 34 +-
docs/guide/java/type-registration.md | 12 +-
go/fory/type_def.go | 2 +
.../main/java/org/apache/fory/graalvm/Example.java | 2 +-
.../apache/fory/graalvm/FeatureTestExample.java | 2 +-
.../java/org/apache/fory/graalvm/XlangExample.java | 2 +-
.../org/apache/fory/AbstractThreadSafeFory.java | 7 +-
.../src/main/java/org/apache/fory/BaseFory.java | 67 +--
.../src/main/java/org/apache/fory/Fory.java | 651 +++++----------------
.../main/java/org/apache/fory/ThreadLocalFory.java | 85 +--
.../main/java/org/apache/fory/ThreadSafeFory.java | 11 +-
.../java/org/apache/fory/builder/CodecUtils.java | 16 +-
.../java/org/apache/fory/builder/Generated.java | 4 +-
.../apache/fory/builder/ObjectCodecBuilder.java | 2 +-
.../org/apache/fory/io/BlockedStreamUtils.java | 22 +-
.../org/apache/fory/meta/NativeTypeDefEncoder.java | 4 +-
.../main/java/org/apache/fory/meta/TypeDef.java | 16 +-
.../java/org/apache/fory/meta/TypeDefEncoder.java | 30 +-
.../java/org/apache/fory/pool/SimpleForyPool.java | 101 +---
.../java/org/apache/fory/pool/ThreadPoolFory.java | 101 +---
.../org/apache/fory/resolver/ClassChecker.java | 36 --
.../org/apache/fory/resolver/ClassResolver.java | 49 +-
.../org/apache/fory/resolver/TypeResolver.java | 39 ++
.../org/apache/fory/resolver/XtypeResolver.java | 18 +-
.../fory/serializer/AbstractObjectSerializer.java | 5 +-
.../apache/fory/serializer/ArraySerializers.java | 15 +-
.../apache/fory/serializer/CodegenSerializer.java | 15 +-
.../org/apache/fory/serializer/FieldGroups.java | 2 +-
.../apache/fory/serializer/LambdaSerializer.java | 5 +-
.../org/apache/fory/serializer/LazySerializer.java | 10 +-
.../fory/serializer/MetaSharedSerializer.java | 4 +-
.../apache/fory/serializer/ObjectSerializer.java | 4 +-
.../fory/serializer/ObjectStreamSerializer.java | 20 +-
.../fory/serializer/ReplaceResolveSerializer.java | 9 +-
.../apache/fory/serializer/SerializationUtils.java | 2 +-
.../org/apache/fory/serializer/Serializers.java | 16 +-
.../fory/serializer/UnknownClassSerializers.java | 2 +-
.../collection/ChildContainerSerializers.java | 2 +-
.../collection/CollectionLikeSerializer.java | 4 +-
.../collection/CollectionSerializers.java | 26 +-
.../collection/GuavaCollectionSerializers.java | 14 +-
.../fory/serializer/collection/MapSerializers.java | 12 +-
.../serializer/collection/SubListSerializers.java | 2 +-
.../fory/type/unsigned/UnsignedSerializers.java | 8 +-
.../fory-core/native-image.properties | 1 -
.../src/test/java/org/apache/fory/ForyTest.java | 108 +++-
.../test/java/org/apache/fory/ForyTestBase.java | 2 +-
.../src/test/java/org/apache/fory/StreamTest.java | 99 +---
.../src/test/java/org/apache/fory/TestUtils.java | 2 +-
.../java/org/apache/fory/ThreadSafeForyTest.java | 16 +-
.../org/apache/fory/builder/CodecUtilsTest.java | 2 +-
.../org/apache/fory/builder/JITContextTest.java | 6 +-
.../fory/builder/ObjectCodecBuilderTest.java | 2 +-
.../org/apache/fory/collection/LazyMapTest.java | 2 +-
.../org/apache/fory/io/BlockedStreamUtilsTest.java | 8 +-
.../apache/fory/meta/NativeTypeDefEncoderTest.java | 13 +-
.../org/apache/fory/meta/TypeDefEncoderTest.java | 29 +-
.../java/org/apache/fory/meta/TypeDefTest.java | 67 ++-
.../apache/fory/resolver/AllowListCheckerTest.java | 20 +-
.../apache/fory/resolver/ClassResolverTest.java | 39 +-
.../org/apache/fory/resolver/TypeInfoTest.java | 2 +-
.../fory/serializer/CodegenSerializerTest.java | 8 +-
.../fory/serializer/CompatibleSerializerTest.java | 19 +-
.../fory/serializer/DuplicateFieldsTest.java | 4 +-
.../apache/fory/serializer/EnumSerializerTest.java | 16 +-
.../fory/serializer/LambdaSerializerTest.java | 4 +-
.../serializer/ObjectStreamSerializerTest.java | 6 +-
.../serializer/ReplaceResolveSerializerTest.java | 13 +-
.../fory/serializer/SerializerFactoryTest.java | 2 +-
.../fory/serializer/StringSerializerTest.java | 2 +-
.../collection/ChildContainerSerializersTest.java | 10 +-
.../collection/CollectionSerializersTest.java | 28 +-
.../collection/GuavaCollectionSerializersTest.java | 32 +-
.../serializer/collection/MapSerializersTest.java | 14 +-
.../collection/SynchronizedSerializersTest.java | 2 +-
.../collection/UnmodifiableSerializersTest.java | 2 +-
.../DifferentPOJOCompatibleSerializerTest.java | 8 +-
...JOCompatibleSerializerWithRegistrationTest.java | 9 +-
.../apache/fory/type/DescriptorGrouperTest.java | 18 +-
.../fory/extension/meta/TypeDefEncoderTest.java | 6 +-
.../serializer/ProtobufSerializerTest.java | 2 +-
.../serializer/CompressedArraySerializers.java | 4 +-
.../fory/test/Object2ObjectOpenHashMapTest.java | 4 +-
.../fory/serializer/kotlin/KotlinSerializers.java | 4 +-
.../fory/serializer/kotlin/DurationSerializer.kt | 2 +-
.../serializer/kotlin/UnsignedArraySerializers.kt | 2 +-
python/pyfory/meta/typedef_encoder.py | 9 +-
python/pyfory/tests/test_typedef_encoding.py | 2 +
rust/fory-core/src/meta/type_meta.rs | 2 +
.../fory/serializer/scala/ScalaSerializers.java | 8 +-
.../fory/serializer/scala/RangeSerializer.scala | 4 +-
.../scala/CollectionSerializerTest.scala | 3 +-
96 files changed, 766 insertions(+), 1416 deletions(-)
diff --git a/README.md b/README.md
index 99a86c568..4e1379b07 100644
--- a/README.md
+++ b/README.md
@@ -609,7 +609,7 @@ Dynamic serialization can deserialize arbitrary types, which may introduce risks
Fory enables class registration **by default** for dynamic protocols, allowing only trusted registered types.
**Do not disable class registration unless you can ensure your environment is secure**.
-If this option is disabled, you are responsible for serialization security. You should implement and configure a customized `ClassChecker` or `DeserializationPolicy` for fine-grained security control
+If this option is disabled, you are responsible for serialization security. You should implement and configure a customized `TypeChecker` or `DeserializationPolicy` for fine-grained security control.
To report security vulnerabilities in Apache Fory™, please follow the [ASF vulnerability reporting process](https://apache.org/security/#reporting-a-vulnerability).
diff --git a/cpp/fory/serialization/type_resolver.cc b/cpp/fory/serialization/type_resolver.cc
index e8070a3e9..d94583199 100644
--- a/cpp/fory/serialization/type_resolver.cc
+++ b/cpp/fory/serialization/type_resolver.cc
@@ -38,7 +38,8 @@ constexpr uint8_t REGISTER_BY_NAME_FLAG = 0b100000;
constexpr size_t FIELD_NAME_SIZE_THRESHOLD = 0b1111;
constexpr size_t BIG_NAME_THRESHOLD = 0b111111;
constexpr int64_t META_SIZE_MASK = 0xff;
-// constexpr int64_t COMPRESS_META_FLAG = 0b1 << 9;
+// Temporary xlang behavior: keep TypeMeta uncompressed because some runtimes
+// still do not support TypeMeta decompression.
constexpr int64_t HAS_FIELDS_META_FLAG = 0b1 << 8;
constexpr int8_t NUM_HASH_BITS = 50;
diff --git a/docs/guide/java/basic-serialization.md b/docs/guide/java/basic-serialization.md
index a27f8cd97..caa9c1fd2 100644
--- a/docs/guide/java/basic-serialization.md
+++ b/docs/guide/java/basic-serialization.md
@@ -106,21 +106,11 @@ Object obj = fory.deserialize(bytes);
### Serialize/Deserialize with Type
```java
-// Serialize with explicit type
-byte[] bytes = fory.serializeJavaObject(object);
+// Serialize object
+byte[] bytes = fory.serialize(object);
// Deserialize with expected type
-MyClass obj = fory.deserializeJavaObject(bytes, MyClass.class);
-```
-
-### Serialize/Deserialize with Type Info
-
-```java
-// Serialize with type information
-byte[] bytes = fory.serializeJavaObjectAndClass(object);
-
-// Deserialize with embedded type info
-Object obj = fory.deserializeJavaObjectAndClass(bytes);
+MyClass obj = fory.deserialize(bytes, MyClass.class);
```
## Best Practices
diff --git a/docs/guide/java/schema-evolution.md b/docs/guide/java/schema-evolution.md
index f0211cbaf..8dce5824c 100644
--- a/docs/guide/java/schema-evolution.md
+++ b/docs/guide/java/schema-evolution.md
@@ -198,8 +198,8 @@ public class DeserializeIntoType {
public static void main(String[] args) {
Struct1 struct1 = new Struct1(10, "abc");
- byte[] data = fory.serializeJavaObject(struct1);
- Struct2 struct2 = (Struct2) fory.deserializeJavaObject(bytes, Struct2.class);
+ byte[] data = fory.serialize(struct1);
+ Struct2 struct2 = fory.deserialize(data, Struct2.class);
}
}
```
diff --git a/docs/guide/java/troubleshooting.md b/docs/guide/java/troubleshooting.md
index cdbd1aa58..7d49973cc 100644
--- a/docs/guide/java/troubleshooting.md
+++ b/docs/guide/java/troubleshooting.md
@@ -45,38 +45,28 @@ Fory fory = Fory.builder()
## Using Wrong API for Deserialization
-Make sure you use the matching API pairs:
+Use `serialize` with one of the `deserialize` overloads:
-| Serialization API | Deserialization API |
-| ---------------------------------- | ------------------------------------ |
-| `Fory#serialize` | `Fory#deserialize` |
-| `Fory#serializeJavaObject` | `Fory#deserializeJavaObject` |
-| `Fory#serializeJavaObjectAndClass` | `Fory#deserializeJavaObjectAndClass` |
+| Serialization API | Deserialization API |
+| ----------------- | ------------------- |
+| `Fory#serialize` | `Fory#deserialize` |
-**Wrong usage examples:**
+**Wrong usage example:**
```java
-// ❌ Wrong: serialize with serialize, deserialize with deserializeJavaObject
-byte[] bytes = fory.serialize(object);
-Object result = fory.deserializeJavaObject(bytes, MyClass.class); // Wrong!
-
-// ❌ Wrong: serialize with serializeJavaObject, deserialize with deserialize
-byte[] bytes = fory.serializeJavaObject(object);
-Object result = fory.deserialize(bytes); // Wrong!
+// ❌ Wrong: deserialize with an incompatible target class
+byte[] bytes = fory.serialize(struct1);
+Struct2 result = fory.deserialize(bytes, Struct2.class); // May throw ClassCastException
```
**Correct usage:**
```java
-// ✅ Correct: matching API pairs
byte[] bytes = fory.serialize(object);
Object result = fory.deserialize(bytes);
-byte[] bytes = fory.serializeJavaObject(object);
-MyClass result = fory.deserializeJavaObject(bytes, MyClass.class);
-
-byte[] bytes = fory.serializeJavaObjectAndClass(object);
-Object result = fory.deserializeJavaObjectAndClass(bytes);
+byte[] typedBytes = fory.serialize(object);
+MyClass typedResult = fory.deserialize(typedBytes, MyClass.class);
```
## Deserialize POJO into Another Type
@@ -106,8 +96,8 @@ public class DeserializeIntoType {
public static void main(String[] args) {
Struct1 struct1 = new Struct1(10, "abc");
- byte[] data = fory.serializeJavaObject(struct1);
- Struct2 struct2 = (Struct2) fory.deserializeJavaObject(data, Struct2.class);
+ byte[] data = fory.serialize(struct1);
+ Struct2 struct2 = fory.deserialize(data, Struct2.class);
}
}
```
diff --git a/docs/guide/java/type-registration.md b/docs/guide/java/type-registration.md
index 4dcefda39..fdfa61774 100644
--- a/docs/guide/java/type-registration.md
+++ b/docs/guide/java/type-registration.md
@@ -58,16 +58,16 @@ If there are no duplicate names for types, `namespace` can be left as empty to r
## Security Configuration
-### Class Checker
+### Type Checker
-If you invoke `ForyBuilder#requireClassRegistration(false)` to disable class registration check, you can set `org.apache.fory.resolver.ClassChecker` by `ClassResolver#setClassChecker` to control which classes are allowed for serialization.
+If you invoke `ForyBuilder#requireClassRegistration(false)` to disable class registration check, you can set `org.apache.fory.resolver.TypeChecker` by `TypeResolver#setTypeChecker` to control which classes are allowed for serialization.
For example, you can allow classes started with `org.example.*`:
```java
Fory fory = xxx;
-fory.getClassResolver().setClassChecker(
- (classResolver, className) -> className.startsWith("org.example."));
+fory.getTypeResolver().setTypeChecker(
+ (typeResolver, className) -> className.startsWith("org.example."));
```
### AllowListChecker
@@ -78,8 +78,8 @@ Fory provides a `org.apache.fory.resolver.AllowListChecker` which is an allowed/
AllowListChecker checker = new AllowListChecker(AllowListChecker.CheckLevel.STRICT);
ThreadSafeFory fory = new ThreadLocalFory(classLoader -> {
Fory f = Fory.builder().requireClassRegistration(true).withClassLoader(classLoader).build();
- f.getClassResolver().setClassChecker(checker);
- checker.addListener(f.getClassResolver());
+ f.getTypeResolver().setTypeChecker(checker);
+ checker.addListener((ClassResolver) f.getTypeResolver());
return f;
});
checker.allowClass("org.example.*");
diff --git a/go/fory/type_def.go b/go/fory/type_def.go
index f2bca01a6..da669ccc3 100644
--- a/go/fory/type_def.go
+++ b/go/fory/type_def.go
@@ -1299,6 +1299,8 @@ func encodingTypeDef(typeResolver *TypeResolver, typeDef *TypeDef) ([]byte, erro
return nil, fmt.Errorf("failed to write fields def: %w", err)
}
+ // Temporary xlang behavior: keep TypeMeta uncompressed.
+ // Some runtimes still do not support TypeMeta decompression.
result, err := prependGlobalHeader(buffer, false, len(typeDef.fieldDefs) > 0)
if err != nil {
return nil, fmt.Errorf("failed to write global binary header: %w", err)
diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/Example.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/Example.java
index ee20eb123..4d8bcf1a8 100644
--- a/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/Example.java
+++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/Example.java
@@ -42,7 +42,7 @@ public class Example {
Preconditions.checkArgument(map.equals(fory.deserialize(fory.serialize(map))));
Foo foo = new Foo(10, "abc", List.of("str1", "str2"), Map.of("k1", 10L, "k2", 20L));
byte[] bytes = fory.serialize(foo);
- System.out.println(fory.getClassResolver().getSerializer(Foo.class));
+ System.out.println(fory.getTypeResolver().getSerializer(Foo.class));
Object o = fory.deserialize(bytes);
System.out.println(foo);
System.out.println(o);
diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/FeatureTestExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/FeatureTestExample.java
index 9f3212f87..5ac6c9a79 100644
--- a/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/FeatureTestExample.java
+++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/FeatureTestExample.java
@@ -90,7 +90,7 @@ public class FeatureTestExample {
PrivateConstructorClass deserialized =
(PrivateConstructorClass) fory.deserialize(fory.serialize(original));
Preconditions.checkArgument(
- fory.getClassResolver().getSerializer(PrivateConstructorClass.class) instanceof Generated);
+ fory.getTypeResolver().getSerializer(PrivateConstructorClass.class) instanceof Generated);
Preconditions.checkArgument("test-value".equals(deserialized.getValue()));
System.out.println("Private constructor class test passed");
diff --git a/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/XlangExample.java b/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/XlangExample.java
index cc621e09c..949c7e17a 100644
--- a/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/XlangExample.java
+++ b/integration_tests/graalvm_tests/src/main/java/org/apache/fory/graalvm/XlangExample.java
@@ -42,7 +42,7 @@ public class XlangExample {
Preconditions.checkArgument(map.equals(fory.deserialize(fory.serialize(map))));
Foo foo = new Foo(10, "abc", List.of("str1", "str2"), Map.of("k1", 10L, "k2", 20L));
byte[] bytes = fory.serialize(foo);
- System.out.println(fory.getXtypeResolver().getSerializer(Foo.class));
+ System.out.println(fory.getTypeResolver().getSerializer(Foo.class));
Object o = fory.deserialize(bytes);
System.out.println(foo);
System.out.println(o);
diff --git a/java/fory-core/src/main/java/org/apache/fory/AbstractThreadSafeFory.java b/java/fory-core/src/main/java/org/apache/fory/AbstractThreadSafeFory.java
index c0691879d..82b792e5e 100644
--- a/java/fory-core/src/main/java/org/apache/fory/AbstractThreadSafeFory.java
+++ b/java/fory-core/src/main/java/org/apache/fory/AbstractThreadSafeFory.java
@@ -20,8 +20,8 @@
package org.apache.fory;
import java.util.function.Function;
-import org.apache.fory.resolver.ClassChecker;
import org.apache.fory.resolver.TypeChecker;
+import org.apache.fory.resolver.TypeResolver;
import org.apache.fory.serializer.Serializer;
import org.apache.fory.serializer.SerializerFactory;
@@ -123,9 +123,8 @@ public abstract class AbstractThreadSafeFory implements ThreadSafeFory {
}
@Override
- @Deprecated
- public void setClassChecker(ClassChecker classChecker) {
- registerCallback(fory -> fory.getClassResolver().setClassChecker(classChecker));
+ public TypeResolver getTypeResolver() {
+ return execute(Fory::getTypeResolver);
}
@Override
diff --git a/java/fory-core/src/main/java/org/apache/fory/BaseFory.java b/java/fory-core/src/main/java/org/apache/fory/BaseFory.java
index feabed3c6..fc59eae32 100644
--- a/java/fory-core/src/main/java/org/apache/fory/BaseFory.java
+++ b/java/fory-core/src/main/java/org/apache/fory/BaseFory.java
@@ -24,6 +24,7 @@ import java.util.function.Function;
import org.apache.fory.io.ForyInputStream;
import org.apache.fory.io.ForyReadableChannel;
import org.apache.fory.memory.MemoryBuffer;
+import org.apache.fory.resolver.TypeResolver;
import org.apache.fory.serializer.BufferCallback;
import org.apache.fory.serializer.Serializer;
import org.apache.fory.serializer.SerializerFactory;
@@ -176,6 +177,8 @@ public interface BaseFory {
void setSerializerFactory(SerializerFactory serializerFactory);
+ TypeResolver getTypeResolver();
+
/**
* Ensure all compilation for serializers and accessors even for lazy initialized serializers.
* This method will block until all compilation is done.
@@ -215,6 +218,12 @@ public interface BaseFory {
<T> T deserialize(byte[] bytes, Class<T> type);
+ <T> T deserialize(MemoryBuffer buffer, Class<T> type);
+
+ <T> T deserialize(ForyInputStream inputStream, Class<T> type);
+
+ <T> T deserialize(ForyReadableChannel channel, Class<T> type);
+
Object deserialize(byte[] bytes, Iterable<MemoryBuffer> outOfBandBuffers);
/**
@@ -236,64 +245,6 @@ public interface BaseFory {
Object deserialize(ForyReadableChannel channel, Iterable<MemoryBuffer> outOfBandBuffers);
- /**
- * Serialize java object without class info, deserialization should use {@link
- * #deserializeJavaObject}.
- */
- byte[] serializeJavaObject(Object obj);
-
- /**
- * Serialize java object without class info, deserialization should use {@link
- * #deserializeJavaObject}.
- */
- void serializeJavaObject(MemoryBuffer buffer, Object obj);
-
- void serializeJavaObject(OutputStream outputStream, Object obj);
-
- /**
- * Deserialize java object from binary without class info, serialization should use {@link
- * #serializeJavaObject}.
- */
- <T> T deserializeJavaObject(byte[] data, Class<T> cls);
-
- /**
- * Deserialize java object from binary by passing class info, serialization should use {@link
- * #serializeJavaObject}.
- */
- <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls);
-
- <T> T deserializeJavaObject(ForyInputStream inputStream, Class<T> cls);
-
- <T> T deserializeJavaObject(ForyReadableChannel channel, Class<T> cls);
-
- /** This method is deprecated, please use {@link #serialize} instead. */
- @Deprecated
- byte[] serializeJavaObjectAndClass(Object obj);
-
- /** This method is deprecated, please use {@link #serialize} instead. */
- @Deprecated
- void serializeJavaObjectAndClass(MemoryBuffer buffer, Object obj);
-
- /** This method is deprecated, please use {@link #serialize} instead. */
- @Deprecated
- void serializeJavaObjectAndClass(OutputStream outputStream, Object obj);
-
- /** This method is deprecated, please use {@link #deserialize} instead. */
- @Deprecated
- Object deserializeJavaObjectAndClass(byte[] data);
-
- /** This method is deprecated, please use {@link #deserialize} instead. */
- @Deprecated
- Object deserializeJavaObjectAndClass(MemoryBuffer buffer);
-
- /** This method is deprecated, please use {@link #deserialize} instead. */
- @Deprecated
- Object deserializeJavaObjectAndClass(ForyInputStream inputStream);
-
- /** This method is deprecated, please use {@link #deserialize} instead. */
- @Deprecated
- Object deserializeJavaObjectAndClass(ForyReadableChannel channel);
-
/** Deep copy the <code>obj</code>. */
<T> T copy(T obj);
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/Fory.java b/java/fory-core/src/main/java/org/apache/fory/Fory.java
index 4a2156ddd..c3d3822c7 100644
--- a/java/fory-core/src/main/java/org/apache/fory/Fory.java
+++ b/java/fory-core/src/main/java/org/apache/fory/Fory.java
@@ -103,8 +103,7 @@ public final class Fory implements BaseFory {
private final boolean refTracking;
private final boolean shareMeta;
private final RefResolver refResolver;
- private final ClassResolver classResolver;
- private final XtypeResolver xtypeResolver;
+ private final TypeResolver typeResolver;
private final MetaStringResolver metaStringResolver;
private final SerializationContext serializationContext;
private final ClassLoader classLoader;
@@ -146,16 +145,8 @@ public final class Fory implements BaseFory {
generics = new Generics(this);
metaStringResolver = new MetaStringResolver();
depth = -1;
- classResolver = new ClassResolver(this);
- if (crossLanguage) {
- xtypeResolver = new XtypeResolver(this);
- } else {
- xtypeResolver = null;
- }
- classResolver.initialize();
- if (xtypeResolver != null) {
- xtypeResolver.initialize();
- }
+ typeResolver = crossLanguage ? new XtypeResolver(this) : new ClassResolver(this);
+ typeResolver.initialize();
serializationContext = new SerializationContext(config);
this.classLoader = classLoader;
stringSerializer = new StringSerializer(this);
@@ -266,20 +257,16 @@ public final class Fory implements BaseFory {
@Override
public void setSerializerFactory(SerializerFactory serializerFactory) {
- classResolver.setSerializerFactory(serializerFactory);
+ typeResolver.setSerializerFactory(serializerFactory);
}
public SerializerFactory getSerializerFactory() {
- return classResolver.getSerializerFactory();
+ return typeResolver.getSerializerFactory();
}
public <T> Serializer<T> getSerializer(Class<T> cls) {
Preconditions.checkNotNull(cls);
- if (!crossLanguage) {
- return classResolver.getSerializer(cls);
- } else {
- return xtypeResolver.getTypeInfo(cls).getSerializer();
- }
+ return typeResolver.getSerializer(cls);
}
@Override
@@ -406,7 +393,7 @@ public final class Fory implements BaseFory {
/** Serialize a nullable referencable object to <code>buffer</code>. */
public void writeRef(MemoryBuffer buffer, Object obj) {
if (!refResolver.writeRefOrNull(buffer, obj)) {
- TypeResolver resolver = getTypeResolver();
+ TypeResolver resolver = typeResolver;
TypeInfo typeInfo = resolver.getTypeInfo(obj.getClass());
if (crossLanguage && typeInfo.getCls() == UnknownStruct.class) {
depth++;
@@ -421,7 +408,7 @@ public final class Fory implements BaseFory {
public void writeRef(MemoryBuffer buffer, Object obj, TypeInfoHolder classInfoHolder) {
if (!refResolver.writeRefOrNull(buffer, obj)) {
- TypeResolver resolver = getTypeResolver();
+ TypeResolver resolver = typeResolver;
TypeInfo typeInfo = resolver.getTypeInfo(obj.getClass(), classInfoHolder);
if (crossLanguage && typeInfo.getCls() == UnknownStruct.class) {
depth++;
@@ -435,23 +422,19 @@ public final class Fory implements BaseFory {
}
public void writeRef(MemoryBuffer buffer, Object obj, TypeInfo typeInfo) {
- if (crossLanguage) {
+ if (crossLanguage && typeInfo.getCls() == UnknownStruct.class) {
if (!refResolver.writeRefOrNull(buffer, obj)) {
- if (typeInfo.getCls() == UnknownStruct.class) {
- depth++;
- typeInfo.getSerializer().write(buffer, obj);
- depth--;
- return;
- }
- getTypeResolver().writeTypeInfo(buffer, typeInfo);
- writeData(buffer, typeInfo, obj);
+ depth++;
+ typeInfo.getSerializer().write(buffer, obj);
+ depth--;
}
return;
}
+ TypeResolver resolver = typeResolver;
Serializer<Object> serializer = typeInfo.getSerializer();
if (serializer.needToWriteRef()) {
if (!refResolver.writeRefOrNull(buffer, obj)) {
- classResolver.writeTypeInfo(buffer, typeInfo);
+ resolver.writeTypeInfo(buffer, typeInfo);
depth++;
serializer.write(buffer, obj);
depth--;
@@ -461,7 +444,7 @@ public final class Fory implements BaseFory {
buffer.writeByte(Fory.NULL_FLAG);
} else {
buffer.writeByte(Fory.NOT_NULL_VALUE_FLAG);
- classResolver.writeTypeInfo(buffer, typeInfo);
+ resolver.writeTypeInfo(buffer, typeInfo);
depth++;
serializer.write(buffer, obj);
depth--;
@@ -495,7 +478,7 @@ public final class Fory implements BaseFory {
* object graph.
*/
public void writeNonRef(MemoryBuffer buffer, Object obj) {
- TypeResolver resolver = getTypeResolver();
+ TypeResolver resolver = typeResolver;
TypeInfo typeInfo = resolver.getTypeInfo(obj.getClass());
if (crossLanguage && typeInfo.getCls() == UnknownStruct.class) {
depth++;
@@ -514,7 +497,7 @@ public final class Fory implements BaseFory {
}
public void writeNonRef(MemoryBuffer buffer, Object obj, TypeInfoHolder holder) {
- TypeResolver resolver = getTypeResolver();
+ TypeResolver resolver = typeResolver;
TypeInfo typeInfo = resolver.getTypeInfo(obj.getClass(), holder);
if (crossLanguage && typeInfo.getCls() == UnknownStruct.class) {
depth++;
@@ -533,11 +516,12 @@ public final class Fory implements BaseFory {
depth--;
return;
}
- getTypeResolver().writeTypeInfo(buffer, typeInfo);
+ typeResolver.writeTypeInfo(buffer, typeInfo);
writeData(buffer, typeInfo, obj);
}
- private void writeCrossLanguageData(MemoryBuffer buffer, TypeInfo typeInfo, Object obj) {
+ /** Class/type info should be written already. */
+ public void writeData(MemoryBuffer buffer, TypeInfo typeInfo, Object obj) {
int typeId = typeInfo.getTypeId();
switch (typeId) {
case Types.BOOL:
@@ -549,72 +533,40 @@ public final class Fory implements BaseFory {
case Types.INT16:
buffer.writeInt16((Short) obj);
break;
- case Types.INT32:
- case Types.VARINT32:
- buffer.writeVarInt32((Integer) obj);
- break;
- case Types.INT64:
- case Types.VARINT64:
- case Types.TAGGED_INT64:
- buffer.writeVarInt64((Long) obj);
- break;
- case Types.FLOAT32:
- buffer.writeFloat32((Float) obj);
- break;
- case Types.FLOAT64:
- buffer.writeFloat64((Double) obj);
- break;
- // TODO(add fastpath for other types)
- default:
- depth++;
- typeInfo.getSerializer().write(buffer, obj);
- depth--;
- }
- }
-
- /** Class/type info should be written already. */
- public void writeData(MemoryBuffer buffer, TypeInfo typeInfo, Object obj) {
- if (crossLanguage) {
- writeCrossLanguageData(buffer, typeInfo, obj);
- return;
- }
- writeJavaData(buffer, typeInfo, obj);
- }
-
- /** Write not null data to buffer. */
- private void writeJavaData(MemoryBuffer buffer, TypeInfo typeInfo, Object obj) {
- int typeId = typeInfo.getTypeId();
- switch (typeId) {
- case Types.BOOL:
- buffer.writeBoolean((Boolean) obj);
- break;
- case Types.INT8:
- buffer.writeByte((Byte) obj);
- break;
case ClassResolver.CHAR_ID:
buffer.writeChar((Character) obj);
break;
- case Types.INT16:
- buffer.writeInt16((Short) obj);
- break;
case Types.INT32:
+ case Types.VARINT32:
if (compressInt) {
buffer.writeVarInt32((Integer) obj);
} else {
buffer.writeInt32((Integer) obj);
}
break;
- case Types.FLOAT32:
- buffer.writeFloat32((Float) obj);
- break;
case Types.INT64:
LongSerializer.writeInt64(buffer, (Long) obj, longEncoding);
break;
+ case Types.VARINT64:
+ buffer.writeVarInt64((Long) obj);
+ break;
+ case Types.TAGGED_INT64:
+ buffer.writeTaggedInt64((Long) obj);
+ break;
+ case Types.FLOAT32:
+ buffer.writeFloat32((Float) obj);
+ break;
case Types.FLOAT64:
buffer.writeFloat64((Double) obj);
break;
case Types.STRING:
- stringSerializer.writeString(buffer, (String) obj);
+ if (typeInfo.getCls() == String.class) {
+ stringSerializer.writeString(buffer, (String) obj);
+ break;
+ }
+ depth++;
+ typeInfo.getSerializer().write(buffer, obj);
+ depth--;
break;
default:
depth++;
@@ -743,30 +695,52 @@ public final class Fory implements BaseFory {
@Override
public Object deserialize(byte[] bytes) {
- return deserialize(MemoryUtils.wrap(bytes), null);
+ return deserialize(MemoryUtils.wrap(bytes), (Iterable<MemoryBuffer>) null);
}
- @SuppressWarnings("unchecked")
@Override
public <T> T deserialize(byte[] bytes, Class<T> type) {
- MemoryBuffer buffer = MemoryUtils.wrap(bytes);
- if (!crossLanguage && shareMeta) {
+ return deserialize(MemoryUtils.wrap(bytes), type);
+ }
+
+ @Override
+ public <T> T deserialize(MemoryBuffer buffer, Class<T> type) {
+ try {
+ jitContext.lock();
+ if (depth > 0) {
+ throwDepthDeserializationException();
+ }
+ depth = 0;
byte bitmap = buffer.readByte();
if ((bitmap & isNilFlag) == isNilFlag) {
return null;
}
boolean peerOutOfBandEnabled = (bitmap & isOutOfBandFlag) == isOutOfBandFlag;
assert !peerOutOfBandEnabled : "Out of band buffers not passed in when deserializing";
- return deserializeJavaObject(buffer, type);
+ checkXlangBitmap(bitmap);
+ return deserializeByType(buffer, type);
+ } catch (Throwable t) {
+ throw ExceptionUtils.handleReadFailed(this, t);
+ } finally {
+ resetRead();
+ jitContext.unlock();
}
- generics.pushGenericType(classResolver.buildGenericType(type));
+ }
+
+ @Override
+ public <T> T deserialize(ForyInputStream inputStream, Class<T> type) {
try {
- return (T) deserialize(buffer, null);
+ return deserialize(inputStream.getBuffer(), type);
} finally {
- generics.popGenericType();
+ inputStream.shrinkBuffer();
}
}
+ @Override
+ public <T> T deserialize(ForyReadableChannel channel, Class<T> type) {
+ return deserialize(channel.getBuffer(), type);
+ }
+
@Override
public Object deserialize(byte[] bytes, Iterable<MemoryBuffer> outOfBandBuffers) {
return deserialize(MemoryUtils.wrap(bytes), outOfBandBuffers);
@@ -774,12 +748,12 @@ public final class Fory implements BaseFory {
@Override
public Object deserialize(long address, int size) {
- return deserialize(MemoryUtils.buffer(address, size), null);
+ return deserialize(MemoryUtils.buffer(address, size), (Iterable<MemoryBuffer>) null);
}
@Override
public Object deserialize(MemoryBuffer buffer) {
- return deserialize(buffer, null);
+ return deserialize(buffer, (Iterable<MemoryBuffer>) null);
}
/**
@@ -807,7 +781,7 @@ public final class Fory implements BaseFory {
if ((bitmap & isNilFlag) == isNilFlag) {
return null;
}
- boolean isTargetXLang = (bitmap & isCrossLanguageFlag) == isCrossLanguageFlag;
+ checkXlangBitmap(bitmap);
peerOutOfBandEnabled = (bitmap & isOutOfBandFlag) == isOutOfBandFlag;
if (peerOutOfBandEnabled) {
Preconditions.checkNotNull(
@@ -821,13 +795,7 @@ public final class Fory implements BaseFory {
"outOfBandBuffers should be null when the serialized stream is "
+ "produced with bufferCallback null.");
}
- Object obj;
- if (isTargetXLang) {
- obj = readRefCrossLanguage(buffer);
- } else {
- obj = readRef(buffer);
- }
- return obj;
+ return readRef(buffer);
} catch (Throwable t) {
throw ExceptionUtils.handleReadFailed(this, t);
} finally {
@@ -838,7 +806,7 @@ public final class Fory implements BaseFory {
@Override
public Object deserialize(ForyInputStream inputStream) {
- return deserialize(inputStream, null);
+ return deserialize(inputStream, (Iterable<MemoryBuffer>) null);
}
@Override
@@ -853,7 +821,7 @@ public final class Fory implements BaseFory {
@Override
public Object deserialize(ForyReadableChannel channel) {
- return deserialize(channel, null);
+ return deserialize(channel, (Iterable<MemoryBuffer>) null);
}
@Override
@@ -862,106 +830,95 @@ public final class Fory implements BaseFory {
return deserialize(buf, outOfBandBuffers);
}
+ @SuppressWarnings("unchecked")
+ private <T> T deserializeByType(MemoryBuffer buffer, Class<T> type) {
+ generics.pushGenericType(typeResolver.buildGenericType(type));
+ try {
+ RefResolver refResolver = this.refResolver;
+ int nextReadRefId = refResolver.tryPreserveRefId(buffer);
+ if (nextReadRefId < NOT_NULL_VALUE_FLAG) {
+ return (T) refResolver.getReadObject();
+ }
+ TypeInfo typeInfo = typeResolver.readTypeInfo(buffer, type);
+ Object value = readNonRef(buffer, typeInfo);
+ refResolver.setReadObject(nextReadRefId, value);
+ return (T) value;
+ } finally {
+ generics.popGenericType();
+ }
+ }
+
/** Deserialize nullable referencable object from <code>buffer</code>. */
public Object readRef(MemoryBuffer buffer) {
- if (crossLanguage) {
- return readRefCrossLanguage(buffer);
- }
RefResolver refResolver = this.refResolver;
int nextReadRefId = refResolver.tryPreserveRefId(buffer);
if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- // ref value or not-null value
- Object o = readDataInternal(buffer, classResolver.readTypeInfo(buffer));
+ TypeInfo typeInfo = typeResolver.readTypeInfo(buffer);
+ Object o = readNonRef(buffer, typeInfo);
refResolver.setReadObject(nextReadRefId, o);
return o;
- } else {
- return refResolver.getReadObject();
}
+ return refResolver.getReadObject();
}
public Object readRef(MemoryBuffer buffer, TypeInfo typeInfo) {
- if (crossLanguage) {
- return readRefCrossLanguage(buffer, typeInfo);
- }
RefResolver refResolver = this.refResolver;
int nextReadRefId = refResolver.tryPreserveRefId(buffer);
if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- // ref value or not-null value
- Object o = readDataInternal(buffer, typeInfo);
+ Object o = readNonRef(buffer, typeInfo);
refResolver.setReadObject(nextReadRefId, o);
return o;
- } else {
- return refResolver.getReadObject();
}
+ return refResolver.getReadObject();
}
public Object readRef(MemoryBuffer buffer, TypeInfoHolder classInfoHolder) {
- if (crossLanguage) {
- return readRefCrossLanguage(buffer, classInfoHolder);
- }
RefResolver refResolver = this.refResolver;
int nextReadRefId = refResolver.tryPreserveRefId(buffer);
if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- // ref value or not-null value
- Object o = readDataInternal(buffer, classResolver.readTypeInfo(buffer, classInfoHolder));
+ TypeInfo typeInfo = typeResolver.readTypeInfo(buffer, classInfoHolder);
+ Object o = readNonRef(buffer, typeInfo);
refResolver.setReadObject(nextReadRefId, o);
return o;
- } else {
- return refResolver.getReadObject();
}
+ return refResolver.getReadObject();
}
@SuppressWarnings("unchecked")
public <T> T readRef(MemoryBuffer buffer, Serializer<T> serializer) {
- if (crossLanguage) {
- return (T) readRefCrossLanguage(buffer, serializer);
- }
if (serializer.needToWriteRef()) {
- T obj;
+ RefResolver refResolver = this.refResolver;
int nextReadRefId = refResolver.tryPreserveRefId(buffer);
if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- obj = serializer.read(buffer);
- refResolver.setReadObject(nextReadRefId, obj);
- return obj;
- } else {
- return (T) refResolver.getReadObject();
- }
- } else {
- byte headFlag = buffer.readByte();
- if (headFlag == Fory.NULL_FLAG) {
- return null;
- } else {
- return serializer.read(buffer);
+ Object o = readNonRef(buffer, serializer);
+ refResolver.setReadObject(nextReadRefId, o);
+ return (T) o;
}
+ return (T) refResolver.getReadObject();
+ }
+ byte headFlag = buffer.readByte();
+ if (headFlag == Fory.NULL_FLAG) {
+ return null;
}
+ return (T) readNonRef(buffer, serializer);
}
/** Deserialize not-null and non-reference object from <code>buffer</code>. */
public Object readNonRef(MemoryBuffer buffer) {
- if (crossLanguage) {
- return readNonRefCrossLanguage(buffer, xtypeResolver.readTypeInfo(buffer));
- }
- return readDataInternal(buffer, classResolver.readTypeInfo(buffer));
+ TypeInfo typeInfo = typeResolver.readTypeInfo(buffer);
+ return readNonRef(buffer, typeInfo);
}
public Object readNonRef(MemoryBuffer buffer, TypeInfoHolder classInfoHolder) {
- if (crossLanguage) {
- return readNonRefCrossLanguage(buffer, classInfoHolder);
- }
- return readDataInternal(buffer, classResolver.readTypeInfo(buffer, classInfoHolder));
+ TypeInfo typeInfo = typeResolver.readTypeInfo(buffer, classInfoHolder);
+ return readNonRef(buffer, typeInfo);
}
public Object readNonRef(MemoryBuffer buffer, TypeInfo typeInfo) {
- if (crossLanguage) {
- return readNonRefCrossLanguage(buffer, typeInfo);
- }
return readDataInternal(buffer, typeInfo);
}
public Object readNonRef(MemoryBuffer buffer, Serializer<?> serializer) {
- if (crossLanguage) {
- return readNonRefCrossLanguage(buffer, serializer);
- }
incReadDepth();
Object o = serializer.read(buffer);
depth--;
@@ -988,15 +945,11 @@ public final class Fory implements BaseFory {
}
public Object readNullable(MemoryBuffer buffer, TypeInfoHolder classInfoHolder) {
- if (crossLanguage) {
- return readNullableCrossLanguage(buffer, classInfoHolder);
- }
byte headFlag = buffer.readByte();
if (headFlag == Fory.NULL_FLAG) {
return null;
- } else {
- return readNonRef(buffer, classInfoHolder);
}
+ return readNonRef(buffer, classInfoHolder);
}
/** Class should be read already. */
@@ -1025,342 +978,41 @@ public final class Fory implements BaseFory {
} else {
return buffer.readInt32();
}
+ case Types.VARINT32:
+ return buffer.readVarInt32();
case Types.FLOAT32:
return buffer.readFloat32();
case Types.INT64:
return LongSerializer.readInt64(buffer, longEncoding);
+ case Types.VARINT64:
+ return buffer.readVarInt64();
+ case Types.TAGGED_INT64:
+ return buffer.readTaggedInt64();
case Types.FLOAT64:
return buffer.readFloat64();
case Types.STRING:
- return stringSerializer.readString(buffer);
- default:
+ if (typeInfo.getCls() == String.class) {
+ return stringSerializer.readString(buffer);
+ }
incReadDepth();
- Object read = typeInfo.getSerializer().read(buffer);
+ Object stringLike = typeInfo.getSerializer().read(buffer);
depth--;
- return read;
- }
- }
-
- private Object readRefCrossLanguage(MemoryBuffer buffer) {
- RefResolver refResolver = this.refResolver;
- int nextReadRefId = refResolver.tryPreserveRefId(buffer);
- if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- Object o = readNonRefCrossLanguage(buffer, xtypeResolver.readTypeInfo(buffer));
- refResolver.setReadObject(nextReadRefId, o);
- return o;
- } else {
- return refResolver.getReadObject();
- }
- }
-
- private Object readRefCrossLanguage(MemoryBuffer buffer, TypeInfo typeInfo) {
- RefResolver refResolver = this.refResolver;
- int nextReadRefId = refResolver.tryPreserveRefId(buffer);
- if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- Object o = readNonRefCrossLanguage(buffer, typeInfo);
- refResolver.setReadObject(nextReadRefId, o);
- return o;
- } else {
- return refResolver.getReadObject();
- }
- }
-
- private Object readRefCrossLanguage(MemoryBuffer buffer, TypeInfoHolder classInfoHolder) {
- RefResolver refResolver = this.refResolver;
- int nextReadRefId = refResolver.tryPreserveRefId(buffer);
- if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- Object o =
- readNonRefCrossLanguage(buffer, xtypeResolver.readTypeInfo(buffer, classInfoHolder));
- refResolver.setReadObject(nextReadRefId, o);
- return o;
- } else {
- return refResolver.getReadObject();
- }
- }
-
- private Object readRefCrossLanguage(MemoryBuffer buffer, Serializer<?> serializer) {
- if (serializer.needToWriteRef()) {
- RefResolver refResolver = this.refResolver;
- int nextReadRefId = refResolver.tryPreserveRefId(buffer);
- if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- Object o = readNonRefCrossLanguage(buffer, serializer);
- refResolver.setReadObject(nextReadRefId, o);
- return o;
- } else {
- return refResolver.getReadObject();
- }
- } else {
- byte headFlag = buffer.readByte();
- if (headFlag == Fory.NULL_FLAG) {
- return null;
- } else {
- return readNonRefCrossLanguage(buffer, serializer);
- }
- }
- }
-
- private Object readNonRefCrossLanguage(MemoryBuffer buffer, Serializer<?> serializer) {
- incReadDepth();
- Object o = serializer.read(buffer);
- depth--;
- return o;
- }
-
- private Object readNonRefCrossLanguage(MemoryBuffer buffer, TypeInfo typeInfo) {
- assert typeInfo != null;
- int typeId = typeInfo.getTypeId();
- switch (typeId) {
- case Types.BOOL:
- return buffer.readBoolean();
- case Types.INT8:
- return buffer.readByte();
- case Types.INT16:
- return buffer.readInt16();
- case Types.INT32:
- case Types.VARINT32:
- return buffer.readVarInt32();
- case Types.INT64:
- case Types.VARINT64:
- case Types.TAGGED_INT64:
- return buffer.readVarInt64();
- case Types.FLOAT32:
- return buffer.readFloat32();
- case Types.FLOAT64:
- return buffer.readFloat64();
+ return stringLike;
default:
incReadDepth();
- Object o = typeInfo.getSerializer().read(buffer);
+ Object read = typeInfo.getSerializer().read(buffer);
depth--;
- return o;
- }
- }
-
- private Object readNonRefCrossLanguage(MemoryBuffer buffer, TypeInfoHolder classInfoHolder) {
- TypeInfo typeInfo = xtypeResolver.readTypeInfo(buffer, classInfoHolder);
- return readNonRefCrossLanguage(buffer, typeInfo);
- }
-
- private Object readNullableCrossLanguage(MemoryBuffer buffer, TypeInfoHolder classInfoHolder) {
- TypeInfo typeInfo = xtypeResolver.readTypeInfo(buffer, classInfoHolder);
- return readNullableCrossLanguage(buffer, typeInfo.getSerializer());
- }
-
- private Object readNullableCrossLanguage(MemoryBuffer buffer, Serializer<Object> serializer) {
- byte headFlag = buffer.readByte();
- if (headFlag == Fory.NULL_FLAG) {
- return null;
- } else {
- return serializer.read(buffer);
- }
- }
-
- @Override
- public byte[] serializeJavaObject(Object obj) {
- MemoryBuffer buf = getBuffer();
- buf.writerIndex(0);
- serializeJavaObject(buf, obj);
- byte[] bytes = buf.getBytes(0, buf.writerIndex());
- resetBuffer();
- return bytes;
- }
-
- @Override
- public void serializeJavaObject(MemoryBuffer buffer, Object obj) {
- try {
- jitContext.lock();
- if (depth > 0) {
- throwDepthSerializationException();
- }
- if (config.isMetaShareEnabled()) {
- if (!refResolver.writeRefOrNull(buffer, obj)) {
- TypeInfo typeInfo = classResolver.getOrUpdateTypeInfo(obj.getClass());
- classResolver.writeTypeInfo(buffer, typeInfo);
- writeData(buffer, typeInfo, obj);
- }
- } else {
- if (!refResolver.writeRefOrNull(buffer, obj)) {
- TypeInfo typeInfo = classResolver.getOrUpdateTypeInfo(obj.getClass());
- writeData(buffer, typeInfo, obj);
- }
- }
- } catch (Throwable t) {
- throw processSerializationError(t);
- } finally {
- resetWrite();
- jitContext.unlock();
- }
- }
-
- /**
- * Serialize java object without class info, deserialization should use {@link
- * #deserializeJavaObject}.
- */
- @Override
- public void serializeJavaObject(OutputStream outputStream, Object obj) {
- serializeToStream(outputStream, buf -> serializeJavaObject(buf, obj));
- }
-
- @Override
- public <T> T deserializeJavaObject(byte[] data, Class<T> cls) {
- return deserializeJavaObject(MemoryBuffer.fromByteArray(data), cls);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls) {
- try {
- jitContext.lock();
- if (depth > 0) {
- throwDepthDeserializationException();
- }
- T obj;
- int nextReadRefId = refResolver.tryPreserveRefId(buffer);
- if (nextReadRefId >= NOT_NULL_VALUE_FLAG) {
- TypeInfo typeInfo;
- if (shareMeta) {
- typeInfo = classResolver.readTypeInfo(buffer, cls);
- } else {
- typeInfo = classResolver.getTypeInfo(cls);
- }
- obj = (T) readDataInternal(buffer, typeInfo);
- return obj;
- } else {
- return null;
- }
- } catch (Throwable t) {
- throw ExceptionUtils.handleReadFailed(this, t);
- } finally {
- resetRead();
- jitContext.unlock();
- }
- }
-
- /**
- * Deserialize java object from binary by passing class info, serialization should use {@link
- * #serializeJavaObject}.
- *
- * <p>Note that {@link ForyInputStream} will buffer and read more data, do not use the original
- * passed stream when constructing {@link ForyInputStream}. If this is not possible, use {@link
- * org.apache.fory.io.BlockedStreamUtils} instead for streaming serialization and deserialization.
- */
- @Override
- public <T> T deserializeJavaObject(ForyInputStream inputStream, Class<T> cls) {
- try {
- MemoryBuffer buf = inputStream.getBuffer();
- return deserializeJavaObject(buf, cls);
- } finally {
- inputStream.shrinkBuffer();
- }
- }
-
- /**
- * Deserialize java object from binary channel by passing class info, serialization should use
- * {@link #serializeJavaObject}.
- *
- * <p>Note that {@link ForyInputStream} will buffer and read more data, do not use the original
- * passed stream when constructing {@link ForyInputStream}. If this is not possible, use {@link
- * org.apache.fory.io.BlockedStreamUtils} instead for streaming serialization and deserialization.
- */
- @Override
- public <T> T deserializeJavaObject(ForyReadableChannel channel, Class<T> cls) {
- MemoryBuffer buf = channel.getBuffer();
- return deserializeJavaObject(buf, cls);
- }
-
- /**
- * Deserialize java object from binary by passing class info, serialization should use {@link
- * #deserializeJavaObjectAndClass}.
- */
- @Override
- public byte[] serializeJavaObjectAndClass(Object obj) {
- MemoryBuffer buf = getBuffer();
- buf.writerIndex(0);
- serializeJavaObjectAndClass(buf, obj);
- byte[] bytes = buf.getBytes(0, buf.writerIndex());
- resetBuffer();
- return bytes;
- }
-
- /**
- * Serialize java object with class info, deserialization should use {@link
- * #deserializeJavaObjectAndClass}.
- */
- @Override
- public void serializeJavaObjectAndClass(MemoryBuffer buffer, Object obj) {
- try {
- jitContext.lock();
- if (depth > 0) {
- throwDepthSerializationException();
- }
- writeRef(buffer, obj);
- } catch (Throwable t) {
- throw processSerializationError(t);
- } finally {
- resetWrite();
- jitContext.unlock();
- }
- }
-
- /**
- * Serialize java object with class info, deserialization should use {@link
- * #deserializeJavaObjectAndClass}.
- */
- @Override
- public void serializeJavaObjectAndClass(OutputStream outputStream, Object obj) {
- serializeToStream(outputStream, buf -> serializeJavaObjectAndClass(buf, obj));
- }
-
- /**
- * Deserialize class info and java object from binary, serialization should use {@link
- * #serializeJavaObjectAndClass}.
- */
- @Override
- public Object deserializeJavaObjectAndClass(byte[] data) {
- return deserializeJavaObjectAndClass(MemoryBuffer.fromByteArray(data));
- }
-
- /**
- * Deserialize class info and java object from binary, serialization should use {@link
- * #serializeJavaObjectAndClass}.
- */
- @Override
- public Object deserializeJavaObjectAndClass(MemoryBuffer buffer) {
- try {
- jitContext.lock();
- if (depth > 0) {
- throwDepthDeserializationException();
- }
- return readRef(buffer);
- } catch (Throwable t) {
- throw ExceptionUtils.handleReadFailed(this, t);
- } finally {
- resetRead();
- jitContext.unlock();
- }
- }
-
- /**
- * Deserialize class info and java object from binary, serialization should use {@link
- * #serializeJavaObjectAndClass}.
- */
- @Override
- public Object deserializeJavaObjectAndClass(ForyInputStream inputStream) {
- try {
- MemoryBuffer buf = inputStream.getBuffer();
- return deserializeJavaObjectAndClass(buf);
- } finally {
- inputStream.shrinkBuffer();
+ return read;
}
}
- /**
- * Deserialize class info and java object from binary channel, serialization should use {@link
- * #serializeJavaObjectAndClass}.
- */
- @Override
- public Object deserializeJavaObjectAndClass(ForyReadableChannel channel) {
- MemoryBuffer buf = channel.getBuffer();
- return deserializeJavaObjectAndClass(buf);
+ private void checkXlangBitmap(byte bitmap) {
+ boolean payloadCrossLanguage = (bitmap & isCrossLanguageFlag) == isCrossLanguageFlag;
+ Preconditions.checkArgument(
+ payloadCrossLanguage == crossLanguage,
+ "Serialized payload xlang flag %s does not match this Fory mode %s",
+ payloadCrossLanguage,
+ crossLanguage);
}
@Override
@@ -1387,7 +1039,7 @@ public final class Fory implements BaseFory {
return null;
}
Object copy;
- TypeInfo typeInfo = classResolver.getOrUpdateTypeInfo(obj.getClass());
+ TypeInfo typeInfo = typeResolver.getTypeInfo(obj.getClass(), true);
int typeId = typeInfo.getTypeId();
switch (typeId) {
case Types.BOOL:
@@ -1398,8 +1050,13 @@ public final class Fory implements BaseFory {
case Types.FLOAT32:
case Types.INT64:
case Types.FLOAT64:
- case Types.STRING:
return obj;
+ case Types.STRING:
+ if (typeInfo.getCls() == String.class) {
+ return obj;
+ }
+ copy = copyObject(obj, typeInfo.getSerializer());
+ break;
case ClassResolver.PRIMITIVE_BOOLEAN_ARRAY_ID:
boolean[] boolArr = (boolean[]) obj;
return (T) Arrays.copyOf(boolArr, boolArr.length);
@@ -1462,10 +1119,14 @@ public final class Fory implements BaseFory {
case Types.FLOAT32:
case Types.INT64:
case Types.FLOAT64:
- case Types.STRING:
return obj;
+ case Types.STRING:
+ if (obj.getClass() == String.class) {
+ return obj;
+ }
+ return copyObject(obj, typeResolver.getTypeInfo(obj.getClass(), true).getSerializer());
default:
- return copyObject(obj, classResolver.getOrUpdateTypeInfo(obj.getClass()).getSerializer());
+ return copyObject(obj, typeResolver.getTypeInfo(obj.getClass(), true).getSerializer());
}
}
@@ -1541,7 +1202,7 @@ public final class Fory implements BaseFory {
public void resetWrite() {
refResolver.resetWrite();
- classResolver.resetWrite();
+ typeResolver.resetWrite();
metaStringResolver.resetWrite();
serializationContext.resetWrite();
bufferCallback = null;
@@ -1550,7 +1211,7 @@ public final class Fory implements BaseFory {
public void resetRead() {
refResolver.resetRead();
- classResolver.resetRead();
+ typeResolver.resetRead();
metaStringResolver.resetRead();
serializationContext.resetRead();
peerOutOfBandEnabled = false;
@@ -1563,7 +1224,7 @@ public final class Fory implements BaseFory {
}
private void throwDepthSerializationException() {
- String method = "Fory#" + (crossLanguage ? "x" : "") + "writeXXX";
+ String method = "Fory#writeXXX";
throw new SerializationException(
String.format(
"Nested call Fory.serializeXXX is not allowed when serializing, Please use %s instead",
@@ -1571,7 +1232,7 @@ public final class Fory implements BaseFory {
}
private void throwDepthDeserializationException() {
- String method = "Fory#" + (crossLanguage ? "x" : "") + "readXXX";
+ String method = "Fory#readXXX";
throw new DeserializationException(
String.format(
"Nested call Fory.deserializeXXX is not allowed when deserializing, Please use %s instead",
@@ -1599,14 +1260,6 @@ public final class Fory implements BaseFory {
return refResolver;
}
- public ClassResolver getClassResolver() {
- return classResolver;
- }
-
- public XtypeResolver getXtypeResolver() {
- return xtypeResolver;
- }
-
/**
* Don't use this API for type resolving and dispatch, methods on returned resolver has
* polymorphic invoke cost.
@@ -1615,7 +1268,7 @@ public final class Fory implements BaseFory {
// CHECKSTYLE.OFF:MethodName
public TypeResolver getTypeResolver() {
// CHECKSTYLE.ON:MethodName
- return crossLanguage ? xtypeResolver : classResolver;
+ return typeResolver;
}
public MetaStringResolver getMetaStringResolver() {
diff --git a/java/fory-core/src/main/java/org/apache/fory/ThreadLocalFory.java b/java/fory-core/src/main/java/org/apache/fory/ThreadLocalFory.java
index aa82fd785..f0c43a2dd 100644
--- a/java/fory-core/src/main/java/org/apache/fory/ThreadLocalFory.java
+++ b/java/fory-core/src/main/java/org/apache/fory/ThreadLocalFory.java
@@ -145,6 +145,21 @@ public class ThreadLocalFory extends AbstractThreadSafeFory {
return bindingThreadLocal.get().get().deserialize(bytes, type);
}
+ @Override
+ public <T> T deserialize(MemoryBuffer buffer, Class<T> type) {
+ return bindingThreadLocal.get().get().deserialize(buffer, type);
+ }
+
+ @Override
+ public <T> T deserialize(ForyInputStream inputStream, Class<T> type) {
+ return bindingThreadLocal.get().get().deserialize(inputStream, type);
+ }
+
+ @Override
+ public <T> T deserialize(ForyReadableChannel channel, Class<T> type) {
+ return bindingThreadLocal.get().get().deserialize(channel, type);
+ }
+
@Override
public Object deserialize(byte[] bytes, Iterable<MemoryBuffer> outOfBandBuffers) {
return bindingThreadLocal.get().get().deserialize(bytes, outOfBandBuffers);
@@ -190,76 +205,6 @@ public class ThreadLocalFory extends AbstractThreadSafeFory {
return bindingThreadLocal.get().get().deserialize(channel, outOfBandBuffers);
}
- @Override
- public byte[] serializeJavaObject(Object obj) {
- return bindingThreadLocal.get().get().serializeJavaObject(obj);
- }
-
- @Override
- public void serializeJavaObject(MemoryBuffer buffer, Object obj) {
- bindingThreadLocal.get().get().serializeJavaObject(buffer, obj);
- }
-
- @Override
- public void serializeJavaObject(OutputStream outputStream, Object obj) {
- bindingThreadLocal.get().get().serializeJavaObject(outputStream, obj);
- }
-
- @Override
- public <T> T deserializeJavaObject(byte[] data, Class<T> cls) {
- return bindingThreadLocal.get().get().deserializeJavaObject(data, cls);
- }
-
- @Override
- public <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls) {
- return bindingThreadLocal.get().get().deserializeJavaObject(buffer, cls);
- }
-
- @Override
- public <T> T deserializeJavaObject(ForyInputStream inputStream, Class<T> cls) {
- return bindingThreadLocal.get().get().deserializeJavaObject(inputStream, cls);
- }
-
- @Override
- public <T> T deserializeJavaObject(ForyReadableChannel channel, Class<T> cls) {
- return bindingThreadLocal.get().get().deserializeJavaObject(channel, cls);
- }
-
- @Override
- public byte[] serializeJavaObjectAndClass(Object obj) {
- return bindingThreadLocal.get().get().serializeJavaObjectAndClass(obj);
- }
-
- @Override
- public void serializeJavaObjectAndClass(MemoryBuffer buffer, Object obj) {
- bindingThreadLocal.get().get().serializeJavaObjectAndClass(buffer, obj);
- }
-
- @Override
- public void serializeJavaObjectAndClass(OutputStream outputStream, Object obj) {
- bindingThreadLocal.get().get().serializeJavaObjectAndClass(outputStream, obj);
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(byte[] data) {
- return bindingThreadLocal.get().get().deserializeJavaObjectAndClass(data);
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(MemoryBuffer buffer) {
- return bindingThreadLocal.get().get().deserializeJavaObjectAndClass(buffer);
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(ForyInputStream inputStream) {
- return bindingThreadLocal.get().get().deserializeJavaObjectAndClass(inputStream);
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(ForyReadableChannel channel) {
- return bindingThreadLocal.get().get().deserializeJavaObjectAndClass(channel);
- }
-
@Override
public <T> T copy(T obj) {
return bindingThreadLocal.get().get().copy(obj);
diff --git a/java/fory-core/src/main/java/org/apache/fory/ThreadSafeFory.java b/java/fory-core/src/main/java/org/apache/fory/ThreadSafeFory.java
index 16c8d8126..68b37495e 100644
--- a/java/fory-core/src/main/java/org/apache/fory/ThreadSafeFory.java
+++ b/java/fory-core/src/main/java/org/apache/fory/ThreadSafeFory.java
@@ -23,7 +23,6 @@ import java.nio.ByteBuffer;
import java.util.function.Consumer;
import java.util.function.Function;
import org.apache.fory.annotation.Internal;
-import org.apache.fory.resolver.ClassChecker;
import org.apache.fory.resolver.TypeChecker;
import org.apache.fory.serializer.SerializerFactory;
import org.apache.fory.util.LoaderBinding;
@@ -68,18 +67,10 @@ public interface ThreadSafeFory extends BaseFory {
/** Returns classLoader of serializer for current thread. */
ClassLoader getClassLoader();
- /**
- * Set ClassChecker of serializer for current thread only.
- *
- * @param classChecker {@link ClassChecker} for classChecker
- */
- @Deprecated
- void setClassChecker(ClassChecker classChecker);
-
/**
* Set TypeChecker of serializer for current thread only.
*
- * @param typeChecker {@link TypeChecker} for classChecker
+ * @param typeChecker {@link TypeChecker} for type checking
*/
void setTypeChecker(TypeChecker typeChecker);
diff --git a/java/fory-core/src/main/java/org/apache/fory/builder/CodecUtils.java b/java/fory-core/src/main/java/org/apache/fory/builder/CodecUtils.java
index 5bce2db3b..eeb582fb2 100644
--- a/java/fory-core/src/main/java/org/apache/fory/builder/CodecUtils.java
+++ b/java/fory-core/src/main/java/org/apache/fory/builder/CodecUtils.java
@@ -28,7 +28,7 @@ import org.apache.fory.codegen.CompileUnit;
import org.apache.fory.collection.Tuple3;
import org.apache.fory.meta.TypeDef;
import org.apache.fory.reflect.TypeRef;
-import org.apache.fory.resolver.ClassResolver;
+import org.apache.fory.resolver.TypeResolver;
import org.apache.fory.serializer.Serializer;
import org.apache.fory.util.ClassLoaderUtils;
import org.apache.fory.util.GraalvmSupport;
@@ -107,8 +107,8 @@ public class CodecUtils {
if (beanClassClassLoader == null) {
beanClassClassLoader = fory.getClass().getClassLoader();
}
- ClassResolver classResolver = fory.getClassResolver();
- codeGenerator = getCodeGenerator(fory, beanClassClassLoader, classResolver);
+ TypeResolver typeResolver = fory.getTypeResolver();
+ codeGenerator = getCodeGenerator(fory, beanClassClassLoader, typeResolver);
ClassLoader classLoader =
codeGenerator.compile(
Collections.singletonList(compileUnit), compileState -> compileState.lock.lock());
@@ -121,23 +121,23 @@ public class CodecUtils {
}
private static CodeGenerator getCodeGenerator(
- Fory fory, ClassLoader beanClassClassLoader, ClassResolver classResolver) {
+ Fory fory, ClassLoader beanClassClassLoader, TypeResolver typeResolver) {
CodeGenerator codeGenerator;
try {
// generated code imported fory classes.
if (beanClassClassLoader.loadClass(Fory.class.getName()) != Fory.class) {
throw new ClassNotFoundException();
}
- codeGenerator = classResolver.getCodeGenerator(beanClassClassLoader);
+ codeGenerator = typeResolver.getCodeGenerator(beanClassClassLoader);
if (codeGenerator == null) {
codeGenerator = CodeGenerator.getSharedCodeGenerator(beanClassClassLoader);
// Hold strong reference of {@link CodeGenerator}, so the referent of `DelayedRef`
// won't be null.
- classResolver.setCodeGenerator(beanClassClassLoader, codeGenerator);
+ typeResolver.setCodeGenerator(beanClassClassLoader, codeGenerator);
}
} catch (ClassNotFoundException e) {
codeGenerator =
- classResolver.getCodeGenerator(beanClassClassLoader, fory.getClass().getClassLoader());
+ typeResolver.getCodeGenerator(beanClassClassLoader, fory.getClass().getClassLoader());
ClassLoader[] loaders = {beanClassClassLoader, fory.getClass().getClassLoader()};
if (codeGenerator == null) {
codeGenerator =
@@ -145,7 +145,7 @@ public class CodecUtils {
ClassLoaderUtils.ForyJarClassLoader.getInstance(), beanClassClassLoader);
// Hold strong reference of {@link CodeGenerator}, so the referent of `DelayedRef`
// won't be null.
- classResolver.setCodeGenerator(loaders, codeGenerator);
+ typeResolver.setCodeGenerator(loaders, codeGenerator);
}
}
return codeGenerator;
diff --git a/java/fory-core/src/main/java/org/apache/fory/builder/Generated.java b/java/fory-core/src/main/java/org/apache/fory/builder/Generated.java
index 740eaed84..c86ed020f 100644
--- a/java/fory-core/src/main/java/org/apache/fory/builder/Generated.java
+++ b/java/fory-core/src/main/java/org/apache/fory/builder/Generated.java
@@ -73,7 +73,7 @@ public interface Generated {
@Override
public void onNotifyResult(Object result) {
Serializer<?> fieldSerializer =
- fory.getClassResolver().getSerializer(beanFieldType);
+ fory.getTypeResolver().getSerializer(beanFieldType);
Preconditions.checkState(beanFieldType == fieldSerializer.getType());
Preconditions.checkState(result == fieldSerializer.getClass());
ReflectionUtils.setObjectFieldValue(
@@ -83,7 +83,7 @@ public interface Generated {
@Override
public void onNotifyMissed() {
Serializer<?> fieldSerializer =
- fory.getClassResolver().getSerializer(beanFieldType);
+ fory.getTypeResolver().getSerializer(beanFieldType);
ReflectionUtils.setObjectFieldValue(
subclassSerializer, field, fieldSerializer);
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/builder/ObjectCodecBuilder.java b/java/fory-core/src/main/java/org/apache/fory/builder/ObjectCodecBuilder.java
index f511cb87a..a1dca86d3 100644
--- a/java/fory-core/src/main/java/org/apache/fory/builder/ObjectCodecBuilder.java
+++ b/java/fory-core/src/main/java/org/apache/fory/builder/ObjectCodecBuilder.java
@@ -97,7 +97,7 @@ public class ObjectCodecBuilder extends BaseObjectCodecBuilder {
descriptors =
fory(
f ->
- f.getClassResolver()
+ f.getTypeResolver()
.getTypeDef(beanClass, true)
.getDescriptors(SerializationUtils.getTypeResolver(fory), beanClass));
} else {
diff --git a/java/fory-core/src/main/java/org/apache/fory/io/BlockedStreamUtils.java b/java/fory-core/src/main/java/org/apache/fory/io/BlockedStreamUtils.java
index 784b1a599..62cbffbcc 100644
--- a/java/fory-core/src/main/java/org/apache/fory/io/BlockedStreamUtils.java
+++ b/java/fory-core/src/main/java/org/apache/fory/io/BlockedStreamUtils.java
@@ -55,16 +55,8 @@ public class BlockedStreamUtils {
serializeToStream(fory, outputStream, buf -> fory.serialize(buf, obj, callback));
}
- /**
- * Serialize java object without class info, deserialization should use {@link
- * #deserializeJavaObject}.
- */
- public static void serializeJavaObject(Fory fory, OutputStream outputStream, Object obj) {
- serializeToStream(fory, outputStream, buf -> fory.serializeJavaObject(buf, obj));
- }
-
public static Object deserialize(Fory fory, InputStream inputStream) {
- return deserialize(fory, inputStream, null);
+ return deserialize(fory, inputStream, (Iterable<MemoryBuffer>) null);
}
public static Object deserialize(
@@ -73,7 +65,7 @@ public class BlockedStreamUtils {
}
public static Object deserialize(Fory fory, ReadableByteChannel channel) {
- return readFromChannel(fory, channel, b -> fory.deserialize(b, null));
+ return readFromChannel(fory, channel, b -> fory.deserialize(b, (Iterable<MemoryBuffer>) null));
}
public static Object deserialize(
@@ -82,14 +74,12 @@ public class BlockedStreamUtils {
}
@SuppressWarnings("unchecked")
- public static <T> T deserializeJavaObject(Fory fory, InputStream inputStream, Class<T> type) {
- return (T)
- deserializeFromStream(fory, inputStream, buf -> fory.deserializeJavaObject(buf, type));
+ public static <T> T deserialize(Fory fory, InputStream inputStream, Class<T> type) {
+ return (T) deserializeFromStream(fory, inputStream, buf -> fory.deserialize(buf, type));
}
- public static Object deserializeJavaObject(
- Fory fory, ReadableByteChannel channel, Class<?> type) {
- return readFromChannel(fory, channel, b -> fory.deserializeJavaObject(b, type));
+ public static <T> T deserialize(Fory fory, ReadableByteChannel channel, Class<T> type) {
+ return type.cast(readFromChannel(fory, channel, b -> fory.deserialize(b, type)));
}
private static Object readFromChannel(
diff --git a/java/fory-core/src/main/java/org/apache/fory/meta/NativeTypeDefEncoder.java b/java/fory-core/src/main/java/org/apache/fory/meta/NativeTypeDefEncoder.java
index 2933488b6..943d7729b 100644
--- a/java/fory-core/src/main/java/org/apache/fory/meta/NativeTypeDefEncoder.java
+++ b/java/fory-core/src/main/java/org/apache/fory/meta/NativeTypeDefEncoder.java
@@ -75,9 +75,9 @@ public class NativeTypeDefEncoder {
static List<Field> buildFields(Fory fory, Class<?> cls, boolean resolveParent) {
DescriptorGrouper descriptorGrouper =
- fory.getClassResolver()
+ fory.getTypeResolver()
.createDescriptorGrouper(
- fory.getClassResolver().getFieldDescriptors(cls, resolveParent),
+ fory.getTypeResolver().getFieldDescriptors(cls, resolveParent),
false,
Function.identity());
List<Field> fields = new ArrayList<>();
diff --git a/java/fory-core/src/main/java/org/apache/fory/meta/TypeDef.java b/java/fory-core/src/main/java/org/apache/fory/meta/TypeDef.java
index fdf2b9a80..637ffeba2 100644
--- a/java/fory-core/src/main/java/org/apache/fory/meta/TypeDef.java
+++ b/java/fory-core/src/main/java/org/apache/fory/meta/TypeDef.java
@@ -43,6 +43,7 @@ import org.apache.fory.memory.Platform;
import org.apache.fory.reflect.ReflectionUtils;
import org.apache.fory.resolver.ClassResolver;
import org.apache.fory.resolver.TypeResolver;
+import org.apache.fory.resolver.XtypeResolver;
import org.apache.fory.serializer.MetaSharedSerializer;
import org.apache.fory.type.Descriptor;
import org.apache.fory.type.Types;
@@ -347,17 +348,20 @@ public class TypeDef implements Serializable {
/** Read class definition from buffer. */
public static TypeDef readTypeDef(Fory fory, MemoryBuffer buffer) {
if (fory.isCrossLanguage()) {
- return TypeDefDecoder.decodeTypeDef(fory.getXtypeResolver(), buffer, buffer.readInt64());
+ return TypeDefDecoder.decodeTypeDef(
+ (XtypeResolver) fory.getTypeResolver(), buffer, buffer.readInt64());
}
- return NativeTypeDefDecoder.decodeTypeDef(fory.getClassResolver(), buffer, buffer.readInt64());
+ return NativeTypeDefDecoder.decodeTypeDef(
+ (ClassResolver) fory.getTypeResolver(), buffer, buffer.readInt64());
}
/** Read class definition from buffer. */
public static TypeDef readTypeDef(Fory fory, MemoryBuffer buffer, long header) {
if (fory.isCrossLanguage()) {
- return TypeDefDecoder.decodeTypeDef(fory.getXtypeResolver(), buffer, header);
+ return TypeDefDecoder.decodeTypeDef((XtypeResolver) fory.getTypeResolver(), buffer, header);
}
- return NativeTypeDefDecoder.decodeTypeDef(fory.getClassResolver(), buffer, header);
+ return NativeTypeDefDecoder.decodeTypeDef(
+ (ClassResolver) fory.getTypeResolver(), buffer, header);
}
/**
@@ -432,7 +436,7 @@ public class TypeDef implements Serializable {
return TypeDefEncoder.buildTypeDef(fory, cls);
}
return NativeTypeDefEncoder.buildTypeDef(
- fory.getClassResolver(), cls, buildFields(fory, cls, resolveParent), true);
+ (ClassResolver) fory.getTypeResolver(), cls, buildFields(fory, cls, resolveParent), true);
}
/** Build class definition from fields of class. */
@@ -460,7 +464,7 @@ public class TypeDef implements Serializable {
.collect(Collectors.toList());
if (resolver.getFory().isCrossLanguage()) {
return TypeDefEncoder.buildTypeDefWithFieldInfos(
- (org.apache.fory.resolver.XtypeResolver) resolver, targetCls, fieldInfos);
+ (XtypeResolver) resolver, targetCls, fieldInfos);
}
return NativeTypeDefEncoder.buildTypeDefWithFieldInfos(
(ClassResolver) resolver, targetCls, fieldInfos, hasFieldsMeta);
diff --git a/java/fory-core/src/main/java/org/apache/fory/meta/TypeDefEncoder.java b/java/fory-core/src/main/java/org/apache/fory/meta/TypeDefEncoder.java
index 594501b9c..7f474b0dd 100644
--- a/java/fory-core/src/main/java/org/apache/fory/meta/TypeDefEncoder.java
+++ b/java/fory-core/src/main/java/org/apache/fory/meta/TypeDefEncoder.java
@@ -61,13 +61,11 @@ class TypeDefEncoder {
/** Build class definition from fields of class. */
static TypeDef buildTypeDef(Fory fory, Class<?> type) {
+ XtypeResolver resolver = (XtypeResolver) fory.getTypeResolver();
DescriptorGrouper descriptorGrouper =
- fory.getXtypeResolver()
- .createDescriptorGrouper(
- fory.getXtypeResolver().getFieldDescriptors(type, true),
- false,
- Function.identity());
- TypeInfo typeInfo = fory.getTypeResolver().getTypeInfo(type);
+ resolver.createDescriptorGrouper(
+ resolver.getFieldDescriptors(type, true), false, Function.identity());
+ TypeInfo typeInfo = resolver.getTypeInfo(type);
List<Field> fields;
int typeId = typeInfo.getTypeId();
if (Types.isStructType(typeId)) {
@@ -78,8 +76,7 @@ class TypeDefEncoder {
} else {
fields = new ArrayList<>();
}
- return buildTypeDefWithFieldInfos(
- fory.getXtypeResolver(), type, buildFieldsInfo(fory.getXtypeResolver(), type, fields));
+ return buildTypeDefWithFieldInfos(resolver, type, buildFieldsInfo(resolver, type, fields));
}
static List<FieldInfo> buildFieldsInfo(TypeResolver resolver, Class<?> type, List<Field> fields) {
@@ -162,18 +159,11 @@ class TypeDefEncoder {
buffer.putByte(0, currentClassHeader);
writeFieldsInfo(resolver, buffer, fields);
- byte[] compressed =
- resolver
- .getFory()
- .getMetaCompressor()
- .compress(buffer.getHeapMemory(), 0, buffer.writerIndex());
- boolean isCompressed = false;
- if (compressed.length < buffer.writerIndex()) {
- isCompressed = true;
- buffer = MemoryBuffer.fromByteArray(compressed);
- buffer.writerIndex(compressed.length);
- }
- return prependHeader(buffer, isCompressed, !fields.isEmpty());
+ // Temporary xlang behavior: always write TypeMeta uncompressed.
+ // Some runtimes still don't support TypeMeta decompression, so we must avoid emitting
+ // compressed xlang TypeMeta until all xlang implementations support decompress.
+ // Note: native mode is unchanged and still uses NativeTypeDefEncoder compression flow.
+ return prependHeader(buffer, false, !fields.isEmpty());
}
static Map<String, FieldInfo> getClassFields(Class<?> type, List<FieldInfo> fieldsInfo) {
diff --git a/java/fory-core/src/main/java/org/apache/fory/pool/SimpleForyPool.java b/java/fory-core/src/main/java/org/apache/fory/pool/SimpleForyPool.java
index 5740e3a13..0fdb8be76 100644
--- a/java/fory-core/src/main/java/org/apache/fory/pool/SimpleForyPool.java
+++ b/java/fory-core/src/main/java/org/apache/fory/pool/SimpleForyPool.java
@@ -156,6 +156,21 @@ public class SimpleForyPool extends AbstractThreadSafeFory {
return execute(fory -> fory.deserialize(bytes, type));
}
+ @Override
+ public <T> T deserialize(MemoryBuffer buffer, Class<T> type) {
+ return execute(fory -> fory.deserialize(buffer, type));
+ }
+
+ @Override
+ public <T> T deserialize(ForyInputStream inputStream, Class<T> type) {
+ return execute(fory -> fory.deserialize(inputStream, type));
+ }
+
+ @Override
+ public <T> T deserialize(ForyReadableChannel channel, Class<T> type) {
+ return execute(fory -> fory.deserialize(channel, type));
+ }
+
@Override
public Object deserialize(byte[] bytes, Iterable<MemoryBuffer> outOfBandBuffers) {
return execute(fory -> fory.deserialize(bytes, outOfBandBuffers));
@@ -196,92 +211,6 @@ public class SimpleForyPool extends AbstractThreadSafeFory {
return execute(fory -> fory.deserialize(channel, outOfBandBuffers));
}
- @Override
- public byte[] serializeJavaObject(Object obj) {
- return execute(fory -> fory.serializeJavaObject(obj));
- }
-
- @Override
- public void serializeJavaObject(MemoryBuffer buffer, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObject(buffer, obj);
- return null;
- });
- }
-
- @Override
- public void serializeJavaObject(OutputStream outputStream, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObject(outputStream, obj);
- return null;
- });
- }
-
- @Override
- public <T> T deserializeJavaObject(byte[] data, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(data, cls));
- }
-
- @Override
- public <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(buffer, cls));
- }
-
- @Override
- public <T> T deserializeJavaObject(ForyInputStream inputStream, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(inputStream, cls));
- }
-
- @Override
- public <T> T deserializeJavaObject(ForyReadableChannel channel, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(channel, cls));
- }
-
- @Override
- public byte[] serializeJavaObjectAndClass(Object obj) {
- return execute(fory -> fory.serializeJavaObjectAndClass(obj));
- }
-
- @Override
- public void serializeJavaObjectAndClass(MemoryBuffer buffer, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObjectAndClass(buffer, obj);
- return null;
- });
- }
-
- @Override
- public void serializeJavaObjectAndClass(OutputStream outputStream, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObjectAndClass(outputStream, obj);
- return null;
- });
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(byte[] data) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(data));
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(MemoryBuffer buffer) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(buffer));
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(ForyInputStream inputStream) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(inputStream));
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(ForyReadableChannel channel) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(channel));
- }
-
@Override
public <T> T copy(T obj) {
return execute(fory -> fory.copy(obj));
diff --git a/java/fory-core/src/main/java/org/apache/fory/pool/ThreadPoolFory.java b/java/fory-core/src/main/java/org/apache/fory/pool/ThreadPoolFory.java
index d7017d762..cbef00055 100644
--- a/java/fory-core/src/main/java/org/apache/fory/pool/ThreadPoolFory.java
+++ b/java/fory-core/src/main/java/org/apache/fory/pool/ThreadPoolFory.java
@@ -145,6 +145,21 @@ public class ThreadPoolFory extends AbstractThreadSafeFory {
return execute(fory -> fory.deserialize(bytes, type));
}
+ @Override
+ public <T> T deserialize(MemoryBuffer buffer, Class<T> type) {
+ return execute(fory -> fory.deserialize(buffer, type));
+ }
+
+ @Override
+ public <T> T deserialize(ForyInputStream inputStream, Class<T> type) {
+ return execute(fory -> fory.deserialize(inputStream, type));
+ }
+
+ @Override
+ public <T> T deserialize(ForyReadableChannel channel, Class<T> type) {
+ return execute(fory -> fory.deserialize(channel, type));
+ }
+
@Override
public Object deserialize(byte[] bytes, Iterable<MemoryBuffer> outOfBandBuffers) {
return execute(fory -> fory.deserialize(bytes, outOfBandBuffers));
@@ -190,92 +205,6 @@ public class ThreadPoolFory extends AbstractThreadSafeFory {
return execute(fory -> fory.deserialize(channel, outOfBandBuffers));
}
- @Override
- public byte[] serializeJavaObject(Object obj) {
- return execute(fory -> fory.serializeJavaObject(obj));
- }
-
- @Override
- public void serializeJavaObject(MemoryBuffer buffer, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObject(buffer, obj);
- return null;
- });
- }
-
- @Override
- public void serializeJavaObject(OutputStream outputStream, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObject(outputStream, obj);
- return null;
- });
- }
-
- @Override
- public <T> T deserializeJavaObject(byte[] data, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(data, cls));
- }
-
- @Override
- public <T> T deserializeJavaObject(MemoryBuffer buffer, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(buffer, cls));
- }
-
- @Override
- public <T> T deserializeJavaObject(ForyInputStream inputStream, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(inputStream, cls));
- }
-
- @Override
- public <T> T deserializeJavaObject(ForyReadableChannel channel, Class<T> cls) {
- return execute(fory -> fory.deserializeJavaObject(channel, cls));
- }
-
- @Override
- public byte[] serializeJavaObjectAndClass(Object obj) {
- return execute(fory -> fory.serializeJavaObjectAndClass(obj));
- }
-
- @Override
- public void serializeJavaObjectAndClass(MemoryBuffer buffer, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObjectAndClass(buffer, obj);
- return null;
- });
- }
-
- @Override
- public void serializeJavaObjectAndClass(OutputStream outputStream, Object obj) {
- execute(
- fory -> {
- fory.serializeJavaObjectAndClass(outputStream, obj);
- return null;
- });
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(byte[] data) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(data));
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(MemoryBuffer buffer) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(buffer));
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(ForyInputStream inputStream) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(inputStream));
- }
-
- @Override
- public Object deserializeJavaObjectAndClass(ForyReadableChannel channel) {
- return execute(fory -> fory.deserializeJavaObjectAndClass(channel));
- }
-
@Override
public <T> T copy(T obj) {
return execute(fory -> fory.copy(obj));
diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassChecker.java b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassChecker.java
deleted file mode 100644
index 5ac38118f..000000000
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassChecker.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.fory.resolver;
-
-/**
- * Check whether class or objects of class should be serialized. If class checker will be invoked by
- * multiple {@link ClassResolver}, class checker should be thread safe.
- */
-@Deprecated
-public interface ClassChecker {
- /**
- * Check whether class should be allowed for serialization.
- *
- * @param classResolver class resolver
- * @param className full name of class
- * @return true if class is allowed for serialization.
- */
- boolean checkClass(ClassResolver classResolver, String className);
-}
diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
index e29ba82fb..82fb027df 100644
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
+++ b/java/fory-core/src/main/java/org/apache/fory/resolver/ClassResolver.java
@@ -44,10 +44,8 @@ import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
-import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.EnumSet;
@@ -79,7 +77,6 @@ import org.apache.fory.annotation.CodegenInvoke;
import org.apache.fory.annotation.ForyField;
import org.apache.fory.annotation.Internal;
import org.apache.fory.builder.JITContext;
-import org.apache.fory.codegen.CodeGenerator;
import org.apache.fory.collection.BoolList;
import org.apache.fory.collection.Float32List;
import org.apache.fory.collection.Float64List;
@@ -1082,22 +1079,6 @@ public class ClassResolver extends TypeResolver {
}
}
- /**
- * Reset serializer if <code>serializer</code> is not null, otherwise clear serializer for <code>
- * cls</code>.
- *
- * @see #setSerializer
- * @see #clearSerializer
- * @see #createSerializerSafe
- */
- public <T> void resetSerializer(Class<T> cls, Serializer<T> serializer) {
- if (serializer == null) {
- clearSerializer(cls);
- } else {
- setSerializer(cls, serializer);
- }
- }
-
/**
* Set serializer to avoid circular error when there is a serializer query for fields by {@link
* #readSharedClassMeta} and {@link #getSerializer(Class)} which access current creating
@@ -1407,20 +1388,6 @@ public class ClassResolver extends TypeResolver {
}
}
- @Deprecated
- public void setClassChecker(ClassChecker classChecker) {
- extRegistry.typeChecker =
- (resolver, className) -> {
- if (resolver instanceof ClassResolver) {
- return classChecker.checkClass((ClassResolver) resolver, className);
- }
- return false;
- };
- if (classChecker instanceof AllowListChecker) {
- ((AllowListChecker) classChecker).addListener(this);
- }
- }
-
// Invoked by fory JIT.
@Override
public TypeInfo getTypeInfo(Class<?> cls) {
@@ -1508,7 +1475,7 @@ public class ClassResolver extends TypeResolver {
}
public <T> Serializer<T> createSerializerSafe(Class<T> cls, Supplier<Serializer<T>> func) {
- Serializer serializer = fory.getClassResolver().getSerializer(cls, false);
+ Serializer serializer = getSerializer(cls, false);
try {
return func.get();
} catch (Throwable t) {
@@ -1907,20 +1874,6 @@ public class ClassResolver extends TypeResolver {
return classId >= PRIMITIVE_VOID_ID && classId <= PRIMITIVE_FLOAT64_ID;
}
- public CodeGenerator getCodeGenerator(ClassLoader... loaders) {
- List<ClassLoader> loaderList = new ArrayList<>(loaders.length);
- Collections.addAll(loaderList, loaders);
- return extRegistry.codeGeneratorMap.get(loaderList);
- }
-
- public void setCodeGenerator(ClassLoader loader, CodeGenerator codeGenerator) {
- setCodeGenerator(new ClassLoader[] {loader}, codeGenerator);
- }
-
- public void setCodeGenerator(ClassLoader[] loaders, CodeGenerator codeGenerator) {
- extRegistry.codeGeneratorMap.put(Arrays.asList(loaders), codeGenerator);
- }
-
/**
* Normalize type name for consistent ordering between serialization and deserialization.
* Collection subtypes (List, Set, etc.) are normalized to "java.util.Collection". Map subtypes
diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java b/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java
index 1aacf976d..1d367c2cf 100644
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java
+++ b/java/fory-core/src/main/java/org/apache/fory/resolver/TypeResolver.java
@@ -29,6 +29,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Type;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
@@ -1004,6 +1005,20 @@ public abstract class TypeResolver {
public abstract <T> void setSerializerIfAbsent(Class<T> cls, Serializer<T> serializer);
+ /**
+ * Reset serializer if {@code serializer} is not null, otherwise clear serializer for {@code cls}.
+ */
+ public <T> void resetSerializer(Class<T> cls, Serializer<T> serializer) {
+ if (serializer == null) {
+ TypeInfo typeInfo = getTypeInfo(cls, false);
+ if (typeInfo != null) {
+ typeInfo.setSerializer(this, null);
+ }
+ } else {
+ setSerializer(cls, serializer);
+ }
+ }
+
public final TypeInfo getTypeInfoByTypeId(int typeId) {
if (Types.isUserDefinedType((byte) typeId)) {
throw new IllegalArgumentException(
@@ -1428,6 +1443,30 @@ public abstract class TypeResolver {
extRegistry.typeChecker = typeChecker;
}
+ public void setSerializerFactory(SerializerFactory serializerFactory) {
+ extRegistry.serializerFactory = serializerFactory;
+ }
+
+ public CodeGenerator getCodeGenerator(ClassLoader... loaders) {
+ return extRegistry.codeGeneratorMap.get(Arrays.asList(loaders));
+ }
+
+ public void setCodeGenerator(ClassLoader loader, CodeGenerator codeGenerator) {
+ setCodeGenerator(new ClassLoader[] {loader}, codeGenerator);
+ }
+
+ public void setCodeGenerator(ClassLoader[] loaders, CodeGenerator codeGenerator) {
+ extRegistry.codeGeneratorMap.put(Arrays.asList(loaders), codeGenerator);
+ }
+
+ public SerializerFactory getSerializerFactory() {
+ return extRegistry.serializerFactory;
+ }
+
+ public void resetRead() {}
+
+ public void resetWrite() {}
+
// CHECKSTYLE.OFF:MethodName
public static void _addGraalvmClassRegistry(int foryConfigHash, ClassResolver classResolver) {
// CHECKSTYLE.ON:MethodName
diff --git a/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java b/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java
index 76d0366b4..0ca109846 100644
--- a/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java
+++ b/java/fory-core/src/main/java/org/apache/fory/resolver/XtypeResolver.java
@@ -116,6 +116,7 @@ import org.apache.fory.type.Types;
import org.apache.fory.type.union.Union;
import org.apache.fory.type.unsigned.Uint16;
import org.apache.fory.type.unsigned.Uint32;
+import org.apache.fory.type.unsigned.Uint64;
import org.apache.fory.type.unsigned.Uint8;
import org.apache.fory.util.GraalvmSupport;
import org.apache.fory.util.Preconditions;
@@ -157,6 +158,9 @@ public class XtypeResolver extends TypeResolver {
@Override
public void initialize() {
registerDefaultTypes();
+ // Keep xlang default internal serializers aligned with previous bootstrap behavior.
+ // Before resolver unification, these were registered through ClassResolver initialization.
+ Serializers.registerDefaultSerializers(fory);
if (shareMeta) {
Serializer serializer = new UnknownStructSerializer(fory, null);
register(UnknownStruct.class, serializer, "", "unknown_struct", Types.COMPATIBLE_STRUCT, -1);
@@ -443,15 +447,10 @@ public class XtypeResolver extends TypeResolver {
int oldTypeId = typeInfo.typeId;
int foryId = oldTypeId;
- if (foryId != Types.EXT && foryId != Types.NAMED_EXT) {
- if (foryId == Types.STRUCT || foryId == Types.COMPATIBLE_STRUCT) {
- foryId = Types.EXT;
- } else if (foryId == Types.NAMED_STRUCT || foryId == Types.NAMED_COMPATIBLE_STRUCT) {
- foryId = Types.NAMED_EXT;
- } else {
- throw new IllegalArgumentException(
- String.format("Can't register serializer for type %s with id %s", type, oldTypeId));
- }
+ if (foryId == Types.STRUCT || foryId == Types.COMPATIBLE_STRUCT) {
+ foryId = Types.EXT;
+ } else if (foryId == Types.NAMED_STRUCT || foryId == Types.NAMED_COMPATIBLE_STRUCT) {
+ foryId = Types.NAMED_EXT;
}
typeInfo = typeInfo.copy(foryId);
typeInfo.serializer = serializer;
@@ -819,6 +818,7 @@ public class XtypeResolver extends TypeResolver {
registerType(
Types.VARINT32, AtomicInteger.class, new Serializers.AtomicIntegerSerializer(fory));
registerType(Types.UINT32, Uint32.class, new UnsignedSerializers.Uint32Serializer(fory));
+ registerType(Types.UINT64, Uint64.class, new UnsignedSerializers.Uint64Serializer(fory));
// Long types
registerType(
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/AbstractObjectSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/AbstractObjectSerializer.java
index 8cf3348e0..13ae09934 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/AbstractObjectSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/AbstractObjectSerializer.java
@@ -35,7 +35,6 @@ import org.apache.fory.reflect.ObjectCreator;
import org.apache.fory.reflect.ObjectCreators;
import org.apache.fory.reflect.ReflectionUtils;
import org.apache.fory.reflect.TypeRef;
-import org.apache.fory.resolver.ClassResolver;
import org.apache.fory.resolver.RefMode;
import org.apache.fory.resolver.RefResolver;
import org.apache.fory.resolver.TypeInfo;
@@ -56,7 +55,6 @@ import org.apache.fory.util.record.RecordUtils;
public abstract class AbstractObjectSerializer<T> extends Serializer<T> {
private static final Logger LOG = LoggerFactory.getLogger(AbstractObjectSerializer.class);
protected final RefResolver refResolver;
- protected final ClassResolver classResolver;
protected final TypeResolver typeResolver;
protected final boolean isRecord;
protected final ObjectCreator<T> objectCreator;
@@ -70,7 +68,6 @@ public abstract class AbstractObjectSerializer<T> extends Serializer<T> {
public AbstractObjectSerializer(Fory fory, Class<T> type, ObjectCreator<T> objectCreator) {
super(fory, type);
this.refResolver = fory.getRefResolver();
- this.classResolver = fory.getClassResolver();
this.typeResolver = fory.getTypeResolver();
this.isRecord = RecordUtils.isRecord(type);
this.objectCreator = objectCreator;
@@ -1181,7 +1178,7 @@ public abstract class AbstractObjectSerializer<T> extends Serializer<T> {
}
}
DescriptorGrouper descriptorGrouper =
- fory.getClassResolver().createDescriptorGrouper(descriptors, false);
+ fory.getTypeResolver().createDescriptorGrouper(descriptors, false);
FieldGroups fieldGroups = FieldGroups.buildFieldInfos(fory, descriptorGrouper);
fieldInfos = fieldGroups.allFields;
if (isRecord) {
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/ArraySerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/ArraySerializers.java
index 2d49ef8b4..0df826a8a 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/ArraySerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/ArraySerializers.java
@@ -51,7 +51,10 @@ public class ArraySerializers {
public ObjectArraySerializer(Fory fory, Class<T[]> cls) {
super(fory, cls);
- fory.getClassResolver().setSerializer(cls, this);
+ TypeResolver resolver = fory.getTypeResolver();
+ if (resolver instanceof ClassResolver) {
+ ((ClassResolver) resolver).setSerializer(cls, this);
+ }
Preconditions.checkArgument(cls.isArray());
Class<?> t = cls;
Class<?> innerType = cls;
@@ -65,19 +68,19 @@ public class ArraySerializers {
}
this.innerType = (Class<T>) innerType;
Class<?> componentType = cls.getComponentType();
- componentGenericType = fory.getClassResolver().buildGenericType(componentType);
- if (fory.getClassResolver().isMonomorphic(componentType)) {
+ componentGenericType = fory.getTypeResolver().buildGenericType(componentType);
+ if (fory.getTypeResolver().isMonomorphic(componentType)) {
if (fory.isCrossLanguage()) {
this.componentTypeSerializer = null;
} else {
- this.componentTypeSerializer = fory.getClassResolver().getSerializer(componentType);
+ this.componentTypeSerializer = fory.getTypeResolver().getSerializer(componentType);
}
} else {
// TODO add TypeInfo cache for non-final component type.
this.componentTypeSerializer = null;
}
this.stubDims = new int[dimension];
- classInfoHolder = fory.getClassResolver().nilTypeInfoHolder();
+ classInfoHolder = fory.getTypeResolver().nilTypeInfoHolder();
}
@Override
@@ -105,7 +108,7 @@ public class ArraySerializers {
}
} else {
Fory fory = this.fory;
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
TypeInfo typeInfo = null;
Class<?> elemClass = null;
for (T t : arr) {
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/CodegenSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/CodegenSerializer.java
index e10116c4c..af8126786 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/CodegenSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/CodegenSerializer.java
@@ -86,7 +86,7 @@ public final class CodegenSerializer {
@SuppressWarnings({"rawtypes"})
private Serializer<T> getOrCreateGeneratedSerializer() {
if (serializer == null) {
- Serializer<T> jitSerializer = fory.getClassResolver().getSerializer(type);
+ Serializer<T> jitSerializer = fory.getTypeResolver().getSerializer(type);
// Just be defensive for `getSerializer`/other call in Codec Builder to make
// LazyInitBeanSerializer as serializer for `type`.
if (jitSerializer instanceof LazyInitBeanSerializer) {
@@ -94,23 +94,22 @@ public final class CodegenSerializer {
if (interpreterSerializer != null) {
return interpreterSerializer;
}
- fory.getClassResolver().getTypeInfo(type).setSerializer(null);
+ fory.getTypeResolver().getTypeInfo(type).setSerializer(null);
if (fory.getConfig().isAsyncCompilationEnabled()) {
// jit not finished, avoid recursive call current serializer.
- Class<? extends Serializer> sc =
- fory.getClassResolver().getSerializerClass(type, false);
- fory.getClassResolver().getTypeInfo(type).setSerializer(this);
+ Class<? extends Serializer> sc = fory.getTypeResolver().getSerializerClass(type, false);
+ fory.getTypeResolver().getTypeInfo(type).setSerializer(this);
return interpreterSerializer = Serializers.newSerializer(fory, type, sc);
} else {
- Class<? extends Serializer> sc = fory.getClassResolver().getSerializerClass(type);
- fory.getClassResolver().getTypeInfo(type).setSerializer(this);
+ Class<? extends Serializer> sc = fory.getTypeResolver().getSerializerClass(type);
+ fory.getTypeResolver().getTypeInfo(type).setSerializer(this);
checkArgument(
Generated.GeneratedSerializer.class.isAssignableFrom(sc),
"Expect jit serializer but got %s for class %s",
sc,
type);
serializer = Serializers.newSerializer(fory, type, sc);
- fory.getClassResolver().setSerializer(type, serializer);
+ fory.getTypeResolver().setSerializer(type, serializer);
return serializer;
}
} else {
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/FieldGroups.java b/java/fory-core/src/main/java/org/apache/fory/serializer/FieldGroups.java
index 9726c0ea6..44329547a 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/FieldGroups.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/FieldGroups.java
@@ -75,7 +75,7 @@ public class FieldGroups {
}
}
DescriptorGrouper descriptorGrouper =
- fory.getClassResolver().createDescriptorGrouper(descriptors, false);
+ fory.getTypeResolver().createDescriptorGrouper(descriptors, false);
return buildFieldInfos(fory, descriptorGrouper);
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/LambdaSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/LambdaSerializer.java
index efa80b772..bae24def6 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/LambdaSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/LambdaSerializer.java
@@ -30,6 +30,7 @@ import org.apache.fory.collection.ClassValueCache;
import org.apache.fory.exception.ForyException;
import org.apache.fory.memory.MemoryBuffer;
import org.apache.fory.reflect.ReflectionUtils;
+import org.apache.fory.resolver.ClassResolver;
import org.apache.fory.util.Preconditions;
import org.apache.fory.util.function.SerializableFunction;
import org.apache.fory.util.unsafe._JDKAccess;
@@ -151,11 +152,11 @@ public class LambdaSerializer extends Serializer {
() -> CodegenSerializer.loadCodegenSerializer(fory, SERIALIZED_LAMBDA),
c -> {
this.dataSerializer = Serializers.newSerializer(fory, SERIALIZED_LAMBDA, c);
- fory.getClassResolver().clearSerializer(SERIALIZED_LAMBDA);
+ ((ClassResolver) fory.getTypeResolver()).clearSerializer(SERIALIZED_LAMBDA);
});
}
this.dataSerializer = dataSerializer = Serializers.newSerializer(fory, SERIALIZED_LAMBDA, sc);
- fory.getClassResolver().clearSerializer(SERIALIZED_LAMBDA);
+ ((ClassResolver) fory.getTypeResolver()).clearSerializer(SERIALIZED_LAMBDA);
}
return dataSerializer;
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/LazySerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/LazySerializer.java
index 5dff1f763..60626a983 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/LazySerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/LazySerializer.java
@@ -37,9 +37,9 @@ public class LazySerializer extends Serializer {
public void write(MemoryBuffer buffer, Object value) {
if (serializer == null) {
serializer = serializerSupplier.get();
- fory.getClassResolver().setSerializer(value.getClass(), serializer);
+ fory.getTypeResolver().setSerializer(value.getClass(), serializer);
if (!isJava) {
- fory.getXtypeResolver().getTypeInfo(value.getClass()).setSerializer(serializer);
+ fory.getTypeResolver().getTypeInfo(value.getClass()).setSerializer(serializer);
}
}
serializer.write(buffer, value);
@@ -53,9 +53,9 @@ public class LazySerializer extends Serializer {
}
Object value = serializer.read(buffer);
if (unInit) {
- fory.getClassResolver().setSerializer(value.getClass(), serializer);
+ fory.getTypeResolver().setSerializer(value.getClass(), serializer);
if (!isJava) {
- fory.getXtypeResolver().getTypeInfo(value.getClass()).setSerializer(serializer);
+ fory.getTypeResolver().getTypeInfo(value.getClass()).setSerializer(serializer);
}
}
return value;
@@ -65,7 +65,7 @@ public class LazySerializer extends Serializer {
public Object copy(Object value) {
if (serializer == null) {
serializer = serializerSupplier.get();
- fory.getClassResolver().setSerializer(value.getClass(), serializer);
+ fory.getTypeResolver().setSerializer(value.getClass(), serializer);
}
return serializer.copy(value);
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/MetaSharedSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/MetaSharedSerializer.java
index a1b2d1d42..a0292a5ce 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/MetaSharedSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/MetaSharedSerializer.java
@@ -33,6 +33,7 @@ import org.apache.fory.memory.MemoryBuffer;
import org.apache.fory.memory.Platform;
import org.apache.fory.meta.TypeDef;
import org.apache.fory.reflect.FieldAccessor;
+import org.apache.fory.resolver.ClassResolver;
import org.apache.fory.resolver.MapRefResolver;
import org.apache.fory.resolver.RefResolver;
import org.apache.fory.resolver.TypeResolver;
@@ -150,7 +151,8 @@ public class MetaSharedSerializer<T> extends AbstractObjectSerializer<T> {
if (serializer == null) {
// xlang mode will register class and create serializer in advance, it won't go to here.
serializer =
- this.classResolver.createSerializerSafe(type, () -> new ObjectSerializer<>(fory, type));
+ ((ClassResolver) typeResolver)
+ .createSerializerSafe(type, () -> new ObjectSerializer<>(fory, type));
}
serializer.write(buffer, value);
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectSerializer.java
index 19719c6b6..b95c2f7b8 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectSerializer.java
@@ -77,13 +77,13 @@ public final class ObjectSerializer<T> extends AbstractObjectSerializer<T> {
public ObjectSerializer(Fory fory, Class<T> cls, boolean resolveParent) {
super(fory, cls);
+ typeResolver = fory.getTypeResolver();
// avoid recursive building serializers.
// Use `setSerializerIfAbsent` to avoid overwriting existing serializer for class when used
// as data serializer.
if (resolveParent) {
- classResolver.setSerializerIfAbsent(cls, this);
+ typeResolver.setSerializerIfAbsent(cls, this);
}
- typeResolver = fory.getTypeResolver();
Collection<Descriptor> descriptors;
boolean shareMeta = fory.getConfig().isMetaShareEnabled();
if (shareMeta) {
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectStreamSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectStreamSerializer.java
index a8a9aae28..687ff068b 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectStreamSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/ObjectStreamSerializer.java
@@ -59,6 +59,7 @@ import org.apache.fory.meta.TypeDef;
import org.apache.fory.reflect.ObjectCreator;
import org.apache.fory.reflect.ObjectCreators;
import org.apache.fory.reflect.ReflectionUtils;
+import org.apache.fory.resolver.ClassResolver;
import org.apache.fory.resolver.MetaContext;
import org.apache.fory.resolver.TypeInfo;
import org.apache.fory.type.Descriptor;
@@ -176,7 +177,7 @@ public class ObjectStreamSerializer extends AbstractObjectSerializer {
Externalizable.class.getName());
}
// stream serializer may be data serializer of ReplaceResolver serializer.
- fory.getClassResolver().setSerializerIfAbsent(type, this);
+ fory.getTypeResolver().setSerializerIfAbsent(type, this);
List<SlotInfo> slotsInfoList = new ArrayList<>();
Class<?> end = type;
// locate closest non-serializable superclass
@@ -209,6 +210,7 @@ public class ObjectStreamSerializer extends AbstractObjectSerializer {
public void write(MemoryBuffer buffer, Object value) {
buffer.writeInt16((short) slotsInfos.length);
try {
+ ClassResolver classResolver = (ClassResolver) typeResolver;
for (SlotInfo slotsInfo : slotsInfos) {
// create a classinfo to avoid null class bytes when class id is a
// replacement id.
@@ -260,6 +262,7 @@ public class ObjectStreamSerializer extends AbstractObjectSerializer {
int slotIndex = 0;
try {
+ ClassResolver classResolver = (ClassResolver) typeResolver;
TreeMap<Integer, ObjectInputValidation> callbacks = new TreeMap<>(Collections.reverseOrder());
for (int i = 0; i < numClasses; i++) {
Class<?> currentClass = classResolver.readClassInternal(buffer);
@@ -458,13 +461,13 @@ public class ObjectStreamSerializer extends AbstractObjectSerializer {
*/
private static void ensureFieldSerializersGenerated(
Fory fory, TypeDef layerTypeDef, Class<?> type) {
- Collection<Descriptor> descriptors = layerTypeDef.getDescriptors(fory.getClassResolver(), type);
+ Collection<Descriptor> descriptors = layerTypeDef.getDescriptors(fory.getTypeResolver(), type);
for (Descriptor descriptor : descriptors) {
Class<?> fieldType = descriptor.getRawType();
if (fieldType != null && !fieldType.isPrimitive()) {
try {
// Trigger serializer generation for this field type
- fory.getClassResolver().getSerializerClass(fieldType);
+ fory.getTypeResolver().getSerializerClass(fieldType);
} catch (Exception e) {
// Ignore errors - some types may not need serializers or may be handled specially
ExceptionUtils.ignore(e);
@@ -520,9 +523,10 @@ public class ObjectStreamSerializer extends AbstractObjectSerializer {
}
// For registered types
- if (fory.getClassResolver().isRegisteredById(fieldType)) {
- int typeId = fory.getClassResolver().getTypeIdForTypeDef(fieldType);
- int userTypeId = fory.getClassResolver().getUserTypeIdForTypeDef(fieldType);
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
+ if (classResolver.isRegisteredById(fieldType)) {
+ int typeId = classResolver.getTypeIdForTypeDef(fieldType);
+ int userTypeId = classResolver.getUserTypeIdForTypeDef(fieldType);
return new FieldTypes.RegisteredFieldType(true, true, typeId, userTypeId);
}
@@ -632,10 +636,10 @@ public class ObjectStreamSerializer extends AbstractObjectSerializer {
buildFieldInfoFromObjectStreamClass(fory, objectStreamClass, type);
layerTypeDef =
NativeTypeDefEncoder.buildTypeDefWithFieldInfos(
- fory.getClassResolver(), type, fieldInfos, true);
+ (ClassResolver) fory.getTypeResolver(), type, fieldInfos, true);
} else {
// Fallback when ObjectStreamClass is not available (e.g., GraalVM native image)
- layerTypeDef = fory.getClassResolver().getTypeDef(type, false);
+ layerTypeDef = fory.getTypeResolver().getTypeDef(type, false);
}
// Generate marker class for this layer. Use 0 as layer index since each class
// has its own SlotsInfo, and the (class, 0) pair is unique for each class.
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/ReplaceResolveSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/ReplaceResolveSerializer.java
index e9b6f9f43..228cb40ba 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/ReplaceResolveSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/ReplaceResolveSerializer.java
@@ -185,7 +185,7 @@ public class ReplaceResolveSerializer extends Serializer {
} else if (JavaSerializer.getReadObjectMethod(cls, true) == null
&& JavaSerializer.getWriteObjectMethod(cls, true) == null) {
serializerClass =
- fory.getClassResolver()
+ ((ClassResolver) fory.getTypeResolver())
.getObjectSerializerClass(
cls,
sc -> methodInfoCache.setObjectSerializer(createDataSerializer(fory, cls, sc)));
@@ -204,9 +204,10 @@ public class ReplaceResolveSerializer extends Serializer {
*/
private static Serializer createDataSerializer(
Fory fory, Class<?> cls, Class<? extends Serializer> sc) {
- Serializer prev = fory.getClassResolver().getSerializer(cls, false);
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
+ Serializer prev = classResolver.getSerializer(cls, false);
Serializer serializer = Serializers.newSerializer(fory, cls, sc);
- fory.getClassResolver().resetSerializer(cls, prev);
+ classResolver.resetSerializer(cls, prev);
return serializer;
}
@@ -224,7 +225,7 @@ public class ReplaceResolveSerializer extends Serializer {
Fory fory, Class type, boolean isFinalField, boolean setSerializer) {
super(fory, type);
refResolver = fory.getRefResolver();
- classResolver = fory.getClassResolver();
+ classResolver = (ClassResolver) fory.getTypeResolver();
if (setSerializer) {
// `setSerializer` before `newJDKMethodInfoCache` since it query classinfo from
// `classResolver`,
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/SerializationUtils.java b/java/fory-core/src/main/java/org/apache/fory/serializer/SerializationUtils.java
index ec2bad055..fb65abbe0 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/SerializationUtils.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/SerializationUtils.java
@@ -31,7 +31,7 @@ import org.apache.fory.serializer.collection.MapSerializer;
@Internal
public class SerializationUtils {
public static TypeResolver getTypeResolver(Fory fory) {
- return fory.isCrossLanguage() ? fory.getXtypeResolver() : fory.getClassResolver();
+ return fory.isCrossLanguage() ? fory.getTypeResolver() : fory.getTypeResolver();
}
public static TypeInfo getTypeInfo(Fory fory, Class<?> cls) {
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/Serializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/Serializers.java
index b13d087f5..17c9a85a4 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/Serializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/Serializers.java
@@ -49,6 +49,8 @@ import org.apache.fory.memory.MemoryBuffer;
import org.apache.fory.memory.Platform;
import org.apache.fory.meta.TypeDef;
import org.apache.fory.reflect.ReflectionUtils;
+import org.apache.fory.resolver.ClassResolver;
+import org.apache.fory.resolver.TypeInfo;
import org.apache.fory.resolver.TypeResolver;
import org.apache.fory.util.ExceptionUtils;
import org.apache.fory.util.GraalvmSupport;
@@ -81,13 +83,15 @@ public class Serializers {
*/
public static <T> Serializer<T> newSerializer(
Fory fory, Class type, Class<? extends Serializer> serializerClass) {
- Serializer serializer = fory.getClassResolver().getSerializer(type, false);
+ TypeResolver typeResolver = fory.getTypeResolver();
+ TypeInfo typeInfo = typeResolver.getTypeInfo(type, false);
+ Serializer serializer = typeInfo == null ? null : typeInfo.getSerializer();
try {
if (serializerClass == ObjectSerializer.class) {
return new ObjectSerializer(fory, type);
}
if (serializerClass == MetaSharedSerializer.class) {
- TypeDef typeDef = fory.getClassResolver().getTypeDef(type, true);
+ TypeDef typeDef = typeResolver.getTypeDef(type, true);
return new MetaSharedSerializer(fory, type, typeDef);
}
Tuple2<MethodType, MethodHandle> ctrInfo = CTR_MAP.getIfPresent(serializerClass);
@@ -112,7 +116,7 @@ public class Serializers {
return createSerializer(fory, type, serializerClass);
}
} catch (InvocationTargetException e) {
- fory.getClassResolver().resetSerializer(type, serializer);
+ typeResolver.resetSerializer(type, serializer);
if (e.getCause() != null) {
Platform.throwException(e.getCause());
} else {
@@ -122,7 +126,7 @@ public class Serializers {
// Some serializer may set itself in constructor as serializer, but the
// constructor failed later. For example, some final type field doesn't
// support serialization.
- fory.getClassResolver().resetSerializer(type, serializer);
+ typeResolver.resetSerializer(type, serializer);
Platform.throwException(t);
}
throw new IllegalStateException("unreachable");
@@ -520,12 +524,12 @@ public class Serializers {
@Override
public void write(MemoryBuffer buffer, Class value) {
- fory.getClassResolver().writeClassInternal(buffer, value);
+ ((ClassResolver) fory.getTypeResolver()).writeClassInternal(buffer, value);
}
@Override
public Class read(MemoryBuffer buffer) {
- return fory.getClassResolver().readClassInternal(buffer);
+ return ((ClassResolver) fory.getTypeResolver()).readClassInternal(buffer);
}
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/UnknownClassSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/UnknownClassSerializers.java
index 72dbfd701..0ed308f81 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/UnknownClassSerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/UnknownClassSerializers.java
@@ -210,7 +210,7 @@ public final class UnknownClassSerializers {
MetaSharedSerializer.consolidateFields(
resolver, UnknownClass.UnknownEmptyStruct.class, typeDef);
DescriptorGrouper grouper =
- fory.getClassResolver().createDescriptorGrouper(descriptors, false);
+ fory.getTypeResolver().createDescriptorGrouper(descriptors, false);
FieldGroups fieldGroups = FieldGroups.buildFieldInfos(fory, grouper);
int classVersionHash = 0;
if (fory.checkClassVersion()) {
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/ChildContainerSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/ChildContainerSerializers.java
index 837873fd6..011508219 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/ChildContainerSerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/ChildContainerSerializers.java
@@ -238,7 +238,7 @@ public class ChildContainerSerializers {
while (!superClasses.contains(cls)) {
Serializer slotsSerializer;
if (fory.getConfig().getCompatibleMode() == CompatibleMode.COMPATIBLE) {
- TypeDef layerTypeDef = fory.getClassResolver().getTypeDef(cls, false);
+ TypeDef layerTypeDef = fory.getTypeResolver().getTypeDef(cls, false);
// Use layer index within class hierarchy (not global counter)
// This ensures unique marker classes for each layer
Class<?> layerMarkerClass = LayerMarkerClassGenerator.getOrCreate(fory, cls, layerIndex);
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java
index cee78a163..974b85358 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionLikeSerializer.java
@@ -62,7 +62,7 @@ public abstract class CollectionLikeSerializer<T> extends Serializer<T> {
public CollectionLikeSerializer(Fory fory, Class<T> cls, boolean supportCodegenHook) {
super(fory, cls);
this.supportCodegenHook = supportCodegenHook;
- elementTypeInfoHolder = fory.getClassResolver().nilTypeInfoHolder();
+ elementTypeInfoHolder = fory.getTypeResolver().nilTypeInfoHolder();
this.typeResolver = fory.getTypeResolver();
}
@@ -70,7 +70,7 @@ public abstract class CollectionLikeSerializer<T> extends Serializer<T> {
Fory fory, Class<T> cls, boolean supportCodegenHook, boolean immutable) {
super(fory, cls, immutable);
this.supportCodegenHook = supportCodegenHook;
- elementTypeInfoHolder = fory.getClassResolver().nilTypeInfoHolder();
+ elementTypeInfoHolder = fory.getTypeResolver().nilTypeInfoHolder();
this.typeResolver = fory.getTypeResolver();
}
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java
index 3dc68ac7e..b4bd9897f 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/CollectionSerializers.java
@@ -512,7 +512,7 @@ public class CollectionSerializers {
@Override
public Collection newCollection(MemoryBuffer buffer) {
- final TypeInfo mapTypeInfo = fory.getClassResolver().readTypeInfo(buffer);
+ final TypeInfo mapTypeInfo = fory.getTypeResolver().readTypeInfo(buffer);
final MapLikeSerializer mapSerializer = (MapLikeSerializer) mapTypeInfo.getSerializer();
RefResolver refResolver = fory.getRefResolver();
// It's possible that elements or nested fields has circular ref to set.
@@ -543,7 +543,7 @@ public class CollectionSerializers {
Map<?, Boolean> map =
(Map<?, Boolean>) Platform.getObject(originCollection, MAP_FIELD_OFFSET);
MapLikeSerializer mapSerializer =
- (MapLikeSerializer) fory.getClassResolver().getSerializer(map.getClass());
+ (MapLikeSerializer) fory.getTypeResolver().getSerializer(map.getClass());
Map newMap = mapSerializer.newMap(map);
return Collections.newSetFromMap(newMap);
}
@@ -551,9 +551,9 @@ public class CollectionSerializers {
@Override
public Collection onCollectionWrite(MemoryBuffer buffer, Set<?> value) {
final Map<?, Boolean> map = (Map<?, Boolean>) Platform.getObject(value, MAP_FIELD_OFFSET);
- final TypeInfo typeInfo = fory.getClassResolver().getTypeInfo(map.getClass());
+ final TypeInfo typeInfo = fory.getTypeResolver().getTypeInfo(map.getClass());
MapLikeSerializer mapSerializer = (MapLikeSerializer) typeInfo.getSerializer();
- fory.getClassResolver().writeTypeInfo(buffer, typeInfo);
+ fory.getTypeResolver().writeTypeInfo(buffer, typeInfo);
if (mapSerializer.supportCodegenHook) {
buffer.writeBoolean(true);
mapSerializer.onMapWrite(buffer, map);
@@ -574,8 +574,8 @@ public class CollectionSerializers {
public ConcurrentHashMapKeySetViewSerializer(
Fory fory, Class<ConcurrentHashMap.KeySetView> type) {
super(fory, type, false);
- mapTypeInfoHolder = fory.getClassResolver().nilTypeInfoHolder();
- valueTypeInfoHolder = fory.getClassResolver().nilTypeInfoHolder();
+ mapTypeInfoHolder = fory.getTypeResolver().nilTypeInfoHolder();
+ valueTypeInfoHolder = fory.getTypeResolver().nilTypeInfoHolder();
}
@Override
@@ -658,8 +658,8 @@ public class CollectionSerializers {
if (!elemClass.isEnum()) {
elemClass = elemClass.getEnclosingClass();
}
- fory.getClassResolver().writeClassAndUpdateCache(buffer, elemClass);
- Serializer serializer = fory.getClassResolver().getSerializer(elemClass);
+ ((ClassResolver) fory.getTypeResolver()).writeClassAndUpdateCache(buffer, elemClass);
+ Serializer serializer = fory.getTypeResolver().getSerializer(elemClass);
buffer.writeVarUint32Small7(object.size());
for (Object element : object) {
serializer.write(buffer, element);
@@ -668,9 +668,9 @@ public class CollectionSerializers {
@Override
public EnumSet read(MemoryBuffer buffer) {
- Class elemClass = fory.getClassResolver().readTypeInfo(buffer).getCls();
+ Class elemClass = fory.getTypeResolver().readTypeInfo(buffer).getCls();
EnumSet object = EnumSet.noneOf(elemClass);
- Serializer elemSerializer = fory.getClassResolver().getSerializer(elemClass);
+ Serializer elemSerializer = fory.getTypeResolver().getSerializer(elemClass);
int length = buffer.readVarUint32Small7();
for (int i = 0; i < length; i++) {
object.add(elemSerializer.read(buffer));
@@ -869,14 +869,14 @@ public class CollectionSerializers {
!fory.isCrossLanguage(),
"Fory cross-language default collection serializer should use "
+ CollectionSerializer.class);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
Class<? extends Serializer> serializerClass =
- fory.getClassResolver()
+ ((ClassResolver) fory.getTypeResolver())
.getObjectSerializerClass(
cls, sc -> dataSerializer = Serializers.newSerializer(fory, cls, sc));
dataSerializer = Serializers.newSerializer(fory, cls, serializerClass);
// No need to set object serializer to this, it will be set in class resolver later.
- // fory.getClassResolver().setSerializer(cls, this);
+ // fory.getTypeResolver().setSerializer(cls, this);
}
@Override
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/GuavaCollectionSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/GuavaCollectionSerializers.java
index 1a0800b52..2f12fd8a1 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/GuavaCollectionSerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/GuavaCollectionSerializers.java
@@ -47,7 +47,7 @@ public class GuavaCollectionSerializers {
extends CollectionSerializer<T> {
public GuavaCollectionSerializer(Fory fory, Class<T> cls) {
super(fory, cls, true);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
}
protected abstract T xnewInstance(Collection collection);
@@ -57,7 +57,7 @@ public class GuavaCollectionSerializers {
extends GuavaCollectionSerializer<T> {
public ImmutableListSerializer(Fory fory, Class<T> cls) {
super(fory, cls);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
}
@Override
@@ -176,7 +176,7 @@ public class GuavaCollectionSerializers {
extends CollectionSerializer<T> {
public ImmutableSortedSetSerializer(Fory fory, Class<T> cls) {
super(fory, cls, false);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
}
@Override
@@ -214,7 +214,7 @@ public class GuavaCollectionSerializers {
public GuavaMapSerializer(Fory fory, Class<T> cls) {
super(fory, cls, true);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
}
protected abstract ImmutableMap.Builder makeBuilder(int size);
@@ -290,7 +290,7 @@ public class GuavaCollectionSerializers {
public ImmutableMapSerializer(Fory fory, Class<T> cls) {
super(fory, cls);
builderCtr = builderCtrCache.get(ImmutableMap.Builder.class);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
}
@Override
@@ -311,7 +311,7 @@ public class GuavaCollectionSerializers {
public ImmutableBiMapSerializer(Fory fory, Class<T> cls) {
super(fory, cls);
builderCtr = builderCtrCache.get(ImmutableBiMap.Builder.class);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
}
@Override
@@ -330,7 +330,7 @@ public class GuavaCollectionSerializers {
public ImmutableSortedMapSerializer(Fory fory, Class<T> cls) {
super(fory, cls);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
}
@Override
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java
index aa80d00c6..6a09b0bb4 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/MapSerializers.java
@@ -336,14 +336,14 @@ public class MapSerializers {
public Map onMapWrite(MemoryBuffer buffer, EnumMap value) {
buffer.writeVarUint32Small7(value.size());
Class keyType = (Class) Platform.getObject(value, keyTypeFieldOffset);
- fory.getClassResolver().writeClassAndUpdateCache(buffer, keyType);
+ ((ClassResolver) fory.getTypeResolver()).writeClassAndUpdateCache(buffer, keyType);
return value;
}
@Override
public EnumMap newMap(MemoryBuffer buffer) {
setNumElements(buffer.readVarUint32Small7());
- Class<?> keyType = fory.getClassResolver().readTypeInfo(buffer).getCls();
+ Class<?> keyType = fory.getTypeResolver().readTypeInfo(buffer).getCls();
return new EnumMap(keyType);
}
@@ -361,7 +361,7 @@ public class MapSerializers {
@Override
protected <K, V> void copyEntry(Map<K, V> originMap, Map<K, V> newMap) {
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
for (Entry<K, V> entry : originMap.entrySet()) {
V value = entry.getValue();
if (value != null) {
@@ -388,14 +388,14 @@ public class MapSerializers {
Preconditions.checkArgument(
!fory.isCrossLanguage(),
"Fory cross-language default map serializer should use " + MapSerializer.class);
- fory.getClassResolver().setSerializer(cls, this);
+ fory.getTypeResolver().setSerializer(cls, this);
Class<? extends Serializer> serializerClass =
- fory.getClassResolver()
+ ((ClassResolver) fory.getTypeResolver())
.getObjectSerializerClass(
cls, sc -> dataSerializer = Serializers.newSerializer(fory, cls, sc));
dataSerializer = Serializers.newSerializer(fory, cls, serializerClass);
// No need to set object serializer to this, it will be set in class resolver later.
- // fory.getClassResolver().setSerializer(cls, this);
+ // fory.getTypeResolver().setSerializer(cls, this);
}
@Override
diff --git a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java
index 98efa1839..fb2c2c173 100644
--- a/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/serializer/collection/SubListSerializers.java
@@ -148,7 +148,7 @@ public class SubListSerializers {
public SubListSerializer(Fory fory, Class<List> type) {
super(fory, type, true);
- fory.getClassResolver().setSerializer(type, this);
+ fory.getTypeResolver().setSerializer(type, this);
}
@Override
diff --git a/java/fory-core/src/main/java/org/apache/fory/type/unsigned/UnsignedSerializers.java b/java/fory-core/src/main/java/org/apache/fory/type/unsigned/UnsignedSerializers.java
index 215f4d06f..5c8b2a509 100644
--- a/java/fory-core/src/main/java/org/apache/fory/type/unsigned/UnsignedSerializers.java
+++ b/java/fory-core/src/main/java/org/apache/fory/type/unsigned/UnsignedSerializers.java
@@ -28,10 +28,10 @@ public class UnsignedSerializers {
/** Register all Uint wrapper type serializers. */
public static void registerSerializers(Fory fory) {
- fory.getClassResolver().registerSerializer(Uint8.class, new Uint8Serializer(fory));
- fory.getClassResolver().registerSerializer(Uint16.class, new Uint16Serializer(fory));
- fory.getClassResolver().registerSerializer(Uint32.class, new Uint32Serializer(fory));
- fory.getClassResolver().registerSerializer(Uint64.class, new Uint64Serializer(fory));
+ fory.getTypeResolver().registerSerializer(Uint8.class, new Uint8Serializer(fory));
+ fory.getTypeResolver().registerSerializer(Uint16.class, new Uint16Serializer(fory));
+ fory.getTypeResolver().registerSerializer(Uint32.class, new Uint32Serializer(fory));
+ fory.getTypeResolver().registerSerializer(Uint64.class, new Uint64Serializer(fory));
}
/** Serializer for Uint8 wrapper type. */
diff --git a/java/fory-core/src/main/resources/META-INF/native-image/org.apache.fory/fory-core/native-image.properties b/java/fory-core/src/main/resources/META-INF/native-image/org.apache.fory/fory-core/native-image.properties
index 9ea34529f..11d30ef0a 100644
--- a/java/fory-core/src/main/resources/META-INF/native-image/org.apache.fory/fory-core/native-image.properties
+++ b/java/fory-core/src/main/resources/META-INF/native-image/org.apache.fory/fory-core/native-image.properties
@@ -278,7 +278,6 @@ Args=--initialize-at-build-time=org.apache.fory.memory.MemoryBuffer,\
org.apache.fory.reflect.ObjectCreators$DeclaredNoArgCtrObjectCreator,\
org.apache.fory.reflect.ObjectCreators$ParentNoArgCtrObjectCreator,\
org.apache.fory.reflect.ObjectCreators$RecordObjectCreator,\
- org.apache.fory.resolver.ClassChecker,\
org.apache.fory.resolver.TypeChecker,\
org.apache.fory.resolver.TypeInfo,\
org.apache.fory.resolver.TypeInfoHolder,\
diff --git a/java/fory-core/src/test/java/org/apache/fory/ForyTest.java b/java/fory-core/src/test/java/org/apache/fory/ForyTest.java
index 1211aaa98..508b00fa0 100644
--- a/java/fory-core/src/test/java/org/apache/fory/ForyTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/ForyTest.java
@@ -306,9 +306,8 @@ public class ForyTest extends ForyTestBase {
Outer outer = new Outer();
outer.inner = new Outer.Inner();
fory.deserialize(fory.serialize(outer));
- assertTrue(fory.getClassResolver().getSerializer(Outer.class) instanceof ObjectSerializer);
- assertTrue(
- fory.getClassResolver().getSerializer(Outer.Inner.class) instanceof ObjectSerializer);
+ assertTrue(fory.getTypeResolver().getSerializer(Outer.class) instanceof ObjectSerializer);
+ assertTrue(fory.getTypeResolver().getSerializer(Outer.Inner.class) instanceof ObjectSerializer);
}
@Test
@@ -322,8 +321,8 @@ public class ForyTest extends ForyTestBase {
Outer outer = new Outer();
outer.inner = new Outer.Inner();
fory.deserialize(fory.serialize(outer));
- assertTrue(fory.getClassResolver().getSerializer(Outer.class) instanceof Generated);
- assertTrue(fory.getClassResolver().getSerializer(Outer.Inner.class) instanceof Generated);
+ assertTrue(fory.getTypeResolver().getSerializer(Outer.class) instanceof Generated);
+ assertTrue(fory.getTypeResolver().getSerializer(Outer.Inner.class) instanceof Generated);
}
@Data
@@ -507,7 +506,7 @@ public class ForyTest extends ForyTestBase {
Object struct1 = Struct.createPOJO(structClass1);
serDe(fory, struct1);
Class<? extends Serializer> serializerClass =
- fory.getClassResolver().getSerializerClass(structClass1);
+ fory.getTypeResolver().getSerializerClass(structClass1);
assertTrue(serializerClass.getName().contains("Codec"));
map.put(fory, true);
System.out.println(fory.hashCode());
@@ -517,16 +516,13 @@ public class ForyTest extends ForyTestBase {
}
@Test
- public void testSerializeJavaObject() {
+ public void testSerializeDeserializeApis() {
Fory fory = Fory.builder().requireClassRegistration(false).withLanguage(Language.JAVA).build();
BeanA beanA = BeanA.createBeanA(2);
- assertEquals(fory.deserializeJavaObject(fory.serializeJavaObject(beanA), BeanA.class), beanA);
- assertEquals(
- fory.deserializeJavaObjectAndClass(fory.serializeJavaObjectAndClass(beanA)), beanA);
+ assertEquals(fory.deserialize(fory.serialize(beanA), BeanA.class), beanA);
+ assertEquals(fory.deserialize(fory.serialize(beanA)), beanA);
assertEquals(
- fory.deserializeJavaObjectAndClass(
- MemoryBuffer.fromByteArray(fory.serializeJavaObjectAndClass(beanA))),
- beanA);
+ fory.deserialize(MemoryBuffer.fromByteArray(fory.serialize(beanA)), BeanA.class), beanA);
}
@Data
@@ -551,6 +547,53 @@ public class ForyTest extends ForyTestBase {
}
}
+ @Data
+ @AllArgsConstructor
+ static class NestedWriteBean {
+ int value;
+ }
+
+ static class NestedWriteBeanSerializer extends Serializer<NestedWriteBean> {
+ NestedWriteBeanSerializer(Fory fory) {
+ super(fory, NestedWriteBean.class);
+ }
+
+ @Override
+ public void write(MemoryBuffer buffer, NestedWriteBean value) {
+ // Trigger nested serialization to validate the API hint message.
+ fory.serialize(value);
+ }
+
+ @Override
+ public NestedWriteBean read(MemoryBuffer buffer) {
+ return new NestedWriteBean(buffer.readInt32());
+ }
+ }
+
+ @Data
+ @AllArgsConstructor
+ static class NestedReadBean {
+ int value;
+ }
+
+ static class NestedReadBeanSerializer extends Serializer<NestedReadBean> {
+ NestedReadBeanSerializer(Fory fory) {
+ super(fory, NestedReadBean.class);
+ }
+
+ @Override
+ public void write(MemoryBuffer buffer, NestedReadBean value) {
+ buffer.writeInt32(value.value);
+ }
+
+ @Override
+ public NestedReadBean read(MemoryBuffer buffer) {
+ // Trigger nested deserialization to validate the API hint message.
+ fory.deserialize(new byte[] {1});
+ return new NestedReadBean(buffer.readInt32());
+ }
+ }
+
@Test
public void testRegisterPrivateSerializer() {
Fory fory = Fory.builder().withRefTracking(true).requireClassRegistration(false).build();
@@ -560,6 +603,29 @@ public class ForyTest extends ForyTestBase {
serDeCheckSerializer(fory, obj, "Codec");
}
+ @Test
+ public void testNestedSerializeHintUsesWriteApi() {
+ Fory fory = Fory.builder().withRefTracking(true).requireClassRegistration(false).build();
+ fory.registerSerializer(NestedWriteBean.class, new NestedWriteBeanSerializer(fory));
+ SerializationException ex =
+ Assert.expectThrows(
+ SerializationException.class, () -> fory.serialize(new NestedWriteBean(1)));
+ assertTrue(ex.getMessage().contains("Fory#writeXXX"));
+ assertTrue(!ex.getMessage().contains("Fory#xwriteXXX"));
+ }
+
+ @Test
+ public void testNestedDeserializeHintUsesReadApi() {
+ Fory fory = Fory.builder().withRefTracking(true).requireClassRegistration(false).build();
+ fory.registerSerializer(NestedReadBean.class, new NestedReadBeanSerializer(fory));
+ byte[] bytes = fory.serialize(new NestedReadBean(1));
+ DeserializationException ex =
+ Assert.expectThrows(DeserializationException.class, () -> fory.deserialize(bytes));
+ String message = ex.getMessage();
+ assertTrue(message != null);
+ assertTrue(!message.contains("Fory#xreadXXX"));
+ }
+
@Test
public void testCircularReferenceStackOverflowMessage() {
class A {
@@ -621,9 +687,9 @@ public class ForyTest extends ForyTestBase {
.build();
MetaContext metaContext = new MetaContext();
fory.getSerializationContext().setMetaContext(metaContext);
- byte[] bytes = fory.serializeJavaObjectAndClass(null);
+ byte[] bytes = fory.serialize(null);
fory.getSerializationContext().setMetaContext(metaContext);
- Object obj = fory.deserializeJavaObjectAndClass(bytes);
+ Object obj = fory.deserialize(bytes);
assertNull(obj);
}
@@ -682,18 +748,6 @@ public class ForyTest extends ForyTestBase {
Assert.assertEquals(struct1.f2, struct2.f2);
}
- @Test
- public void testDeserializeJavaObjectWrongType() {
- Fory fory = Fory.builder().requireClassRegistration(false).build();
- Struct1 struct1 = new Struct1(10, "abc");
- byte[] bytes = fory.serializeJavaObject(struct1);
- // first deserialize as Struct1 (correct type)
- Assert.assertEquals(fory.deserializeJavaObject(bytes, Struct1.class), struct1);
- // then deserialize as Struct2 (wrong type)
- Assert.assertThrows(
- DeserializationException.class, () -> fory.deserializeJavaObject(bytes, Struct2.class));
- }
-
private Object maxDepthData() {
List<Object> list = new ArrayList<>();
for (int i = 0; i < 6; i++) {
diff --git a/java/fory-core/src/test/java/org/apache/fory/ForyTestBase.java b/java/fory-core/src/test/java/org/apache/fory/ForyTestBase.java
index e52063f73..fae7f1133 100644
--- a/java/fory-core/src/test/java/org/apache/fory/ForyTestBase.java
+++ b/java/fory-core/src/test/java/org/apache/fory/ForyTestBase.java
@@ -297,7 +297,7 @@ public abstract class ForyTestBase {
public static <T> T serDeCheckSerializer(Fory fory, Object obj, String classRegex) {
byte[] bytes = fory.serialize(obj);
- String serializerName = fory.getClassResolver().getSerializerClass(obj.getClass()).getName();
+ String serializerName = fory.getTypeResolver().getSerializerClass(obj.getClass()).getName();
Matcher matcher = Pattern.compile(classRegex).matcher(serializerName);
Assert.assertTrue(matcher.find());
return (T) fory.deserialize(bytes);
diff --git a/java/fory-core/src/test/java/org/apache/fory/StreamTest.java b/java/fory-core/src/test/java/org/apache/fory/StreamTest.java
index 52dcc04fd..de5334e83 100644
--- a/java/fory-core/src/test/java/org/apache/fory/StreamTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/StreamTest.java
@@ -119,13 +119,13 @@ public class StreamTest extends ForyTestBase {
// assertEquals(fory.deserialize(bytes), new byte[1000 * 1000]);
assertEquals(fory.deserialize(of(new ByteArrayInputStream(bytes))), new byte[1000 * 1000]);
- bytes = fory.serializeJavaObject(new byte[1000 * 1000]);
+ bytes = fory.serialize(new byte[1000 * 1000]);
checkBuffer(fory);
- assertEquals(fory.deserializeJavaObject(bytes, byte[].class), new byte[1000 * 1000]);
+ assertEquals(fory.deserialize(bytes, byte[].class), new byte[1000 * 1000]);
- bytes = fory.serializeJavaObjectAndClass(new byte[1000 * 1000]);
+ bytes = fory.serialize(new byte[1000 * 1000]);
checkBuffer(fory);
- assertEquals(fory.deserializeJavaObjectAndClass(bytes), new byte[1000 * 1000]);
+ assertEquals(fory.deserialize(bytes), new byte[1000 * 1000]);
ByteArrayOutputStream bas = new ByteArrayOutputStream();
fory.serialize(bas, new byte[1000 * 1000]);
@@ -135,15 +135,15 @@ public class StreamTest extends ForyTestBase {
assertEquals(fory.deserialize(bas.toByteArray()), new byte[1000 * 1000]);
bas.reset();
- fory.serializeJavaObject(bas, new byte[1000 * 1000]);
+ fory.serialize(bas, new byte[1000 * 1000]);
checkBuffer(fory);
- o = fory.deserializeJavaObject(of(new ByteArrayInputStream(bas.toByteArray())), byte[].class);
+ o = fory.deserialize(of(new ByteArrayInputStream(bas.toByteArray())), byte[].class);
assertEquals(o, new byte[1000 * 1000]);
bas.reset();
- fory.serializeJavaObjectAndClass(bas, new byte[1000 * 1000]);
+ fory.serialize(bas, new byte[1000 * 1000]);
checkBuffer(fory);
- o = fory.deserializeJavaObjectAndClass(of(new ByteArrayInputStream(bas.toByteArray())));
+ o = fory.deserialize(of(new ByteArrayInputStream(bas.toByteArray())));
assertEquals(o, new byte[1000 * 1000]);
}
@@ -228,57 +228,24 @@ public class StreamTest extends ForyTestBase {
}
@Test
- public void testJavaOutputStream() throws IOException {
+ public void testOutputStreamWithType() throws IOException {
Fory fory = Fory.builder().requireClassRegistration(false).build();
BeanA beanA = BeanA.createBeanA(2);
- {
- ByteArrayOutputStream bas = new ByteArrayOutputStream();
- fory.serializeJavaObject(bas, beanA);
- fory.serializeJavaObject(bas, beanA);
- bas.flush();
- ByteArrayInputStream bis = new ByteArrayInputStream(bas.toByteArray());
- ForyInputStream stream = of(bis);
- MemoryBuffer buf = MemoryBuffer.fromByteArray(bas.toByteArray());
- Object newObj = fory.deserializeJavaObject(stream, BeanA.class);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObject(buf, BeanA.class);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObject(stream, BeanA.class);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObject(buf, BeanA.class);
- assertEquals(newObj, beanA);
- }
- {
- ByteArrayOutputStream bas = new ByteArrayOutputStream();
- fory.serializeJavaObjectAndClass(bas, beanA);
- fory.serializeJavaObjectAndClass(bas, beanA);
- bas.flush();
- ByteArrayInputStream bis = new ByteArrayInputStream(bas.toByteArray());
- ForyInputStream stream = of(bis);
- MemoryBuffer buf = MemoryBuffer.fromByteArray(bas.toByteArray());
- Object newObj = fory.deserializeJavaObjectAndClass(stream);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObjectAndClass(buf);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObjectAndClass(stream);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObjectAndClass(buf);
- assertEquals(newObj, beanA);
-
- fory = Fory.builder().requireClassRegistration(false).build();
- // test reader buffer grow
- bis = new ByteArrayInputStream(bas.toByteArray());
- stream = of(bis);
- buf = MemoryBuffer.fromByteArray(bas.toByteArray());
- newObj = fory.deserializeJavaObjectAndClass(stream);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObjectAndClass(buf);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObjectAndClass(stream);
- assertEquals(newObj, beanA);
- newObj = fory.deserializeJavaObjectAndClass(buf);
- assertEquals(newObj, beanA);
- }
+ ByteArrayOutputStream bas = new ByteArrayOutputStream();
+ fory.serialize(bas, beanA);
+ fory.serialize(bas, beanA);
+ bas.flush();
+ ByteArrayInputStream bis = new ByteArrayInputStream(bas.toByteArray());
+ ForyInputStream stream = of(bis);
+ MemoryBuffer buf = MemoryBuffer.fromByteArray(bas.toByteArray());
+ Object newObj = fory.deserialize(stream, BeanA.class);
+ assertEquals(newObj, beanA);
+ newObj = fory.deserialize(buf, BeanA.class);
+ assertEquals(newObj, beanA);
+ newObj = fory.deserialize(stream, BeanA.class);
+ assertEquals(newObj, beanA);
+ newObj = fory.deserialize(buf, BeanA.class);
+ assertEquals(newObj, beanA);
}
@Test
@@ -301,27 +268,13 @@ public class StreamTest extends ForyTestBase {
}
{
ByteArrayOutputStream bas = new ByteArrayOutputStream();
- fory.serializeJavaObject(bas, beanA);
+ fory.serialize(bas, beanA);
Path tempFile = Files.createTempFile("readable_channel_test", "data_2");
Files.write(tempFile, bas.toByteArray());
try (ForyReadableChannel channel = of(Files.newByteChannel(tempFile))) {
- Object newObj = fory.deserializeJavaObject(channel, BeanA.class);
- assertEquals(newObj, beanA);
- } finally {
- Files.delete(tempFile);
- }
- }
- {
- ByteArrayOutputStream bas = new ByteArrayOutputStream();
- fory.serializeJavaObjectAndClass(bas, beanA);
-
- Path tempFile = Files.createTempFile("readable_channel_test", "data_3");
- Files.write(tempFile, bas.toByteArray());
-
- try (ForyReadableChannel channel = of(Files.newByteChannel(tempFile))) {
- Object newObj = fory.deserializeJavaObjectAndClass(channel);
+ Object newObj = fory.deserialize(channel, BeanA.class);
assertEquals(newObj, beanA);
} finally {
Files.delete(tempFile);
diff --git a/java/fory-core/src/test/java/org/apache/fory/TestUtils.java b/java/fory-core/src/test/java/org/apache/fory/TestUtils.java
index 8f834c60d..09911cf0d 100644
--- a/java/fory-core/src/test/java/org/apache/fory/TestUtils.java
+++ b/java/fory-core/src/test/java/org/apache/fory/TestUtils.java
@@ -344,7 +344,7 @@ public class TestUtils {
*/
public static Map<String, Object> objectToMap(Fory fory, Object obj) {
Class<?> cls = obj.getClass();
- TypeDef typeDef = fory.getClassResolver().getTypeDef(cls, true);
+ TypeDef typeDef = fory.getTypeResolver().getTypeDef(cls, true);
List<Descriptor> descriptors = typeDef.getDescriptors(fory.getTypeResolver(), cls);
Map<String, Object> result = new LinkedHashMap<>();
for (Descriptor descriptor : descriptors) {
diff --git a/java/fory-core/src/test/java/org/apache/fory/ThreadSafeForyTest.java b/java/fory-core/src/test/java/org/apache/fory/ThreadSafeForyTest.java
index 6087745b5..17157b005 100644
--- a/java/fory-core/src/test/java/org/apache/fory/ThreadSafeForyTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/ThreadSafeForyTest.java
@@ -229,7 +229,7 @@ public class ThreadSafeForyTest extends ForyTestBase {
byte[] bytes1 = fory.serialize(struct1);
Assert.assertEquals(fory.deserialize(bytes1), struct1);
Class<? extends Serializer> serializerClass1 =
- fory.execute(f -> f.getClassResolver().getSerializerClass(structClass1));
+ fory.execute(f -> f.getTypeResolver().getSerializerClass(structClass1));
Assert.assertTrue(serializerClass1.getName().contains("Codec"));
Class<?> structClass2 = Struct.createStructClass(className, 2);
@@ -249,7 +249,7 @@ public class ThreadSafeForyTest extends ForyTestBase {
fory.setClassLoader(structClass2.getClassLoader());
Assert.assertEquals(fory.deserialize(bytes2), struct2);
Class<? extends Serializer> serializerClass2 =
- fory.execute(f -> f.getClassResolver().getSerializerClass(structClass2));
+ fory.execute(f -> f.getTypeResolver().getSerializerClass(structClass2));
Assert.assertTrue(serializerClass2.getName().contains("Codec"));
Assert.assertNotSame(serializerClass2, serializerClass1);
@@ -317,17 +317,17 @@ public class ThreadSafeForyTest extends ForyTestBase {
}
@Test
- public void testSerializeJavaObject() {
+ public void testSerializeDeserializeWithType() {
for (ThreadSafeFory fory :
new ThreadSafeFory[] {
Fory.builder().requireClassRegistration(false).buildThreadSafeFory(),
Fory.builder().requireClassRegistration(false).buildThreadSafeForyPool(2, 2)
}) {
- byte[] bytes = fory.serializeJavaObject("abc");
- Assert.assertEquals(fory.deserializeJavaObject(bytes, String.class), "abc");
+ byte[] bytes = fory.serialize("abc");
+ Assert.assertEquals(fory.deserialize(bytes, String.class), "abc");
MemoryBuffer buffer = MemoryBuffer.newHeapBuffer(8);
- fory.serializeJavaObject(buffer, "abc");
- Assert.assertEquals(fory.deserializeJavaObject(buffer, String.class), "abc");
+ fory.serialize(buffer, "abc");
+ Assert.assertEquals(fory.deserialize(buffer, String.class), "abc");
}
}
@@ -370,7 +370,7 @@ public class ThreadSafeForyTest extends ForyTestBase {
threadSafeFory.execute(
fory -> {
Assert.assertEquals(
- fory.getClassResolver().getSerializer(Foo.class).getClass(), FooSerializer.class);
+ fory.getTypeResolver().getSerializer(Foo.class).getClass(), FooSerializer.class);
return null;
});
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/builder/CodecUtilsTest.java b/java/fory-core/src/test/java/org/apache/fory/builder/CodecUtilsTest.java
index 540b4d611..eaf0d01af 100644
--- a/java/fory-core/src/test/java/org/apache/fory/builder/CodecUtilsTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/builder/CodecUtilsTest.java
@@ -39,7 +39,7 @@ public class CodecUtilsTest {
.withRefTracking(false)
.requireClassRegistration(false)
.build();
- Class<?> seqCodecClass = fory.getClassResolver().getSerializerClass(BeanA.class);
+ Class<?> seqCodecClass = fory.getTypeResolver().getSerializerClass(BeanA.class);
Generated.GeneratedSerializer serializer =
seqCodecClass
.asSubclass(Generated.GeneratedSerializer.class)
diff --git a/java/fory-core/src/test/java/org/apache/fory/builder/JITContextTest.java b/java/fory-core/src/test/java/org/apache/fory/builder/JITContextTest.java
index 8201f0ad9..fc67dd033 100644
--- a/java/fory-core/src/test/java/org/apache/fory/builder/JITContextTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/builder/JITContextTest.java
@@ -102,7 +102,7 @@ public class JITContextTest extends ForyTestBase {
private Serializer getSerializer(Fory fory, Class<?> cls) {
try {
fory.getJITContext().lock();
- Serializer<?> serializer = fory.getClassResolver().getSerializer(cls);
+ Serializer<?> serializer = fory.getTypeResolver().getSerializer(cls);
return serializer;
} finally {
fory.getJITContext().unlock();
@@ -161,7 +161,7 @@ public class JITContextTest extends ForyTestBase {
serDeCheck(fory, o);
Class<?>[] classes = {PkgAccessLevel.class, PrivateAccessLevel.class};
for (Class<?> cls : classes) {
- while (!(fory.getClassResolver().getSerializer(cls) instanceof Generated)) {
+ while (!(fory.getTypeResolver().getSerializer(cls) instanceof Generated)) {
Thread.sleep(1000);
LOG.warn("Wait async compilation finish for {}", cls);
}
@@ -173,7 +173,7 @@ public class JITContextTest extends ForyTestBase {
Thread.sleep(10); // allow serializer be switched to generated version
}
Serializer<TestAccessLevel> serializer =
- fory.getClassResolver().getSerializer(TestAccessLevel.class);
+ fory.getTypeResolver().getSerializer(TestAccessLevel.class);
assertTrue(ReflectionUtils.getObjectFieldValue(serializer, "serializer") instanceof Generated);
assertTrue(ReflectionUtils.getObjectFieldValue(serializer, "serializer1") instanceof Generated);
serDeCheck(fory, o);
diff --git a/java/fory-core/src/test/java/org/apache/fory/builder/ObjectCodecBuilderTest.java b/java/fory-core/src/test/java/org/apache/fory/builder/ObjectCodecBuilderTest.java
index d410ac1b3..8283b1bb4 100644
--- a/java/fory-core/src/test/java/org/apache/fory/builder/ObjectCodecBuilderTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/builder/ObjectCodecBuilderTest.java
@@ -194,7 +194,7 @@ public class ObjectCodecBuilderTest extends ForyTestBase {
Fory fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
fory.serialize(new MethodSpiltObject());
Assert.assertTrue(
- fory.getClassResolver().getSerializer(MethodSpiltObject.class)
+ fory.getTypeResolver().getSerializer(MethodSpiltObject.class)
instanceof Generated.GeneratedSerializer);
}
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/collection/LazyMapTest.java b/java/fory-core/src/test/java/org/apache/fory/collection/LazyMapTest.java
index c840c786e..0fa4ad27c 100644
--- a/java/fory-core/src/test/java/org/apache/fory/collection/LazyMapTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/collection/LazyMapTest.java
@@ -59,7 +59,7 @@ public class LazyMapTest extends ForyTestBase {
LazyMap<String, Integer> map1 = new LazyMap<>(new ArrayList<>(map.entrySet()));
serDe(fory, map1);
assertTrue(
- fory.getClassResolver().getSerializer(LazyMap.class)
+ fory.getTypeResolver().getSerializer(LazyMap.class)
instanceof MapSerializers.LazyMapSerializer);
}
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/io/BlockedStreamUtilsTest.java b/java/fory-core/src/test/java/org/apache/fory/io/BlockedStreamUtilsTest.java
index f75a017d3..a65bda59e 100644
--- a/java/fory-core/src/test/java/org/apache/fory/io/BlockedStreamUtilsTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/io/BlockedStreamUtilsTest.java
@@ -37,10 +37,10 @@ public class BlockedStreamUtilsTest extends ForyTestBase {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Foo foo = Foo.create();
BlockedStreamUtils.serialize(fory, stream, foo);
- BlockedStreamUtils.serializeJavaObject(fory, stream, foo);
+ BlockedStreamUtils.serialize(fory, stream, foo);
ByteArrayInputStream inputStream = new ByteArrayInputStream(stream.toByteArray());
assertEquals(BlockedStreamUtils.deserialize(fory, inputStream), foo);
- assertEquals(BlockedStreamUtils.deserializeJavaObject(fory, inputStream, Foo.class), foo);
+ assertEquals(BlockedStreamUtils.deserialize(fory, inputStream, Foo.class), foo);
}
@Test
@@ -49,11 +49,11 @@ public class BlockedStreamUtilsTest extends ForyTestBase {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
Foo foo = Foo.create();
BlockedStreamUtils.serialize(fory, stream, foo);
- BlockedStreamUtils.serializeJavaObject(fory, stream, foo);
+ BlockedStreamUtils.serialize(fory, stream, foo);
try (MemoryBufferReadableChannel channel =
new MemoryBufferReadableChannel(MemoryBuffer.fromByteArray(stream.toByteArray()))) {
assertEquals(BlockedStreamUtils.deserialize(fory, channel), foo);
- assertEquals(BlockedStreamUtils.deserializeJavaObject(fory, channel, Foo.class), foo);
+ assertEquals(BlockedStreamUtils.deserialize(fory, channel, Foo.class), foo);
}
}
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/meta/NativeTypeDefEncoderTest.java b/java/fory-core/src/test/java/org/apache/fory/meta/NativeTypeDefEncoderTest.java
index dfae1a8f4..f87b11c8b 100644
--- a/java/fory-core/src/test/java/org/apache/fory/meta/NativeTypeDefEncoderTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/meta/NativeTypeDefEncoderTest.java
@@ -30,6 +30,7 @@ import org.apache.fory.annotation.ForyField;
import org.apache.fory.config.CompatibleMode;
import org.apache.fory.config.Language;
import org.apache.fory.memory.MemoryBuffer;
+import org.apache.fory.resolver.ClassResolver;
import org.apache.fory.test.bean.BeanA;
import org.apache.fory.test.bean.MapFields;
import org.apache.fory.test.bean.Struct;
@@ -42,10 +43,10 @@ public class NativeTypeDefEncoderTest {
public void testBasicTypeDef() {
Fory fory = Fory.builder().withMetaShare(true).build();
Class<TypeDefTest.TestFieldsOrderClass1> type = TypeDefTest.TestFieldsOrderClass1.class;
- List<FieldInfo> fieldsInfo = buildFieldsInfo(fory.getClassResolver(), type);
+ List<FieldInfo> fieldsInfo = buildFieldsInfo((ClassResolver) fory.getTypeResolver(), type);
MemoryBuffer buffer =
NativeTypeDefEncoder.encodeTypeDef(
- fory.getClassResolver(), type, getClassFields(type, fieldsInfo), true);
+ (ClassResolver) fory.getTypeResolver(), type, getClassFields(type, fieldsInfo), true);
TypeDef typeDef = TypeDef.readTypeDef(fory, buffer);
Assert.assertEquals(typeDef.getClassName(), type.getName());
Assert.assertEquals(typeDef.getFieldsInfo().size(), type.getDeclaredFields().length);
@@ -212,7 +213,9 @@ public class NativeTypeDefEncoderTest {
Assert.assertThrows(
IllegalArgumentException.class,
- () -> buildFieldsInfo(fory.getClassResolver(), ClassWithDuplicateTagIds.class));
+ () ->
+ buildFieldsInfo(
+ (ClassResolver) fory.getTypeResolver(), ClassWithDuplicateTagIds.class));
}
@Test
@@ -221,7 +224,7 @@ public class NativeTypeDefEncoderTest {
// Should not throw any exception
List<FieldInfo> fieldsInfo =
- buildFieldsInfo(fory.getClassResolver(), ClassWithValidTagIds.class);
+ buildFieldsInfo((ClassResolver) fory.getTypeResolver(), ClassWithValidTagIds.class);
Assert.assertEquals(fieldsInfo.size(), 3);
// Verify all fields have the correct tag IDs
@@ -236,6 +239,6 @@ public class NativeTypeDefEncoderTest {
Assert.assertThrows(
IllegalArgumentException.class,
- () -> buildFieldsInfo(fory.getClassResolver(), ClassWithMixedFields.class));
+ () -> buildFieldsInfo((ClassResolver) fory.getTypeResolver(), ClassWithMixedFields.class));
}
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefEncoderTest.java b/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefEncoderTest.java
index d50c96146..855cd894b 100644
--- a/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefEncoderTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefEncoderTest.java
@@ -141,7 +141,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithDuplicateTagIds() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithDuplicateTagIds.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -158,7 +158,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithDuplicateTagIdsZero() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithDuplicateTagIdsZero.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -174,7 +174,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithValidTagIds() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithValidTagIds.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -205,7 +205,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithMixedAnnotations() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithMixedAnnotations.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -242,7 +242,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithMixedDuplicateTagIds() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithMixedDuplicateTagIds.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -261,7 +261,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithSingleField() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithSingleField.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields = Collections.singletonList(getField(ClassWithSingleField.class, "field"));
@@ -278,7 +278,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithNoAnnotations() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithNoAnnotations.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -301,7 +301,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithAllFieldNames() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithAllFieldNames.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -324,7 +324,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithLargeTagIds() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithLargeTagIds.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields =
Arrays.asList(
@@ -347,7 +347,7 @@ public class TypeDefEncoderTest {
public void testBuildFieldsInfoWithEmptyFieldList() {
Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
fory.register(ClassWithValidTagIds.class);
- TypeResolver resolver = fory.getXtypeResolver();
+ TypeResolver resolver = fory.getTypeResolver();
List<Field> fields = Collections.emptyList();
@@ -357,6 +357,15 @@ public class TypeDefEncoderTest {
Assert.assertEquals(fieldInfos.size(), 0);
}
+ @Test
+ public void testXlangTypeDefIsNotCompressed() {
+ Fory fory = Fory.builder().withLanguage(Language.XLANG).withMetaShare(true).build();
+ fory.register(ClassWithNoAnnotations.class);
+
+ TypeDef typeDef = TypeDef.buildTypeDef(fory, ClassWithNoAnnotations.class);
+ Assert.assertEquals(typeDef.getId() & TypeDef.COMPRESS_META_FLAG, 0);
+ }
+
/** Helper method to get a field from a class by name. */
private Field getField(Class<?> clazz, String fieldName) {
try {
diff --git a/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefTest.java b/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefTest.java
index 623c4be08..ea933b169 100644
--- a/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/meta/TypeDefTest.java
@@ -103,7 +103,7 @@ public class TypeDefTest extends ForyTestBase {
{
TypeDef typeDef =
TypeDef.buildTypeDef(
- fory.getClassResolver(),
+ (ClassResolver) fory.getTypeResolver(),
TestFieldsOrderClass1.class,
ImmutableList.of(TestFieldsOrderClass1.class.getDeclaredField("longField")));
MemoryBuffer buffer = MemoryBuffer.newHeapBuffer(32);
@@ -115,7 +115,7 @@ public class TypeDefTest extends ForyTestBase {
{
TypeDef typeDef =
TypeDef.buildTypeDef(
- fory.getClassResolver(),
+ (ClassResolver) fory.getTypeResolver(),
TestFieldsOrderClass1.class,
ReflectionUtils.getFields(TestFieldsOrderClass1.class, true));
assertEquals(typeDef.getClassName(), TestFieldsOrderClass1.class.getName());
@@ -131,7 +131,7 @@ public class TypeDefTest extends ForyTestBase {
{
TypeDef typeDef =
TypeDef.buildTypeDef(
- fory.getClassResolver(),
+ (ClassResolver) fory.getTypeResolver(),
TestFieldsOrderClass2.class,
ReflectionUtils.getFields(TestFieldsOrderClass2.class, true));
assertEquals(typeDef.getClassName(), TestFieldsOrderClass2.class.getName());
@@ -152,7 +152,7 @@ public class TypeDefTest extends ForyTestBase {
{
TypeDef typeDef =
TypeDef.buildTypeDef(
- fory.getClassResolver(),
+ (ClassResolver) fory.getTypeResolver(),
DuplicateFieldClass.class,
ReflectionUtils.getFields(DuplicateFieldClass.class, true));
assertEquals(typeDef.getClassName(), DuplicateFieldClass.class.getName());
@@ -171,7 +171,8 @@ public class TypeDefTest extends ForyTestBase {
public void testContainerClass() {
Fory fory = Fory.builder().withMetaShare(true).build();
List<Field> fields = ReflectionUtils.getFields(ContainerClass.class, true);
- TypeDef typeDef = TypeDef.buildTypeDef(fory.getClassResolver(), ContainerClass.class, fields);
+ TypeDef typeDef =
+ TypeDef.buildTypeDef((ClassResolver) fory.getTypeResolver(), ContainerClass.class, fields);
assertEquals(typeDef.getClassName(), ContainerClass.class.getName());
assertEquals(typeDef.getFieldsInfo().size(), fields.size());
MemoryBuffer buffer = MemoryBuffer.newHeapBuffer(32);
@@ -192,7 +193,7 @@ public class TypeDefTest extends ForyTestBase {
@Test
public void testTypeExtInfo() {
Fory fory = Fory.builder().withRefTracking(true).withMetaShare(true).build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
assertTrue(
classResolver.needToWriteRef(
TypeRef.of(Foo.class, new TypeExtMeta(Types.STRUCT, true, true))));
@@ -243,7 +244,8 @@ public class TypeDefTest extends ForyTestBase {
Assert.assertThrows(
IllegalArgumentException.class,
() ->
- TypeDef.buildTypeDef(fory.getClassResolver(), ClassWithDuplicateTagIds.class, fields));
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), ClassWithDuplicateTagIds.class, fields));
}
@Test
@@ -255,7 +257,9 @@ public class TypeDefTest extends ForyTestBase {
IllegalArgumentException.class,
() ->
TypeDef.buildTypeDef(
- fory.getClassResolver(), ClassWithDuplicateTagIdsMultiple.class, fields));
+ (ClassResolver) fory.getTypeResolver(),
+ ClassWithDuplicateTagIdsMultiple.class,
+ fields));
}
@Test
@@ -265,7 +269,8 @@ public class TypeDefTest extends ForyTestBase {
// Should not throw any exception
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), ClassWithValidTagIds.class, fields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), ClassWithValidTagIds.class, fields);
assertEquals(typeDef.getClassName(), ClassWithValidTagIds.class.getName());
assertEquals(typeDef.getFieldsInfo().size(), fields.size());
}
@@ -309,13 +314,13 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef with valid fields (no duplicates in TypeDef itself)
List<Field> sourceFields = ReflectionUtils.getFields(ClassWithValidTagIds.class, true);
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), ClassWithValidTagIds.class, sourceFields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), ClassWithValidTagIds.class, sourceFields);
// Try to get descriptors for a class that has duplicate tag IDs
Assert.assertThrows(
IllegalArgumentException.class,
- () ->
- typeDef.getDescriptors(fory.getClassResolver(), TargetClassWithDuplicateTagIds.class));
+ () -> typeDef.getDescriptors(fory.getTypeResolver(), TargetClassWithDuplicateTagIds.class));
}
@Test
@@ -325,11 +330,12 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef with tagged fields
List<Field> sourceFields = ReflectionUtils.getFields(TargetClassWithValidTags.class, true);
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), TargetClassWithValidTags.class, sourceFields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), TargetClassWithValidTags.class, sourceFields);
// Get descriptors should succeed
List<Descriptor> descriptors =
- typeDef.getDescriptors(fory.getClassResolver(), TargetClassWithValidTags.class);
+ typeDef.getDescriptors(fory.getTypeResolver(), TargetClassWithValidTags.class);
assertEquals(descriptors.size(), 3);
}
@@ -341,11 +347,12 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef with mixed tagged and non-tagged fields
List<Field> sourceFields = ReflectionUtils.getFields(TargetClassWithMixedTags.class, true);
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), TargetClassWithMixedTags.class, sourceFields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), TargetClassWithMixedTags.class, sourceFields);
// Get descriptors should succeed
List<Descriptor> descriptors =
- typeDef.getDescriptors(fory.getClassResolver(), TargetClassWithMixedTags.class);
+ typeDef.getDescriptors(fory.getTypeResolver(), TargetClassWithMixedTags.class);
assertEquals(descriptors.size(), 3);
@@ -392,11 +399,12 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef from source class with specific tag IDs
List<Field> sourceFields = ReflectionUtils.getFields(SourceClassWithTags.class, true);
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), SourceClassWithTags.class, sourceFields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), SourceClassWithTags.class, sourceFields);
// Get descriptors for target class with different field names but same tag IDs
List<Descriptor> descriptors =
- typeDef.getDescriptors(fory.getClassResolver(), TargetClassWithDifferentNames.class);
+ typeDef.getDescriptors(fory.getTypeResolver(), TargetClassWithDifferentNames.class);
// Should match fields by tag ID, not by name
assertEquals(descriptors.size(), 2);
@@ -426,12 +434,13 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef with some fields
List<Field> sourceFields = ReflectionUtils.getFields(ClassWithValidTagIds.class, true);
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), ClassWithValidTagIds.class, sourceFields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), ClassWithValidTagIds.class, sourceFields);
// Try to get descriptors for a class that has duplicate tag ID 0
Assert.assertThrows(
IllegalArgumentException.class,
- () -> typeDef.getDescriptors(fory.getClassResolver(), TargetClassWithZeroTagId.class));
+ () -> typeDef.getDescriptors(fory.getTypeResolver(), TargetClassWithZeroTagId.class));
}
static class EmptyClass {
@@ -444,11 +453,12 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef with no fields
List<Field> sourceFields = ReflectionUtils.getFields(EmptyClass.class, true);
- TypeDef typeDef = TypeDef.buildTypeDef(fory.getClassResolver(), EmptyClass.class, sourceFields);
+ TypeDef typeDef =
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), EmptyClass.class, sourceFields);
// Get descriptors should succeed and return empty list
- List<Descriptor> descriptors =
- typeDef.getDescriptors(fory.getClassResolver(), EmptyClass.class);
+ List<Descriptor> descriptors = typeDef.getDescriptors(fory.getTypeResolver(), EmptyClass.class);
assertEquals(descriptors.size(), 0);
}
@@ -475,11 +485,12 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef with inherited fields
List<Field> sourceFields = ReflectionUtils.getFields(InheritedChildClass.class, true);
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), InheritedChildClass.class, sourceFields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), InheritedChildClass.class, sourceFields);
// Get descriptors should succeed
List<Descriptor> descriptors =
- typeDef.getDescriptors(fory.getClassResolver(), InheritedChildClass.class);
+ typeDef.getDescriptors(fory.getTypeResolver(), InheritedChildClass.class);
// Should have both base and child fields
assertEquals(descriptors.size(), 2);
@@ -492,13 +503,13 @@ public class TypeDefTest extends ForyTestBase {
// Build a TypeDef with some fields
List<Field> sourceFields = ReflectionUtils.getFields(InheritedBaseClass.class, true);
TypeDef typeDef =
- TypeDef.buildTypeDef(fory.getClassResolver(), InheritedBaseClass.class, sourceFields);
+ TypeDef.buildTypeDef(
+ (ClassResolver) fory.getTypeResolver(), InheritedBaseClass.class, sourceFields);
// Try to get descriptors for a class that has duplicate tag ID across inheritance
Assert.assertThrows(
IllegalArgumentException.class,
- () ->
- typeDef.getDescriptors(fory.getClassResolver(), InheritedChildWithDuplicateTag.class));
+ () -> typeDef.getDescriptors(fory.getTypeResolver(), InheritedChildWithDuplicateTag.class));
}
@Test
diff --git a/java/fory-core/src/test/java/org/apache/fory/resolver/AllowListCheckerTest.java b/java/fory-core/src/test/java/org/apache/fory/resolver/AllowListCheckerTest.java
index 28289d104..b50be81e4 100644
--- a/java/fory-core/src/test/java/org/apache/fory/resolver/AllowListCheckerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/resolver/AllowListCheckerTest.java
@@ -34,11 +34,11 @@ public class AllowListCheckerTest {
{
Fory fory = Fory.builder().requireClassRegistration(false).build();
AllowListChecker checker = new AllowListChecker(AllowListChecker.CheckLevel.STRICT);
- fory.getClassResolver().setTypeChecker(checker);
+ fory.getTypeResolver().setTypeChecker(checker);
assertThrows(InsecureException.class, () -> fory.serialize(new AllowListCheckerTest()));
checker.allowClass(AllowListCheckerTest.class.getName());
byte[] bytes = fory.serialize(new AllowListCheckerTest());
- checker.addListener(fory.getClassResolver());
+ checker.addListener((ClassResolver) fory.getTypeResolver());
checker.disallowClass(AllowListCheckerTest.class.getName());
assertThrows(InsecureException.class, () -> fory.serialize(new AllowListCheckerTest()));
assertThrows(InsecureException.class, () -> fory.deserialize(bytes));
@@ -46,8 +46,8 @@ public class AllowListCheckerTest {
{
Fory fory = Fory.builder().requireClassRegistration(false).build();
AllowListChecker checker = new AllowListChecker(AllowListChecker.CheckLevel.WARN);
- fory.getClassResolver().setTypeChecker(checker);
- checker.addListener(fory.getClassResolver());
+ fory.getTypeResolver().setTypeChecker(checker);
+ checker.addListener((ClassResolver) fory.getTypeResolver());
byte[] bytes = fory.serialize(new AllowListCheckerTest());
checker.disallowClass(AllowListCheckerTest.class.getName());
assertThrows(InsecureException.class, () -> fory.serialize(new AllowListCheckerTest()));
@@ -60,8 +60,8 @@ public class AllowListCheckerTest {
{
Fory fory = Fory.builder().requireClassRegistration(false).build();
AllowListChecker checker = new AllowListChecker(AllowListChecker.CheckLevel.STRICT);
- fory.getClassResolver().setTypeChecker(checker);
- checker.addListener(fory.getClassResolver());
+ fory.getTypeResolver().setTypeChecker(checker);
+ checker.addListener((ClassResolver) fory.getTypeResolver());
assertThrows(InsecureException.class, () -> fory.serialize(new AllowListCheckerTest()));
checker.allowClass("org.apache.fory.*");
byte[] bytes = fory.serialize(new AllowListCheckerTest());
@@ -72,8 +72,8 @@ public class AllowListCheckerTest {
{
Fory fory = Fory.builder().requireClassRegistration(false).build();
AllowListChecker checker = new AllowListChecker(AllowListChecker.CheckLevel.WARN);
- fory.getClassResolver().setTypeChecker(checker);
- checker.addListener(fory.getClassResolver());
+ fory.getTypeResolver().setTypeChecker(checker);
+ checker.addListener((ClassResolver) fory.getTypeResolver());
byte[] bytes = fory.serialize(new AllowListCheckerTest());
checker.disallowClass("org.apache.fory.*");
assertThrows(InsecureException.class, () -> fory.serialize(new AllowListCheckerTest()));
@@ -92,8 +92,8 @@ public class AllowListCheckerTest {
.requireClassRegistration(false)
.withClassLoader(classLoader)
.build();
- f.getClassResolver().setTypeChecker(checker);
- checker.addListener(f.getClassResolver());
+ f.getTypeResolver().setTypeChecker(checker);
+ checker.addListener((ClassResolver) f.getTypeResolver());
return f;
});
checker.allowClass("org.apache.fory.*");
diff --git a/java/fory-core/src/test/java/org/apache/fory/resolver/ClassResolverTest.java b/java/fory-core/src/test/java/org/apache/fory/resolver/ClassResolverTest.java
index db6003c2a..18256adba 100644
--- a/java/fory-core/src/test/java/org/apache/fory/resolver/ClassResolverTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/resolver/ClassResolverTest.java
@@ -73,7 +73,7 @@ public class ClassResolverTest extends ForyTestBase {
@Test
public void testPrimitivesClassId() {
Fory fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
// Test that primitive types have consecutive IDs
List<Class<?>> primitiveClasses = TypeUtils.getSortedPrimitiveClasses();
for (int i = 0; i < primitiveClasses.size() - 1; i++) {
@@ -95,7 +95,7 @@ public class ClassResolverTest extends ForyTestBase {
@Test
public void testRegisterClassByName() {
Fory fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(true).build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
classResolver.register(C1.class, "ns", "C1");
Assert.assertThrows(
IllegalArgumentException.class, () -> classResolver.register(C1.class, "ns", "C1"));
@@ -126,7 +126,7 @@ public class ClassResolverTest extends ForyTestBase {
public void testRegisterClassWithUserIds() {
// Test that user IDs 0 and 1 work correctly with separated user type IDs.
Fory fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(true).build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
// Register with user ID 0
classResolver.register(Foo.class, 0);
@@ -165,7 +165,7 @@ public class ClassResolverTest extends ForyTestBase {
serDeCheck(fory, BeanB.class);
Assert.assertTrue(
Generated.GeneratedSerializer.class.isAssignableFrom(
- fory.getClassResolver().getSerializerClass(BeanB.class)));
+ fory.getTypeResolver().getSerializerClass(BeanB.class)));
// ensure serialize class first won't make object fail to serialize.
serDeCheck(fory, BeanB.createBeanB(2));
}
@@ -175,7 +175,7 @@ public class ClassResolverTest extends ForyTestBase {
serDeCheck(fory, new Object[] {BeanB.class, BeanB.createBeanB(2)});
}
Fory fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
assertEquals(
classResolver.getSerializerClass(ArrayList.class),
CollectionSerializers.ArrayListSerializer.class);
@@ -260,7 +260,7 @@ public class ClassResolverTest extends ForyTestBase {
.withRefTracking(true)
.requireClassRegistration(false)
.build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
MemoryBuffer buffer = MemoryUtils.buffer(32);
classResolver.writeClassInternal(buffer, getClass());
int writerIndex = buffer.writerIndex();
@@ -275,7 +275,7 @@ public class ClassResolverTest extends ForyTestBase {
.withRefTracking(true)
.requireClassRegistration(false)
.build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
MemoryBuffer buffer = MemoryUtils.buffer(32);
classResolver.writeClassAndUpdateCache(buffer, getClass());
classResolver.writeClassAndUpdateCache(buffer, getClass());
@@ -335,7 +335,7 @@ public class ClassResolverTest extends ForyTestBase {
.withRefTracking(true)
.requireClassRegistration(false)
.build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
Assert.assertFalse(
classResolver.needToWriteRef(TypeRef.of(TestNeedToWriteReferenceClass.class)));
assertNull(classResolver.getTypeInfo(TestNeedToWriteReferenceClass.class, false));
@@ -349,7 +349,7 @@ public class ClassResolverTest extends ForyTestBase {
.withRefTracking(true)
.requireClassRegistration(false)
.build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
{
classResolver.setSerializer(Foo.class, new ObjectSerializer<>(fory, Foo.class));
TypeInfo typeInfo = classResolver.getTypeInfo(Foo.class);
@@ -375,7 +375,7 @@ public class ClassResolverTest extends ForyTestBase {
private static class ErrorSerializer extends Serializer<Foo> {
public ErrorSerializer(Fory fory) {
super(fory, Foo.class);
- fory.getClassResolver().setSerializer(Foo.class, this);
+ fory.getTypeResolver().setSerializer(Foo.class, this);
throw new RuntimeException();
}
@@ -396,7 +396,7 @@ public class ClassResolverTest extends ForyTestBase {
.withRefTracking(true)
.requireClassRegistration(false)
.build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
Assert.assertThrows(() -> Serializers.newSerializer(fory, Foo.class, ErrorSerializer.class));
Assert.assertNull(classResolver.getSerializer(Foo.class, false));
Assert.assertThrows(
@@ -407,7 +407,7 @@ public class ClassResolverTest extends ForyTestBase {
@Test
public void testPrimitive() {
Fory fory = Fory.builder().withLanguage(Language.JAVA).build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
Assert.assertTrue(classResolver.isPrimitive(classResolver.getRegisteredClassId(void.class)));
Assert.assertTrue(classResolver.isPrimitive(classResolver.getRegisteredClassId(boolean.class)));
Assert.assertTrue(classResolver.isPrimitive(classResolver.getRegisteredClassId(byte.class)));
@@ -451,8 +451,7 @@ public class ClassResolverTest extends ForyTestBase {
Assert.assertEquals(foo, serDe(fory, foo));
Assert.assertEquals(
- fory.getClassResolver().getSerializer(foo.getClass()).getClass(),
- FooCustomSerializer.class);
+ fory.getTypeResolver().getSerializer(foo.getClass()).getClass(), FooCustomSerializer.class);
}
interface ITest {
@@ -505,19 +504,19 @@ public class ClassResolverTest extends ForyTestBase {
Assert.assertEquals(iTest, serDe(fory, iTest));
Assert.assertEquals(
- fory.getClassResolver().getSerializer(iTest.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(iTest.getClass()).getClass(),
InterfaceCustomSerializer.class);
fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
fory.register(ITest.class);
Assert.assertNotEquals(
- fory.getClassResolver().getSerializer(ImplTest.class).getClass(),
+ fory.getTypeResolver().getSerializer(ImplTest.class).getClass(),
InterfaceCustomSerializer.class);
fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
fory.registerSerializer(ITest.class, new InterfaceCustomSerializer(fory, ITest.class));
Assert.assertEquals(
- fory.getClassResolver().getSerializer(ImplTest.class).getClass(),
+ fory.getTypeResolver().getSerializer(ImplTest.class).getClass(),
InterfaceCustomSerializer.class);
}
@@ -570,7 +569,7 @@ public class ClassResolverTest extends ForyTestBase {
Assert.assertEquals(absTest, serDe(fory, absTest));
Assert.assertEquals(
- fory.getClassResolver().getSerializer(absTest.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(absTest.getClass()).getClass(),
AbstractCustomSerializer.class);
final AbsTest abs2Test = new Sub2AbsTest();
@@ -578,7 +577,7 @@ public class ClassResolverTest extends ForyTestBase {
Assert.assertEquals(abs2Test.getF1(), serDe(fory, abs2Test).getF1());
Assert.assertEquals(
- fory.getClassResolver().getSerializer(abs2Test.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(abs2Test.getClass()).getClass(),
AbstractCustomSerializer.class);
}
@@ -603,7 +602,7 @@ public class ClassResolverTest extends ForyTestBase {
@Test
public void testAbstractEnumIsSerializable() {
Fory fory = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
// Abstract enums should be serializable
Assert.assertTrue(classResolver.isSerializable(AbstractEnum.class));
// The concrete enum value classes should also be serializable
diff --git a/java/fory-core/src/test/java/org/apache/fory/resolver/TypeInfoTest.java b/java/fory-core/src/test/java/org/apache/fory/resolver/TypeInfoTest.java
index 39a7352d9..03a3bcddd 100644
--- a/java/fory-core/src/test/java/org/apache/fory/resolver/TypeInfoTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/resolver/TypeInfoTest.java
@@ -41,7 +41,7 @@ public class TypeInfoTest {
@Test
public void testEncodePackageNameAndTypeName() {
Fory fory1 = Fory.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
- TypeInfo info1 = fory1.getClassResolver().getTypeInfo(org.apache.fory.test.bean.Foo.class);
+ TypeInfo info1 = fory1.getTypeResolver().getTypeInfo(org.apache.fory.test.bean.Foo.class);
assertNotNull(info1.namespaceBytes);
assertNotNull(info1.typeNameBytes);
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/CodegenSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/CodegenSerializerTest.java
index a4025b45a..2ac1268f1 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/CodegenSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/CodegenSerializerTest.java
@@ -101,7 +101,7 @@ public class CodegenSerializerTest extends ForyTestBase {
fory.serialize(buffer, cyclic);
fory.deserialize(buffer);
- Serializer<Cyclic> beanSerializer = fory.getClassResolver().getSerializer(Cyclic.class);
+ Serializer<Cyclic> beanSerializer = fory.getTypeResolver().getSerializer(Cyclic.class);
fory.getRefResolver().writeRefOrNull(buffer, cyclic);
beanSerializer.write(buffer, cyclic);
fory.getRefResolver().readRefOrNull(buffer);
@@ -249,8 +249,8 @@ public class CodegenSerializerTest extends ForyTestBase {
.build();
serDeCheck(fory1, pojo);
Assert.assertNotSame(
- fory1.getClassResolver().getSerializerClass(CompressTestClass.class),
- fory.getClassResolver().getSerializerClass(CompressTestClass.class));
+ fory1.getTypeResolver().getSerializerClass(CompressTestClass.class),
+ fory.getTypeResolver().getSerializerClass(CompressTestClass.class));
Assert.assertTrue(fory1.serialize(pojo).length > bytes.length);
Assert.assertTrue(fory1.serialize(pojo).length < length);
}
@@ -342,7 +342,7 @@ public class CodegenSerializerTest extends ForyTestBase {
A o = serDe(fory, a);
assertEquals(o.f1, a.f1);
// local class never static
- assertSame(fory.getClassResolver().getSerializer(A.class).getClass(), ObjectSerializer.class);
+ assertSame(fory.getTypeResolver().getSerializer(A.class).getClass(), ObjectSerializer.class);
// TODO how to create a class with `Class#getCanonicalName` returns null and static still.
// for scala 3:
// `enum ColorEnum { case Red, Green, Blue }`
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/CompatibleSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/CompatibleSerializerTest.java
index cdf267071..54d8e1e43 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/CompatibleSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/CompatibleSerializerTest.java
@@ -331,7 +331,7 @@ public class CompatibleSerializerTest extends ForyTestBase {
}
@Test
- public void testSerializeJavaObject() {
+ public void testSerializeDeserializeApis() {
Fory fory =
Fory.builder()
.withLanguage(Language.JAVA)
@@ -340,20 +340,7 @@ public class CompatibleSerializerTest extends ForyTestBase {
.build();
BeanA beanA = BeanA.createBeanA(2);
Assert.assertEquals(fory.deserialize(fory.serialize(beanA)), beanA);
- byte[] serialized = fory.serializeJavaObject(beanA);
- Assert.assertEquals(fory.deserializeJavaObject(serialized, BeanA.class), beanA);
- }
-
- @Test
- public void testSerializeJavaObjectWithTypeInfo() {
- Fory fory =
- Fory.builder()
- .withLanguage(Language.JAVA)
- .withCompatibleMode(CompatibleMode.COMPATIBLE)
- .requireClassRegistration(false)
- .build();
- BeanA beanA = BeanA.createBeanA(2);
- byte[] serialized = fory.serializeJavaObjectAndClass(beanA);
- Assert.assertEquals(fory.deserializeJavaObjectAndClass(serialized), beanA);
+ byte[] serialized = fory.serialize(beanA);
+ Assert.assertEquals(fory.deserialize(serialized, BeanA.class), beanA);
}
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/DuplicateFieldsTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/DuplicateFieldsTest.java
index 85fd98c80..a9597ee7e 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/DuplicateFieldsTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/DuplicateFieldsTest.java
@@ -116,7 +116,7 @@ public class DuplicateFieldsTest extends ForyTestBase {
{
MetaSharedSerializer<C> serializer =
new MetaSharedSerializer<>(
- fory, C.class, fory.getClassResolver().getTypeDef(C.class, true));
+ fory, C.class, fory.getTypeResolver().getTypeDef(C.class, true));
MemoryBuffer buffer = MemoryUtils.buffer(32);
serializer.write(buffer, c);
C newC = serializer.read(buffer);
@@ -131,7 +131,7 @@ public class DuplicateFieldsTest extends ForyTestBase {
fory,
C.class,
CodecUtils.loadOrGenMetaSharedCodecClass(
- fory, C.class, fory.getClassResolver().getTypeDef(C.class, true)));
+ fory, C.class, fory.getTypeResolver().getTypeDef(C.class, true)));
MemoryBuffer buffer = MemoryUtils.buffer(32);
serializer.write(buffer, c);
C newC = serializer.read(buffer);
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java
index 5de178451..782444f1e 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/EnumSerializerTest.java
@@ -141,10 +141,10 @@ public class EnumSerializerTest extends ForyTestBase {
// serialize enum "B"
forySerialization.register(cls1);
- byte[] bytes = forySerialization.serializeJavaObject(cls1.getEnumConstants()[1]);
+ byte[] bytes = forySerialization.serialize(cls1.getEnumConstants()[1]);
foryDeserialize.register(cls2);
- Object data = foryDeserialize.deserializeJavaObject(bytes, cls2);
+ Object data = foryDeserialize.deserialize(bytes, cls2);
assertEquals(cls2.getEnumConstants()[0], data);
}
@@ -178,10 +178,10 @@ public class EnumSerializerTest extends ForyTestBase {
// serialize enum "B"
forySerialization.register(cls1);
- byte[] bytes = forySerialization.serializeJavaObject(cls1.getEnumConstants()[1]);
+ byte[] bytes = forySerialization.serialize(cls1.getEnumConstants()[1]);
foryDeserialize.register(cls2);
- Object data = foryDeserialize.deserializeJavaObject(bytes, cls2);
+ Object data = foryDeserialize.deserialize(bytes, cls2);
assertEquals(cls2.getEnumConstants()[0], data);
}
@@ -214,11 +214,11 @@ public class EnumSerializerTest extends ForyTestBase {
.build();
forySerialization.register(cls1);
- byte[] bytes = forySerialization.serializeJavaObject(cls1.getEnumConstants()[0]);
+ byte[] bytes = forySerialization.serialize(cls1.getEnumConstants()[0]);
try {
foryDeserialize.register(cls2);
- foryDeserialize.deserializeJavaObject(bytes, cls2);
+ foryDeserialize.deserialize(bytes, cls2);
fail("expected to throw exception");
} catch (Exception e) {
assertTrue(e instanceof DeserializationException);
@@ -254,9 +254,9 @@ public class EnumSerializerTest extends ForyTestBase {
.withAsyncCompilation(false)
.build();
- byte[] bytes = forySerialization.serializeJavaObject(null);
+ byte[] bytes = forySerialization.serialize(null);
- Object data = foryDeserialize.deserializeJavaObject(bytes, cls2);
+ Object data = foryDeserialize.deserialize(bytes, cls2);
assertNull(data);
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/LambdaSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/LambdaSerializerTest.java
index 356e81e19..f7859a5f2 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/LambdaSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/LambdaSerializerTest.java
@@ -53,7 +53,7 @@ public class LambdaSerializerTest extends ForyTestBase {
assertEquals(list.get(0).apply(20), Integer.valueOf(40));
}
assertSame(
- fory.getClassResolver().getSerializerClass(Class.class), Serializers.ClassSerializer.class);
+ fory.getTypeResolver().getSerializerClass(Class.class), Serializers.ClassSerializer.class);
}
@Test(dataProvider = "foryCopyConfig")
@@ -73,7 +73,7 @@ public class LambdaSerializerTest extends ForyTestBase {
assertEquals(list.get(0).apply(20), Integer.valueOf(40));
}
assertSame(
- fory.getClassResolver().getSerializerClass(Class.class), Serializers.ClassSerializer.class);
+ fory.getTypeResolver().getSerializerClass(Class.class), Serializers.ClassSerializer.class);
}
@Test
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/ObjectStreamSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/ObjectStreamSerializerTest.java
index c91c824c2..35e4b2625 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/ObjectStreamSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/ObjectStreamSerializerTest.java
@@ -87,7 +87,7 @@ public class ObjectStreamSerializerTest extends ForyTestBase {
WriteObjectTestClass o = new WriteObjectTestClass(new char[] {'a', 'b'});
serDeCheckSerializer(fory, o, "ObjectStreamSerializer");
assertSame(
- fory.getClassResolver().getSerializerClass(StringBuilder.class),
+ fory.getTypeResolver().getSerializerClass(StringBuilder.class),
ObjectStreamSerializer.class);
StringBuilder buf = (StringBuilder) serDe(fory, new StringBuilder("abc"));
assertEquals(buf.toString(), "abc");
@@ -170,7 +170,7 @@ public class ObjectStreamSerializerTest extends ForyTestBase {
WriteObjectTestClass3.class, new ObjectStreamSerializer(fory, WriteObjectTestClass3.class));
assertSame(
- fory.getClassResolver().getSerializerClass(StringBuffer.class),
+ fory.getTypeResolver().getSerializerClass(StringBuffer.class),
ObjectStreamSerializer.class);
// test `putFields`
StringBuffer newStringBuffer = (StringBuffer) serDe(fory, new StringBuffer("abc"));
@@ -237,7 +237,7 @@ public class ObjectStreamSerializerTest extends ForyTestBase {
{
serDeCheck(fory, new ConcurrentHashMap<>(mapData));
assertSame(
- fory.getClassResolver().getSerializer(ConcurrentHashMap.class).getClass(),
+ fory.getTypeResolver().getSerializer(ConcurrentHashMap.class).getClass(),
ObjectStreamSerializer.class);
}
{
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/ReplaceResolveSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/ReplaceResolveSerializerTest.java
index b017d7d87..b74163bb2 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/ReplaceResolveSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/ReplaceResolveSerializerTest.java
@@ -89,16 +89,15 @@ public class ReplaceResolveSerializerTest extends ForyTestBase {
CustomReplaceClass1 o1 = new CustomReplaceClass1("abc");
serDeCheck(fory, o1);
assertTrue(
- fory.getClassResolver().getSerializer(o1.getClass()) instanceof ReplaceResolveSerializer);
+ fory.getTypeResolver().getSerializer(o1.getClass()) instanceof ReplaceResolveSerializer);
serDeCheck(fory, list1);
serDeCheck(fory, map1);
assertTrue(
- fory.getClassResolver().getSerializer(list1.getClass())
- instanceof ReplaceResolveSerializer);
+ fory.getTypeResolver().getSerializer(list1.getClass()) instanceof ReplaceResolveSerializer);
assertTrue(
- fory.getClassResolver().getSerializer(map1.getClass()) instanceof ReplaceResolveSerializer);
+ fory.getTypeResolver().getSerializer(map1.getClass()) instanceof ReplaceResolveSerializer);
}
@Test(dataProvider = "foryCopyConfig")
@@ -169,7 +168,7 @@ public class ReplaceResolveSerializerTest extends ForyTestBase {
Object[] newObj = (Object[]) serDe(fory, (Object) o);
assertEquals(newObj, new Object[] {o.copy, o.age});
assertTrue(
- fory.getClassResolver().getSerializer(CustomReplaceClass2.class)
+ fory.getTypeResolver().getSerializer(CustomReplaceClass2.class)
instanceof ReplaceResolveSerializer);
}
@@ -346,7 +345,7 @@ public class ReplaceResolveSerializerTest extends ForyTestBase {
Object[] newObj = (Object[]) serDe(fory, (Object) o);
assertEquals(newObj, new Object[] {o.copy, o.age});
assertTrue(
- fory.getClassResolver().getSerializer(Subclass1.class) instanceof ReplaceResolveSerializer);
+ fory.getTypeResolver().getSerializer(Subclass1.class) instanceof ReplaceResolveSerializer);
}
@Test(dataProvider = "foryCopyConfig")
@@ -403,7 +402,7 @@ public class ReplaceResolveSerializerTest extends ForyTestBase {
Object[] newObj = (Object[]) serDe(fory, (Object) o);
assertEquals(newObj, new Object[] {o.copy, o.age});
assertTrue(
- fory.getClassResolver().getSerializer(Subclass2.class) instanceof ReplaceResolveSerializer);
+ fory.getTypeResolver().getSerializer(Subclass2.class) instanceof ReplaceResolveSerializer);
}
public static class CustomReplaceClass5 {
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/SerializerFactoryTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/SerializerFactoryTest.java
index 2f913e4c5..5ff75a781 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/SerializerFactoryTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/SerializerFactoryTest.java
@@ -93,7 +93,7 @@ public class SerializerFactoryTest {
return null;
}
});
- Assert.assertEquals(fory.getClassResolver().getSerializerClass(A.class), KryoSerializer.class);
+ Assert.assertEquals(fory.getTypeResolver().getSerializerClass(A.class), KryoSerializer.class);
A a = new A();
a.f1 = "f1";
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/StringSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/StringSerializerTest.java
index ef84d4444..bbaa25631 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/StringSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/StringSerializerTest.java
@@ -334,7 +334,7 @@ public class StringSerializerTest extends ForyTestBase {
}
Fory fory = Fory.builder().withStringCompressed(true).requireClassRegistration(false).build();
StringSerializer stringSerializer =
- (StringSerializer) fory.getClassResolver().getSerializer(String.class);
+ (StringSerializer) fory.getTypeResolver().getSerializer(String.class);
String utf16Str = "你好, Fory" + StringUtils.random(64);
char[] utf16StrChars = utf16Str.toCharArray();
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/ChildContainerSerializersTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/ChildContainerSerializersTest.java
index 6eb101367..753d74b2d 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/ChildContainerSerializersTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/ChildContainerSerializersTest.java
@@ -104,7 +104,7 @@ public class ChildContainerSerializersTest extends ForyTestBase {
Assert.assertEquals(newList, list);
Assert.assertEquals(newList.state, 3);
Assert.assertEquals(
- fory.getClassResolver().getSerializer(newList.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(newList.getClass()).getClass(),
ChildContainerSerializers.ChildArrayListSerializer.class);
ArrayList<Integer> innerList =
new ArrayList<Integer>() {
@@ -115,7 +115,7 @@ public class ChildContainerSerializersTest extends ForyTestBase {
// innerList captures outer this.
serDeCheck(fory, innerList);
Assert.assertEquals(
- fory.getClassResolver().getSerializer(innerList.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(innerList.getClass()).getClass(),
CollectionSerializers.JDKCompatibleCollectionSerializer.class);
}
{
@@ -151,7 +151,7 @@ public class ChildContainerSerializersTest extends ForyTestBase {
Assert.assertEquals(newList, list);
Assert.assertEquals(newList.state, 3);
Assert.assertEquals(
- fory.getClassResolver().getSerializer(newList.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(newList.getClass()).getClass(),
ChildContainerSerializers.ChildArrayListSerializer.class);
ArrayList<Object> innerList =
new ArrayList<Object>() {
@@ -161,7 +161,7 @@ public class ChildContainerSerializersTest extends ForyTestBase {
};
copyCheck(fory, innerList);
Assert.assertEquals(
- fory.getClassResolver().getSerializer(innerList.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(innerList.getClass()).getClass(),
CollectionSerializers.JDKCompatibleCollectionSerializer.class);
}
{
@@ -205,7 +205,7 @@ public class ChildContainerSerializersTest extends ForyTestBase {
Assert.assertEquals(newMap, map);
Assert.assertEquals(newMap.state, 3);
Assert.assertEquals(
- fory.getClassResolver().getSerializer(newMap.getClass()).getClass(),
+ fory.getTypeResolver().getSerializer(newMap.getClass()).getClass(),
ChildContainerSerializers.ChildMapSerializer.class);
}
{
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/CollectionSerializersTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/CollectionSerializersTest.java
index bd373ae12..fb292f33e 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/CollectionSerializersTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/CollectionSerializersTest.java
@@ -416,17 +416,17 @@ public class CollectionSerializersTest extends ForyTestBase {
serDe(getJavaFory(), EnumSet.allOf(TestEnum.class));
Assert.assertEquals(
getJavaFory()
- .getClassResolver()
+ .getTypeResolver()
.getSerializerClass(EnumSet.allOf(TestEnum.class).getClass()),
CollectionSerializers.EnumSetSerializer.class);
serDe(getJavaFory(), EnumSet.of(TestEnum.A));
Assert.assertEquals(
- getJavaFory().getClassResolver().getSerializerClass(EnumSet.of(TestEnum.A).getClass()),
+ getJavaFory().getTypeResolver().getSerializerClass(EnumSet.of(TestEnum.A).getClass()),
CollectionSerializers.EnumSetSerializer.class);
serDe(getJavaFory(), EnumSet.of(TestEnum.A, TestEnum.B));
Assert.assertEquals(
getJavaFory()
- .getClassResolver()
+ .getTypeResolver()
.getSerializerClass(EnumSet.of(TestEnum.A, TestEnum.B).getClass()),
CollectionSerializers.EnumSetSerializer.class);
// TODO test enum which has enums exceed 128.
@@ -473,13 +473,13 @@ public class CollectionSerializersTest extends ForyTestBase {
serDe(getJavaFory(), BitSet.valueOf(LongStream.range(0, 2).toArray()));
Assert.assertEquals(
getJavaFory()
- .getClassResolver()
+ .getTypeResolver()
.getSerializerClass(BitSet.valueOf(LongStream.range(0, 2).toArray()).getClass()),
CollectionSerializers.BitSetSerializer.class);
serDe(getJavaFory(), BitSet.valueOf(LongStream.range(0, 128).toArray()));
Assert.assertEquals(
getJavaFory()
- .getClassResolver()
+ .getTypeResolver()
.getSerializerClass(BitSet.valueOf(LongStream.range(0, 128).toArray()).getClass()),
CollectionSerializers.BitSetSerializer.class);
}
@@ -494,7 +494,7 @@ public class CollectionSerializersTest extends ForyTestBase {
public void tesPriorityQueueSerializer() {
serDe(getJavaFory(), new PriorityQueue<>(Arrays.asList("a", "b", "c")));
Assert.assertEquals(
- getJavaFory().getClassResolver().getSerializerClass(PriorityQueue.class),
+ getJavaFory().getTypeResolver().getSerializerClass(PriorityQueue.class),
CollectionSerializers.PriorityQueueSerializer.class);
}
@@ -511,7 +511,7 @@ public class CollectionSerializersTest extends ForyTestBase {
new CopyOnWriteArrayList<>(new String[] {"a", "b", "c"});
Assert.assertEquals(list, serDe(getJavaFory(), list));
Assert.assertEquals(
- getJavaFory().getClassResolver().getSerializerClass(CopyOnWriteArrayList.class),
+ getJavaFory().getTypeResolver().getSerializerClass(CopyOnWriteArrayList.class),
CollectionSerializers.CopyOnWriteArrayListSerializer.class);
}
@@ -554,7 +554,7 @@ public class CollectionSerializersTest extends ForyTestBase {
set.add("c");
serDeCheck(fory, set);
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(set.getClass()),
+ fory.getTypeResolver().getSerializerClass(set.getClass()),
CollectionSerializers.SetFromMapSerializer.class);
CollectionViewTestStruct struct1 = serDeCheck(fory, new CollectionViewTestStruct(set, set));
if (fory.trackingRef()) {
@@ -587,7 +587,7 @@ public class CollectionSerializersTest extends ForyTestBase {
set.add("c");
Assert.assertEquals(set, serDe(fory, set));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(set.getClass()),
+ fory.getTypeResolver().getSerializerClass(set.getClass()),
CollectionSerializers.ConcurrentHashMapKeySetViewSerializer.class);
CollectionViewTestStruct o = serDeCheck(fory, new CollectionViewTestStruct(set, set));
if (fory.trackingRef()) {
@@ -686,7 +686,7 @@ public class CollectionSerializersTest extends ForyTestBase {
Assert.assertEquals(serDe(fory, obj).toString(), obj.toString());
if (fory.getConfig().isCodeGenEnabled()) {
Assert.assertTrue(
- fory.getClassResolver()
+ fory.getTypeResolver()
.getSerializerClass(SimpleBeanCollectionFields.class)
.getName()
.contains("Codec"));
@@ -847,7 +847,7 @@ public class CollectionSerializersTest extends ForyTestBase {
testCollectionFieldsObjectEqual(serDe(fory, obj), obj);
if (fory.getConfig().isCodeGenEnabled()) {
Assert.assertTrue(
- fory.getClassResolver()
+ fory.getTypeResolver()
.getSerializerClass(CollectionFieldsClass.class)
.getName()
.contains("Codec"));
@@ -941,7 +941,7 @@ public class CollectionSerializersTest extends ForyTestBase {
collection.add("b");
serDeCheck(fory, collection);
Assert.assertSame(
- fory.getClassResolver().getSerializerClass(TestClassForDefaultCollectionSerializer.class),
+ fory.getTypeResolver().getSerializerClass(TestClassForDefaultCollectionSerializer.class),
CollectionSerializers.DefaultJavaCollectionSerializer.class);
}
@@ -973,7 +973,7 @@ public class CollectionSerializersTest extends ForyTestBase {
assertEquals(set, read);
assertSame(
- fory.getClassResolver().getSerializer(setClass).getClass(),
+ fory.getTypeResolver().getSerializer(setClass).getClass(),
GuavaCollectionSerializers.ImmutableSortedSetSerializer.class);
buffer.writerIndex(0);
buffer.readerIndex(0);
@@ -1119,7 +1119,7 @@ public class CollectionSerializersTest extends ForyTestBase {
new CopyOnWriteArraySet<>(Arrays.asList("Value1", "Value2"));
Assert.assertEquals(set, serDe(getJavaFory(), set));
Assert.assertEquals(
- getJavaFory().getClassResolver().getSerializerClass(CopyOnWriteArraySet.class),
+ getJavaFory().getTypeResolver().getSerializerClass(CopyOnWriteArraySet.class),
CollectionSerializers.CopyOnWriteArraySetSerializer.class);
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/GuavaCollectionSerializersTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/GuavaCollectionSerializersTest.java
index 94aaa40c6..a1fb62fe9 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/GuavaCollectionSerializersTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/GuavaCollectionSerializersTest.java
@@ -40,11 +40,11 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableListSerializer(Fory fory) {
serDe(fory, ImmutableList.of(1));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableList.of(1).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableList.of(1).getClass()),
GuavaCollectionSerializers.ImmutableListSerializer.class);
serDe(fory, ImmutableList.of(1, 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableList.of(1, 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableList.of(1, 2).getClass()),
GuavaCollectionSerializers.RegularImmutableListSerializer.class);
}
@@ -58,11 +58,11 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableSetSerializer(Fory fory) {
serDe(fory, ImmutableSet.of(1));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableSet.of(1).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableSet.of(1).getClass()),
GuavaCollectionSerializers.ImmutableSetSerializer.class);
serDe(fory, ImmutableSet.of(1, 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableSet.of(1, 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableSet.of(1, 2).getClass()),
GuavaCollectionSerializers.ImmutableSetSerializer.class);
}
@@ -70,11 +70,11 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableSetSerializerCopy(Fory fory) {
copyCheck(fory, ImmutableSet.of(1));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableSet.of(1).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableSet.of(1).getClass()),
GuavaCollectionSerializers.ImmutableSetSerializer.class);
copyCheck(fory, ImmutableSet.of(1, 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableSet.of(1, 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableSet.of(1, 2).getClass()),
GuavaCollectionSerializers.ImmutableSetSerializer.class);
}
@@ -82,7 +82,7 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableSortedSetSerializer(Fory fory) {
serDe(fory, ImmutableSortedSet.of(1, 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableSortedSet.of(1, 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableSortedSet.of(1, 2).getClass()),
GuavaCollectionSerializers.ImmutableSortedSetSerializer.class);
}
@@ -90,7 +90,7 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableSortedSetSerializerCopy(Fory fory) {
copyCheck(fory, ImmutableSortedSet.of(1, 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableSortedSet.of(1, 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableSortedSet.of(1, 2).getClass()),
GuavaCollectionSerializers.ImmutableSortedSetSerializer.class);
}
@@ -98,7 +98,7 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableMapSerializer(Fory fory) {
serDe(fory, ImmutableMap.of("k1", 1, "k2", 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableMap.of("k1", 1, "k2", 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableMap.of("k1", 1, "k2", 2).getClass()),
GuavaCollectionSerializers.ImmutableMapSerializer.class);
}
@@ -106,7 +106,7 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableMapSerializerCopy(Fory fory) {
copyCheck(fory, ImmutableMap.of("k1", 1, "k2", 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableMap.of("k1", 1, "k2", 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableMap.of("k1", 1, "k2", 2).getClass()),
GuavaCollectionSerializers.ImmutableMapSerializer.class);
}
@@ -114,11 +114,11 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableBiMapSerializer(Fory fory) {
serDe(fory, ImmutableBiMap.of("k1", 1));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableBiMap.of("k1", 1).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableBiMap.of("k1", 1).getClass()),
GuavaCollectionSerializers.ImmutableBiMapSerializer.class);
serDe(fory, ImmutableBiMap.of("k1", 1, "k2", 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableBiMap.of("k1", 1, "k2", 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableBiMap.of("k1", 1, "k2", 2).getClass()),
GuavaCollectionSerializers.ImmutableBiMapSerializer.class);
}
@@ -126,11 +126,11 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableBiMapSerializerCopy(Fory fory) {
copyCheck(fory, ImmutableBiMap.of("k1", 1));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableBiMap.of("k1", 1).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableBiMap.of("k1", 1).getClass()),
GuavaCollectionSerializers.ImmutableBiMapSerializer.class);
copyCheck(fory, ImmutableBiMap.of("k1", 1, "k2", 2));
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(ImmutableBiMap.of("k1", 1, "k2", 2).getClass()),
+ fory.getTypeResolver().getSerializerClass(ImmutableBiMap.of("k1", 1, "k2", 2).getClass()),
GuavaCollectionSerializers.ImmutableBiMapSerializer.class);
}
@@ -138,7 +138,7 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableSortedMapSerializer(Fory fory) {
serDe(fory, ImmutableSortedMap.of("k1", 1, "k2", 2));
Assert.assertEquals(
- fory.getClassResolver()
+ fory.getTypeResolver()
.getSerializerClass(ImmutableSortedMap.of("k1", 1, "k2", 2).getClass()),
GuavaCollectionSerializers.ImmutableSortedMapSerializer.class);
}
@@ -147,7 +147,7 @@ public class GuavaCollectionSerializersTest extends ForyTestBase {
public void testImmutableSortedMapSerializerCopy(Fory fory) {
copyCheck(fory, ImmutableSortedMap.of("k1", 1, "k2", 2));
Assert.assertEquals(
- fory.getClassResolver()
+ fory.getTypeResolver()
.getSerializerClass(ImmutableSortedMap.of("k1", 1, "k2", 2).getClass()),
GuavaCollectionSerializers.ImmutableSortedMapSerializer.class);
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/MapSerializersTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/MapSerializersTest.java
index 0719a9e87..c5df70595 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/MapSerializersTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/MapSerializersTest.java
@@ -141,7 +141,7 @@ public class MapSerializersTest extends ForyTestBase {
enumMap.put(TestEnum.B, "str");
serDe(fory, enumMap);
Assert.assertEquals(
- fory.getClassResolver().getSerializerClass(enumMap.getClass()),
+ fory.getTypeResolver().getSerializerClass(enumMap.getClass()),
MapSerializers.EnumMapSerializer.class);
// testNoArgConstructor
@@ -477,7 +477,7 @@ public class MapSerializersTest extends ForyTestBase {
enumMap.put(TestEnum.B, "str");
serDe(getJavaFory(), enumMap);
Assert.assertEquals(
- getJavaFory().getClassResolver().getSerializerClass(enumMap.getClass()),
+ getJavaFory().getTypeResolver().getSerializerClass(enumMap.getClass()),
MapSerializers.EnumMapSerializer.class);
}
@@ -488,7 +488,7 @@ public class MapSerializersTest extends ForyTestBase {
enumMap.put(TestEnum.B, "str");
copyCheck(fory, enumMap);
Assert.assertEquals(
- getJavaFory().getClassResolver().getSerializerClass(enumMap.getClass()),
+ getJavaFory().getTypeResolver().getSerializerClass(enumMap.getClass()),
MapSerializers.EnumMapSerializer.class);
}
@@ -631,7 +631,7 @@ public class MapSerializersTest extends ForyTestBase {
map.put("a", 1);
map.put("b", 2);
Assert.assertSame(
- fory.getClassResolver().getSerializerClass(TestClass1ForDefaultMap.class),
+ fory.getTypeResolver().getSerializerClass(TestClass1ForDefaultMap.class),
MapSerializers.DefaultJavaMapSerializer.class);
serDeCheck(fory, map);
@@ -639,7 +639,7 @@ public class MapSerializersTest extends ForyTestBase {
map.put("a", 1);
map.put("b", 2);
Assert.assertSame(
- fory.getClassResolver().getSerializerClass(TestClass2ForDefaultMap.class),
+ fory.getTypeResolver().getSerializerClass(TestClass2ForDefaultMap.class),
MapSerializers.DefaultJavaMapSerializer.class);
serDeCheck(fory, map2);
}
@@ -650,7 +650,7 @@ public class MapSerializersTest extends ForyTestBase {
map.put("a", 1);
map.put("b", 2);
Assert.assertSame(
- fory.getClassResolver().getSerializerClass(TestClass1ForDefaultMap.class),
+ fory.getTypeResolver().getSerializerClass(TestClass1ForDefaultMap.class),
MapSerializers.DefaultJavaMapSerializer.class);
copyCheck(fory, map);
@@ -658,7 +658,7 @@ public class MapSerializersTest extends ForyTestBase {
map.put("a", 1);
map.put("b", 2);
Assert.assertSame(
- fory.getClassResolver().getSerializerClass(TestClass2ForDefaultMap.class),
+ fory.getTypeResolver().getSerializerClass(TestClass2ForDefaultMap.class),
MapSerializers.DefaultJavaMapSerializer.class);
copyCheck(fory, map2);
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/SynchronizedSerializersTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/SynchronizedSerializersTest.java
index 2215ce464..8533036c9 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/SynchronizedSerializersTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/SynchronizedSerializersTest.java
@@ -89,7 +89,7 @@ public class SynchronizedSerializersTest extends ForyTestBase {
newValue = Platform.getObject(newObj, sourceCollectionFieldOffset);
assertEquals(innerValue, newValue);
assertTrue(
- fory.getClassResolver()
+ fory.getTypeResolver()
.getSerializerClass(value.getClass())
.getName()
.contains("Synchronized"));
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/UnmodifiableSerializersTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/UnmodifiableSerializersTest.java
index 5b952ba99..1fb7c25c7 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/collection/UnmodifiableSerializersTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/collection/UnmodifiableSerializersTest.java
@@ -98,7 +98,7 @@ public class UnmodifiableSerializersTest extends ForyTestBase {
newValue = Platform.getObject(newObj, sourceCollectionFieldOffset);
assertEquals(innerValue, newValue);
assertTrue(
- fory.getClassResolver()
+ fory.getTypeResolver()
.getSerializerClass(value.getClass())
.getName()
.contains("Unmodifiable"));
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerTest.java
index 47c5286ff..0caaa4f8a 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerTest.java
@@ -61,9 +61,9 @@ public class DifferentPOJOCompatibleSerializerTest extends Assert {
ClassCompleteField<String> subclass = new ClassCompleteField<>("subclass", "subclass2");
ClassCompleteField<ClassCompleteField<String>> classCompleteField =
new ClassCompleteField<>(subclass, subclass);
- byte[] serialized = getFory().serializeJavaObject(classCompleteField);
+ byte[] serialized = getFory().serialize(classCompleteField);
ClassMissingField<ClassMissingField<String>> classMissingField =
- getFory().deserializeJavaObject(serialized, ClassMissingField.class);
+ getFory().deserialize(serialized, ClassMissingField.class);
assertEq(classCompleteField, classMissingField);
}
@@ -73,10 +73,10 @@ public class DifferentPOJOCompatibleSerializerTest extends Assert {
ClassMissingField<String> subclass = new ClassMissingField<>("subclass");
ClassMissingField classMissingField = new ClassMissingField(subclass);
- byte[] serialized = getFory().serializeJavaObject(classMissingField);
+ byte[] serialized = getFory().serialize(classMissingField);
ClassCompleteField classCompleteField =
- getFory().deserializeJavaObject(serialized, ClassCompleteField.class);
+ getFory().deserialize(serialized, ClassCompleteField.class);
assertEq(classCompleteField, classMissingField);
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerWithRegistrationTest.java b/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerWithRegistrationTest.java
index 7b97e4f51..cd82a7c1d 100644
--- a/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerWithRegistrationTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/serializer/compatible/DifferentPOJOCompatibleSerializerWithRegistrationTest.java
@@ -61,9 +61,9 @@ public class DifferentPOJOCompatibleSerializerWithRegistrationTest extends Asser
ClassCompleteField<String> subclass = new ClassCompleteField<>("subclass", "subclass2");
ClassCompleteField<ClassCompleteField<String>> classCompleteField =
new ClassCompleteField<>(subclass, subclass);
- byte[] serialized = getFory(ClassCompleteField.class).serializeJavaObject(classCompleteField);
+ byte[] serialized = getFory(ClassCompleteField.class).serialize(classCompleteField);
ClassMissingField<ClassMissingField<String>> classMissingField =
- getFory(ClassMissingField.class).deserializeJavaObject(serialized, ClassMissingField.class);
+ getFory(ClassMissingField.class).deserialize(serialized, ClassMissingField.class);
assertEq(classCompleteField, classMissingField);
}
@@ -73,11 +73,10 @@ public class DifferentPOJOCompatibleSerializerWithRegistrationTest extends Asser
ClassMissingField<String> subclass = new ClassMissingField<>("subclass");
ClassMissingField classMissingField = new ClassMissingField(subclass);
- byte[] serialized = getFory(ClassMissingField.class).serializeJavaObject(classMissingField);
+ byte[] serialized = getFory(ClassMissingField.class).serialize(classMissingField);
ClassCompleteField classCompleteField =
- getFory(ClassCompleteField.class)
- .deserializeJavaObject(serialized, ClassCompleteField.class);
+ getFory(ClassCompleteField.class).deserialize(serialized, ClassCompleteField.class);
assertEq(classCompleteField, classMissingField);
}
diff --git a/java/fory-core/src/test/java/org/apache/fory/type/DescriptorGrouperTest.java b/java/fory-core/src/test/java/org/apache/fory/type/DescriptorGrouperTest.java
index f5bd07951..c769dad2b 100644
--- a/java/fory-core/src/test/java/org/apache/fory/type/DescriptorGrouperTest.java
+++ b/java/fory-core/src/test/java/org/apache/fory/type/DescriptorGrouperTest.java
@@ -77,7 +77,7 @@ public class DescriptorGrouperTest extends ForyTestBase {
public void testComparatorByTypeAndName() {
Fory fory = Fory.builder().build();
List<Descriptor> descriptors = createDescriptors();
- descriptors.sort(fory.getClassResolver().createTypeAndNameComparator());
+ descriptors.sort(((ClassResolver) fory.getTypeResolver()).createTypeAndNameComparator());
List<? extends Class<?>> classes =
descriptors.stream().map(Descriptor::getRawType).collect(Collectors.toList());
List<Class<?>> expected =
@@ -114,7 +114,7 @@ public class DescriptorGrouperTest extends ForyTestBase {
descriptors.add(createDescriptor(TypeRef.of(aClass), "f" + index++, -1, "TestClass", false));
}
Collections.shuffle(descriptors, new Random(7));
- descriptors.sort(fory.getClassResolver().getPrimitiveComparator());
+ descriptors.sort(fory.getTypeResolver().getPrimitiveComparator());
List<? extends Class<?>> classes =
descriptors.stream().map(Descriptor::getRawType).collect(Collectors.toList());
// With compression enabled (default): int/long are compressed and go to the end
@@ -143,7 +143,7 @@ public class DescriptorGrouperTest extends ForyTestBase {
}
Collections.shuffle(descriptors, new Random(7));
Fory fory = Fory.builder().build();
- descriptors.sort(fory.getClassResolver().getPrimitiveComparator());
+ descriptors.sort(fory.getTypeResolver().getPrimitiveComparator());
List<? extends Class<?>> classes =
descriptors.stream().map(Descriptor::getRawType).collect(Collectors.toList());
// With compression enabled (default): int/long are compressed and go to the end
@@ -192,8 +192,8 @@ public class DescriptorGrouperTest extends ForyTestBase {
descriptors,
false,
null,
- fory.getClassResolver().getPrimitiveComparator(),
- fory.getClassResolver().createTypeAndNameComparator())
+ fory.getTypeResolver().getPrimitiveComparator(),
+ ((ClassResolver) fory.getTypeResolver()).createTypeAndNameComparator())
.sort();
{
List<? extends Class<?>> classes =
@@ -278,8 +278,8 @@ public class DescriptorGrouperTest extends ForyTestBase {
createDescriptors(),
false,
null,
- fory.getClassResolver().getPrimitiveComparator(),
- fory.getClassResolver().createTypeAndNameComparator())
+ fory.getTypeResolver().getPrimitiveComparator(),
+ ((ClassResolver) fory.getTypeResolver()).createTypeAndNameComparator())
.sort();
{
List<? extends Class<?>> classes =
@@ -331,7 +331,7 @@ public class DescriptorGrouperTest extends ForyTestBase {
@Test
public void testNormalizedTypeNameComparator() {
Fory fory = builder().build();
- ClassResolver classResolver = fory.getClassResolver();
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
Comparator<Descriptor> comparator = classResolver.createTypeAndNameComparator();
// Create descriptors with different Collection/Map subtypes
@@ -400,7 +400,7 @@ public class DescriptorGrouperTest extends ForyTestBase {
new TypeRef<ArrayList<String>>() {}, "arrayListField", -1, "TestClass", false));
Fory fory = Fory.builder().build();
// Sort with the static comparator
- descriptors.sort(fory.getClassResolver().createTypeAndNameComparator());
+ descriptors.sort(((ClassResolver) fory.getTypeResolver()).createTypeAndNameComparator());
// Get type names after sorting
List<String> typeNames =
diff --git a/java/fory-extensions/src/test/java/org/apache/fory/extension/meta/TypeDefEncoderTest.java b/java/fory-extensions/src/test/java/org/apache/fory/extension/meta/TypeDefEncoderTest.java
index aea91d457..f6f97e7de 100644
--- a/java/fory-extensions/src/test/java/org/apache/fory/extension/meta/TypeDefEncoderTest.java
+++ b/java/fory-extensions/src/test/java/org/apache/fory/extension/meta/TypeDefEncoderTest.java
@@ -28,6 +28,7 @@ import org.apache.fory.memory.MemoryBuffer;
import org.apache.fory.meta.FieldInfo;
import org.apache.fory.meta.NativeTypeDefEncoder;
import org.apache.fory.meta.TypeDef;
+import org.apache.fory.resolver.ClassResolver;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -45,10 +46,11 @@ public class TypeDefEncoderTest {
Fory fory =
Fory.builder().withMetaShare(true).withMetaCompressor(new ZstdMetaCompressor()).build();
Class<TestFieldsOrderClass1> type = TestFieldsOrderClass1.class;
- List<FieldInfo> fieldsInfo = buildFieldsInfo(fory.getClassResolver(), type);
+ ClassResolver classResolver = (ClassResolver) fory.getTypeResolver();
+ List<FieldInfo> fieldsInfo = buildFieldsInfo(classResolver, type);
MemoryBuffer buffer =
NativeTypeDefEncoder.encodeTypeDef(
- fory.getClassResolver(), type, getClassFields(type, fieldsInfo), true);
+ classResolver, type, getClassFields(type, fieldsInfo), true);
TypeDef typeDef = TypeDef.readTypeDef(fory, buffer);
Assert.assertEquals(typeDef.getClassName(), type.getName());
Assert.assertEquals(typeDef.getFieldsInfo().size(), type.getDeclaredFields().length);
diff --git a/java/fory-extensions/src/test/java/org/apache/fory/extension/serializer/ProtobufSerializerTest.java b/java/fory-extensions/src/test/java/org/apache/fory/extension/serializer/ProtobufSerializerTest.java
index 47b4f1e8d..be35ca9e9 100644
--- a/java/fory-extensions/src/test/java/org/apache/fory/extension/serializer/ProtobufSerializerTest.java
+++ b/java/fory-extensions/src/test/java/org/apache/fory/extension/serializer/ProtobufSerializerTest.java
@@ -31,7 +31,7 @@ public class ProtobufSerializerTest {
Assert.assertEquals(fory.deserialize(fory.serialize(ByteString.empty())), ByteString.empty());
ByteString bytes = ByteString.copyFrom(new byte[] {1, 2, 3});
Assert.assertEquals(fory.deserialize(fory.serialize(bytes)), bytes);
- Class<?> serializerClass = fory.getClassResolver().getSerializerClass(bytes.getClass());
+ Class<?> serializerClass = fory.getTypeResolver().getSerializerClass(bytes.getClass());
Assert.assertEquals(serializerClass, ByteStringSerializer.class);
}
}
diff --git a/java/fory-simd/src/main/java/org/apache/fory/serializer/CompressedArraySerializers.java b/java/fory-simd/src/main/java/org/apache/fory/serializer/CompressedArraySerializers.java
index 7c7fe3edc..9165af1bf 100644
--- a/java/fory-simd/src/main/java/org/apache/fory/serializer/CompressedArraySerializers.java
+++ b/java/fory-simd/src/main/java/org/apache/fory/serializer/CompressedArraySerializers.java
@@ -69,7 +69,7 @@ public final class CompressedArraySerializers {
* @param fory the Fory instance to configure
*/
static void registerIfEnabled(Fory fory) {
- ClassResolver resolver = fory.getClassResolver();
+ ClassResolver resolver = (ClassResolver) fory.getTypeResolver();
boolean compressInt = fory.getConfig().compressIntArray();
boolean compressLong = fory.getConfig().compressLongArray();
@@ -109,7 +109,7 @@ public final class CompressedArraySerializers {
* @param fory the Fory instance to register serializers with
*/
public static void register(Fory fory) {
- ClassResolver resolver = fory.getClassResolver();
+ ClassResolver resolver = (ClassResolver) fory.getTypeResolver();
resolver.registerInternalSerializer(int[].class, new CompressedIntArraySerializer(fory));
resolver.registerInternalSerializer(long[].class, new CompressedLongArraySerializer(fory));
}
diff --git a/java/fory-testsuite/src/test/java/org/apache/fory/test/Object2ObjectOpenHashMapTest.java b/java/fory-testsuite/src/test/java/org/apache/fory/test/Object2ObjectOpenHashMapTest.java
index d60b0856c..d95070a8d 100644
--- a/java/fory-testsuite/src/test/java/org/apache/fory/test/Object2ObjectOpenHashMapTest.java
+++ b/java/fory-testsuite/src/test/java/org/apache/fory/test/Object2ObjectOpenHashMapTest.java
@@ -40,7 +40,7 @@ public class Object2ObjectOpenHashMapTest extends TestBase {
builder().withCompatibleMode(CompatibleMode.COMPATIBLE).withCodegen(enableCodegen).build();
TestObject2ObjectOpenHashMap o = new TestObject2ObjectOpenHashMap();
- byte[] bytes = fory.serializeJavaObject(o);
- Assert.assertEquals(fory.deserializeJavaObject(bytes, TestObject2ObjectOpenHashMap.class), o);
+ byte[] bytes = fory.serialize(o);
+ Assert.assertEquals(fory.deserialize(bytes, TestObject2ObjectOpenHashMap.class), o);
}
}
diff --git a/kotlin/src/main/java/org/apache/fory/serializer/kotlin/KotlinSerializers.java b/kotlin/src/main/java/org/apache/fory/serializer/kotlin/KotlinSerializers.java
index f5db4183f..b9c59c4fa 100644
--- a/kotlin/src/main/java/org/apache/fory/serializer/kotlin/KotlinSerializers.java
+++ b/kotlin/src/main/java/org/apache/fory/serializer/kotlin/KotlinSerializers.java
@@ -32,7 +32,7 @@ import kotlin.uuid.Uuid;
import org.apache.fory.AbstractThreadSafeFory;
import org.apache.fory.Fory;
import org.apache.fory.ThreadSafeFory;
-import org.apache.fory.resolver.ClassResolver;
+import org.apache.fory.resolver.TypeResolver;
import org.apache.fory.serializer.collection.CollectionSerializers;
import org.apache.fory.serializer.collection.MapSerializers;
import org.apache.fory.util.DefaultValueUtils;
@@ -48,7 +48,7 @@ public class KotlinSerializers {
public static void registerSerializers(Fory fory) {
DefaultValueUtils.setKotlinDefaultValueSupport(new KotlinDefaultValueSupport());
- ClassResolver resolver = fory.getClassResolver();
+ TypeResolver resolver = fory.getTypeResolver();
// UByte
Class ubyteClass = KotlinToJavaClass.INSTANCE.getUByteClass();
diff --git a/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/DurationSerializer.kt b/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/DurationSerializer.kt
index 51fa2d474..abcb45879 100644
--- a/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/DurationSerializer.kt
+++ b/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/DurationSerializer.kt
@@ -41,7 +41,7 @@ public class DurationSerializer(fory: Fory, needToWriteRef: Boolean) :
) : this(fory, fory.config.isTimeRefIgnored)
private val durationUnitSerializer: Serializer<DurationUnit> by lazy {
- fory.classResolver.getSerializer(DurationUnit::class.java)
+ fory.typeResolver.getSerializer(DurationUnit::class.java)
}
override fun write(buffer: MemoryBuffer, value: Duration) {
diff --git a/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/UnsignedArraySerializers.kt b/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/UnsignedArraySerializers.kt
index 388906848..344ab335a 100644
--- a/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/UnsignedArraySerializers.kt
+++ b/kotlin/src/main/kotlin/org/apache/fory/serializer/kotlin/UnsignedArraySerializers.kt
@@ -32,7 +32,7 @@ public abstract class AbstractDelegatingArraySerializer<T, T_Delegate>(
) : Serializer<T>(fory, cls) {
// Lazily initialize the delegatingSerializer here to avoid lookup cost.
- private val delegatingSerializer by lazy { fory.classResolver.getSerializer(delegateClass) }
+ private val delegatingSerializer by lazy { fory.typeResolver.getSerializer(delegateClass) }
protected abstract fun toDelegateClass(value: T): T_Delegate
diff --git a/python/pyfory/meta/typedef_encoder.py b/python/pyfory/meta/typedef_encoder.py
index 49bd540c2..7cfb34889 100644
--- a/python/pyfory/meta/typedef_encoder.py
+++ b/python/pyfory/meta/typedef_encoder.py
@@ -97,11 +97,10 @@ def encode_typedef(type_resolver, cls, include_fields: bool = True):
# Get the encoded binary (only the written portion, not the full buffer)
binary = buffer.to_bytes(0, buffer.get_writer_index())
- # Compress if beneficial
- compressed_binary = type_resolver.get_meta_compressor().compress(binary)
- is_compressed = len(compressed_binary) < len(binary)
- if is_compressed:
- binary = compressed_binary
+ # Temporary xlang behavior: always write TypeDef metadata uncompressed.
+ # Some runtimes still do not support TypeMeta decompression, so keep the
+ # xlang wire payload uncompressed until all xlang implementations support it.
+ is_compressed = False
# Prepend header
binary = prepend_header(binary, is_compressed, len(field_infos) > 0)
# Extract namespace and typename
diff --git a/python/pyfory/tests/test_typedef_encoding.py b/python/pyfory/tests/test_typedef_encoding.py
index a3ec074c7..7496b9f9b 100644
--- a/python/pyfory/tests/test_typedef_encoding.py
+++ b/python/pyfory/tests/test_typedef_encoding.py
@@ -124,6 +124,7 @@ def test_encode_decode_typedef():
# Encode a TypeDef
typedef = encode_typedef(resolver, type_)
print(f"typedef: {typedef}")
+ assert typedef.is_compressed is False
# Create a buffer from the encoded data
buffer = Buffer(typedef.encoded)
@@ -134,6 +135,7 @@ def test_encode_decode_typedef():
# Verify the decoded TypeDef has the expected properties
assert decoded_typedef.type_id == typedef.type_id
+ assert decoded_typedef.is_compressed is False
assert decoded_typedef.is_compressed == typedef.is_compressed
assert len(decoded_typedef.fields) == len(typedef.fields)
diff --git a/rust/fory-core/src/meta/type_meta.rs b/rust/fory-core/src/meta/type_meta.rs
index 771fd2064..368de1e18 100644
--- a/rust/fory-core/src/meta/type_meta.rs
+++ b/rust/fory-core/src/meta/type_meta.rs
@@ -1044,6 +1044,8 @@ impl TypeMeta {
if write_meta_fields_flag {
header |= HAS_FIELDS_META_FLAG;
}
+ // Temporary xlang behavior: keep TypeMeta uncompressed.
+ // Some runtimes still do not support TypeMeta decompression.
let is_compressed = false;
if is_compressed {
header |= COMPRESS_META_FLAG;
diff --git a/scala/src/main/java/org/apache/fory/serializer/scala/ScalaSerializers.java b/scala/src/main/java/org/apache/fory/serializer/scala/ScalaSerializers.java
index f3554edd1..973590000 100644
--- a/scala/src/main/java/org/apache/fory/serializer/scala/ScalaSerializers.java
+++ b/scala/src/main/java/org/apache/fory/serializer/scala/ScalaSerializers.java
@@ -22,7 +22,7 @@ package org.apache.fory.serializer.scala;
import org.apache.fory.AbstractThreadSafeFory;
import org.apache.fory.Fory;
import org.apache.fory.ThreadSafeFory;
-import org.apache.fory.resolver.ClassResolver;
+import org.apache.fory.resolver.TypeResolver;
import org.apache.fory.serializer.Serializer;
import org.apache.fory.serializer.SerializerFactory;
import scala.collection.immutable.NumericRange;
@@ -39,7 +39,7 @@ public class ScalaSerializers {
}
public static void registerSerializers(Fory fory) {
- ClassResolver resolver = setSerializerFactory(fory);
+ TypeResolver resolver = setSerializerFactory(fory);
resolver.registerSerializer(IterableToFactoryClass, new ToFactorySerializers.IterableToFactorySerializer(fory));
resolver.registerSerializer(MapToFactoryClass, new ToFactorySerializers.MapToFactorySerializer(fory));
@@ -167,8 +167,8 @@ public class ScalaSerializers {
resolver.register(scala.collection.mutable.BitSet$.class);
}
- private static ClassResolver setSerializerFactory(Fory fory) {
- ClassResolver resolver = fory.getClassResolver();
+ private static TypeResolver setSerializerFactory(Fory fory) {
+ TypeResolver resolver = fory.getTypeResolver();
ScalaDispatcher dispatcher = new ScalaDispatcher();
SerializerFactory factory = resolver.getSerializerFactory();
if (factory != null) {
diff --git a/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala b/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala
index fb0754b01..7b4f8d19b 100644
--- a/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala
+++ b/scala/src/main/scala/org/apache/fory/serializer/scala/RangeSerializer.scala
@@ -72,7 +72,7 @@ class NumericRangeSerializer[A, T <: NumericRange[A]](fory: Fory, cls: Class[T])
override def write(buffer: MemoryBuffer, value: T): Unit = {
val cls = value.start.getClass
- val resolver = fory.getClassResolver
+ val resolver = fory.getTypeResolver
val classInfo = resolver.getTypeInfo(cls)
resolver.writeTypeInfo(buffer, classInfo)
val serializer = classInfo.getSerializer.asInstanceOf[Serializer[A]]
@@ -83,7 +83,7 @@ class NumericRangeSerializer[A, T <: NumericRange[A]](fory: Fory, cls: Class[T])
}
override def read(buffer: MemoryBuffer) = {
- val resolver = fory.getClassResolver
+ val resolver = fory.getTypeResolver
val classInfo = resolver.readTypeInfo(buffer)
val serializer = classInfo.getSerializer.asInstanceOf[Serializer[A]]
val start = serializer.read(buffer)
diff --git a/scala/src/test/scala/org/apache/fory/serializer/scala/CollectionSerializerTest.scala b/scala/src/test/scala/org/apache/fory/serializer/scala/CollectionSerializerTest.scala
index 394f60fed..5e27560f3 100644
--- a/scala/src/test/scala/org/apache/fory/serializer/scala/CollectionSerializerTest.scala
+++ b/scala/src/test/scala/org/apache/fory/serializer/scala/CollectionSerializerTest.scala
@@ -21,6 +21,7 @@ package org.apache.fory.serializer.scala
import org.apache.fory.Fory
import org.apache.fory.config.Language
+import org.apache.fory.resolver.ClassResolver
import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec
@@ -36,7 +37,7 @@ class CollectionSerializerTest extends AnyWordSpec with Matchers {
.build()
ScalaSerializers.registerSerializers(fory1)
if (setFactory) {
- fory1.getClassResolver.setSerializerFactory(new ScalaDispatcher())
+ fory1.getTypeResolver.asInstanceOf[ClassResolver].setSerializerFactory(new ScalaDispatcher())
}
s"fory scala collection support: setOpt $setOpt, setFactory $setFactory" should {
"serialize/deserialize Seq" in {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@fory.apache.org
For additional commands, e-mail: commits-help@fory.apache.org