2016-12-10 3 views
1

javax.json.JsonObject을 반환하는 나머지 끝점에서 가져온 javax.json.JsonObject을 비 직렬화하는 동안 문제가 있습니다.
TomEE 7.0.2 웹 프로필을 사용하고 있습니다.REST 클라이언트에서 JsonObject를 비 직렬화

약간의 디버깅 후, 을 사용하면 Johnzone JsonObject implementation에서 예외가 발견되었고 NullPointerException입니다.

JsonObject에 대한 javadoc에서 name에 대한 매핑이 없으면 메소드가 예외를 발생해서는 안됩니다. Insted는 null을 반환해야합니다.

Json 비 직렬화는 거의 범용 적이 지 않으며 모든 매핑이 존재하지 않는 경우도 있습니다. 그리고 이것은 제게는 JsonObject.getJsonObject(name)이 타사 라이브러리에서 호출되었으므로 저에게 문제입니다.

내가 왜 NullPointerException이 던져 졌는지에 대해 오해 했습니까? 애플리케이션 전쟁이 TomEE 서버에서 실행될 때 또 다른 javax.json.JsonObject 구현을 사용할 수있는 workaround가 있습니까?

답변

0

실제 값을 읽기 전에 containsKey를 사용하여 존재 여부를 테스트 할 수 있습니다.

+0

getJsonObject에 대한 호출이 타사 라이브러리에 중첩되어 있으므로 getJsonObject보다 먼저 containsKey를 호출하여 NullPointerException을 피할 수 없습니다. 아마 당신은 첫 번째 게시물에서 질문에 실제로 대답 할 수있는 사람입니다. 또한 tomee 서버 및 jsonb 사양에서 작업 한 것을 축하합니다. –

+0

이것은 johnzon의 버그였습니다. (곧 수정판이 다시 출시 될 예정입니다.) spec (jsonp)은 JsonStructure (getJsonObject()를 사용하면 직접 값을 얻을 때이 NPE가 필요합니다.) 또는 getJsonString()을 예로들 수 있습니다. Johnzon에서 우리는 항상 NPE를 던지고있었습니다. 이 코드를 변경할 수 없다면 해결 방법은 데이터를 제 3 자에게 전달하기 전에 데이터를 놓친 경우 json 객체를 다시 만드는 것입니다. 우아하지는 않지만 당신을 차단하십시오. –

+0

존 존 (Johnzon)의 소스 코드를 살펴 봤는데 예외가 어디에서 왔는지 보았다. 문제는, 우리가 가지고있는 많은 보일러 코드가이 라이브러리에 있으며, 다른 엔드 포인트에 연결하고, hateoas 링크, 메소드 호출, 직렬화 및 비 직렬화를 따른다는 것입니다. 그리고 우리가 그것을 tomee에 올릴 때까지 작동했습니다. 존슨 (John Zonzon)이 다음 릴리스에 릴리스 될 예정입니다. –

0

변수를 잘못 입력했기 때문입니다. 대신 var을 사용해보십시오.

+0

답변에 정보를 추가 할 수 있습니까? 틀린 타입은 무엇을 의미합니까? –