2013-03-18 4 views
5

Ich versuche einen Endpoint Web Service in einem separaten Thread von meinem Hauptprogramm mit einem Klick auf eine Schaltfläche zu starten/stoppen. Starten funktioniert einwandfrei, ich kann ohne Probleme auf alle meine WebMethods zugreifen. Das Problem ist, wenn ich auf die Stop-Schaltfläche klicke, um den Web-Service-Endpunkt zu stoppen, bekomme ich eine Ausnahme und ich weiß nicht, was es ist. Ich bin auch neu in Java.Endpoint Web Service in Java veröffentlichen und stoppen

Vielen Dank im Voraus.

Excetion bei 'ep.stop()' geworfen:

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-Klasse:

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

Wie ich den Dienst/Thread von meinem Hauptprogramm bin versucht zu stoppen:

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

Antwort

8

Problem gelöst! Verwenden Sie nicht '0.0.0.0'. Aus irgendeinem Grund funktioniert das Erstellen des Dienstes auf "0.0.0.0" (verwendet die tatsächliche IP des Computers), aber Endpoint.stop() spielt nicht gut damit. Stattdessen habe ich 'System.getEvn (' COMPUTERNAME ')' verwendet und den Dienst mit dem Computernamen erstellt.

+1

Dies sollte die Antwort sein zu blockieren, war ich mit 0.0.0.0 und der Fehler hat mich hierher gebracht. –

0

Sie können den „Eingang“ verwenden, um die Sicht des Programms

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

    } 
}