2011-12-09 19 views
1

GWTを使用して新しいGoogleアプリケーションを作成しました。しかし、サーバー側で何らかのアクションを実行するボタンをクリックすると、異常なエラーが発生します。誰か助けてもらえますか?事前にありがとう:(ここ はコードです:GWTキャッチされない例外がエスケープされました

package com.ukstudentfeedback.client; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.core.client.GWT; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.event.dom.client.ClickHandler; 
import com.google.gwt.user.client.rpc.AsyncCallback; 
import com.google.gwt.user.client.ui.Button; 
import com.google.gwt.user.client.ui.DialogBox; 
import com.google.gwt.user.client.ui.HTML; 
import com.google.gwt.user.client.ui.Label; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.google.gwt.user.client.ui.TextBox; 
import com.google.gwt.user.client.ui.VerticalPanel; 
import com.ukstudentfeedback.shared.FieldVerifier; 
import com.ukstudentfeedback.client.MailClient; 
import com.ukstudentfeedback.client.MailClientAsync; 

public class Ukstudentfeedback implements EntryPoint{ 

    private static final String SERVER_ERROR = "An error occurred while " 
      + "attempting to contact the server. Please check your network " 
      + "connection and try again."; 

    /** 
    * Create a remote service proxy to talk to the server-side Greeting service. 
    */ 
    private final MailClientAsync sendMessage = GWT 
      .create(MailClient.class); 

    // ... 
    public void onModuleLoad() 
    { 
     java.lang.System.out.println("I finally worked!"); 
     final Button sendButton; 
     final TextBox toField, fromField, subjectField, messageField; 
     final Label errorLabel = new Label(); 

     sendButton = new Button("Send"); 
     toField = new TextBox(); 
     fromField = new TextBox(); 
     subjectField = new TextBox(); 
     messageField = new TextBox(); 

     sendButton.addStyleName("sendButton"); 

     toField.setText("Testing"); 
    // Add the nameField and sendButton to the RootPanel 
    // Use RootPanel.get() to get the entire body element 
     RootPanel.get("sendButton").add(sendButton); 
     RootPanel.get("To").add(toField); 
     RootPanel.get("From").add(fromField); 
     RootPanel.get("Subject").add(subjectField); 
     RootPanel.get("Message").add(messageField); 
     RootPanel.get("errorLabelContainer").add(errorLabel); 

     // Focus the cursor on the to field when the app loads 
       toField.setFocus(true); 
       toField.selectAll(); 

       //sendButton.setEnabled(true); 

       // Create the popup dialog box 
       final DialogBox dialogBox = new DialogBox(); 
       dialogBox.setText("Message Sent"); 
       dialogBox.setAnimationEnabled(true); 
       final Button closeButton = new Button("Close"); 
       // We can set the id of a widget by accessing its Element 
       closeButton.getElement().setId("closeButton"); 
       final Label textToServerLabel = new Label(); 
       final HTML serverResponseLabel = new HTML(); 
       VerticalPanel dialogVPanel = new VerticalPanel(); 
       dialogVPanel.addStyleName("dialogVPanel"); 
       dialogVPanel.add(new HTML("<b>Message Sent:</b>")); 
       dialogVPanel.add(textToServerLabel); 
       dialogVPanel.add(new HTML("<br><b>Server replies:</b>")); 
       dialogVPanel.add(serverResponseLabel); 
       dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT); 
       dialogVPanel.add(closeButton); 
       dialogBox.setWidget(dialogVPanel); 

       // Add a handler to close the DialogBox 
       closeButton.addClickHandler(new ClickHandler() { 
        public void onClick(ClickEvent event) { 
         dialogBox.hide(); 
         sendButton.setEnabled(true); 
         sendButton.setFocus(true); 
        } 
       }); 

    // Create a handler for the sendButton and nameField 
    class MyHandler implements ClickHandler{ 
       /** 
       * Fired when the user clicks on the sendButton. 
       */ 
       public void onClick(ClickEvent event) { 
        java.lang.System.out.println("I have been clicked"); 
        sendMessageToServer(); 
       } 

       public void sendMessageToServer() 
       { 
        errorLabel.setText(""); 
        String to = toField.getText(); 
        String from = fromField.getText(); 
        String subject = subjectField.getText(); 
        String message = messageField.getText(); 

        if (!FieldVerifier.isValidName(to, from, subject, message)) { 
         errorLabel.setText("Please enter at least four characters"); 
         return; 
        } 


        sendButton.setEnabled(false); 
        textToServerLabel.setText("Hello"); 
        serverResponseLabel.setText(""); 
        sendMessage.sendMessage(to, from, subject, message, new AsyncCallback<String>() { 
         public void onFailure(Throwable caught) { 
          // Show the RPC error message to the user 
          dialogBox 
            .setText("Message sending Failed"); 
          serverResponseLabel 
            .addStyleName("serverResponseLabelError"); 
          serverResponseLabel.setHTML(SERVER_ERROR); 
          dialogBox.center(); 
          closeButton.setFocus(true); 

         } 

         public void onSuccess(String result) { 
          dialogBox.setText("Message Sent"); 
          serverResponseLabel 
            .removeStyleName("serverResponseLabelError"); 
          serverResponseLabel.setHTML(result); 
          dialogBox.center(); 
          closeButton.setFocus(true); 

         } 
        }); 
       } 

    } 
    // Add a handler to send the name to the server 
      MyHandler handler = new MyHandler(); 
      sendButton.addClickHandler(handler); 
    } 
} 

サーバー側:

package com.ukstudentfeedback.server; 

import java.io.UnsupportedEncodingException; 
import java.util.Properties; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

import com.google.gwt.user.server.rpc.RemoteServiceServlet; 
import com.ukstudentfeedback.shared.FieldVerifier; 

@SuppressWarnings("serial") 
public class MailServerImpl extends RemoteServiceServlet{ 

    public void sendMessage(String to, String from, String subject, String message) throws IllegalArgumentException 
    { 
     // Verify that no input is null. 
       if (!FieldVerifier.isValidName(to, from, subject, message)) { 
        // If the input is not valid, throw an IllegalArgumentException back to 
        // the client. 
        throw new IllegalArgumentException(
          "Name must be at least 4 characters long"); 
       } 

     Properties props = new Properties(); 
     Session session = Session.getDefaultInstance(props, null); 

     try 
     { 
      Message msg = new MimeMessage(session); 
      msg.setFrom(new InternetAddress(from, "Admin")); 
      msg.addRecipient(Message.RecipientType.TO, 
          new InternetAddress(to, "Mr. User")); 
      msg.setSubject(subject); 
      msg.setText(message); 
      Transport.send(msg); 

     } 
     catch (AddressException e) 
     { 
      // ... 
      e.printStackTrace(); 
     } catch (MessagingException e) 
     { 
      // ... 
      e.printStackTrace(); 
     } catch (UnsupportedEncodingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

は、エラー・スタック:

23:26:55.817 [ERROR] [ukstudentfeedback] Uncaught exception escaped 

com.google.gwt.event.shared.UmbrellaException: One or more exceptions caught, see full set in UmbrellaException#getCauses 
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129) 
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:129) 
    at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116) 
    at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:177) 
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1351) 
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1307) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213) 
    at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: com.google.gwt.user.client.rpc.ServiceDefTarget$NoServiceEntryPointSpecifiedException: Service implementation URL not specified 
    at com.google.gwt.user.client.rpc.impl.RemoteServiceProxy.doPrepareRequestBuilderImpl(RemoteServiceProxy.java:430) 
    at com.google.gwt.user.client.rpc.impl.RemoteServiceProxy.doInvoke(RemoteServiceProxy.java:368) 
    at com.google.gwt.user.client.rpc.impl.RemoteServiceProxy$ServiceHelper.finish(RemoteServiceProxy.java:74) 
    at com.ukstudentfeedback.client.MailClient_Proxy.sendMessage(MailClient_Proxy.java:38) 
    at com.ukstudentfeedback.client.Ukstudentfeedback$1MyHandler.sendMessageToServer(Ukstudentfeedback.java:118) 
    at com.ukstudentfeedback.client.Ukstudentfeedback$1MyHandler.onClick(Ukstudentfeedback.java:98) 
    at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:54) 
    at com.google.gwt.event.dom.client.ClickEvent.dispatch(ClickEvent.java:1) 
    at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1) 
    at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40) 
    at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193) 
    at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88) 
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:127) 
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:129) 
    at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116) 
    at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:177) 
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1351) 
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1307) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:337) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:218) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:213) 
    at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:292) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:546) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363) 
    at java.lang.Thread.run(Thread.java:680) 

答えて

5

が原因「についてUmbrellaException外観の原因を見つけるにはby:

Caused by: 
    com.google.gwt.user.client.rpc.ServiceDefTarget$NoServiceEntryPointSpecifiedException: 
    Service implementation URL not specified 

は、次のいずれかを実行して、リモートサービスURLを指定します。

  1. あなたMailClientAsyncインターフェースにRemoteServiceRelativePath注釈を追加します。
  2. ServiceDefTarget#setServiceEntryPointを呼び出す:

    ((ServiceDefTarget)sendMessage). 
        setServiceEntryPoint("http://www.example.com/service"); 
    
+0

おかげでジェイソン、それが動作するようになりました。私はそれが問題だと信じていません。しかし、メッセージが提供されたメールアドレスに届かないようになった今、何が問題なのか知っていますか?ありがとうございます。 –

+0

あなたの新しい問題について別の質問をしてください。 –

関連する問題