2016-12-05 2 views
0

ich diesen Web-Service-Klasse laufen haben auf Tomcat 8.5 und Axis2 in Eclipse:Web Service Setter nicht funktioniert

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(); 
} 

Wenn ich versuche, die setLED(int led) Methode aufzurufen, so scheint es, richtig zu arbeiten, zeigt, dass das Ergebnis war korrekt aktualisiert, aber wenn ich den Getter LED() aufrufen, gibt es mir den ursprünglichen Wert 0 zurück. Auf C#:

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

Ergebnis den Wert 0. In Tomcat, der Druck, der zeigt das oben:

Old LED: 0 
New LED: 30 
LED: 0 

Was ist hier los? Warum kann ich den Wert der Variablen nicht aktualisieren? Wie kann ich das lösen?

+2

Verwenden Sie dieselbe Instanz von 'SensorServices.Sensor'? – sidgate

+0

Es ist unmöglich. 'New LED: 30' zeigt an, dass der Wert geändert wurde. Machst du etwas dazwischen? – GurV

+0

Die Instanz hat sich überhaupt nicht geändert, da ich beide Methoden des Service vom selben Client-Methode-Bereich anrufe. Außerdem habe ich versucht, eine statische Einzelinstanz des Objekts zu erstellen, und es hat auch nicht funktioniert. Die Java-Klasse ist wie unten gezeigt. –

Antwort

0

Ok, ich habe es geschafft, eine beschissene Lösung zu machen, aber es hat für mich funktioniert.

Es scheint, dass jedes Mal, wenn ich eine Methode von meinem Client eine neue Instanz auf dem Server erstellt, so dass ich alles statisch und arbeitete wie ein Charme. Ich denke, dass ich nur eine Instanz brauche, also haben die statischen Variablen den Trick gemacht.

+0

Wenn Sie die Variable statisch machen, wird das Problem ausgeblendet, anstatt es zu lösen. Wie Sie bereits festgestellt haben, scheint es, als würden Sie jedes Mal, wenn Sie die Methode aufrufen, eine neue Instanz erstellen. Das ist das Problem. Dies wird Ihr Programm verlangsamen, Speicher auffressen und Probleme wie den in Ihrer Frage erwähnten verursachen. Sie müssen dieses Problem lösen und Ihre ursprüngliche Frage wird behoben. Wahrscheinlich müssen Sie 'SensorServices.Sensor s = new SensorServices.Sensor();' in eine andere Klasse oder Methode verschieben. –

+0

@TotZam Das Problem liegt nicht beim Client, sondern beim Server. Jedes Mal, wenn Sie versuchen, auf eine Methode aus der Klasse des Sensors zuzugreifen, erstellt Apache eine neue Instanz und löscht alle zuvor gespeicherten Werte. Abgesehen von meiner Herangehensweise konnte ich keinen Weg finden, dies zu lösen, und vielleicht einen Singleton verwenden (etwas, was ich nicht versucht habe). Wenn Sie eine andere Lösung auf der Serverseite haben, lassen Sie es mich bitte wissen. –

Verwandte Themen