axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Vasile Bucur (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (AXIS2-5751) Databinding- BeanUtil.getPullParser() throws NullPointerException
Date Tue, 29 Mar 2016 14:27:25 GMT

     [ https://issues.apache.org/jira/browse/AXIS2-5751?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Vasile Bucur updated AXIS2-5751:
--------------------------------
    Description: 
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}

  was:
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

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}


> 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
>         Attachments: 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


Mime
View raw message