2013-03-18 28 views
5

Próbuję uruchomić/zatrzymać usługę sieciową Endpoint w osobnym wątku od mojego głównego programu za pomocą kliknięcia przycisku. Rozpoczęcie pracy w porządku, jestem w stanie uzyskać dostęp do wszystkich moich WebMethods bez problemu. Problem polega na tym, że po kliknięciu przycisku stop, aby spróbować zatrzymać punkt końcowy usługi WWW, pojawia się wyjątek i nie wiem, co to jest. Jestem też nowicjuszem w Javie.Publikowanie i zatrzymywanie usługi internetowej punktu końcowego w Javie

Z góry dziękuję.

Excetion rzucony na 'ep.stop()': class

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) 

Serwer:

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!"); 
       } 
       } 
      } 
     } 
} 

Jak jestem próbując zatrzymać usługę/nici z mojego głównego programu:

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"); 

Odpowiedz

8

Problem rozwiązany! Nie używaj "0.0.0.0". Z jakiegoś powodu tworzenie usługi w "0.0.0.0" działa (wykorzystuje rzeczywiste IP urządzenia), ale Endpoint.stop() nie jest z nią dobrze odtwarzany. Zamiast tego po prostu użyłem 'System.getEvn (' COMPUTERNAME ')' i utworzyłem usługę z nazwą komputera.

+1

ta powinna być odpowiedź, używałem 0.0.0.0 a błąd przyniósł mi tutaj. –

0

Można użyć „wejście” do blokowania przebiegu programu

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!"); 

    } 
}