gpt4 book ai didi

java - java.io.IOException:org.apache.thrift.protocol.TProtocolException:无法编写没有设置值的TUnion

转载 作者:行者123 更新时间:2023-12-02 21:46:50 25 4
gpt4 key购买 nike

我正在使用Thrift方案将Thrift bundle 包作为桶文件存储在hadoop集群中。一切似乎都正常工作。创建了Thrift bundle 包,没有任何错误。

虽然,我正在使用kafka发送 bundle 包,并在进行序列化时,序列化函数将 bundle 包转换为字节数组。这时我遇到了上述错误。为什么kafka会寻找 bundle 对象以将其转换为字节数组。或者有什么方法可以安全地将任何对象转换为字节数组,如果可以,请提供它,错误是:

java.io.IOException: org.apache.thrift.protocol.TProtocolException: Cannot write a TUnion with no set value!

以下是引发错误的writeObject函数
private void writeObject(java.io.ObjectOutputStream out)
throws java.io.IOException {
try {
write(new org.apache.thrift.protocol.TCompactProtocol(
new org.apache.thrift.transport.TIOStreamTransport(out)));
} catch (org.apache.thrift.TException te) {
throw new java.io.IOException(te);
}
}

最佳答案

消息很清楚:在某个union对象的某处,未设置任何值。必须为Thrift联合设置一个值。

节俭联合示例,请参阅您的* .thrift文件:

union Foo {
1: string bar
2: bool baz
}

这是引发错误的条件:
public void write(TProtocol oprot, TUnion struct) throws TException {
if (struct.getSetField() == null || struct.getFieldValue() == null) {
throw new TProtocolException("Cannot write a TUnion with no set value!");
}

// ... more code ...
}

从给定的代码中无法分辨出它是什么对象,您的堆栈太深了。查看调用 writeObject()的代码,然后向上走。在代码的某些地方,未按原样设置某些数据,或者该值设置为 null值-这在Thrift中是非法的。如果确实需要用例指示 null值,请考虑使用额外的 bool(boolean) 值标志。

关于java - java.io.IOException:org.apache.thrift.protocol.TProtocolException:无法编写没有设置值的TUnion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24445671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com