You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Andreas Veithen (JIRA)" <ji...@apache.org> on 2016/04/19 00:39:25 UTC
[jira] [Resolved] (AXIS2-5751) Databinding-
BeanUtil.getPullParser() throws NullPointerException
[ https://issues.apache.org/jira/browse/AXIS2-5751?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andreas Veithen resolved AXIS2-5751.
------------------------------------
Resolution: Fixed
Fix Version/s: 1.7.2
> Databinding- BeanUtil.getPullParser() throws NullPointerException
> -----------------------------------------------------------------
>
> Key: AXIS2-5751
> URL: https://issues.apache.org/jira/browse/AXIS2-5751
> Project: Axis2
> Issue Type: Bug
> Components: adb
> Affects Versions: 1.7.1
> Reporter: Vasile Bucur
> Fix For: 1.7.2
>
> Attachments: AXIS2-5751-ServiceTest.7z, stacktrace.txt, stacktrace_array_tc2.txt
>
>
> Test Case 1 (stacktrace.txt):
> My service operation returns an Response Object, having a header and content. In Header i have in CustomError (see code below) object that describes application errors and in content i have the payload.
> In my specific case i'm calling the service operation which returns an Response object having in header a custom error without details. This causes the operation to fail because the pull parser wants to instantiate the result of the getter method witch is a null java.lang.Object.
> Test code:
> {code:java}
> public class CustomError {
> private Error code;
> private Object detail;
> // constructors
> // getters and setters
> }
> ..
> new CustomError(code41); // detail is null
> {code}
> in adb:
> {code:title=BeanUtil.java}
> Object value;
> if (readMethod != null) {
> readMethod.setAccessible(true);
> value = readMethod.invoke(beanObject); // value is null
> } else {
> throw new AxisFault("Property '" + propertyName + "' in bean class '"
> + beanClass.getName() + "'is not readable.");
> }
> ......
> ......
> }else {
> addTypeQname(elemntNameSpace, propertyQnameValueList, property,
> beanName, processingDocLitBare);
> if (Object.class.equals(ptype)) {
> //this is required to match this element prefix as
> //root element's prefix.
> QName qNamefortheType = (QName) typeTable
> .getComplexSchemaMap().get(
> getClassName(beanClass));
> OMFactory fac = OMAbstractFactory.getOMFactory();
> QName elementName;
> OMElement element;
> if (elemntNameSpace != null) {
> elementName = new QName(
> elemntNameSpace.getNamespaceURI(),
> property.getName(),
> qNamefortheType.getPrefix());
> } else {
> elementName = new QName(property.getName());
> }
>
> if(SimpleTypeMapper.isSimpleType(value)){
> element = fac.createOMElement(elementName);
> element.addChild(fac.createOMText(SimpleTypeMapper
> .getStringValue(value)));
> }else{
> // value is null !!!
> XMLStreamReader xr = BeanUtil.getPullParser(value,
> elementName, typeTable, qualified, false);
> {code}
> {code:title=BeanUtil.java}
> public static XMLStreamReader getPullParser(Object beanObject,
> QName beanName,
> TypeTable typeTable,
> boolean qualified,
> boolean processingDocLitBare) {
> Class beanClass = beanObject.getClass(); // NullPointerException
> ..............
> {code}
> Testcase 2 (stacktrace_array_tc2.txt)
> return of the operation is also a complex structure but now inside the returned object at a deeper level there is a Array List of String arrays. Here another problem because the BeanUtil tries to get the package of the *class [Ljava.lang.Object;* meaning the arrays of object which is NULL resulting to NullPointerException!
> {code:title=BeanUtil.java}
> if (typeTable != null && qualified) {
> QName qNamefortheType = typeTable.getQNamefortheType(beanClass.getName());
> if (qNamefortheType == null) {
> // beanClass.getPackage() is null for class [Ljava.lang.Object; (Object[].class)
> qNamefortheType = typeTable.getQNamefortheType(beanClass.getPackage().getName());
> }
> if (qNamefortheType == null) {
> throw new AxisFault("Mapping qname not fond for the package: " +
> beanObject.getClass().getPackage().getName());
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscribe@axis.apache.org
For additional commands, e-mail: java-dev-help@axis.apache.org