के साथ जेएसओएन प्रतिक्रिया मार्शल कर रहा है मुझे JSONConfiguration.FEATURE_POJO_MAPPING के साथ जर्सी क्लाइंट (1.11) का उपयोग करके कुछ समस्याएं आ रही हैं। मेरे परीक्षण कोड इस तरह दिखता है:जेएक्स-आरएस जर्सी क्लाइंट पीओजेओ मैपिंग और जैक्सन
MyFooCollectionWrapper<MyFooDTO> resp
= webResource.accept(MediaType.APPLICATION_JSON)
.get(new GenericType<MyFooCollectionWrapper<MyFooDTO>>() {});
सर्वर पर:
1) मेरी web.xml POJO मानचित्रण सही पर सेट किया है।
2) MyFooDTO बस एक POJO कि इस तरह दिखता है है:
public class MyFooDTO {
private long id;
private String propA;
pubic long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
pubic String getPropA() {
return propA;
}
public void setPropA(String propA) {
this.propA = propA;
}
public MyFooDTO(MyFoo aFoo) {
this.id = aFoo.getId();
this.propA = aFoo.getPropA();
}
public MyFooDTO() {}
}
3) MyFooCollectionWrapper इस तरह दिखता है:
public class MyFooCollectionWrapper<T> extends MyFooCollectionWrapperBase {
Collection<T> aCollection;
public MyFooCollectionWrapper() {
super();
}
public MyFooCollectionWrapper(boolean isOK, String msg, Collection<T> col) {
super(isOK, msg);
this.aCollection = col;
}
public void setCollection(Collection<T> collection) {
this.aCollection = collection;
}
@JsonProperty("values")
public Collection<T> getCollection() {
return aCollection;
}
}
public class MyFooCollectionWrapperBase {
private boolean isOK;
private String message;
public MyFooCollectionWrapperBase() {
this.message = "";
this.isOK = false;
}
public MyFooCollectionWrapperBase(boolean ok, String msg) {
this.isOK = ok;
this.message = msg;
}
.. standard getter/setters ..
}
मैं सत्यापित करने के बाद सर्वर Json प्रतिक्रिया बनाने में कोई समस्या नहीं है। यदि मैं प्रतिक्रिया प्रकार को स्ट्रिंग पर सेट करता हूं तो मैं अपने जर्सी क्लाइंट कोड से पुनर्प्राप्त कर सकता हूं। जब मैं
MyFooCollectionWrapper<MyFooDTO> resp = webResource.accept(MediaType.APPLICATION_JSON).get(new GenericType<MyFooCollectionWrapper<MyFooDTO>>() {});
का उपयोग मैं POJO मानचित्रण सिर्फ एक कस्टम संदेश शरीर पाठक के लिए किसी भी आवश्यकता के बिना (मार्शल प्रतिक्रिया) काम करने की उम्मीद होगी। हालांकि, मैं मिलता है:
Jun 04, 2012 3:02:20 PM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: A message body reader for Java class com.foo.MyFooCollectionWrapper, and Java type com.foo. MyFooCollectionWrapper<com.foo.MyFooDTO>, and MIME media type application/json was not found
Jun 04, 2012 3:02:20 PM com.sun.jersey.api.client.ClientResponse getEntity
SEVERE: The registered message body readers compatible with the MIME media type are:
application/json ->
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$App
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$StreamSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$SAXSourceReader
com.sun.jersey.core.impl.provider.entity.SourceProvider$DOMSourceReader
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLRootObjectProvider$General
com.sun.jersey.core.impl.provider.entity.EntityHolderReader
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy
com.sun.jersey.moxy.MoxyMessageBodyWorker
com.sun.jersey.moxy.MoxyListMessageBodyWorker
com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java class com.foo.MyFooCollectionWrapper, and Java type com.foo. MyFooCollectionWrapper<com.foo. MyFooDTO>, and MIME media type application/json was not found
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:550)
at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:524)
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:686)
at com.sun.jersey.api.client.WebResource.access$300(WebResource.java:74)
at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:508)
ग्राहक के पक्ष परीक्षण पर वर्ग पथ में शामिल हैं:
jersey-test-framework-core-1.11.jar
jersey-test-framework-embedded-glassfish-1.11.jar
jersey-test-framework-grizzly-1.11.jar
jersey-test-framework-http-1.11.jar
jersey-test-framework-inmemory-1.11.jar
jackson-core-asl.jar
jackson-jaxrs.jar
jackson-xc.jar
jackson-client.jar
jersey-client.jar
jersey-core.jar
jersey-json.jar
jettison.jar
मेरी उम्मीदों गलत कर रहे हैं या मैं यहाँ कुछ स्पष्ट याद आ रही है?
एक साइड नोट के रूप में, यदि मैं अपनी संस्थाओं (@XmlRootElement MyFooCollectionWrapper और MyFooDTO पर) को जोड़ता हूं, तो उसी वेब रिसोर्स को कॉल करने के लिए, क्लाइंट मुझे संदेश बॉडी रीडर अपवाद नहीं मिलता है, हालांकि, प्रतिक्रिया है मार्शल जैसे कि MyFooCollectionWrapper ठीक दिखता है लेकिन इसके संग्रह में MyFooDTO नहीं है जिसमें इसमें नोड्स/अटर्स में उचित मान वाले एक्सएमएल दस्तावेज़ शामिल हैं - दूसरे शब्दों में MyFooDTP को मार्शल नहीं किया जाता है।
जब java.util.logging को CONFIG में सेट किया गया था, जैसा कि उत्तर में सुझाया गया था, मैं निम्नलिखित को देखता हूं, हालांकि कुछ भी मेरे लिए कूदता नहीं है। आउटपुट में link है जो मैंने लंबाई के कारण पेस्टबिन पर रखा है। -
धन्यवाद,
-नूह
अद्यतन
मूल रूप से मेरे मुवक्किल और ग्राहक config इसलिए की तरह बनाया जा रहा था हल:
Client rootClient = new Client();
ClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client client = new Client(rootClient, clientConfig);
जब मैं इस बस को
बदलClientConfig clientConfig = new DefaultClientConfig();
clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
Client client = Client.create(clientConfig);
चीजें काम किया। ऐसा लगता है कि रूट क्लाइंट क्लाइंट को ओवरराइड कर रहा था क्लाइंट कॉन्फिग नए क्लाइंट पर। यह अजीब लगता है कि जब आप एक कन्स्ट्रक्टर का उपयोग करते हैं जो क्लाइंट कॉन्फिग निर्दिष्ट करता है तो क्लाइंटकॉन्फिग रूट क्लिंट्स कॉन्फ़िगर द्वारा ओवरराइड हो जाता है।
क्या आप अपना JSON भी दिखा सकते हैं? – tomfumb