Skip to content

Commit

Permalink
[Fix apache#3767] Supporting open api functions with File as parameter (
Browse files Browse the repository at this point in the history
  • Loading branch information
fjtirado authored Nov 13, 2024
1 parent 1dbb058 commit bd17486
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 39 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
/*
* 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.kie.kogito.jackson.utils;

import java.io.File;
import java.io.IOException;
import java.net.URI;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.node.ObjectNode;

class CommonObjectModule extends SimpleModule {

private static final long serialVersionUID = 1L;

public CommonObjectModule() {
this.addDeserializer(URI.class, new JsonDeserializer<URI>() {
@Override
public URI deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return URI.create(fromNode(p));
}
});

this.addDeserializer(File.class, new JsonDeserializer<File>() {
@Override
public File deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
return new File(fromNode(p));
}
});
}

private static String fromNode(JsonParser p) throws IOException {
JsonNode node = p.readValueAsTree();
if (node.isTextual()) {
return node.asText();
} else if (node.isObject()) {
return ((ObjectNode) node).iterator().next().asText();
} else if (node.isArray()) {
return node.get(0).asText();
} else {
throw new IOException("Cannot extract string from node " + node);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ private static class DefaultObjectMapper {
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.setTypeFactory(TypeFactory.defaultInstance().withClassLoader(Thread.currentThread().getContextClassLoader()))
.registerModule(JsonFormat.getCloudEventJacksonModule())
.registerModule(new CommonObjectModule())
.findAndRegisterModules();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
*/
package org.kie.kogito.jackson.utils;

import java.io.File;
import java.net.URI;
import java.util.Arrays;
import java.util.Collections;

Expand All @@ -28,6 +30,7 @@
import com.fasterxml.jackson.databind.node.FloatNode;
import com.fasterxml.jackson.databind.node.IntNode;
import com.fasterxml.jackson.databind.node.NullNode;
import com.fasterxml.jackson.databind.node.TextNode;

import static org.assertj.core.api.Assertions.assertThat;

Expand Down Expand Up @@ -82,4 +85,27 @@ void testJavaByteArray() {
byte[] bytes = { 1, 2, 3, 4 };
assertThat((byte[]) JsonObjectUtils.toJavaValue(BinaryNode.valueOf(bytes))).isEqualTo(bytes);
}

@Test
void testURI() {
final String uri = "www.google.com";
assertThat(JsonObjectUtils.convertValue(ObjectMapperFactory.get().createObjectNode().put("uri", uri), URI.class)).isEqualTo(URI.create(uri));
assertThat(JsonObjectUtils.convertValue(new TextNode(uri), URI.class)).isEqualTo(URI.create(uri));
}

@Test
void testFile() {
final String file = "/home/myhome/sample.txt";
final String additionalData = "Javierito";
assertThat(JsonObjectUtils.convertValue(ObjectMapperFactory.get().createObjectNode().put("file", file), File.class)).isEqualTo(new File(file));
assertThat(JsonObjectUtils.convertValue(ObjectMapperFactory.get().createObjectNode().put("file", file).put("additionalData", additionalData), PseudoPOJO.class))
.isEqualTo(new PseudoPOJO(additionalData, new File(file)));
assertThat(JsonObjectUtils.convertValue(new TextNode(file), File.class)).isEqualTo(new File(file));
}

private static record PseudoPOJO(String additionalData, File file) {
}

private static record Person(String name) {
}
}

This file was deleted.

0 comments on commit bd17486

Please sign in to comment.