2011-12-06 22 views
5

その私の最初の時間、私はGlassFishのでのNetBeansを使用して簡単なWebサービスベースのアプリケーションを構築しています...ので、我慢しておよび必要に応じて、私を修正してくださいここでカスタム例外 - Java Webサービス

を掲示します。 NetBeansは、新しいWebサービスとその操作のためのコードを生成するという点で多くの助けになります。操作のように:

@WebMethod(operationName = "checkUserExist") 
public String checkUserExist(@WebParam(name = "login") String login, @WebParam(name = "password") String password) throws LoginException { 

    String auth_code = ""; 
    bk_end.Validate val = new bk_end.Validate(); 

    boolean isValidated = val.check(login, password); 

    if(isValidated) 
    { 
     auth_code = val.return_AuthCode(); 
     bank_services.CustomerSerice.setAuth_Code(auth_code); 
     return auth_code; 
    } 

    throw new LoginException("Something is wrong!"); 

} 

と例外クラス:私はそれが実現にjava.lang.reflect.InvocationTargetException プラス他の例外のトン.. :

public class LoginException extends Exception 
{ 
    String message; 


    public LoginException(String message) 
    { 
     super(); 
     this.message = message; 
    } 

    public String getErrorMessage() 
    { 
     return this.message; 
    } 
} 

は、大規模な 例外の詳細を投げます非常に多くのことをnooby質問が、しかし、私はちょうど何が何をするか分からない様々なことを試して何時間もした後。 私は@WebFaultの事について読むが、これを正しく指定する方法は考え得なかっました(特定の方法に私の例外を添付し...)

を助けてください、すべてのアイデアは歓迎以上です!

例外が発生しました: サービス呼び出しがmessage:nullで例外をスローしました。詳細はサーバーログを参照してください。

Exceptions details : java.lang.reflect.InvocationTargetException 
javax.servlet.ServletException: java.lang.reflect.InvocationTargetException 
    at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:330) 
    at org.glassfish.webservices.monitoring.WebServiceTesterServlet.invoke(WebServiceTesterServlet.java:106) 
    at org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:114) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
    at com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.doFilter(ServletAdapter.java:1002) 
    at com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.invokeFilterChain(ServletAdapter.java:942) 
    at com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:404) 
    ... 
Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.glassfish.webservices.monitoring.WebServiceTesterServlet.doPost(WebServiceTesterServlet.java:301) 
    ... 24 more 
Caused by: bank_services.LoginException_Exception: excepts.LoginException 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:145) 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:123) 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:93) 
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:144) 
    at $Proxy383.checkUserExist(Unknown Source) ... 29 more    
+0

あなたは、LoginExceptionを投げると、「他にも数十の例外がありますが、私が望むものがあります」と言いました。代わりに例外がスローされていることを教えてください。 –

+0

本当に、私の質問を必要な詳細で更新しました! – Mike

+0

誰か...?私は一日中すでに、解決策、その初心者の問題がなければなりません... – Mike

答えて

4

大丈夫です。あなたは "何かが間違っている"というメッセージを見たいと思う。

ここで究極の問題は、標準detailMessageフィールドをThrowableに使用していないことです。メッセージを基本クラス(super(message);)に渡すだけで、トレースに例外が表示されることになります。 Exceptionのような別のタイプのExceptionを試しましたか?

あなたはまたLoginException.toString()のようなものであることを定義することができます。

また
@Override 
public String toString() { 
    String s = getClass().getName(); 
    return (message != null) ? (s + ": " + message) : s; 
} 

、あなたはこのような何かをする必要があります。

try { 
    ... 
} catch (Exception e) { 
    if (e instanceof ServletException) { 
     e = e.getCause(); 
    } 
    if (e instanceof InvocationTargetException) { 
     e = e.getCause(); 
    } 
    if (e instanceof LoginException) { 
     System.err.println("Login exception returned message: " 
      + ((LoginException)e). getErrorMessage()); 
    } else { 
     System.err.println("Exception returned message: " + e); 
    } 
} 

しかし、私は、私の勧告がでsuper(message);を使用することだと思いますあなたのコンストラクタ。

+0

私はすでに述べたように、私のWebサービスの知識は非常に基本的なものです...達成しようとしているもの:私のクライアントアプリケーションは2つの文字列を送り、Webサービスの動作は正しいかどうか、正しくない場合は - > LoginExceptionがスローされます。サーバー側でスローされた場合(正常に動作した場合)、ログインしようとしているユーザーに「何かが間違っています」というメッセージが表示されます。 – Mike

+0

クライアントコードに最新のクラス 'LoginException'のコピーがありますか?あなたの例外に 'serialVersionUID'フィールドを追加し、それを数値で更新するべきです。あなたのクライアントは正しいバージョンの 'LoginException'を持っていなければ例外をスローします。 – Gray

+0

"クライアントにはこのクラスがありますか?" - 正しく理解しているかどうかわかりません - NetBeansを使用してクライアント - サーバ関連のコードを生成しています... – Mike

関連する問題