在Java Applet中调用Web服务方法

时间:2011-01-31 15:32:01

标签: java webservice-client applet

我成功构建了一个简单的Java Web服务(例如你可以参考"Building simple web service"

在Eclipse中,可以使用本教程中指示的“Java Web服务代理技术”轻松创建Web服务客户端。

我想运行一个与Java客户端应用程序相同的Java Applet:访问Web服务,调用方法并返回结果。

当我运行Eclipse的代码时(右键单击>“作为Java Applet运行...”)一切正常..当我在一个简单的html页面中运行applet时,applet启动但进入死锁状态: 不会抛出任何异常,并且在创建MyWebServiceProxy类的行上执行任何操作时都会阻止该进程,并调用默认构造函数。

有人可以帮助我吗?

我在这里贴了一些代码,让你更好地理解我在applet中做的事情:

public class SimpleWSApplet extends Applet {

 public void paint(Graphics g)
 {
  String msg = "Applet initialized";
  int i = 1;
  g.drawString(msg, 20, 20*i++);

  msg = "Error in applet";
  try {
   Service service = new Service();
   Call call = (Call)service.createCall();
   call.setTargetEndpointAddress("http://localhost:8080/AppletWSTest/services/SimpleWS");
   call.setOperationName(new QName("http://soapinterop.org/", "getMessage"));
   msg = (String)call.invoke(new Object[]{});
  } catch (Exception e) {
   e.printStackTrace();
   msg = "Error: "+e.getMessage();
  }
  g.drawString(msg, 20, 20*i++);
  //g.drawString(executeInvocation(msg), 20, 20*i++);
 }
}

显然我的Web服务被称为“SimpleWS”,我调用的方法称为“getMessage”,它不带参数,并返回一个String。

请帮帮我..

1 个答案:

答案 0 :(得分:3)

如您所知,java applet在沙箱中执行。默认情况下,applet除了原始服务器之外,不能访问任何Web资源。只有签名的小程序才能访问此类资源。因此,您应该sign您的小程序。