in library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/protobuf/ProtobufSchemaResolver.java [107:158]
private ProtobufSchema computeIfAbsent(Exchange exchange) {
if (this.schema != null) {
return this.schema;
}
ProtobufSchema answer = exchange.getProperty(SchemaHelper.CONTENT_SCHEMA, ProtobufSchema.class);
if (answer == null && exchange.getProperties().containsKey(SchemaHelper.SCHEMA)) {
String schemaJson = exchange.getProperty(SchemaHelper.SCHEMA, String.class);
try {
answer = ProtobufSchemaLoader.std.parse(schemaJson);
} catch (IOException e) {
throw new RuntimeException("Unable to parse Protobuf schema", e);
}
}
if (answer == null) {
String contentClass = SchemaHelper.resolveContentClass(exchange, this.contentClass);
if (contentClass != null) {
answer = this.schemes.computeIfAbsent(contentClass, t -> {
Resource res = PluginHelper.getResourceLoader(exchange.getContext())
.resolveResource("classpath:schemas/" + SchemaType.AVRO.type() + "/" + t + "." + SchemaType.AVRO.type());
try {
if (res.exists()) {
try (InputStream is = res.getInputStream()) {
if (is != null) {
return Protobuf.MAPPER.schemaLoader().load(is);
}
}
}
} catch (Exception e) {
throw new RuntimeException(
"Unable to load Protobuf schema for type: " + t + ", resource: " + res.getLocation(), e);
}
try {
return Protobuf.MAPPER.generateSchemaFor(Class.forName(contentClass));
} catch (JsonMappingException | ClassNotFoundException e) {
throw new RuntimeException(
"Unable to compute Protobuf schema for type: " + t, e);
}
});
}
}
if (answer != null) {
this.schema = answer;
}
return answer;
}