package org.jboss.resteasy.test.providers;
import org.codehaus.jettison.json.JSONObject;
import org.codehaus.jettison.mapped.Configuration;
import org.codehaus.jettison.mapped.MappedNamespaceConvention;
import org.codehaus.jettison.mapped.MappedXMLStreamReader;
import org.codehaus.jettison.mapped.MappedXMLStreamWriter;
import org.jboss.resteasy.plugins.providers.jaxb.JAXBXmlTypeProvider;
import org.jboss.resteasy.test.providers.namespace.mapping.NamespaceMappingTestBase;
import org.jboss.resteasy.test.providers.namespace.mapping.NamespaceMappingTestExtends;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import static org.hamcrest.CoreMatchers.containsString;
/**
* @tpSubChapter Providers
* @tpChapter Unit tests
* @tpTestCaseDetails Namespace mapping test for jettison provider
* @tpSince RESTEasy 3.0.16
*/
public class NamespaceMappingTest {
static JAXBContext ctx = null;
static Unmarshaller unmarshaller = null;
static Marshaller marshaller = null;
@BeforeClass
public static void setup() throws Exception {
ctx = JAXBContext.newInstance("org.jboss.resteasy.test.providers.namespace.mapping");
unmarshaller = ctx.createUnmarshaller();
marshaller = ctx.createMarshaller();
}
/**
* @tpTestDetails Marshalling and unmarshalling test
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testManual() throws Exception {
String marshallError = "Wrong marshalling";
String unmarshallError = "Wrong unmarshaling";
String str = marshall();
Assert.assertThat(marshallError, str, containsString("12121"));
Assert.assertThat(marshallError, str, containsString("\"Test\""));
Assert.assertThat(marshallError, str, containsString("\"Desc\""));
Assert.assertThat(marshallError, str, containsString("\"test\""));
Assert.assertThat(marshallError, str, containsString("\"element2\":\"Test\""));
NamespaceMappingTestExtends val = unmarshall(str);
Assert.assertEquals(unmarshallError, val.getId(), "12121");
Assert.assertEquals(unmarshallError, val.getName(), "Test");
Assert.assertEquals(unmarshallError, val.getDesc(), "Desc");
Assert.assertEquals(unmarshallError, val.getSomeMoreEl(), "test");
Assert.assertEquals(unmarshallError, val.getElement2(), "Test");
}
private String marshall() throws JAXBException {
JAXBContext jc = JAXBContext.newInstance(NamespaceMappingTestExtends.class, NamespaceMappingTestBase.class);
NamespaceMappingTestExtends result = new NamespaceMappingTestExtends();
result.setId("12121");
result.setName("Test");
result.setDesc("Desc");
result.setElement2("Test");
result.setSomeMoreEl("test");
Configuration config = new Configuration();
Map<String, String> xmlToJsonNamespaces = new HashMap<String, String>(1);
xmlToJsonNamespaces.put("http://www.example.org/b/Test", "test");
xmlToJsonNamespaces.put("http://www.example.org/a/TestCanonical", "can");
config.setXmlToJsonNamespaces(xmlToJsonNamespaces);
MappedNamespaceConvention con = new MappedNamespaceConvention(config);
StringWriter writer = new StringWriter();
XMLStreamWriter xmlStreamWriter = new MappedXMLStreamWriter(con, writer);
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(JAXBXmlTypeProvider.wrapInJAXBElement(result, NamespaceMappingTestExtends.class), xmlStreamWriter);
return writer.toString();
}
private NamespaceMappingTestExtends unmarshall(String output) throws Exception {
JAXBContext jc = JAXBContext.newInstance("org.jboss.resteasy.test.providers.namespace.mapping");
Configuration config = new Configuration();
Map<String, String> xmlToJsonNamespaces = new HashMap<String, String>(1);
xmlToJsonNamespaces.put("http://www.example.org/b/Test", "test");
xmlToJsonNamespaces.put("http://www.example.org/a/TestCanonical", "can");
config.setXmlToJsonNamespaces(xmlToJsonNamespaces);
MappedNamespaceConvention con = new MappedNamespaceConvention(config);
XMLStreamReader xmlStreamReader = new MappedXMLStreamReader(new JSONObject(output), con);
Unmarshaller unmarshaller = jc.createUnmarshaller();
@SuppressWarnings(value = "unchecked")
JAXBElement<NamespaceMappingTestExtends> val = (JAXBElement<NamespaceMappingTestExtends>) unmarshaller.unmarshal(xmlStreamReader);
return val.getValue();
}
}