【问题标题】:jax web services, updating the endpointjax Web 服务,更新端点
【发布时间】:2013-04-26 18:01:35
【问题描述】:

我是 Jax-ws 的新手,我有一个简单的客户端/服务器应用程序。我有一个接口,一个实现它的调度程序类,以及一个将我的调度程序发布到本地主机的发布者类。我生成了存根并有一个客户端,它在我的调度程序上调用一个方法。目前没问题。

当我想更改我的调度程序类时,问题就出现了。如果我只是保存更改并再次运行客户端,则客户端将使用旧的调度程序。如果我尝试再次发布,我会收到一个 BindException,因为该端口已在使用中(我知道它是,我正在使用它!)。我发现的唯一解决方法是每次发布到不同的端口并将存根更新到新端口,但这是一个糟糕的解决方案。

有没有更简单的方法来更新代码并让客户端使用新的更改?

这是我的客户:

package assignment2;

import assignment2.endpoint.SchedulerInterface;
import assignment2.endpoint.SchedulerService;

public class Client {
    public static void main(String [] args){
        SchedulerService service = new SchedulerService();
        SchedulerInterface scheduler = service.getSchedulerPort();
        System.out.println(scheduler.getSchedule("Tuesday"));
    }
}

还有我的出版商:

package assignment2;

import javax.xml.ws.Endpoint;

import assignment2.endpoint.Scheduler;

public class Publisher {
    public static void main(String [] args){
        Endpoint.publish("http://localhost:8082/WS/Scheduler", new Scheduler());
    }
}

感谢任何帮助,如果需要,我可以提供任何其他代码。

【问题讨论】:

    标签: jax-ws


    【解决方案1】:

    更简单的方法是重新发布以前发布的服务。为了做到这一点,你必须停止它;所以而不是

    Endpoint.publish("http://localhost:8082/WS/Scheduler", new Scheduler());
    

    只需在 Endpoint 对象上保留一个引用,并在时机成熟时停止它:

    Endpoint ep = Endpoint.create(new Scheduler());
    ep.publish("http://localhost:8082/WS/Scheduler");
    ..
    //STOP SIGNAL ARRIVED
    ep.stop();
    

    这样你可以再次绑定到同一个端口,然后重新运行客户端(当然,Scheduler 类的更新必须是向后兼容的,即你不能改变接口)。

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多