/* * Copyright (C) Scott Cranton, Jakub Korab, and Christian Posta * https://github.com/CamelCookbook * * Licensed 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.camelcookbook.rest.binding; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import org.apache.camel.Exchange; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.JndiRegistry; import org.apache.camel.test.AvailablePortFinder; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.Test; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.StringReader; import java.io.StringWriter; public class BindingModeTest extends CamelTestSupport { private final int port1 = AvailablePortFinder.getNextAvailable(); private ObjectWriter objectWriter = new ObjectMapper().writer(); private ItemService getItemService() { return context().getRegistry().lookupByNameAndType("itemService", ItemService.class); } @Override protected JndiRegistry createRegistry() throws Exception { final JndiRegistry registry = super.createRegistry(); registry.bind("itemService", new ItemService()); return registry; } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new BindingModeRouteBuilder(port1); } @Test public void testGetMany() throws Exception { final Item[] origItems = getItemService().getItems(); final String origItemsJson = objectWriter.writeValueAsString(origItems); String outJson = fluentTemplate().to("undertow:http://localhost:" + port1 + "/items") .withHeader(Exchange.HTTP_METHOD, "GET") .withHeader("Accept", "application/json") .request(String.class); assertEquals(origItemsJson, outJson); } @Test public void testGetOne() throws Exception { final Item origItem = getItemService().getItem(0); final String origItemJson = objectWriter.writeValueAsString(origItem); String outJson = fluentTemplate().to("undertow:http://localhost:" + port1 + "/items/0") .withHeader(Exchange.HTTP_METHOD, "GET") .withHeader("Accept", "application/json") .request(String.class); assertEquals(origItemJson, outJson); String outXml = fluentTemplate().to("undertow:http://localhost:" + port1 + "/items/0") .withHeader(Exchange.HTTP_METHOD, "GET") .withHeader("Accept", "application/xml") .request(String.class); JAXBContext jaxbContext = JAXBContext.newInstance(Item.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Item itemOut = (Item) jaxbUnmarshaller.unmarshal(new StringReader(outXml)); assertEquals(origItem, itemOut); } @Test public void testGetOneJson() throws Exception { final String origValue = objectWriter.writeValueAsString(getItemService().getItem(0)); String out = fluentTemplate().to("undertow:http://localhost:" + port1 + "/items/0/json") .withHeader(Exchange.HTTP_METHOD, "GET") .request(String.class); assertEquals(origValue, out); } @Test public void testGetOneXml() throws Exception { final Item origItem = getItemService().getItem(0); String out = fluentTemplate().to("undertow:http://localhost:" + port1 + "/items/0/xml") .withHeader(Exchange.HTTP_METHOD, "GET") .request(String.class); JAXBContext jaxbContext = JAXBContext.newInstance(Item.class); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Item itemOut = (Item) jaxbUnmarshaller.unmarshal(new StringReader(out)); assertEquals(origItem, itemOut); } @Test public void testSetOneJson() throws Exception { Item item = getItemService().getItem(0); // change name to something different item.setName(item.getName() + "Foo"); final String jsonItem = objectWriter.writeValueAsString(item); String out = fluentTemplate().to("undertow:http://localhost:" + port1 + "/items/0") .withHeader(Exchange.HTTP_METHOD, "PUT") .withBody(jsonItem) .request(String.class); assertEquals(item, getItemService().getItem(0)); } @Test public void testSetOneXml() throws Exception { final Item item = getItemService().getItem(0); // change name to something different item.setName(item.getName() + "Foo"); JAXBContext jaxbContext = JAXBContext.newInstance(Item.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); StringWriter sw = new StringWriter(); jaxbMarshaller.marshal(item, sw); String xmlItem = sw.toString(); String out = fluentTemplate().to("undertow:http://localhost:" + port1 + "/items/0") .withHeader(Exchange.HTTP_METHOD, "PUT") .withBody(xmlItem) .request(String.class); assertEquals(item, getItemService().getItem(0)); } }