Here's a weird issue I've seen repeatedly, which took far too long to track down: When I have a ColdFusion application running at
www.whateverdomain.com/api/ —usually a Taffy API, but I've tried simple hello-world scripts, too— CF throws a 500 error, claiming "Application could not be found". Sometimes. And by "sometimes" I don't mean sporadically, but rather, only on certain computers.
I've got several different AWS EC2 instances running CF11 where this happens (the source of the above screen shot), and yet on a non-cloud server setup nearly identically (to the point that it would be tedious to discover the things that are different: all on the same version of windows and IIS, etc, so differences will be microscopic), and with the same code repository cloned, there are no errors.
In addition, if your application lives in a sub-folder under
/api, it shows a similar 500 error, even if the requested folder doesn't exist:
Normally you would expect a 404 in this case, because I just made up that
boston-terriers-rock folder name and it definitely does not exist.
But get this: Access the same code through another URL and it works fine. Notice I didn't say rename the folder. You could rename the folder and that would work too, but on operating systems that support it you can also just create a symbolic link (e.g.
ln -s api splat). So it must be something to do with URL handling, right?
Having spoken to several of my friends in the community about this frustrating issue over the last few months, it seems like several people have been sporadically affected: If they've seen it at all, it's not been on every server. Whatever the problem is, it's inconsistent. Some people have seen it with Apache on CentOS, I mostly see it with IIS on Windows; and it's never affected me with Apache on OSX. It's also been reported in the adobe forums.
It took me a while to track this down because it was only happening on production servers, never on my local development machine, and I don't always have immediate access to the log files in production. Ultimately it was the exception log contents that identified the problem, though.
"Error","ajp-bio-8014-exec-7","04/06/15","16:53:13",,"Application boston-terriers-rock could not be found. The specific sequence of files included or processed is: '''' "
javax.servlet.ServletException: Application boston-terriers-rock could not be found.
Do you see the give-away there?
If you'll recall, when Adobe introduced their oddball REST components implementation, you had to use what appears to be a mapping (
/rest) but which isn't really a mapping, to access your rest services. You could alter this in web.xml to be something other than
/rest but whatever you wanted to use had to be hard-coded in that file and would be true for all domains using that CF instance.
My gut was right: This is more oddball URL handling. If we look in web.xml, we'll now find this:
<servlet-mapping id="coldfusion_mapping_16"> <servlet-name>CFRestServlet</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping>
Why this affects some installations and not others I can't begin to explain. Sorry. But I can tell you that if you're affected, and assuming you're not interested in the native REST functionality (and why would you be?), you can comment out the above block in web.xml and —after a quick service restart— go on about your business with your now-functioning api.
I have half a mind to file a bug for this, because as far as I know this change from
/api is undocumented, and even if it were documented, it's a pretty crappy thing to do out of the box, even without any REST components configured. But I've got deadlines to hit and a head cold to contend with, so I'm not filing anything just yet.
Have you seen this happen? Can you explain why it doesn't happen for every server? I'd love to find out why...