[573836]  Treat toBoolean/Integer/Real as queries
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java
index 7dc1f3d..725a311 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToBooleanOperation.java
@@ -22,9 +22,16 @@
 	public static final @NonNull StringToBooleanOperation INSTANCE = new StringToBooleanOperation();
 
 	@Override
-	public @NonNull Boolean evaluate(@Nullable Object sourceVal) {
+	public @Nullable Boolean evaluate(@Nullable Object sourceVal) {
 		String sourceString = asString(sourceVal);
-		boolean result = "true".equals(sourceString); //$NON-NLS-1$
-		return result;
+		if ("true".equals(sourceString)) { //$NON-NLS-1$
+			return Boolean.TRUE;
+		}
+		else if ("false".equals(sourceString)) { //$NON-NLS-1$
+			return Boolean.FALSE;
+		}
+		else {
+			return null;
+		}
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java
index eaf8a26..5008893 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToIntegerOperation.java
@@ -24,9 +24,14 @@
 	public static final @NonNull StringToIntegerOperation INSTANCE = new StringToIntegerOperation();
 
 	@Override
-	public @NonNull IntegerValue evaluate(@Nullable Object sourceVal) {
+	public @Nullable IntegerValue evaluate(@Nullable Object sourceVal) {
 		String sourceString = asString(sourceVal);
 		@NonNull String result = sourceString.trim();
-		return ValueUtil.integerValueOf(result);
+		try {
+			return ValueUtil.integerValueOf(result);
+		}
+		catch (Throwable e) {
+			return null;
+		}
 	}
 }
diff --git a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java
index 4a5b38c..4b7cc18 100644
--- a/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java
+++ b/plugins/org.eclipse.ocl.pivot/src/org/eclipse/ocl/pivot/library/string/StringToRealOperation.java
@@ -24,8 +24,13 @@
 	public static final @NonNull StringToRealOperation INSTANCE = new StringToRealOperation();
 
 	@Override
-	public @NonNull RealValue evaluate(@Nullable Object sourceVal) {
+	public @Nullable RealValue evaluate(@Nullable Object sourceVal) {
 		String sourceString = asString(sourceVal);
-		return ValueUtil.realValueOf(sourceString);
+		try {
+			return ValueUtil.realValueOf(sourceString);
+		}
+		catch (Throwable e) {
+			return null;
+		}
 	}
 }
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
index e2f7eee..e465f67 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateOclAnyOperationsTest4.java
@@ -487,8 +487,8 @@
 		ocl.assertQueryFalse(null, "*.oclIsInvalid()");
 		ocl.assertQueryFalse(null, "'invalid'.oclIsInvalid()");
 		ocl.assertQueryFalse(ocl.pkg1, "self.oclIsInvalid()");
-		ocl.assertQueryTrue(null, "('123a'.toInteger()).oclIsInvalid()");	// Bug 342561 for old evaluator
-		ocl.assertQueryTrue(null, "let a:Integer='123a'.toInteger() in a.oclIsInvalid()");	// Bug 342561 for old evaluator
+		ocl.assertQueryTrue(null, "('123a'.toInteger()).oclIsUndefined()");	// Bug 342561 for old evaluator
+		ocl.assertQueryTrue(null, "let a:Integer='123a'.toInteger() in a.oclIsUndefined()");	// Bug 342561 for old evaluator
 		ocl.dispose();
 	}
 
diff --git a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java
index d53cf25..8241990 100644
--- a/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java
+++ b/tests/org.eclipse.ocl.examples.xtext.tests/src/org/eclipse/ocl/examples/pivot/tests/EvaluateStringOperationsTest4.java
@@ -20,7 +20,6 @@
 import org.eclipse.ocl.pivot.messages.PivotMessages;
 import org.eclipse.ocl.pivot.utilities.OCL;
 import org.eclipse.ocl.pivot.utilities.StringUtil;
-import org.eclipse.osgi.util.NLS;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.BeforeClass;
@@ -547,11 +546,11 @@
 	@Test public void testStringToBoolean() {
 		TestOCL ocl = createOCL();
 		ocl.assertQueryTrue(null, "'true'.toBoolean()");
-		ocl.assertQueryFalse(null, "' true'.toBoolean()");
-		ocl.assertQueryFalse(null, "'true '.toBoolean()");
-		ocl.assertQueryFalse(null, "'True'.toBoolean()");
+		ocl.assertQueryNull(null, "' true'.toBoolean()");
+		ocl.assertQueryNull(null, "'true '.toBoolean()");
+		ocl.assertQueryNull(null, "'True'.toBoolean()");
 		ocl.assertQueryFalse(null, "'false'.toBoolean()");
-		ocl.assertQueryFalse(null, "'-4'.toBoolean()");
+		ocl.assertQueryNull(null, "'-4'.toBoolean()");
 		// invalid
 		ocl.assertQueryInvalid(null, "let s : String = invalid in s.toBoolean()");
 		// null
@@ -563,10 +562,10 @@
 		TestOCL ocl = createOCL();
 		ocl.assertQueryEquals(null, Integer.valueOf(4), "'4'.toInteger()");
 		ocl.assertQueryEquals(null, Integer.valueOf(-4), "'-4'.toInteger()");
-		ocl.assertQueryInvalid(null, "'4.0'.toInteger()", NLS.bind(PivotMessages.InvalidInteger, "4.0"), NumberFormatException.class);
+		ocl.assertQueryNull(null, "'4.0'.toInteger()");
 
-		ocl.assertQueryInvalid(null, "'2.4.0'.toInteger()");
-		ocl.assertQueryInvalid(null, "'a'.toInteger()");
+		ocl.assertQueryNull(null, "'2.4.0'.toInteger()");
+		ocl.assertQueryNull(null, "'a'.toInteger()");
 		// invalid
 		ocl.assertQueryInvalid(null, "let s : String = invalid in s.toInteger()");
 		// null
@@ -596,8 +595,8 @@
 		ocl.assertQueryEquals(null, -4.0, "'-4'.toReal()", 0.0);
 		ocl.assertQueryEquals(null, 4.0, "'4.0'.toReal()", 0.0);
 
-		ocl.assertQueryInvalid(null, "'2.4.0'.toReal()", NLS.bind(PivotMessages.InvalidReal, "2.4.0"), NumberFormatException.class);
-		ocl.assertQueryInvalid(null, "'a'.toReal()", NLS.bind(PivotMessages.InvalidReal, "a"), NumberFormatException.class);
+		ocl.assertQueryNull(null, "'2.4.0'.toReal()");
+		ocl.assertQueryNull(null, "'a'.toReal()");
 		// invalid
 		ocl.assertQueryInvalid(null, "let s : String = invalid in s.toReal()");
 		// null