You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cm...@apache.org on 2013/04/01 22:12:04 UTC
svn commit: r1463278 - in /camel/trunk/components/camel-jaxb/src/test:
java/org/apache/camel/converter/jaxb/ resources/org/apache/camel/converter/
resources/org/apache/camel/converter/jaxb/
Author: cmueller
Date: Mon Apr 1 20:12:04 2013
New Revision: 1463278
URL: http://svn.apache.org/r1463278
Log:
CAMEL-5278: Allow JaxbDataFormat to (un)marshall with strict schema validation
Added:
camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatSchemaValidationSpringTest.java
camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/converter/
camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/converter/jaxb/
camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/converter/jaxb/context.xml
Added: camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatSchemaValidationSpringTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatSchemaValidationSpringTest.java?rev=1463278&view=auto
==============================================================================
--- camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatSchemaValidationSpringTest.java (added)
+++ camel/trunk/components/camel-jaxb/src/test/java/org/apache/camel/converter/jaxb/JaxbDataFormatSchemaValidationSpringTest.java Mon Apr 1 20:12:04 2013
@@ -0,0 +1,131 @@
+/**
+ * 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.converter.jaxb;
+
+import java.io.IOException;
+
+import org.apache.camel.CamelExecutionException;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.jaxb.address.Address;
+import org.apache.camel.converter.jaxb.person.Person;
+import org.apache.camel.test.spring.CamelSpringTestSupport;
+import org.junit.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class JaxbDataFormatSchemaValidationSpringTest extends CamelSpringTestSupport {
+
+ @EndpointInject(uri = "mock:marshall")
+ private MockEndpoint mockMarshall;
+
+ @EndpointInject(uri = "mock:unmarshall")
+ private MockEndpoint mockUnmarshall;
+
+ @Test
+ public void testMarshallSuccess() throws Exception {
+ mockMarshall.expectedMessageCount(1);
+
+ Address address = new Address();
+ address.setAddressLine1("Hauptstr. 1; 01129 Entenhausen");
+ Person person = new Person();
+ person.setFirstName("Christian");
+ person.setLastName("Mueller");
+ person.setAge(Integer.valueOf(36));
+ person.setAddress(address);
+
+ template.sendBody("direct:marshall", person);
+
+ assertMockEndpointsSatisfied();
+
+ String payload = mockMarshall.getExchanges().get(0).getIn().getBody(String.class);
+ log.info(payload);
+
+ assertTrue(payload.startsWith("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"));
+ assertTrue(payload.contains("<person xmlns=\"person.jaxb.converter.camel.apache.org\" xmlns:ns2=\"address.jaxb.converter.camel.apache.org\">"));
+ assertTrue(payload.contains("<firstName>Christian</firstName>"));
+ assertTrue(payload.contains("<lastName>Mueller</lastName>"));
+ assertTrue(payload.contains("<age>36</age>"));
+ assertTrue(payload.contains("<address>"));
+ assertTrue(payload.contains("<ns2:addressLine1>Hauptstr. 1; 01129 Entenhausen</ns2:addressLine1>"));
+ assertTrue(payload.contains("</address>"));
+ assertTrue(payload.contains("</person>"));
+ }
+
+ @Test
+ public void testMarshallWithValidationException() throws Exception {
+ try {
+ template.sendBody("direct:marshall", new Person());
+ fail("CamelExecutionException expected");
+ } catch (CamelExecutionException e) {
+ Throwable cause = e.getCause();
+ assertIsInstanceOf(IOException.class, cause);
+ assertTrue(cause.getMessage().contains("javax.xml.bind.MarshalException"));
+ assertTrue(cause.getMessage().contains("org.xml.sax.SAXParseException"));
+ assertTrue(cause.getMessage().contains("Invalid content was found"));
+ }
+ }
+
+ @Test
+ public void testUnmarshallSuccess() throws Exception {
+ mockUnmarshall.expectedMessageCount(1);
+
+ String xml = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>")
+ .append("<person xmlns=\"person.jaxb.converter.camel.apache.org\" xmlns:ns2=\"address.jaxb.converter.camel.apache.org\">")
+ .append("<firstName>Christian</firstName>")
+ .append("<lastName>Mueller</lastName>")
+ .append("<age>36</age>")
+ .append("<address>")
+ .append("<ns2:addressLine1>Hauptstr. 1; 01129 Entenhausen</ns2:addressLine1>")
+ .append("</address>")
+ .append("</person>")
+ .toString();
+ template.sendBody("direct:unmarshall", xml);
+
+ assertMockEndpointsSatisfied();
+
+ Person person = mockUnmarshall.getExchanges().get(0).getIn().getBody(Person.class);
+
+ assertEquals("Christian", person.getFirstName());
+ assertEquals("Mueller", person.getLastName());
+ assertEquals(Integer.valueOf(36), person.getAge());
+ }
+
+ @Test
+ public void testUnmarshallWithValidationException() throws Exception {
+ String xml = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>")
+ .append("<person xmlns=\"person.jaxb.converter.camel.apache.org\" />")
+ .toString();
+
+ try {
+ template.sendBody("direct:unmarshall", xml);
+ fail("CamelExecutionException expected");
+ } catch (CamelExecutionException e) {
+ Throwable cause = e.getCause();
+ assertIsInstanceOf(IOException.class, cause);
+ assertTrue(cause.getMessage().contains("javax.xml.bind.UnmarshalException"));
+ assertTrue(cause.getMessage().contains("org.xml.sax.SAXParseException"));
+ assertTrue(cause.getMessage().contains("The content of element 'person' is not complete"));
+ }
+ }
+
+ @Override
+ protected AbstractApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext("org/apache/camel/converter/jaxb/context.xml");
+ }
+}
\ No newline at end of file
Added: camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/converter/jaxb/context.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/converter/jaxb/context.xml?rev=1463278&view=auto
==============================================================================
--- camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/converter/jaxb/context.xml (added)
+++ camel/trunk/components/camel-jaxb/src/test/resources/org/apache/camel/converter/jaxb/context.xml Mon Apr 1 20:12:04 2013
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:marshall" />
+ <marshal>
+ <jaxb contextPath="org.apache.camel.converter.jaxb.person" schema="classpath:person.xsd,classpath:address.xsd" />
+ </marshal>
+ <to uri="mock:marshall" />
+ </route>
+
+ <route>
+ <from uri="direct:unmarshall" />
+ <unmarshal>
+ <jaxb contextPath="org.apache.camel.converter.jaxb.person" schema="classpath:person.xsd,classpath:address.xsd" />
+ </unmarshal>
+ <to uri="mock:unmarshall" />
+ </route>
+ </camelContext>
+</beans>
\ No newline at end of file