/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 *******************************************************************************/ package org.ebayopensource.turmeric.runtime.tests.binding.jaxb; import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.util.List; import org.ebayopensource.turmeric.runtime.binding.BindingConstants; import org.ebayopensource.turmeric.runtime.common.binding.DataBindingDesc; import org.ebayopensource.turmeric.runtime.common.binding.Deserializer; import org.ebayopensource.turmeric.runtime.common.exceptions.ServiceException; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.xml.JAXBXMLDeserializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.xml.JAXBXMLSerializerFactory; import org.ebayopensource.turmeric.runtime.common.pipeline.InboundMessage; import org.ebayopensource.turmeric.runtime.common.pipeline.MessageContext; import org.ebayopensource.turmeric.runtime.common.types.SOAConstants; import org.ebayopensource.turmeric.runtime.spf.impl.internal.config.ServiceConfigManager; import org.ebayopensource.turmeric.runtime.tests.common.util.TestUtils; import org.ebayopensource.turmeric.runtime.tests.service1.sample.types1.MyMessage; import org.junit.Before; import org.junit.Test; public class DataValidationTest extends BaseSerDeserTest { public DataValidationTest() { super(); } @Before public void setUpFactoriesAndConfig() throws Exception { ServiceConfigManager.getInstance().setConfigTestCase("config"); m_serFactory = new JAXBXMLSerializerFactory(); m_deserFactory = new JAXBXMLDeserializerFactory(); super.setUp(); } /** * @check Exceptions need to be handled */ @Test public void xMLExtraEndTag() throws Exception { MyMessage msg = TestUtils.createTestMessage(1); DataBindingDesc dbDesc = new DataBindingDesc(BindingConstants.PAYLOAD_XML, SOAConstants.MIME_XML, m_serFactory, m_deserFactory, null, null, JAXBTestHelper.createTypeConvertersByBoundTypeMap(), JAXBTestHelper.createTypeConvertersByValueTypeMap()); JAXBTestBuilder jaxbtest = new JAXBTestBuilder(); jaxbtest.setTestServer(jetty); jaxbtest.setSymmetricDBDesc(dbDesc); jaxbtest.setSerializerFactory(m_serFactory); jaxbtest.setDeserializerFactory(m_deserFactory); String xml1 = jaxbtest.createOnWireStringWithExtraEndTag(msg); logger.debug(xml1); jaxbtest.setPayload(xml1); Deserializer deser = m_deserFactory.getDeserializer(); MessageContext ctx = jaxbtest.createTestMessageContext(); Object msg1 = null; try { msg1 = deser.deserialize((InboundMessage)ctx.getRequestMessage(), MyMessage.class); } catch (Exception e) { if (null != msg1) { ByteArrayOutputStream out = new ByteArrayOutputStream(); JAXBTestHelper.serialize(ctx, out, msg1); String xml2 = out.toString(); logger.debug(xml2); assertNotSame(xml1,xml2); } return; } assertTrue(false); } /** * @check Exceptions need to be handled */ @Test public void xMLMissingEndTag() throws Exception { MyMessage msg = TestUtils.createTestMessage(1); DataBindingDesc dbDesc = new DataBindingDesc(BindingConstants.PAYLOAD_XML, SOAConstants.MIME_XML, m_serFactory, m_deserFactory, null, null, JAXBTestHelper.createTypeConvertersByBoundTypeMap(), JAXBTestHelper.createTypeConvertersByValueTypeMap()); JAXBTestBuilder jaxbtest = new JAXBTestBuilder(); jaxbtest.setTestServer(jetty); jaxbtest.setSymmetricDBDesc(dbDesc); jaxbtest.setSerializerFactory(m_serFactory); jaxbtest.setDeserializerFactory(m_deserFactory); String xml1 = jaxbtest.createOnWireStringWithMissingEndTag(msg); logger.debug(xml1); jaxbtest.setPayload(xml1); Deserializer deser = m_deserFactory.getDeserializer(); MessageContext ctx = jaxbtest.createTestMessageContext(); Object msg1 = null; try { msg1 = deser.deserialize((InboundMessage)ctx.getRequestMessage(), MyMessage.class); fail("unexpected success"); } catch (ServiceException e) { ByteArrayOutputStream out = new ByteArrayOutputStream(); if (null != msg1) { JAXBTestHelper.serialize(ctx, out, msg1); String xml2 = out.toString(); logger.debug(xml2); assertNotSame(xml1,xml2); } List<Throwable> errors = ctx.getWarningList(); assertTrue(errors.size()>0); Throwable t = errors.get(0); ServiceException dve = (ServiceException)t; // Will cause IllegalArgumentException // Error id 1000 belongs to system errors range and should not be used in application code. Please, pick value below 1000 or above 99999 assertEquals(5003L, dve.getErrorMessage().getError().get(0).getErrorId()); dve.localizeMessage("en-US"); logger.debug(dve.toString()); } } }