2016-12-05 72 views
0

我在Tomcat 8.5和Axis2在Eclipse这个Web服务类运行:Web服务二传手不工作

public int volumen = 0, led = 0; 
public String ultimaFecha = "null"; 

public int Volumen() { 
    return volumen; 
} 

public String Fecha() { 
    return LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")); 
} 

public String Ultima() { 
    return ultimaFecha; 
} 

public int LED() { 
    System.out.println("LED: " + this.led); 
    return led; 
} 

public void setLED(int led) { 
    System.out.println("Old LED: " + this.led); 
    this.led = led; 
    System.out.println("New LED: " + this.led); 
    ultimaFecha = Fecha(); 
} 

当我尝试调用setLED(int led)方法,它似乎正常工作,显示的结果是更新正确,但是当我打电话给getter LED()时,它会返回初始0值。在C#:

SensorServices.Sensor s = new SensorServices.Sensor(); 
s.setLED(30); 
var result = s.LED(); 

结果的值是0在Tomcat中,打印的出上述:

Old LED: 0 
New LED: 30 
LED: 0 

这是怎么回事?为什么我无法更新变量的值?我该如何解决这个问题?

+2

您是否使用了'SensorServices.Sensor'的同一个实例? – sidgate

+0

这是不可能的。 '新LED:30'表示值已更改。你在做什么? – GurV

+0

实例并没有改变,因为我从同一个客户端方法的作用域调用了两个服务的方法。此外,我还尝试创建对象的静态单个实例,但它也无法工作。 Java类如下所示。 –

回答

0

好吧,我已经设法做了一些糟糕的解决方案,但它为我工作。

似乎每次我从客户端调用任何方法时,都会在服务器中创建一个新实例,因此我将所有内容都设置为静态,并且像魅力一样工作。我认为我只需要一个实例,这样静态变量就可以做到这一点。

+0

使变量静态隐藏问题而不是解决它。正如你所说,每次调用该方法时,似乎都会创建一个新实例。那就是问题所在。这样做会减慢你的程序,消耗内存并导致问题中提到的问题。你需要解决这个问题,你的原始问题将被修复。您可能需要将'SensorServices.Sensor s = new SensorServices.Sensor();'移至另一个类或方法。 –

+0

@TozZ问题不在于客户端,而在于服务器。每次尝试访问Sensor类中的任何方法时,Apache都会创建一个新实例并删除以前保存的所有值。除了我的方法之外,我找不到任何方法解决这个问题,也许使用Singleton(我还没有尝试过)。如果您在服务器端有任何其他解决方案,请告诉我。 –