on 05-18-2005 2:14 PM
Dear J2EE developers,
When there is a fault in my method in my Session Bean then I throw a EJBException (like this: throw new EJBException(Error in method!))
But when I call the method from a JSP and cause by purpose a fault then I get the next error:
Exception caught com.sap.engine.services.ejb.exceptions.BaseEJBException: Exception in method [methodName].
more text
Caused by: javax.ejb.EJBException: Error in method!
more text
When I call the method from a Webservice then I get the next error:
Exception in method [methodName].
My question is: How can I get my message Error in method! instead of the exception above or the long exception from my JSP. I really hope that this is possible. How can I otherwise get a decent exception message in my applications!
Best regards,
Marinus Geuze
You need to throw an application exception (ex. throw new Exception("Error in method!") ) instead of a system-level exception like EJBException.
Application exceptions are thrown back to the client.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Siddhartha,
java.lang.Exception itself is not an application exception. Section 18.2.1 of the spec:
<i>An application exception class must be a subclass (direct or indirect) of java.lang.Exception. An application exception class must not be defined as a subclass of the java.lang.RuntimeException, or of the java.rmi.RemoteException. These are reserved for system exceptions. (See next subsection).</i>
Best regards,
Vladimir
throw new Exception("error") --> Example of how to throw an application exception.
your actual Exception class could be
public class UserException extends Exception
{
}
public void fooBar()throws UserException
{
}
you can do a throw new UserException() or throw new Exception()...Both will be app exceptions..Thats what I meant...
Dear helpers,
I thought that I had fixed the problem but it still exists. I implemented a own exception class (I used the example Creating a J2EE-Based Car Rental Application).
But when I test my web service (with the web service navigator) and cause a error by purpose then I get this as return:
-
An error has occurred. Maybe the request is not accepted by the server:
test.SAP_PersDefaultException
-
When I test the web service from the example, then I get the same result:
-
test.QuickCarRentalException
-
Only the name of the exception class is different. When I look in response then I see my error message. So I though it was working.
But when I use the web service in Web Dynpro, and cause again a error by purpose, web dynpro returns a empty error message.
I compared this behavior with the example Using Web Dynpro to Avail of the Car Rental Web Service and the behavior is exactly the same. So again a empty error message.
I am sure this is caused by the return test.SAP_PersDefaultException, this should be the error message defined in my session bean (and the one which is shown in the response).
I hope you can help me to solve this.
Thanks.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Marinus,
javax.ejb.EJBException is a runtime exception and as such is treated as a system exception. If you throw instead an application exception, it won't be wrapped into another exception and the EJB client (in your case the JSP) will receive exactly that exception unchanged.
For more information on system and application exceptions please check chapter 18 of the EJB 2.0 spec.
Hope that helps,
Vladimir
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
84 | |
10 | |
10 | |
9 | |
7 | |
7 | |
6 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.