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 "Hudson (JIRA)" <ji...@apache.org> on 2016/04/18 23:08:25 UTC

[jira] [Commented] (AXIS2-5751) Databinding- BeanUtil.getPullParser() throws NullPointerException

    [ https://issues.apache.org/jira/browse/AXIS2-5751?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15246531#comment-15246531 ] 

Hudson commented on AXIS2-5751:
-------------------------------

SUCCESS: Integrated in Axis2 #3441 (See [https://builds.apache.org/job/Axis2/3441/])
AXIS2-5751: Correctly handle anyType (Object) properties with null values. (veithen: rev 1739815)
* axis2/modules/adb/pom.xml
* axis2/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
* axis2/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
* axis2/modules/adb/test/org/apache/axis2/databinding/utils/ComplexTypeWithAnyTypeElement.java


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