![](/img/trans.png)
[英]java.io.IOException: org.apache.camel.NoTypeConversionAvailableException
[英]java.io.IOException: org.apache.thrift.protocol.TProtocolException: Cannot write a TUnion with no set value
我正在使用Thrift方案將Thrift捆綁包作為桶文件存儲在hadoop集群中。 一切似乎都正常工作。 創建了Thrift捆綁包,沒有任何錯誤。
雖然,我正在使用kafka發送捆綁包,並在進行序列化時,序列化程序功能將捆綁包轉換為字節數組。這時我遇到了上述錯誤。 為什么kafka會尋找捆綁對象以將其轉換為字節數組。 或者有什么方法可以安全地將任何對象轉換為字節數組,如果可以,請提供它,錯誤是:
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
值,請考慮使用額外的布爾值標志。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.