मैं एक संसाधन वर्ग कि एक अंतरफलक प्रकार वापस करने का प्रयास है, कहते हैं कि "आकार":क्या जर्सी अनुरोध एक पॉलिमॉर्फिक इकाई लौटा सकता है?
public interface Shape {...}
@XmlRootElement
public class Circle implements Shape {...}
@Path("/api/shapes")
public class ShapeResource {
@GET
@Path("/{shapeId}")
public Shape get(@PathParam("shapeId") String shapeId) {
....
return new Circle();
}
}
ऊपर के साथ प्रयोग, मुझे लगता है कि सर्वर तो जैसे एक्सएमएल लौटा रहा है:
<?xml version="1.0" encoding="UTF-8"?>
<circle>
...
</circle>
अभी तक इतना अच्छा है। समस्या यह है कि क्लाइंट यह नहीं जानता कि इसे कैसे उतारना है। मैं हो रही है:
com.sun.jersey.api.client.ClientHandlerException: A message body for Java type, interface Shape, and MIME media type, application/xml, was not found
एक WebResource को देखते हुए, और Shape.class की एक इकाई प्रकार के लिए एक अपवाद का कारण बनता है पूछ।
सर्वर सही काम कर रहा है। मैं इस वर्ग को deserialize करने के लिए ग्राहक कैसे प्राप्त करने के लिए घंटों के लिए संघर्ष कर रहा है। मैंने इंटरफ़ेस को लपेटने का भी प्रयास किया है, मैं वास्तव में यहां एक रैपर में आने की कोशिश कर रहा हूं जैसा कि यहां उल्लिखित है: https://jaxb.dev.java.net/guide/Mapping_interfaces.html। वह या तो काम नहीं किया।
मेरा ग्राहक कोड इस तरह दिखता है:
ClientResponse response = get(wr, ClientResponse.class); // wr == WebResource
try {
return response.getEntity(Shape.class); // <-- FAIL
} catch (Exception e) {
e.printStackTrace();
// com.sun.jersey.api.client.ClientHandlerException: A message body reader for Java type, interface Shape, and MIME media type, application/xml, was not found
}
try {
return response.getEntity(Circle.class); // <-- WIN, but hacky and forces me to try every concrete type
} catch (Exception e) {}
return null;
किसी भी अंतर्दृष्टि या मार्गदर्शन बहुत सराहना कर रहा है। अग्रिम धन्यवाद।
यह काम करना चाहिए। मैंने इसे अक्सर किया है। मुझे लगता है कि यह आपके क्लाइंट कोड में एक बग है। क्या आप इसे पोस्ट कर सकते हैं? –
मैंने मूल पोस्ट – Erik
हम्म अपडेट किया, क्या होता है जब आप 'आकार' में '@ XmlRootElement' जोड़ते हैं? –