Skip to content

Commit

Permalink
Fix JSON Jackson jacksonConversionPojo test-addressed feedback apache…
Browse files Browse the repository at this point in the history
  • Loading branch information
ffang committed Jun 15, 2021
1 parent b8e1ba5 commit 7510631
Show file tree
Hide file tree
Showing 12 changed files with 417 additions and 91 deletions.
10 changes: 10 additions & 0 deletions extensions/jackson/deployment/pom.xml
Expand Up @@ -45,6 +45,16 @@
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jackson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-direct</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
@@ -0,0 +1,83 @@
/*
* 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.apache.camel.quarkus.component.jackson;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Properties;

import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonConstants;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class JacksonTypeConverterPojoTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClass(Routes.class)
.addClass(Order.class)
.addAsResource(applicationProperties(), "application.properties"));
private static ProducerTemplate producerTemplate;

@Test
public void jacksonConversionPojo() throws Exception {
Order order = new Order();
order.setAmount(1);
order.setCustomerName("Acme");
order.setPartName("Camel");

String json = (String) producerTemplate.requestBody("direct:jackson-conversion-pojo", order);
assertEquals("{\"id\":0,\"partName\":\"Camel\",\"amount\":1,\"customerName\":\"Acme\"}", json);

}

public static final class Routes extends RouteBuilder {
@Override
public void configure() {
this.getContext().getGlobalOptions().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
this.getContext().getGlobalOptions().put(JacksonConstants.TYPE_CONVERTER_TO_POJO, "true");
from("direct:jackson-conversion-pojo").convertBodyTo(String.class);
producerTemplate = this.getContext().createProducerTemplate();
}
}

public static final Asset applicationProperties() {
Writer writer = new StringWriter();

Properties props = new Properties();
props.setProperty("camel.context.name",
"camel-quarkus-integration-tests-dataformats-json-jackson-type-converter-pojo");

try {
props.store(writer, "");
} catch (IOException e) {
throw new RuntimeException(e);
}

return new StringAsset(writer.toString());
}
}
@@ -0,0 +1,97 @@
/*
* 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.apache.camel.quarkus.component.jackson;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jackson.JacksonConstants;
import org.apache.camel.support.DefaultExchange;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

public class JacksonTypeConverterSimpleTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClass(Routes.class)
.addClass(Order.class)
.addAsResource(applicationProperties(), "application.properties"));
private static CamelContext context;

@Test
public void jacksonConversionSimple() throws Exception {
context.getGlobalOptions().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
Exchange exchange = new DefaultExchange(context);

Map<String, String> map = new HashMap<>();
Object convertedObject = context.getTypeConverter().convertTo(String.class, exchange, map);
// will do a toString which is an empty map
assertEquals(map.toString(), convertedObject);

convertedObject = context.getTypeConverter().convertTo(Long.class, exchange,
new HashMap<String, String>());
assertNull(convertedObject);

convertedObject = context.getTypeConverter().convertTo(long.class, exchange,
new HashMap<String, String>());
assertNull(convertedObject);

convertedObject = context.getTypeConverter().convertTo(ExchangePattern.class, exchange, "InOnly");
assertEquals(ExchangePattern.InOnly, convertedObject);
}

public static final class Routes extends RouteBuilder {
@Override
public void configure() {
this.getContext().getGlobalOptions().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
context = this.getContext();
}
}

public static final Asset applicationProperties() {
Writer writer = new StringWriter();

Properties props = new Properties();
props.setProperty("camel.context.name",
"camel-quarkus-integration-tests-dataformats-json-jackson-type-converter-simple");

try {
props.store(writer, "");
} catch (IOException e) {
throw new RuntimeException(e);
}

return new StringAsset(writer.toString());
}
}
@@ -0,0 +1,71 @@
/*
* 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.apache.camel.quarkus.component.jackson;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

import io.quarkus.runtime.annotations.RegisterForReflection;

@XmlRootElement(name = "order")
@XmlAccessorType(XmlAccessType.FIELD)
@RegisterForReflection
public class Order {

@XmlAttribute
private int id;
@XmlAttribute
private String partName;
@XmlAttribute
private int amount;
@XmlAttribute(name = "customer_name")
private String customerName;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getPartName() {
return partName;
}

public void setPartName(String partName) {
this.partName = partName;
}

public int getAmount() {
return amount;
}

public void setAmount(int amount) {
this.amount = amount;
}

public String getCustomerName() {
return customerName;
}

public void setCustomerName(String customerName) {
this.customerName = customerName;
}
}
10 changes: 10 additions & 0 deletions extensions/jacksonxml/deployment/pom.xml
Expand Up @@ -42,6 +42,16 @@
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-jacksonxml</artifactId>
</dependency>
<dependency>
<groupId>org.apache.camel.quarkus</groupId>
<artifactId>camel-quarkus-direct</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5-internal</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand Down
@@ -0,0 +1,92 @@
/*
* 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.apache.camel.quarkus.component.jacksonxml.deployment;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import io.quarkus.test.QuarkusUnitTest;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.jacksonxml.JacksonXMLConstants;
import org.apache.camel.support.DefaultExchange;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.Asset;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

public class JacksonxmlTypeConverterTest {
@RegisterExtension
static final QuarkusUnitTest CONFIG = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClass(Routes.class)
.addClass(TestPojo.class)
.addAsResource(applicationProperties(), "application.properties"));
private static CamelContext context;

@Test
public void jacksonxmlConversion() throws Exception {
Exchange exchange = new DefaultExchange(context);
context.getGlobalOptions().put(JacksonXMLConstants.ENABLE_TYPE_CONVERTER, "true");
Map<String, String> body = new HashMap<>();
Object convertedObject = context.getTypeConverter().convertTo(String.class, exchange, body);
// will do a toString which is an empty map
assertEquals(body.toString(), convertedObject);

convertedObject = context.getTypeConverter().convertTo(Long.class, exchange,
new HashMap<String, String>());
assertNull(convertedObject);

convertedObject = context.getTypeConverter().convertTo(long.class, exchange,
new HashMap<String, String>());
assertNull(convertedObject);
}

public static final class Routes extends RouteBuilder {
@Override
public void configure() {
this.getContext().getGlobalOptions().put(JacksonXMLConstants.ENABLE_TYPE_CONVERTER, "true");
context = this.getContext();
}
}

public static final Asset applicationProperties() {
Writer writer = new StringWriter();

Properties props = new Properties();
props.setProperty("camel.context.name",
"camel-quarkus-integration-tests-dataformats-json-jackson-type-converter-pojo");

try {
props.store(writer, "");
} catch (IOException e) {
throw new RuntimeException(e);
}

return new StringAsset(writer.toString());
}
}

0 comments on commit 7510631

Please sign in to comment.