You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Marinó A. Jónsson (JIRA)" <ji...@apache.org> on 2010/03/05 13:17:27 UTC

[jira] Created: (CXF-2695) NullPointerException when reading a soap encoded struct with a nested element that's nil

NullPointerException when reading a soap encoded struct with a nested element that's nil
----------------------------------------------------------------------------------------

                 Key: CXF-2695
                 URL: https://issues.apache.org/jira/browse/CXF-2695
             Project: CXF
          Issue Type: Bug
          Components: Aegis Databinding
    Affects Versions: 2.2.6
            Reporter: Marinó A. Jónsson


When reading a simple struct that has a nested (unqualified) element set to nil a NullPointerException is thrown:
{code}
java.lang.NullPointerException
	at org.apache.cxf.aegis.type.basic.BeanTypeInfo.isNillable(BeanTypeInfo.java:384)
	at org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:165)
{code}

This should be easily replicated by using the following xml for the StructTypeTest.testSimpleStruct() test:

{code}
<b:shipping xmlns:b="urn:Bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <street>1234 Riverside Drive</street>
    <city>Gainesville</city>
    <state>FL</state>
    <zip xsi:nil="true"/>
</b:shipping>
{code}

Apparently the problem stems from the fact that when the element is nil it's handled without involving the StructType (which takes care of "qualifying" the element name in other cases) - the unqualified name of the element is sent to the BeanTypeInfo.isNillable() method, which fails to find a Type for the name as a result.

I'm not sure how to solve this in a "clean" way - maybe extracting the "else" block that handles nil elements in BeanType.readObject to a seperate overridable method thereby giving StructType a chance to qualify the name before it's sent to the BeanTypeInfo.isNillable() method?


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Issue Comment Edited: (CXF-2695) NullPointerException when reading a soap encoded struct with a nested element that's nil

Posted by "Daniel Kulp (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CXF-2695?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12854782#action_12854782 ] 

Daniel Kulp edited comment on CXF-2695 at 4/8/10 3:07 AM:
----------------------------------------------------------

Soap-encoding pretty much always allows xsi:nil on pretty much any element.   The schema is kind of just a hint.   Thus, in this case, it's easiest to just do something like:

BeanType:
{code}
 if (!alwaysAllowNillables() && !propertyTypeInfo.isNillable(name)) {
....
    protected boolean alwaysAllowNillables() {
        return false;
    }
{code}

and in StructType, override it to return true.

      was (Author: dkulp):
    
Soap-encoding pretty much always allows xsi:nil on pretty much any element.   The schema is kind of just a hint.   Thus, in this case, it's easiest to just do something like:

BeanType:
{code}
 if (!alwaysAllowNillables() && !propertyTypeInfo.isNillable(name)) {
....
    protected boolean alwaysAllowNillables() {
        return false;
    }
{code}

and in StructType, override it to return false.
  
> NullPointerException when reading a soap encoded struct with a nested element that's nil
> ----------------------------------------------------------------------------------------
>
>                 Key: CXF-2695
>                 URL: https://issues.apache.org/jira/browse/CXF-2695
>             Project: CXF
>          Issue Type: Bug
>          Components: Aegis Databinding
>    Affects Versions: 2.2.6
>            Reporter: Marinó A. Jónsson
>
> When reading a simple struct that has a nested (unqualified) element set to nil a NullPointerException is thrown:
> {code}
> java.lang.NullPointerException
> 	at org.apache.cxf.aegis.type.basic.BeanTypeInfo.isNillable(BeanTypeInfo.java:384)
> 	at org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:165)
> {code}
> This should be easily replicated by using the following xml for the StructTypeTest.testSimpleStruct() test:
> {code}
> <b:shipping xmlns:b="urn:Bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>     <street>1234 Riverside Drive</street>
>     <city>Gainesville</city>
>     <state>FL</state>
>     <zip xsi:nil="true"/>
> </b:shipping>
> {code}
> Apparently the problem stems from the fact that when the element is nil it's handled without involving the StructType (which takes care of "qualifying" the element name in other cases) - the unqualified name of the element is sent to the BeanTypeInfo.isNillable() method, which fails to find a Type for the name as a result.
> I'm not sure how to solve this in a "clean" way - maybe extracting the "else" block that handles nil elements in BeanType.readObject to a seperate overridable method thereby giving StructType a chance to qualify the name before it's sent to the BeanTypeInfo.isNillable() method?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (CXF-2695) NullPointerException when reading a soap encoded struct with a nested element that's nil

Posted by "Daniel Kulp (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CXF-2695?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Daniel Kulp resolved CXF-2695.
------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2.8
         Assignee: Daniel Kulp

> NullPointerException when reading a soap encoded struct with a nested element that's nil
> ----------------------------------------------------------------------------------------
>
>                 Key: CXF-2695
>                 URL: https://issues.apache.org/jira/browse/CXF-2695
>             Project: CXF
>          Issue Type: Bug
>          Components: Aegis Databinding
>    Affects Versions: 2.2.6
>            Reporter: Marinó A. Jónsson
>            Assignee: Daniel Kulp
>             Fix For: 2.2.8
>
>
> When reading a simple struct that has a nested (unqualified) element set to nil a NullPointerException is thrown:
> {code}
> java.lang.NullPointerException
> 	at org.apache.cxf.aegis.type.basic.BeanTypeInfo.isNillable(BeanTypeInfo.java:384)
> 	at org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:165)
> {code}
> This should be easily replicated by using the following xml for the StructTypeTest.testSimpleStruct() test:
> {code}
> <b:shipping xmlns:b="urn:Bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>     <street>1234 Riverside Drive</street>
>     <city>Gainesville</city>
>     <state>FL</state>
>     <zip xsi:nil="true"/>
> </b:shipping>
> {code}
> Apparently the problem stems from the fact that when the element is nil it's handled without involving the StructType (which takes care of "qualifying" the element name in other cases) - the unqualified name of the element is sent to the BeanTypeInfo.isNillable() method, which fails to find a Type for the name as a result.
> I'm not sure how to solve this in a "clean" way - maybe extracting the "else" block that handles nil elements in BeanType.readObject to a seperate overridable method thereby giving StructType a chance to qualify the name before it's sent to the BeanTypeInfo.isNillable() method?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (CXF-2695) NullPointerException when reading a soap encoded struct with a nested element that's nil

Posted by "Daniel Kulp (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/CXF-2695?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12854782#action_12854782 ] 

Daniel Kulp commented on CXF-2695:
----------------------------------


Soap-encoding pretty much always allows xsi:nil on pretty much any element.   The schema is kind of just a hint.   Thus, in this case, it's easiest to just do something like:

BeanType:
{code}
 if (!alwaysAllowNillables() && !propertyTypeInfo.isNillable(name)) {
....
    protected boolean alwaysAllowNillables() {
        return false;
    }
{code}

and in StructType, override it to return false.

> NullPointerException when reading a soap encoded struct with a nested element that's nil
> ----------------------------------------------------------------------------------------
>
>                 Key: CXF-2695
>                 URL: https://issues.apache.org/jira/browse/CXF-2695
>             Project: CXF
>          Issue Type: Bug
>          Components: Aegis Databinding
>    Affects Versions: 2.2.6
>            Reporter: Marinó A. Jónsson
>
> When reading a simple struct that has a nested (unqualified) element set to nil a NullPointerException is thrown:
> {code}
> java.lang.NullPointerException
> 	at org.apache.cxf.aegis.type.basic.BeanTypeInfo.isNillable(BeanTypeInfo.java:384)
> 	at org.apache.cxf.aegis.type.basic.BeanType.readObject(BeanType.java:165)
> {code}
> This should be easily replicated by using the following xml for the StructTypeTest.testSimpleStruct() test:
> {code}
> <b:shipping xmlns:b="urn:Bean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>     <street>1234 Riverside Drive</street>
>     <city>Gainesville</city>
>     <state>FL</state>
>     <zip xsi:nil="true"/>
> </b:shipping>
> {code}
> Apparently the problem stems from the fact that when the element is nil it's handled without involving the StructType (which takes care of "qualifying" the element name in other cases) - the unqualified name of the element is sent to the BeanTypeInfo.isNillable() method, which fails to find a Type for the name as a result.
> I'm not sure how to solve this in a "clean" way - maybe extracting the "else" block that handles nil elements in BeanType.readObject to a seperate overridable method thereby giving StructType a chance to qualify the name before it's sent to the BeanTypeInfo.isNillable() method?

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.