2011-10-27 4 views
0

현재 Java Json 라이브러리에서 작업 중입니다. HTTP 요청을 직접 처리하고 Jackson이 JSON 직렬화를 수행하도록합니다.Jackson Mapper가 Android에서는 예외를 throw하지만 Java SE에서는 예외를 throw하지 않습니다.

라이브러리는 대부분의 경우 정상적으로 작동하지만 한 경우에는 정상적으로 작동합니다.

 public class MyClass extends MyBase { 
      @JsonProperty("MY_PROP") 
      private string myProp; 

      // ... some properties more 

      @JsonProperty("DATA") 
      private SubClass data; 

      // ... getter/setter 
     } 

서브 클래스는 대부분 정수 필드와 두 개의 더블 필드 단지 클래스 :

나는 꽤 기본 POJO 있습니다. 수퍼 클래스에는 서버의 상태 정보가 포함되어 있습니다. 이 방법은 7 개의 다른 응답 클래스에서 작동합니다.

는 서버 응답 보인다

 { 
     "MY_PROP":12, 
     /* and so on*/ 
     "DATA":{ /* stuff */ } 
     } 

같은 나는 HTTP 응답이 내 안드로이드 전화에 대한 예외 다음 얻을 도착했을 때 화재 약간의 헬퍼 클래스 사용하는 경우 :

org.codehaus.jackson.map을 .JsonMappingException : [simple type, class my.company.at.MyClassBase] 유형의 적절한 생성자가 없습니다. JSON 객체에서 인스턴스화 할 수 없습니다. (형식 정보를 추가/활성화해야합니까?)

내 안드로이드 폰에서만. 내 컴퓨터에서 Junit-Test를 실행하는 경우 정확히 동일한 작업을 수행하므로 deserialize 된 객체가 생성됩니다. 어떤 아이디어?

답변

0

근본 원인을 모르지만 클래스에 기본 (인수 없음) 생성자가 없으면 추가하려고합니다. Javac은 생성자가 없다면 하나를 추가해야하지만, Android의 컴파일러가이 경우 다른 종류의 클래스를 생성 할 수 있는지 궁금합니다.

+0

도움이되지 않았습니다. 이 생성자를 추가 한 후에는 MY_PROP라는 인식 할 수없는 속성에 대한 이상한 예외가 발생했습니다. – schlingel

+1

그 오류는 (이름에서 알 수 있듯이) 바인딩하려는 클래스가 "MY_PROP"속성을 정의하지 않는다고 제안합니다. 빠른 질문 : MyClass.class (있는 경우) 또는 MyBase.class (아마도 그렇지 않은 경우)에 바인딩하려고합니까? 후자의 경우 예외가 적용됩니다. – StaxMan

+0

아니, MyClass와 바인딩합니다. 잭슨 대신 GSON을 사용하도록 현재 응용 프로그램을 다시 작성하기 시작했습니다. 현재 GSON은 Jackson보다 100 % 빠르므로 이상한 Dalvik/SUN JVM 차이점을 연구하는 대신 GSON을 조정하는 데 나의 힘을 쏟을 것이라고 생각합니다. 하지만 어쨌든 포인터 주셔서 감사합니다. – schlingel

관련 문제