2015-05-08 15 views
6

Basit bir GET isteği yapan bir JAX-RS istemcim var. CXF uygulamasını ve DI için Spring'i kullanıyorum. Çağrı başarılı ve 200 geri cevap kodu aldım. Ama POJO'mdaki cevabı okurken bir hata alıyorum.Cxf jax-rs 2.0 istemcisi için jackson json sağlayıcısı nasıl kaydedilir?

İstisna

:

[2015-05-08 16:11:55,457][ERROR][org.apache.cxf.jaxrs.utils.JAXRSUtils]: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json 
[2015-05-08 16:11:55,468][ERROR][com.voya.refapp.service.CustomerServiceImpl]: filterByName() - Exception occurred 
javax.ws.rs.client.ResponseProcessingException: No message body reader has been found for class com.voya.refapp.domain.Customer, ContentType: application/json 
    at org.apache.cxf.jaxrs.impl.ResponseImpl.reportMessageHandlerProblem(ResponseImpl.java:433) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4] 
    at org.apache.cxf.jaxrs.impl.ResponseImpl.doReadEntity(ResponseImpl.java:384) ~[cxf-rt-frontend-jaxrs-3.0.4.jar:3.0.4] 

Kodu:

Client client = ClientBuilder.newClient(); WebTarget target = client.target("http://localhost:8080/rest").path("customers/1"); Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE); Response response = builder.get(); // Successful Customer customer = response.readEntity(Customer.class); // Fails 

benim sınıf yolunda this answer önerildiği üzere aşağıdaki bağımlılığı, bu görünmüyor

alınmayı otomatik olarak yukarı

Client client = ClientBuilder.newClient().register(new JacsksonJsonProvider()); 

ve

Client client = ClientBuilder.newClient().register(JacsksonJsonProvider.class); 

Fakat bu seçeneklerden hiçbiri de çalıştı:
<dependency> 
     <groupId>com.fasterxml.jackson.jaxrs</groupId> 
     <artifactId>jackson-jaxrs-json-provider</artifactId> 
    </dependency> 

Ben de müşteri oluştururken json sağlayıcı kayıt çalıştı. json sağlayıcı ince ClientBuilder.newClient().register(JacsksonJsonProvider.class) kullanarak çalıştı kaydedilmesi

:

javax.ws.rs.client.ResponseProcessingException: Problem with reading the data 

Güncelleme: Yukarıdaki seçeneklerden birini kullanarak json sağlayıcı kaydolurken farklı bir istisna var. Sorun, verilerle (yukarıdaki istisnalar açıkça anlaşılıyordu) şimdi aptalca hissediyorum :() "aktif" adlı jsonda boolean alanım vardı, ama POJO'da "isable" olarak adlandırıldı. POJO tarlaya açıklama @JsonProperty("active"), ince

cevap

7

AFAIK CXF not support autodiscoveryMessageBodyReader sınıflarını yapar çalışma. Ama senin için çalışması gerektiğini elle JacksonJsonProvider kayıt başladı.

gayet iyi çalışıyor my example kontrol edin. neredeyse tam olarak Seninkiyle aynı, sadece farklı bir servis kullandım.Yalnızca versiyonunun düzgün çalışmasını engelleyen bir farkı görebilirsiniz.

Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class); 
WebTarget target = client.target("http://jsonplaceholder.typicode.com").path("posts/1"); 
Invocation.Builder builder = target.request(MediaType.APPLICATION_JSON_TYPE); 
Response response = builder.get(); // Successful 
Post post = response.readEntity(Post.class); 
+1

Cevabınız için teşekkür ederiz, Dawid. Söylediğin gibi seninkiyle aynı kodu aldım ama sorun jsondaki bool alan yüzünden oldu. Json'da "aktif", fakat POJO'da "isative" olarak adlandırıldı. POJO'daki alana @JsonProperty ("active") 'yi ekledikten sonra, iyi çalışmaya başladı. –