Ron -
I'm also receiving this error (and working with Sean on the problem). We can
definitely verify that the EJB3 is being called - by using a breakpoint, we can
stop before the RemoteException gets thrown, then step the whole way down the
stack until we get to ServletServerInvoker.
The code that gets invoked in ServletServerInvoker is the following:
try
| {
| // call transport on the subclass, get the result to handback
| invocationResponse = invoke(invocationRequest);
| }
| catch(Throwable ex)
| {
| log.debug("Error thrown calling invoke on server invoker.", ex);
| invocationResponse = null;
| response.sendError(500, "Error processing invocation request.
" + ex.getMessage());
| }
What should happen, from what I gather at least, is that the invocationResponse
should be a marshalled exception that's then returned to the client. But in
org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke, it catches an
exception on newSi.invokeNext() and tries to marshal the exception. However,
during the marshalling of the exception, it sees that it isn't a local call so
it just re-throws the same exception. See here:
public static InvocationResponse marshallException(Invocation invocation,
Throwable exception, Map responseContext) throws Throwable
| {
| if
(invocation.getMetaData(IsLocalInterceptor.IS_LOCAL,IsLocalInterceptor.IS_LOCAL)
== null) throw exception;
|
| InvocationResponse response = new InvocationResponse();
| response.setContextInfo(responseContext);
|
| response.addAttachment(IsLocalInterceptor.IS_LOCAL_EXCEPTION, new
MarshalledObjectForLocalCalls(exception));
|
| return response;
| }
|
The if statement is true, so it throws the exception, which is caught in
ServletServerInvoker (in the code sample above). It then rolls over the
exception and sends back a 500 error with the given error message.
On the client, we can see in HTTPClientInvoker.useHttpURLConnection, this
condition happening:
if(result instanceof String)
| {
| // this is a html error page displayed by web server,
need to conver to exception
| WebServerError ex = new WebServerError((String)result);
| return ex;
| }
|
The result is the HTML as specified in the error Sean pointed out earlier in
the thread, and the local variable metadata contains the headers including the
500 return code, the error message from the ServletServerInvoker, etc.
Hope this helps narrow things down for you. At this point, I think we need
either a different configuration to avoid the code in question to modify the
code to handle exceptions. Or something you suggest :-)
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4189619#4189619
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4189619
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user