If you my to hit a feed URL for a workspace that doesn't exist, you get an ugly stack trace. Better would be a simple 500 error with a "Workspace does not exist" or "Workspace not found" error.
E.g. for http://localhost:9090/api/registry/My%20Workspace
You get:
<html><head><title>Error 500</title></head><body bgcolor="#ffffff"><h1>Status Code: 500</h1>Exception: <br>Stacktrace: <pre>java.lang.RuntimeException: java.lang.RuntimeException: org.mule.galaxy.RegistryException
at org.apache.abdera.protocol.server.context.AbstractRequestContext.initTarget(AbstractRequestContext.java:74)
at org.apache.abdera.protocol.server.servlet.ServletRequestContext.<init>(ServletRequestContext.java:58)
at org.apache.abdera.protocol.server.servlet.AbderaServlet.service(AbderaServlet.java:87)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:45)
at winstone.ServletConfiguration.execute(ServletConfiguration.java:249)
at winstone.RequestDispatcher.forward(RequestDispatcher.java:334)
at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:374)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.switchuser.SwitchUserProcessingFilter.doFilter(SwitchUserProcessingFilter.java:341)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.basicauth.BasicProcessingFilter.doFilter(BasicProcessingFilter.java:174)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:364)
at org.springmodules.jcr.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:93)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
at winstone.FilterConfiguration.execute(FilterConfiguration.java:195)
at winstone.RequestDispatcher.doFilter(RequestDispatcher.java:364)
at winstone.RequestDispatcher.forward(RequestDispatcher.java:332)
at winstone.RequestHandlerThread.processRequest(RequestHandlerThread.java:244)
at winstone.RequestHandlerThread.run(RequestHandlerThread.java:150)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: org.mule.galaxy.RegistryException
at org.mule.galaxy.atom.ArtifactResolver.resolve(ArtifactResolver.java:120)
at org.mule.galaxy.atom.ArtifactResolver.resolve(ArtifactResolver.java:20)
at org.apache.abdera.protocol.server.impl.AbstractProvider.resolveTarget(AbstractProvider.java:85)
at org.apache.abdera.protocol.server.context.AbstractRequestContext.initTarget(AbstractRequestContext.java:71)
... 40 more
Caused by: org.mule.galaxy.RegistryException
at org.mule.galaxy.impl.jcr.JcrRegistryImpl.getWorkspaceByPath(JcrRegistryImpl.java:159)
at org.mule.galaxy.impl.jcr.JcrRegistryImpl$$FastClassByCGLIB$$d926238e.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:694)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:629)
at org.mule.galaxy.impl.jcr.JcrRegistryImpl$$EnhancerByCGLIB$$bc28cfab.getWorkspaceByPath(<generated>)
at org.mule.galaxy.atom.ArtifactResolver.resolveArtifact(ArtifactResolver.java:137)
at org.mule.galaxy.atom.ArtifactResolver.resolve(ArtifactResolver.java:117)
... 43 more
Caused by: javax.jcr.RepositoryException: failed to resolve path relative to /workspaces: Empty path element: : Empty path element:
at org.apache.jackrabbit.core.NodeImpl.resolveRelativeNodePath(NodeImpl.java:257)
at org.apache.jackrabbit.core.NodeImpl.hasNode(NodeImpl.java:2521)
at org.mule.galaxy.impl.jcr.JcrRegistryImpl.getWorkspaceByPath(JcrRegistryImpl.java:144)
... 53 more
Caused by: org.apache.jackrabbit.name.MalformedPathException: Empty path element:
at org.apache.jackrabbit.name.ParsingPathResolver.getElement(ParsingPathResolver.java:54)
at org.apache.jackrabbit.name.ParsingPathResolver.getQPath(ParsingPathResolver.java:108)
at org.apache.jackrabbit.name.CachingPathResolver.getQPath(CachingPathResolver.java:74)
at org.apache.jackrabbit.core.SessionImpl.getQPath(SessionImpl.java:601)
at org.apache.jackrabbit.core.NodeImpl.resolveRelativeNodePath(NodeImpl.java:219)
... 55 more
</pre><br><hr size="1" width"90%"><i>Generated by Winstone Servlet Engine v0.9.6 at Mon Mar 31 15:44:05 PDT 2008</i></body></html>