[
https://issues.apache.org/jira/browse/JCR-1212?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
David Rauschenbach updated JCR-1212:
------------------------------------
Description:
Jeceira throws a PathNotFoundException when an SPI2JCR-wrapped Jeceira
repository gets invoked with the SPI getPropertyInfo, specifying an optional
property that does not exist for a given node instance.
JCR2SPI only expects an ItemNotFoundException to be thrown in such a case,
which prevents Node.hasProperty(String) from returning true/false, and instead
results in a RepositoryException being thrown, which in effect is an
interoperability issue.
JCR2SPI compatibility with Jeceira-based repositories would be significantly
improved if the code in NodeEntryImpl.java:loadPropertyEntry(PropertyId) caught
not only ItemNotFoundException, but also PathNotFoundException, before
returning null in both cases.
Proposed change to NodeEntryImpl.java:
private PropertyEntry loadPropertyEntry(PropertyId childId) throws
RepositoryException {
try {
PropertyState state =
factory.getItemStateFactory().createDeepPropertyState(childId, this);
return (PropertyEntry) state.getHierarchyEntry();
} catch (ItemNotFoundException e) {
return null;
} catch (PathNotFoundException e) { <-- new
return null; <-- new
}
}
was:
Jeceira throws a PropertyNotFoundException when an SPI2JCR-wrapped Jeceira
repository gets invoked with the SPI getPropertyInfo, specifying an optional
property that does not exist for a given node instance.
JCR2SPI only expects an ItemNotFoundException to be thrown in such a case,
which prevents Node.hasProperty(String) from returning true/false, and instead
results in a RepositoryException being thrown, which in effect is an
interoperability issue.
JCR2SPI compatibility with Jeceira-based repositories would be significantly
improved if the code in NodeEntryImpl.java:loadPropertyEntry(PropertyId) caught
not only ItemNotFoundException, but also PathNotFoundException, before
returning null in both cases.
Proposed change to NodeEntryImpl.java:
private PropertyEntry loadPropertyEntry(PropertyId childId) throws
RepositoryException {
try {
PropertyState state =
factory.getItemStateFactory().createDeepPropertyState(childId, this);
return (PropertyEntry) state.getHierarchyEntry();
} catch (ItemNotFoundException e) {
return null;
} catch (PathNotFoundException e) { <-- new
return null; <-- new
}
}
I've corrected the typo where I mentioned a PropertyNotFoundException, which
should have read PathNotFoundException. OK, I'll put together a test case.
> JCR2SPI Node.hasProperty(String) "optional property incompatibility" with
> Jeceira
> ---------------------------------------------------------------------------------
>
> Key: JCR-1212
> URL: https://issues.apache.org/jira/browse/JCR-1212
> Project: Jackrabbit
> Issue Type: Improvement
> Components: SPI
> Affects Versions: 1.4
> Environment: 1.4-SNAPSHOT
> Reporter: David Rauschenbach
> Priority: Minor
>
> Jeceira throws a PathNotFoundException when an SPI2JCR-wrapped Jeceira
> repository gets invoked with the SPI getPropertyInfo, specifying an optional
> property that does not exist for a given node instance.
> JCR2SPI only expects an ItemNotFoundException to be thrown in such a case,
> which prevents Node.hasProperty(String) from returning true/false, and
> instead results in a RepositoryException being thrown, which in effect is an
> interoperability issue.
> JCR2SPI compatibility with Jeceira-based repositories would be significantly
> improved if the code in NodeEntryImpl.java:loadPropertyEntry(PropertyId)
> caught not only ItemNotFoundException, but also PathNotFoundException, before
> returning null in both cases.
> Proposed change to NodeEntryImpl.java:
> private PropertyEntry loadPropertyEntry(PropertyId childId) throws
> RepositoryException {
> try {
> PropertyState state =
> factory.getItemStateFactory().createDeepPropertyState(childId, this);
> return (PropertyEntry) state.getHierarchyEntry();
> } catch (ItemNotFoundException e) {
> return null;
> } catch (PathNotFoundException e) { <-- new
> return null; <-- new
> }
> }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.