2016-12-05 69 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(我還沒有嘗試過)。如果您在服務器端有任何其他解決方案,請告訴我。 –