2014-05-09 1 views
0

저지 웹 서비스가 1.17에서 실행 중이며 @Produces 주석을 통해 XML 및 JSON을 통해 응답을 반환하는 것을 지원합니다. JSON 응답을 반환 할 때 기본적으로 JAXB를 사용한다고 가정하고 있지만이를 확인할 방법이 없습니다. 현재 나의 기존 고객은 동일한 JAXB 시리얼 라이저/디시리얼라이저를 사용합니다. 기존 고객에게 영향을주지 않고 Jackson을 사용하는 새로운 클라이언트를 만들고 싶습니다.Jersey 1.x (1.17)에서 JAXB로 JSON 응답을 Jackson에 의해 deserialize 할 수 없습니다.

JAXB JSON 응답은 Jackson for Maps와 호환되지 않습니다. JAXB를 사용하는지도의 JSON은

"mapName":{"entry":[{"key":"key1","value":"value1"},{"key":"key2","value":"value2"}]} 

이며 잭슨은이를 분석하지 못합니다. 잭슨이 JSON을 구문 분석 할 수있는 방법이 있습니까?

또 다른 시도 저지 그것을 JSON 잭슨을 사용할 수 있도록이 선호하는 옵션이 아니라 내가 참으로 "com.sun.jersey.api.json.POJOMappingFeature"로 설정 시도 잭슨

를 사용하도록 전환 Serialization/Deserialization 그러나 서비스는 예외를 기록하지 않고 응답시 500 초를 반환합니다. log4j 로거 레벨은 TRACE로 설정됩니다. ContainerRepsonseFilter를 사용하여 응답에서 500을 확인했으며 놀라 울 정도로 성공적인 2xx 응답을 기록합니다. 내 추측은 문제가 스택 어딘가에서 발생하지만 어디에 있는지 모른다.

답변

0

위의 json 형식을 구문 분석 할 수있는 MOXy를 사용하여 작업을 마쳤습니다.

@Provider 

공용 클래스 JsonMoxyConfigurationContextResolver는 {

private final MoxyJsonConfig config; 

public JsonMoxyConfigurationContextResolver() { 
    final Map<String, String> namespacePrefixMapper = new HashMap<String, String>(); 
    namespacePrefixMapper.put("http://www.w3.org/2001/XMLSchema-instance", "xsi"); 

    config = new MoxyJsonConfig() 
     .setNamespacePrefixMapper(namespacePrefixMapper) 
     .setNamespaceSeparator(':'); 
} 

@Override 
public MoxyJsonConfig getContext(Class<?> objectType) { 
    return config; 
} 

}

ContextResolver를 구현하고

cc.register(JsonMoxyConfigurationContextResolver.class); 
를 사용하여 저지 2.x에서 클라이언트를 활성화