Index: framework/src/java/org/apache/hivemind/service/impl/BuilderPropertyFacet.java =================================================================== RCS file: /home/cvspublic/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/BuilderPropertyFacet.java,v retrieving revision 1.12 diff -u -r1.12 BuilderPropertyFacet.java --- framework/src/java/org/apache/hivemind/service/impl/BuilderPropertyFacet.java 29 Apr 2005 07:40:55 -0000 1.12 +++ framework/src/java/org/apache/hivemind/service/impl/BuilderPropertyFacet.java 19 May 2005 16:07:04 -0000 @@ -20,6 +20,7 @@ import org.apache.hivemind.ApplicationRuntimeException; import org.apache.hivemind.ServiceImplementationFactoryParameters; import org.apache.hivemind.schema.Translator; +import org.apache.hivemind.schema.rules.SmartTranslator; import org.apache.hivemind.util.ConstructorUtils; /** @@ -78,7 +79,21 @@ } catch (ApplicationRuntimeException e) { - return false; + Translator translator = factoryParameters.getInvokingModule().getTranslator( + _translatorName); + /* + * SmartTranslator can throw errors for reasons that are not + * hard errors, and can be ignored in this case. + */ + if (translator instanceof SmartTranslator) + { + return false; + } + else + { + throw e; + } + } } Index: framework/src/test/org/apache/hivemind/service/impl/TestBuilderPropertyFacet.java =================================================================== RCS file: /home/cvspublic/jakarta-hivemind/framework/src/test/org/apache/hivemind/service/impl/TestBuilderPropertyFacet.java,v retrieving revision 1.1 diff -u -r1.1 TestBuilderPropertyFacet.java --- framework/src/test/org/apache/hivemind/service/impl/TestBuilderPropertyFacet.java 27 Apr 2005 12:23:46 -0000 1.1 +++ framework/src/test/org/apache/hivemind/service/impl/TestBuilderPropertyFacet.java 19 May 2005 16:07:05 -0000 @@ -14,6 +14,7 @@ package org.apache.hivemind.service.impl; +import org.apache.hivemind.ApplicationRuntimeException; import org.apache.hivemind.ServiceImplementationFactoryParameters; import org.apache.hivemind.internal.Module; import org.apache.hivemind.schema.Translator; @@ -55,4 +56,43 @@ verifyControls(); } + + public void testAssignableFromBadValue() + { + MockControl moduleControl = newControl(Module.class); + Module module = (Module) moduleControl.getMock(); + + MockControl translatorControl = newControl(Translator.class); + Translator translator = (Translator) translatorControl.getMock(); + + MockControl paramsControl = newControl(ServiceImplementationFactoryParameters.class); + ServiceImplementationFactoryParameters params = (ServiceImplementationFactoryParameters) paramsControl + .getMock(); + + BuilderPropertyFacet facet = new BuilderPropertyFacet(); + + facet.setTranslator("foo"); + facet.setValue("bar"); + + params.getInvokingModule(); + paramsControl.setDefaultReturnValue(module); + + module.getTranslator("foo"); + moduleControl.setDefaultReturnValue(translator); + + translator.translate(module, Object.class, "bar", null); + translatorControl.setThrowable(new ApplicationRuntimeException("bad translate parameter")); + + replayControls(); + + try { + facet.isAssignableToType(params, Object.class); + unreachable(); + } + catch (ApplicationRuntimeException e) { + assertEquals("bad translate parameter", e.getMessage()); + } + + verifyControls(); + } }