Hi David,

Thanks for investigation in the problem and sharing the solution.
According to your description I created issue OLINGO-455 
(https://issues.apache.org/jira/browse/OLINGO-455).
I think it will be discussed within the community but IMHO it is a best 
practice to return empty Lists instead of NULL values and hence the current 
behaviour should be changed.

Kind regards,
Michael

From: David Ventimiglia <[email protected]<mailto:[email protected]>>
Reply-To: "[email protected]<mailto:[email protected]>" 
<[email protected]<mailto:[email protected]>>
Date: Tuesday 7 October 2014 14:31
To: "[email protected]<mailto:[email protected]>" 
<[email protected]<mailto:[email protected]>>
Subject: Re: NPE when adding more then one EntityContainer to a Schema?

Hi,

OK, I fixed my problem.

First, the `catch (Exception e)' is in 
org.apache.olingo.odata2.core.ep.AtomEntityProvider.writeServiceDocument line 
155.  Adding in e.printStackTrace(System.err), I see the actual NPE is thrown 
from 
org.apache.olingo.odata2.core.edm.provider.EdmServiceMetadataImplProv.getEntitySetInfos
 line 152.  If you don't call setEntitySets on your EntityContainer then 
getEntitySets returns Null, in which case trying to get a java.util.Iterator 
throws an NPE.  Guessing that something similar might apply for AssociationSets 
and FunctionImports, I called the three methods setXXXSets (for entities, 
associations, and functions) passing an empty ArrayList in each time, which 
banished the NPE.

You might consider having getEntitySets return an empty List when it hasn't 
been set or has been set with a Null, in order to protect callers.  In any 
case, I'm good!

Cheers,
David

On Tue, Oct 7, 2014 at 4:54 AM, David Ventimiglia 
<[email protected]<mailto:[email protected]>> wrote:
Hi,

Yes, I've confirmed that one only has to create a new, empty EntityContainer 
within MyEdmProvider (as illustrated 
here<http://olingo.apache.org/doc/odata2/tutorials/basicread.html>), give it a 
name (say, "foo") and add it to the Schema.  Do that, and requesting the Atom 
Service document provokes a NullPointerException.  The actual response is:

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";>
<code/>
<message xml:lang="en-US">
An exception of type 'NullPointerException' occurred.
</message>
</error>

Groping around in the source code, I swear I thought I found a place where the 
Service document-handling code where `Exception e' is caught and an 
ODataException is rethrown with the EXCEPTION_OCCURRED message, but I can't for 
the life of me find it again.  I'll keep looking.  Thanks!

Best,
David

On Mon, Oct 6, 2014 at 7:59 PM, David Ventimiglia 
<[email protected]<mailto:[email protected]>> wrote:
Hi,

I'm working toward my particular goals by slowly adapting some of the sample 
code that's provided with Olingo Java v2.  In particular, I'm starting with the 
sample application, whose MyEdmProvider has entities related to cars 
(manufacturer, etc.).  I notice that that sample EdmProvider only creates one 
EntityContainer (all the other things, EntitySets, AssociationSets, etc., are 
added to it), which is added to the Schema.  I tried creating another 
EntityContainer and adding it to the List<EntityContainer> that is passed into 
Schema.setEntityContainers.  When I do this, evidently a NullPointerException 
is thrown somewhere when I try to access the Atom Service document.  The Odata 
$metadata document was provided without issue, however, with all the 
EntityContainers that I expected.  When I try the Atom Service document, 
however, the content has a <message> tag with the phrase "A 
NullPointerException was thrown" or something like that, yet nothing appears in 
the server log.  I'll try to cook up a representative example, but would anyone 
know why this is occurring?  Thanks!

Best,
David


Reply via email to