blob: aa77c7fe8009a991705543b60e7962cd5f488c17 [file] [view]
---
title: Troubleshooting
sidebar_position: 90
id: troubleshooting
license: |
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.
---
This page covers common problems when using Fory JavaScript.
## Cannot deserialize a non-cross-language payload
The Fory JavaScript runtime only reads Fory cross-language payloads. If the producer is a Java or Go service using a language-native format, the JavaScript side cannot decode it.
Fix: switch the producer to the cross-language mode. For Java, use `.withXlang(true)`; for Go, use `WithXlang(true)`.
## `maxDepth must be an integer >= 2`
This means you passed an invalid `maxDepth` value. It must be a positive integer of at least 2.
```ts
new Fory({ maxDepth: 100 });
```
Increase this only if your data is legitimately deeply nested.
## `Binary size ... exceeds maxBinarySize`
A binary field or the overall message exceeded the safety limit. If the size is expected and the source is trusted, increase the limit:
```ts
new Fory({ maxBinarySize: 128 * 1024 * 1024 });
```
## `Collection size ... exceeds maxCollectionSize`
A list, set, or map has more elements than the configured limit. This often means the data is unexpectedly large. If it is legitimate, increase the limit:
```ts
new Fory({ maxCollectionSize: 2_000_000 });
```
## `Field "..." is not nullable`
You are passing `null` to a field that was not declared nullable. Fix: add `.setNullable(true)` to the field schema:
```ts
const userType = Type.struct("example.user", {
name: Type.string(),
email: Type.string().setNullable(true), // ← this field can be null
});
```
## Objects are not the same instance after deserialization
Fory does not preserve object identity by default. Two fields pointing to the same object will become two independent copies.
Fix: enable **both** of these:
1. `new Fory({ ref: true })` on the instance
2. `.setTrackingRef(true)` on the specific fields
See [References](references.md).
## Large integers come back as `bigint`
This is expected. Fory uses `bigint` for any 64-bit integer field (`Type.int64()`, `Type.uint64()`). If you need a `number`, use a smaller integer type like `Type.int32()` but only if the value actually fits in 32 bits.
## Inspecting Generated Serializer Code
If you need to debug what Fory is doing under the hood, inspect the generated serializer code with a hook:
```ts
const fory = new Fory({
hooks: {
afterCodeGenerated(code) {
console.log(code);
return code;
},
},
});
```
## `@apache-fory/hps` Install Fails
`@apache-fory/hps` is an optional Node.js accelerator. If it fails to install (e.g. on a platform without native module support), just remove it from your dependencies. Fory still works correctly without it.
## Related Topics
- [Basic Serialization](basic-serialization.md)
- [References](references.md)
- [Cross-Language](cross-language.md)