The reason, why this fails (and why Scrutinizers solution works) is subtle: by declaring the variable "var_find" with some content you make this content one string, even if this string contains several blanks, which usually separate strings in the shell.
Lines are read in fields separated by so-called "field separators" (white space, semicolon, etc.) by the shell. But in quoted strings these field separators are ignored. The following script will show that:
#!/bin/ksh
print - "Number of arguments: $#"
exit 0
call the script with ./script a b c and it will print the expected value 3. Issue ./script a "b c" and it will print only 2, because "b c" is considered to be one string.
To come back to your find-command: find knows how to handle the "-name"-option and the "-name"-option knows that it expects exactly one argument: a filename mask. But find doesn't know about a "\( -name ".xml" -o -name ".jsp" \)"-option and this is what it complains about.