Frage

Wir sind mit Spring / Hibernate auf einem Websphere Application Server für AIX. Auf meinem Windows-Rechner, kann das Problem nicht - nur, wenn AIX wegzulaufen. Wenn ein Benutzer mit einer Kontonummer anmeldet, wenn sie die ‚0‘ auf ihre Login-ID-Präfix, lehnt die Anwendung die Anmeldung. In der DB2-Tabelle ist die Spalte von numerischem Typ, und es soll kein Problem Umwandlung ‚090 ....‘ zu '90 ... '

Noch jemand ein Problem wie dieses erleben? Beide Maschinen haben Java v1.5.

Um genauer zu sein, ist die Strömung Formview -> LoginValidator -> LoginController

In LoginValidator, ist der Wert der Login null mit dem Präfix 0. Ohne die 0, der Wert ist, was es sein sollte (Aber auch dies ist nur auf der Umwelt AIX - auf 2 Windows-Umgebungen ist es in Ordnung). Hier ist der Code-Snippet, wo das Objekt ist gleich null ..

public class LoginValidator implements Validator  {

    public boolean supports(Class clazz) {
    return Login.class.equals(clazz);
    }

    @SuppressWarnings("all")
    public void validate(Object obj, Errors errors) {
        System.out.println("Inside LoginValidator");
        Login login = (Login) obj;
        //null value
        System.out.println("Before conversion in Validator, store id = " 
              + login.getStoreId()); 
    }
}

ich auch dieses kurzes Java-Programm geschrieben habe, für eine lange von einem String Konstruktion und die Verwendung des Java-Binärdatei, die mit WebSphere verpackt

public class String2Long {
    public static void main(String[] args){
        String a = "09012179";
        String b = "9012179";

        Long _a = new Long(a);
        Long _b = new Long(b);

        System.out.println(a + " => " + _a); //09012179 => 9012179
        System.out.println(b + " => " + _b); //9012179 => 9012179
        System.out.println("_a.equals(_b) " + _a.equals(_b)); //_a.equals(_b) true
    }
}

SOLUTION

War es hilfreich?

Lösung 2

SOLUTION

Ein Mitarbeiter hat einige der Forschung auf Frühling Updates und anscheinend dieser Fehler war richtig in v 2.5.3.

  

CustomNumberEditor behandelt Zahl mit führenden Nullen als Dezimalzahl (unerwünschte Oktal Unterstützung entfernt, während der Erhaltung hex)

Wir waren mit Spring 2.0.5. Wir ersetzt einfach die Gläser mit Frühlings-2.5.4, und es funktionierte, wie es sollte!

Vielen Dank an alle für Ihre Hilfe / Unterstützung. Wir werden den Einsatz von Unit-Tests in die Zukunft machen, aber das ist nur stellte sich heraus, ein Frühlings-Bug sein.

Andere Tipps

Nun, es ist eine Menge Dinge dort passiert. Sie müssen wirklich versuchen, das Problem zu isolieren -. Herauszufinden, was an die Datenbank gesendet wird ist, was von Java etc gesehen hat, wird

Versuchen Sie es festzunageln in einem kurzen, aber vollständige Programm, das nur zeigt das Problem - dann werden Sie in einer viel stärkeren Position sein, einen Fehler in Datei oder Code beheben

.

Trace durch das Programm nach dem Pfad des String der ganze Weg zur Datenbank und Unit-Tests für jede einzelne Methode auf diesem Weg zu machen. Und nehmen Sie nicht nur den kürzesten Weg hier, Multiple-Unit-Tests mit unterschiedlichen Ein- und erwarteten Ergebnissen machen wirklich zu sehen, was möglicherweise schief gelaufen ist. Angenommen, Sie finden nicht alle Fehler, führen die gleichen Komponententests auf dem anderen Computer, und Sie sollten den Fehler lokalisieren können. Von der Spitze von meinem Kopf würde ich nehme an es etwas mit Groß- und Kleinschreibung zu tun hat, aber es gibt wirklich keine Möglichkeit, sicher zu sein.

Das nächste Mal verwenden TDD.

Ich weiß nicht viel über Java, aber die Zeichenfolge passieren könnte, wird als Oktal-String interpretiert wegen der führende „0“.

Sie können wahrscheinlich arbeiten, um dieses mit Long.parseLong (a, 10).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top