2010-07-21 17 views
5

में जेएक्सबी एनोटेशन का उपयोग कर जैक्सन के साथ समस्या निवारण करना मुझे सेवा कॉल करते समय जैक्सन को किसी ऑब्जेक्ट में जेसन को सही तरीके से deserialize करने में परेशानी हो रही है (विशेष रूप से हम जैक्सबी एनोटेशन का उपयोग करने के लिए जैक्सन की क्षमता का उपयोग कर रहे हैं क्योंकि हम भी सेवा चाहते हैं एक्सएमएल का उपयोग करें)। मैं स्प्रिंग एमवीसी का उपयोग कर रहा हूं और मैं सेवा में कॉल करने के लिए RestTemplate क्लास का उपयोग कर रहा हूं।स्प्रिंग एमवीसी

वह स्थान है जहां मैं सेटअप मेरे JUnit के लिए MappingJacksonHttpMessageConverter:

HttpHeaders requestHeaders = new HttpHeaders(); 
requestHeaders.set("Accept", "application/json"); 
HttpEntity<String> requestEntity = new HttpEntity<String>(requestHeaders); 
ResponseEntity<NamedSystem> responseEntity = template.exchange(baseURL + "/{NamedSystemId}", 
     HttpMethod.GET, requestEntity, NamedSystem.class, orgId1); 

मेरे NamedSystem वर्ग इतना तरह की स्थापना की है:

@XmlRootElement(name = "NamedSystem", namespace = "http://schemas.abc.workplace.com/NamedSystem") 
public class NamedSystem { 
    private String id; 
    private String name; 
    private String description; 
    private Set<NamedSystemAlias> aliases; 
    private String href; 

    @XmlAttribute(required = false, name = "id") 
    public String getId() { 
     return id; 
    } 


    public void setId(String id) { 
     this.id = id; 
    } 


    @XmlAttribute(required = false, name = "name") 
    public String getName() { 
     return name; 
    } 


    public void setName(String name) { 
     this.name = name; 
    } 


    @XmlAttribute(required = false, name = "description") 
    public String getDescription() { 
     return description; 
    } 


    public void setDescription(String description) { 
     this.description = description; 
    } 


    @XmlElementWrapper(required = false, name = "aliases", namespace = "http://schemas.abc.workplace.com/NamedSystem") 
    @XmlElement(required = false, name = "alias", namespace = "http://schemas.abc.workplace.com/NamedSystem") 
    public Set<NamedSystemAlias> getAliases() { 
     return aliases; 
    } 


    public void setAliases(Set<NamedSystemAlias> aliases) { 
     this.aliases = aliases; 
    } 

    @XmlAttribute(required = true, name = "href") 
    public String getHref() { 
     return href; 
    } 


    public void setHref(String href) { 
     this.href = href; 
    } 
} 

ObjectMapper jsonMapper = new ObjectMapper(); 
AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(); 
jsonMapper.getDeserializationConfig().setAnnotationIntrospector(introspector); 
jsonMapper.getSerializationConfig().setAnnotationIntrospector(introspector); 
jsonMapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL); 
MappingJacksonHttpMessageConverter jacksonConverter = new MappingJacksonHttpMessageConverter(); 
jacksonConverter.setObjectMapper(jsonMapper); 
List<HttpMessageConverter<?>> converters = new ArrayList<HttpMessageConverter<?>>(); 
converters.add(jacksonConverter); 
template.setMessageConverters(converters); 

और मैं तो जैसे सेवा को कॉल

यह त्रुटि है जो परिणाम:

org.springframework.web.client.ResourceAccessException: I/O error: Unrecognized field "NamedSystem" (Class com.workplace.abc.named.NamedSystem), not marked as ignorable 
at [Source: [email protected]9c; line: 1, column: 2]; nested exception is org.codehaus.jackson.map.JsonMappingException: Unrecognized field "NamedSystem" (Class com.workplace.abc.named.NamedSystem), not marked as ignorable 
at [Source: [email protected]9c; line: 1, column: 2] 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:453) 
.... 
Caused by: org.codehaus.jackson.map.JsonMappingException: Unrecognized field "NamedSystem" (Class com.workplace.abc.named.NamedSystem), not marked as ignorable 
at [Source: [email protected]9c; line: 1, column: 2] 
at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159) 
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:247) 
at org.codehaus.jackson.map.deser.StdDeserializer.reportUnknownProperty(StdDeserializer.java:366) 
at org.codehaus.jackson.map.deser.StdDeserializer.handleUnknownProperty(StdDeserializer.java:352) 
at org.codehaus.jackson.map.deser.BeanDeserializer.handleUnknownProperty(BeanDeserializer.java:543) 
at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:402) 
at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:287) 
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588) 
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1172) 
at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:132) 
at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:154) 
at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:74) 
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:619) 
at org.springframework.web.client.RestTemplate$ResponseEntityResponseExtractor.extractData(RestTemplate.java:1) 
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:446) 
... 32 more 

ऐसा लगता है कि यह रूटएलेमेंट 'नामांकित सिस्टम' को deserialize करने में सक्षम होने के लिए पहचान नहीं है। मैं इसे कैसे करूँगा? मैंने ऐसे उदाहरण देखे हैं जो एक ही जेएक्सबी एनोटेशन का उपयोग करते हैं और वे ठीक काम करते हैं, इसलिए मुझे यकीन नहीं है कि मेरे मामले के बारे में क्या अलग है या मैं इसे सही ढंग से deserialize करने के लिए कैसे मजबूर कर सकता हूं। अगर कोई मदद कर सकता है, तो मैं इसकी सराहना करता हूं।

+0

मुझे ध्यान रखना चाहिए, मैंने कनवर्टर को बहुत आसानी से जोड़ने की भी कोशिश की है, जैसे: converters.add (नया मैपिंग जैक्सनहटपमेसेज कनवर्टर()); और एक ही परिणाम प्राप्त करें (मुझे लगता है कि जिस तरह से मैंने इसे पोस्ट में स्थापित किया है वह अनावश्यक है लेकिन हानिकारक नहीं है)। कुछ डीबगिंग के कारण, मुझे लगभग 100% आत्मविश्वास है कि यह धारावाहिक नहीं है। मुझे बस जेएसओएन पार्सर को नामांकित सिस्टम – AHungerArtist

+0

पहचानने का तरीका ढूंढने की आवश्यकता है। अगर मैं जेसन के नामांकित सिस्टम भाग से छुटकारा पाने में सक्षम था तो समस्या भी हल हो सकती है .. – AHungerArtist

उत्तर

संबंधित मुद्दे