잠시 동안이 문제를 조사해 보았지만 답변을 찾지 못했습니다. 너무 분명한 사람이 아무 것도 쓰지 않았거나 아무 것도 쓰지 않았습니다. 비정상적인 문제가 발생했습니다. 나는 그것의 첫 번째 희망입니다 ...JsonMappingException (was java.lang.NullPointerException)
.idml 형식으로 저장된 Adobe InDesign 문서에서 정보를 추출하는 타사 라이브러리 (IDMLlib)로 작업하고 있습니다. 내용은 "Idml"유형의 객체에 쉽게 읽고 저장할 수 있습니다.이 객체에는 필요한 모든 것이 들어 있습니다. 이제 Jackson JSON을 사용하여이 객체를 웹 클라이언트 (브라우저)로 보내려고합니다.
1) 객체 트리가 원형 referefences이 가득 :
나는이 문제를 공격했습니다. 문제 2.
2) 새로운지고 유지를 위해 필요한 경우 나, 지금은 준비가 믹스 인을 많이 가지고
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")
그래서 주석과 믹스 인을 사용하여이 문제를 해결했습니다 직렬화 할 때 객체 별 오류.
--Output from testMethodsReturnsSomething--
| Failure: testMethods(package.IdmlServiceTests)
| com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: de.fhcon.idmllib.api.elements.Idml["document"]->de.fhcon.idmllib.api.elements.Document["tags"]->de.fhcon.idmllib.api.elements.tags.Tags["xmltagList"]->java.util.ArrayList[0]->de.fhcon.idmllib.api.elements.tags.XMLTag["tagColor"]->de.fhcon.idmllib.api.elements.typedefs.InDesignUIColorType["greenValue"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:218)
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:183)
at com.fasterxml.jackson.databind.ser.std.StdSerializer.wrapAndThrow(StdSerializer.java:155)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:533)
...
사용자 지정 NullValue/NullKey serializer를 작성하려고했지만 NullPointerException에 도움이되지 않습니다.
이것을 처리하는 믹스 인에서 사용할 수있는 특수 효과가 있습니까?
또는이 개체를 serialize 할 다른 방법이 있습니까?
아아보다 그 답을 공정 듯 원래 NPE에 더 가까운 스택 트레이스의 부분. 이 부분은'RuntimeException'을 rethrow하는 catch 절을 가리키고 있습니다. 그것을 모른 채, 그것을 피하기 위해 무엇을해야하는지 말할 수는 없습니다. – StaxMan
"greenValue"속성이 double이 아닌 Double 유형이므로, null 값을 가질 수도 있습니다. Double은 null 값을 처리 할 수 있지만 double은 처리 할 수 없습니다. 내 이론은 Jackson JSON이 충돌을 일으키는 원시 데이터 유형으로 액세스하려고 시도한다는 것입니다. 그래도 그것에 대해 무엇을해야할지 모르겠다. – Steffen
이것은 처리시 발생할 수있는 버그처럼 들리므로 Jackson에 버그를 신고하는 것이 좋습니다. 원시 타입을 다루는 대부분의 핸들러는 null 값을 기본값 (0.0d)으로 강요하지만 Object Id 핸들러는 적절한 예방 조치를 취하지 않거나 setter/field access가 문제를 유발할 수 있습니다. Java는 많은 경우 자동 언 래핑을 수행합니다. – StaxMan