2013-03-18 12 views
5

Sto cercando di avviare/fermare un servizio web Endpoint in un thread separato dal mio programma principale con il clic di un pulsante. L'avvio funziona bene, sono in grado di accedere a tutti i miei WebMethod senza problemi. Il problema è che quando faccio clic sul pulsante stop per provare a interrompere l'endpoint del servizio Web, ottengo un'eccezione e non so cosa sia. Sono nuovo di Java pure.Pubblicare e arrestare il servizio web endpoint in Java

Grazie in anticipo.

Excetion gettato a 'ep.stop()': classe

WebService Running On: http://0.0.0.0:9898/ 

     Exception in thread "Thread-0" java.lang.NullPointerException 
      at com.sun.xml.internal.ws.transport.http.server.ServerMgr.removeContext(Unknown Source) 
      at com.sun.xml.internal.ws.transport.http.server.HttpEndpoint.stop(Unknown Source) 
      at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.stop(Unknown Source) 
      at com.simba.Server.startWebSrv(Server.java:27) 
      at com.simba.Server.run(Server.java:13) 

Server:

import javax.xml.ws.Endpoint; 

public class Server extends Thread { 

     public volatile boolean active = true; 
     private Endpoint ep; 
     private String ip = "0.0.0.0"; 

     public void run(){ 
      ep = Endpoint.publish("http://" + ip + ":9898/", new SWS()); 
      startWebSrv(); 
     } 

     private void startWebSrv(){ 
      synchronized(this){ 
       try { 
        while (active) { 
         System.out.println("WebService Running On: http://" + ip + ":9898/"); 
         wait(); 
        } 
       }catch (InterruptedException e) { 
        e.printStackTrace(); 
       }finally{ 
       if(!active){ 
        ep.stop(); 
        System.out.println("WebService Stopped!"); 
       } 
       } 
      } 
     } 
} 

Come sto tentando di arrestare il servizio/thread dal mio programma principale:

MenuItem mntmToggleWebservice = new MenuItem(menu_4, SWT.NONE); 
     mntmToggleWebservice.addSelectionListener(new SelectionAdapter() { 
      @Override 
      public void widgetSelected(SelectionEvent e) { 
       synchronized(srv){ 
        srv.active = false; 
        srv.notifyAll();    
       } 
      } 
     }); 
     mntmToggleWebservice.setText("Toggle WebService"); 

risposta

8

Problema risolto! Non utilizzare '0.0.0.0'. Per qualche ragione, la creazione del servizio su '0.0.0.0' funziona (usa l'ip reale della macchina), ma Endpoint.stop() non gioca bene con esso. Invece ho solo usato 'System.getEvn (' COMPUTERNAME ')' e ho creato il servizio con il nome della macchina.

+1

Questa dovrebbe essere la risposta, stavo usando 0.0.0.0 e l'errore mi ha portato qui. –

0

è possibile utilizzare il "ingresso" per bloccare l'esecuzione del programma di

public class ServiceMain { 

    private static void DoNothing() { 

    } 

    public static void main(String[] args) { 
     String address = "http://127.0.0.1:7775/hb"; 
     Endpoint ep = Endpoint.publish(address, new ServiceImp()); 
     Scanner scanIn=new Scanner(System.in); 
     System.out.println("Web Service Release Successfully!"); 
     while(!scanIn.next().equals("stop")){ 
      DoNothing(); 
     } 
     scanIn.close(); 
     ep.stop(); 
     System.out.println("Web Service Close Successfully!"); 

    } 
} 
Problemi correlati