Pergunta

Estamos usando Spring / Hibernate em um WebSphere Application Server para AIX. Na minha máquina Windows, o problema não ocorre - apenas quando correndo AIX. Quando um usuário se conecta com um número de conta, se prefixar o '0' para o seu ID de login, o aplicativo rejeita o login. Na tabela de DB2, a coluna é do tipo numérico, e não deve ser um problema na conversão de '090 ....' a '90 ... '

Qualquer outra pessoa tiver um problema como este? Ambas as máquinas têm v1.5 Java.

Para ser mais específico, o fluxo é FormView -> LoginValidator -> LoginController

Em LoginValidator, o valor de login é nulo com a 0. prefixado Sem a 0, o valor é o que deveria ser (Mas, novamente, este é apenas sobre o meio ambiente AIX - em 2 de ambientes Windows que está tudo bem). Aqui está o trecho de código onde o objeto é igual a zero ..

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

Eu também tenho escrito este programa Java curto para a construção de um longo de um String, e usando o binário java que é fornecido com o WebSphere

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
    }
}

Foi útil?

Solução 2

SOLUÇÃO

Um colega de trabalho fez alguma pesquisa sobre atualizações Primavera, e, aparentemente, este erro foi correto em v 2.5.3:.

CustomNumberEditor número doces com zeros como decimal (octal removido suporte indesejado enquanto preserva hex)

Estávamos usando Spring 2.0.5. Nós simplesmente substituiu os frascos com Spring 2.5.4, e funcionou como deveria!

Obrigado a todos por sua ajuda / assistência. Vamos fazer uso de testes de unidade no futuro, mas isso só acabou por ser um erro da Primavera.

Outras dicas

Bem, há uma enorme quantidade de coisas acontecendo lá. Você realmente precisa para tentar isolar o problema -. Trabalho com o que está sendo enviado para o banco de dados, o que está sendo visto por Java etc

Tente fixá-lo em um curto, mas completo programa que apenas mostra o problema -. Então você estará em uma posição muito mais forte para arquivar um bug ou corrigir o seu código

Traço através do programa seguindo o caminho da corda todo o caminho para testes de banco de dados e unidade de make para cada método único nesse caminho. E não apenas tomar a rota mais curta possível aqui, fazer vários testes de unidade com diferentes entradas e saídas esperadas para realmente ver o que deu errado, possivelmente. Supondo que você não encontrar algum erro, executar os mesmos testes de unidade no outro computador e você deve ser capaz de identificar o erro. Do alto da minha cabeça, eu diria que ele pode ter algo a ver com a sensibilidade caso, mas não há realmente nenhuma maneira de ter certeza.

Da próxima vez, use TDD.

Eu não sei muito sobre Java, mas isso pode acontecer a string será interpretada como uma string octal por causa do líder "0".

Você provavelmente pode contornar isso usando Long.parseLong (a, 10).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top