You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by az...@apache.org on 2011/01/06 09:27:31 UTC

svn commit: r1055787 - in /axis/axis2/java/core/trunk/modules/adb: src/org/apache/axis2/databinding/utils/BeanUtil.java test/org/apache/axis2/databinding/utils/BeanUtilTest.java

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"));
+        }
+    }
 }