2017-12-01 12 views
1

xml에서 Java Bean을 작성하려고합니다.com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException

<CommunicationFile count="1"> 
    <Communication> 
     <creationDate>2017-11-25</creationDate> 
     <Document> 
      <objectReference>111111</objectReference> 
     </Document> 
     .......... 
    </Communication> 
</CommunicationFile> 

가 여기 내 자바 파일입니다 : 다음은 내 XML이다. 나는 잭슨 XML 속성을 사용하여 XML로 변수에 정확한 매핑을 생성 :

@JacksonXmlRootElement(localName = "CommunicationFile") 
public final class CommunicationFile { 
@JacksonXmlProperty(localName = "count", isAttribute = true) 
private String count; 
@JacksonXmlElementWrapper(localName = "Communication") 
private Communication[] communication; 

    ..Standard setter and getters... 

} 
------ 

아래는 Communication에 대한 래퍼 클래스입니다. 이 클래스는 중첩 된 요소 인 CommunicatonFile입니다.

public final class Communication { 

    @JacksonXmlProperty(localName = "creationDate") 
    private String creationDate; 
    @JacksonXmlElementWrapper(localName = "Document") 
    private Document document; 
    .. standard setter and getters 
} 

은 잭슨 API를 사용하여 POJO XML을지도하려고 :

XMLInputFactory f = XMLInputFactory.newInstance(); 
XMLStreamReader sr = f.createXMLStreamReader(new FileInputStream("billing.xml")); 

XmlMapper mapper = new XmlMapper(); 
sr.next(); // to point to <root> 
sr.next(); // to point to root-element under root 
CommunicationFile comm = mapper.readValue(sr, CommunicationFile.class); 

오류 아래 방법 :

Exception in thread "main" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "creationDate" (class com.pm.communication.CommunicationFile), not marked as ignorable (2 known properties: "Communication", "count"]) 
at [Source: com.[email protected]981206cc; line: -1, column: -1] (through reference chain: com.pm.communication.CommunicationFile["creationDate"]) 
    at com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51) 
    at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:839) 
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1045) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1352) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla(BeanDeserializerBase.java:1330) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:264) 
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125) 
    at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3708) 
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2071) 
    at com.fasterxml.jackson.dataformat.xml.XmlMapper.readValue(XmlMapper.java:205) 
    at com.fasterxml.jackson.dataformat.xml.XmlMapper.readValue(XmlMapper.java:180) 
    at com.pm.docmaker.tpd.Parser.main(Parser.java:25) 

내가 jacksonCommunicationFile 클래스 creationDate 찾고있는 이유를 모르겠습니다. creationDate은 클래스입니다. 나는 잭슨 2.6.7 API를 사용하고있다.

+0

오타 (typo)입니까? _CreationDate_ 코드에서 _creationDate_ XML로 – Andy

+0

작은 날짜 'c'및 자본 'C'만든 날짜. 둘 다 동일한 오류가 발생합니다. – Bhaskar

답변

0

질문의 XML에는 Communication 요소의 풀리지 않은 컬렉션이 있습니다. 이것은 어노테이션에서 지정되어야한다. 예 : 현재 주석을 바탕으로

@JacksonXmlElementWrapper(localName = "Communication", useWrapping = false) 
private Communication[] communication; 

XML은해야합니다 : 잭슨이 두 번째 수준 <Communication>의 부족과 혼동하고 분명히 /는 변태 CommunicationFile

의 일부가 될 creationDate을 고려

<CommunicationFile count="1"> 
    <Communication> 
    <Communication> 
     <creationDate>2017-11-25</creationDate> 
     ... 
    </Communication> 
    <Communication> 
     <creationDate>2018-07-11</creationDate> 
     ... 
    </Communication> 
    </Communication> 

+0

답장을 보내 주셔서 감사합니다. 하지만 내 XML은 아래와 같습니다. 하나의 Communcation 요소 만 있습니다. <통신> <에서 CreationDate> 2017년 11월 25일 ... <에서 CreationDate> 2018년 7월 11일 .. Bhaskar

+0

바로 그 이유에서 주석에'useWrapping = false'를 사용해야합니다. 너 그거 해봤 니? –

+0

늦게 응답하여 죄송합니다. 그것은 효과가있다. 감사합니다. – Bhaskar