Author: azeez Date: Thu Jan 6 08:27:31 2011 New Revision: 1055787 URL: http://svn.apache.org/viewvc?rev=1055787&view=rev Log: Applying patch provided by Pétur Runólfsson for AXIS2-4398
Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java?rev=1055787&r1=1055786&r2=1055787&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java (original) +++ axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java Thu Jan 6 08:27:31 2011 @@ -335,17 +335,19 @@ public class BeanUtil { // to get the type table. if (messageContext != null) { AxisService axisService = messageContext.getAxisService(); - QName typeQName = beanElement.resolveQName(instanceTypeName); - TypeTable typeTable = axisService.getTypeTable(); - String className = typeTable.getClassNameForQName(typeQName); - if (className != null) { - try { - beanClass = Loader.loadClass(beanClass.getClassLoader(), className); - } catch (ClassNotFoundException ce) { - throw AxisFault.makeFault(ce); + if (axisService != null) { + QName typeQName = beanElement.resolveQName(instanceTypeName); + TypeTable typeTable = axisService.getTypeTable(); + String className = typeTable.getClassNameForQName(typeQName); + if (className != null) { + try { + beanClass = Loader.loadClass(beanClass.getClassLoader(), className); + } catch (ClassNotFoundException ce) { + throw AxisFault.makeFault(ce); + } + } else { + throw new AxisFault("Unknow type " + typeQName); } - } else { - throw new AxisFault("Unknow type " + typeQName); } } } @@ -391,7 +393,7 @@ public class BeanUtil { } } else { if (SimpleTypeMapper.isSimpleType(beanClass)) { - return SimpleTypeMapper.getSimpleTypeObject(beanClass, beanElement); + return getSimpleTypeObjectChecked(beanClass, beanElement); } else if ("java.lang.Object".equals(beanClass.getName())) { return beanElement.getFirstOMChild(); } @@ -808,7 +810,7 @@ public class BeanUtil { String value = omElement.getText(); return Base64.decode(value); } else { - return SimpleTypeMapper.getSimpleTypeObject(classType, omElement); + return getSimpleTypeObjectChecked(classType, omElement); } } else if (SimpleTypeMapper.isCollection(classType)) { if (generictype != null && (generictype instanceof ParameterizedType)) { @@ -965,4 +967,19 @@ public class BeanUtil { } } + private static Object getSimpleTypeObjectChecked(Class classType, + OMElement omElement) throws AxisFault { + try { + return SimpleTypeMapper.getSimpleTypeObject(classType, omElement); + } catch (NumberFormatException e) { + MessageContext msgContext = MessageContext.getCurrentMessageContext(); + QName faultCode = msgContext != null ? + msgContext.getEnvelope().getVersion().getSenderFaultCode() : + null; + + throw new AxisFault("Invalid value \"" + omElement.getText() + "\" for element " + + omElement.getLocalName(), faultCode, e); + } + } + } Modified: axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java?rev=1055787&r1=1055786&r2=1055787&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java (original) +++ axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java Thu Jan 6 08:27:31 2011 @@ -20,6 +20,9 @@ package org.apache.axis2.databinding.utils; import org.apache.axiom.om.*; +import org.apache.axiom.soap.SOAPFactory; +import org.apache.axis2.AxisFault; +import org.apache.axis2.context.MessageContext; import org.apache.axis2.description.java2wsdl.TypeTable; import org.apache.axis2.engine.DefaultObjectSupplier; import org.apache.axis2.engine.ObjectSupplier; @@ -49,7 +52,7 @@ public class BeanUtilTest extends TestCa private ObjectSupplier objectSupplier; - private OMFactory omFactory; + private SOAPFactory omFactory; private OMElement omElement; private OMNamespace xsiNamespace; @@ -57,11 +60,21 @@ public class BeanUtilTest extends TestCa protected void setUp() throws Exception { objectSupplier = new DefaultObjectSupplier(); - omFactory = OMAbstractFactory.getOMFactory(); + omFactory = OMAbstractFactory.getSOAP12Factory(); xsiNamespace = omFactory.createOMNamespace(Constants.XSI_NAMESPACE, "xsi"); omElement = omFactory.createOMElement(new QName("hello")); + + MessageContext msgContext = new MessageContext(); + msgContext.setEnvelope(omFactory.createSOAPEnvelope()); + + MessageContext.setCurrentMessageContext(msgContext); } - + + @Override + protected void tearDown() throws Exception { + MessageContext.setCurrentMessageContext(null); + } + public void testProcessObjectAsSimpleType() throws Exception { omElement.setText("World"); @@ -147,4 +160,30 @@ public class BeanUtilTest extends TestCa assertTrue(text.isOptimized()); assertSame(dh, text.getDataHandler()); } + + public void testProcessObjectWithWrongType() throws Exception { + omElement.setLocalName("Queensland"); + omElement.setText("Brisbane"); + + try { + BeanUtil.processObject(omElement, int.class, new MultirefHelper(omElement), true, objectSupplier, null); + } catch (AxisFault e) { + assertEquals(org.apache.axis2.Constants.FAULT_SOAP12_SENDER, e.getFaultCode()); + assertTrue(e.getMessage().contains("Queensland")); + assertTrue(e.getMessage().contains("Brisbane")); + } + } + + public void testDeserializeWithWrongType() throws Exception { + omElement.setLocalName("Queensland"); + omElement.setText("Brisbane"); + + try { + BeanUtil.deserialize(int.class, omElement, objectSupplier, "Queensland"); + } catch (AxisFault e) { + assertEquals(org.apache.axis2.Constants.FAULT_SOAP12_SENDER, e.getFaultCode()); + assertTrue(e.getMessage().contains("Queensland")); + assertTrue(e.getMessage().contains("Brisbane")); + } + } }