ConfigurationBeanLoader will ignore unexpected properties on instances.
If no method has been annotated to accept that property, don't complain, don't throw an exception, just continue.
This commit is contained in:
parent
9e3ac4fb54
commit
8fbfc6d4ff
2 changed files with 27 additions and 36 deletions
|
@ -70,7 +70,8 @@ public class WrappedInstance<T> {
|
|||
*/
|
||||
public void checkCardinality(Set<PropertyStatement> propertyStatements)
|
||||
throws CardinalityException {
|
||||
Map<String, Integer> statementCounts = countPropertyStatementsByPredicateUri(propertyStatements);
|
||||
Map<String, Integer> statementCounts = countPropertyStatementsByPredicateUri(
|
||||
propertyStatements);
|
||||
for (PropertyMethod pm : propertyMethods.values()) {
|
||||
Integer c = statementCounts.get(pm.getPropertyUri());
|
||||
int count = (c == null) ? 0 : c;
|
||||
|
@ -109,12 +110,11 @@ public class WrappedInstance<T> {
|
|||
*/
|
||||
public void setProperties(ConfigurationBeanLoader loader,
|
||||
Collection<PropertyStatement> propertyStatements)
|
||||
throws PropertyTypeException, NoSuchPropertyMethodException,
|
||||
ConfigurationBeanLoaderException {
|
||||
throws PropertyTypeException, ConfigurationBeanLoaderException {
|
||||
for (PropertyStatement ps : propertyStatements) {
|
||||
PropertyMethod pm = propertyMethods.get(ps.getPredicateUri());
|
||||
if (pm == null) {
|
||||
throw new NoSuchPropertyMethodException(ps);
|
||||
continue; // No method for this property? Ignore it.
|
||||
}
|
||||
pm.confirmCompatible(ps);
|
||||
|
||||
|
@ -141,7 +141,8 @@ public class WrappedInstance<T> {
|
|||
} catch (IllegalAccessException | IllegalArgumentException
|
||||
| InvocationTargetException e) {
|
||||
throw new ValidationFailedException(
|
||||
"Error executing validation method '" + method + "'", e);
|
||||
"Error executing validation method '" + method + "'",
|
||||
e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -165,12 +166,6 @@ public class WrappedInstance<T> {
|
|||
}
|
||||
}
|
||||
|
||||
public static class NoSuchPropertyMethodException extends Exception {
|
||||
public NoSuchPropertyMethodException(PropertyStatement ps) {
|
||||
super("No property method for '" + ps.getPredicateUri() + "'");
|
||||
}
|
||||
}
|
||||
|
||||
public static class CardinalityException extends Exception {
|
||||
public CardinalityException(String message) {
|
||||
super(message);
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
package edu.cornell.mannlib.vitro.webapp.utils.configuration;
|
||||
|
||||
import static org.apache.jena.datatypes.xsd.XSDDatatype.XSDfloat;
|
||||
import static org.apache.jena.datatypes.xsd.XSDDatatype.XSDstring;
|
||||
import static edu.cornell.mannlib.vitro.testing.ModelUtilitiesTestHelper.dataProperty;
|
||||
import static edu.cornell.mannlib.vitro.testing.ModelUtilitiesTestHelper.objectProperty;
|
||||
import static edu.cornell.mannlib.vitro.testing.ModelUtilitiesTestHelper.typeStatement;
|
||||
import static edu.cornell.mannlib.vitro.webapp.utils.configuration.ConfigurationBeanLoader.toJavaUri;
|
||||
import static org.apache.jena.datatypes.xsd.XSDDatatype.XSDfloat;
|
||||
import static org.apache.jena.datatypes.xsd.XSDDatatype.XSDstring;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
@ -19,18 +19,16 @@ import java.util.Collections;
|
|||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.apache.jena.rdf.model.Model;
|
||||
import org.apache.jena.rdf.model.Statement;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import edu.cornell.mannlib.vitro.webapp.modelaccess.ContextModelAccess;
|
||||
import edu.cornell.mannlib.vitro.webapp.modelaccess.RequestModelAccess;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.configuration.ConfigurationRdfParser.InvalidConfigurationRdfException;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.configuration.InstanceWrapper.InstanceWrapperException;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.configuration.PropertyType.PropertyTypeException;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.configuration.WrappedInstance.NoSuchPropertyMethodException;
|
||||
import edu.cornell.mannlib.vitro.webapp.utils.configuration.WrappedInstance.ResourceUnavailableException;
|
||||
|
||||
/**
|
||||
|
@ -309,24 +307,6 @@ public class ConfigurationBeanLoaderTest extends
|
|||
|
||||
// --------------------------------------------
|
||||
|
||||
@Test
|
||||
public void tripleHasUnrecognizedProperty_throwsException()
|
||||
throws ConfigurationBeanLoaderException {
|
||||
model.add(typeStatement(GENERIC_INSTANCE_URI,
|
||||
toJavaUri(SimpleSuccess.class)));
|
||||
model.add(dataProperty(GENERIC_INSTANCE_URI,
|
||||
"http://bogus.property/name", "No place to put it."));
|
||||
|
||||
expectSimpleFailure(
|
||||
SimpleSuccess.class,
|
||||
throwable(ConfigurationBeanLoaderException.class,
|
||||
"Failed to load"),
|
||||
throwable(NoSuchPropertyMethodException.class,
|
||||
"No property method"));
|
||||
}
|
||||
|
||||
// --------------------------------------------
|
||||
|
||||
@Test
|
||||
public void valueTypeDoesNotMatchArgumentOfPropertyMethod_throwsException()
|
||||
throws ConfigurationBeanLoaderException {
|
||||
|
@ -395,6 +375,22 @@ public class ConfigurationBeanLoaderTest extends
|
|||
assertNotNull(instance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Ignores unexpected properties
|
||||
*/
|
||||
@Test
|
||||
public void simpleSuccessIgnoringExtraProperties() throws ConfigurationBeanLoaderException {
|
||||
model.add(typeStatement(SIMPLE_SUCCESS_INSTANCE_URI,
|
||||
toJavaUri(SimpleSuccess.class)));
|
||||
model.add(dataProperty(SIMPLE_SUCCESS_INSTANCE_URI,
|
||||
"http://surprise.property/name", "No matching method."));
|
||||
|
||||
SimpleSuccess instance = loader.loadInstance(
|
||||
SIMPLE_SUCCESS_INSTANCE_URI, SimpleSuccess.class);
|
||||
|
||||
assertNotNull(instance);
|
||||
}
|
||||
|
||||
public static class SimpleSuccess {
|
||||
// Nothing of interest.
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue