Author: rwesten
Date: Tue Oct 15 13:32:46 2013
New Revision: 1532330
URL: http://svn.apache.org/r1532330
Log:
As STANBOL-1132 introduced new ValueTypeParser there is now the possibility the
the ServiceLoader encounters NoClassDefFoundError when loading ValueTypeParser
services. This e.g. happens if one uses version 0.11.0-SNAPSHOT of the nlp-json
module with the 0.10.0 version of the nlp. To avoid that such cases do cause
the initialisation to fail the code now catches such exceptions. This allows to
write/parse AnalysedText instances that do not use Values of the failing types.
Modified:
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
Modified:
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java?rev=1532330&r1=1532329&r2=1532330&view=diff
==============================================================================
---
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
(original)
+++
stanbol/trunk/enhancer/generic/nlp-json/src/main/java/org/apache/stanbol/enhancer/nlp/json/valuetype/ValueTypeParserRegistry.java
Tue Oct 15 13:32:46 2013
@@ -134,13 +134,26 @@ public class ValueTypeParserRegistry {
valueTypeParsers = new HashMap<Class<?>,ValueTypeParser<?>>();
ServiceLoader<ValueTypeParser> loader =
ServiceLoader.load(ValueTypeParser.class);
for(Iterator<ValueTypeParser> it =
loader.iterator();it.hasNext();){
- ValueTypeParser vts = it.next();
- ValueTypeParser<?> serializer =
valueTypeParsers.get(vts.getType());
- if(serializer != null){
- log.warn("Multiple Parsers for type {} (keep: {},
ignoreing: {}",
- new Object[]{vts.getType(),serializer,vts});
- } else {
- valueTypeParsers.put(vts.getType(), vts);
+ try {
+ ValueTypeParser vts = it.next();
+ ValueTypeParser<?> serializer =
valueTypeParsers.get(vts.getType());
+ if(serializer != null){
+ log.warn("Multiple Parsers for type {} (keep: {},
ignoreing: {}",
+ new Object[]{vts.getType(),serializer,vts});
+ } else {
+ valueTypeParsers.put(vts.getType(), vts);
+ }
+ } catch (NoClassDefFoundError e) {
+ //ignore services that can not be loaded
+ //e.g. when mixing different version of the
stanbol.enhancer.nlp
+ //and the stanbol.enhancer.nlp-json module
+ //It is better to throw an exception if an Node for
the failed
+ //ValueTypeParser appears in the JSON as when loading
all
+ //registered services
+ log.warn("Unable to load a ValueTypeParser service
because class '"
+ +e.getMessage()+" could not be loaded! This may
happen if the "
+ + "classpath mixes different versions of
o.a.stanbol.enhancer.nlp* "
+ + "modules!");
}
}
}