2013-03-18 24 views
5

Tôi đang cố gắng khởi động/dừng dịch vụ web Điểm cuối trong một chuỗi riêng biệt từ chương trình chính của tôi bằng cách nhấp vào nút. Bắt đầu công việc tốt, tôi có thể truy cập tất cả các WebMethods của tôi mà không có vấn đề. Vấn đề là, khi tôi nhấp vào nút dừng để thử và dừng điểm cuối dịch vụ web, tôi nhận được một ngoại lệ và tôi không biết nó là gì. Tôi cũng mới sử dụng Java.Xuất bản và dừng dịch vụ web điểm cuối trong Java

Xin cảm ơn trước.

Excetion ném vào 'ep.stop()':

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) 

máy chủ lớp:

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

Làm thế nào tôi đang cố gắng để ngăn chặn các dịch vụ/chủ đề từ chương trình chính của tôi:

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

Trả lời

8

Sự cố được giải quyết! Không sử dụng '0.0.0.0'. Vì một số lý do, việc tạo dịch vụ trên các tác phẩm '0.0.0.0' (sử dụng ip thực tế của máy), nhưng Endpoint.stop() không chơi tốt với nó. Thay vào đó tôi chỉ sử dụng 'System.getEvn (' COMPUTERNAME ')' và tạo dịch vụ với tên máy.

+1

này nên là câu trả lời, tôi đã sử dụng 0.0.0.0 và lỗi mang tôi đến đây. –

0

Bạn có thể sử dụng "đầu vào" để ngăn chặn việc chạy chương trình

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

    } 
} 
Các vấn đề liên quan