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