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