문제

AIX 용 WebSphere 응용 프로그램 서버에서 Spring/Hibernate를 사용하고 있습니다. 내 Windows 시스템에서는 AIX를 실행할 때만 문제가 발생하지 않습니다. 사용자가 계정 번호로 로그인하면 '0'을 로그인 ID에 접두사하면 응용 프로그램이 로그인을 거부합니다. DB2 테이블에서 열은 숫자 유형이며 '090 ....' '90 ...'로 변환하는 데 문제가 없어야합니다.

다른 사람이 이와 같은 문제를 경험합니까? 두 기계 모두 Java v1.5가 있습니다.

보다 구체적으로, 흐름은 formview-> loginvalidator-> logincontroller입니다.

LoginValidator에서 로그인의 값은 0이없는 0으로 무효입니다. 0이 없으면 값은 그럴 것입니다 (그러나 이것은 AIX 환경에만 해당됩니다. 2 개의 Windows 환경에서는 괜찮습니다). 객체가 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()); 
    }
}

또한 문자열에서 오랫동안 구축하고 WebSphere로 포장 된 Java Binary를 사용하기위한이 짧은 Java 프로그램을 작성했습니다.

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

해결책

도움이 되었습니까?

해결책 2

해결책

동료가 스프링 업데이트에 대한 연구를 수행했으며,이 오류는 v. 2.5.3에서 정확한 것으로 보입니다.

CustomNumberEditor는 선행 0을 소수점으로 취급합니다 (16 진수를 보존하는 동안 원치 않는 10 대지 지원 제거)

우리는 봄 2.0.5를 사용하고있었습니다. 우리는 단순히 항아리를 Spring 2.5.4로 교체했으며, 필요한대로 작동했습니다!

도움/도움을 주신 모든 분들께 감사드립니다. 우리는 향후 단위 테스트를 활용할 것이지만, 이것은 단지 스프링 버그로 판명되었습니다.

다른 팁

거기에는 많은 일이 일어나고 있습니다. 문제를 격리하려고 노력해야합니다. 데이터베이스로 보내지고있는 내용, Java가보고있는 내용 등을 해결하십시오.

짧지 만 완전한 프로그램으로 고정하려고 노력하십시오. 단지 문제를 보여줍니다. 그러면 버그를 제출하거나 코드를 수정할 수있는 훨씬 더 강력한 위치에 있습니다.

문자열의 경로를 따라 데이터베이스의 경로를 따라 프로그램을 추적하고 해당 경로의 모든 단일 방법에 대해 단위 테스트를 수행하십시오. 그리고 여기에서 가능한 가장 짧은 경로를 취하지 말고, 다른 입력과 예상 출력으로 여러 단위 테스트를하여 실제로 무엇이 잘못되었는지 확인하십시오. 오류가 없다고 가정하면 다른 컴퓨터에서 동일한 단위 테스트를 실행하면 버그를 정확히 찾아 낼 수 있어야합니다. 내 머리 꼭대기에서 나는 그것이 사례 민감도와 관련이있을 수 있다고 생각하지만 실제로는 확실하지 않습니다.

다음에 TDD를 사용하십시오.

나는 Java에 대해 많이 알지 못하지만, 이것은 "0"으로 인해 문자열이 Octal 문자열로 해석 될 수 있습니다.

long.parselong (a, 10)을 사용 하여이 문제를 해결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top