2015-01-29 3 views
0

나는 다음과 같은 XML 파일이 있습니다Jackson-XML XML 속성을 무시하려면 어떻게해야합니까?

<Channel> 
    <name>test</name> 
    <number type="example">123</number> 
</Channel> 

다음과 같은 자바 클래스 :

public class Channel { 
    public String name; 
    public Integer number; 

    @Override 
    public String toString() { 
     return "Channel{" + "name='" + name + '\'' + ", number=" + number + '}'; 
    } 
} 

내가 클래스 채널의 객체로 XML을 읽을 잭슨을 사용하고자합니다. 여기에 내가이하려고 노력하는 방법은 다음과 같습니다

JacksonXmlModule module = new JacksonXmlModule(); 
XmlMapper xmlMapper = new XmlMapper(module); 
InputStream stream = App.class.getResourceAsStream(FILE_NAME); 

Channel value = xmlMapper.readValue(stream, Channel.class); 
System.out.println(value); 

을하지만, 나는 다음과 같은 오류가 발생합니다 : 나는 그것이 XML의 것을 알고

Channel{name='test', number=123} 

:

Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of int out of START_OBJECT token 
at [Source: [email protected]; line: 3, column: 5] (through reference chain: org.robinski.Channel["number"]) 

나는 다음과 같은 출력을 얻을 것으로 예상 이 문제를 일으키는 'type = "example"'특성 속성을 제거하면 모든 것이 작동합니다. 하지만 일반적으로 외부 소스에서 XML을 받기 때문에 수동으로 제거 할 수는 없습니다.

여기 전체 소스 코드를 볼 수 있습니다 : http://pastie.org/9870866.

Jackson을 사용하여 XML 파일을 채널 클래스의 객체로 구문 분석하려면 어떻게해야합니까?

+0

가장 도움이 될 수있는 한 가지 : 최신 버전의 Jackson 구성 요소를 사용하십시오 (이상적으로는 2.5.0이지만 2.4.5도 작동 함). 추가 된 몇 가지 버그 수정 사항이 있습니다.이 문제는 나에게 버그처럼 들립니다. 문제가 지속되면 https://github.com/FasterXML/jackson-dataformat-xml/에서 문제를 제기하는 것이 좋습니다. – StaxMan

+1

@StaxMan jackson-dataformat-xml의 2.5.0 버전을 검사하고 동일한 오류 ("START_OBJECT 토큰에서 int 인스턴스를 역 직렬화 할 수 없습니다")를 제공합니다. 버그인지 또는 예상되는 동작인지 확실하지 않습니다. – JustAC0der

답변

2

길을 찾지 못해도 나는 그 속성을 사용하는 경향이 있습니다.

public class Channel { 

    static class Number { 
     public String type; // transient too? 

     @JacksonXmlText 
     public Integer value; 

     public String toString() { 
      ... 
     } 
    } 

    public String name; 
    public Number number; 

    @Override 
    public String toString() { 
     ... 
    } 
} 
+0

솔루션을 제공해 주셔서 감사합니다. 그것은 작동합니다. Number 클래스가 없어도 작동하기 때문에 JAXB로 전환하는 것도 고려할 것입니다. 관심있는 사람들을 위해, JAXB에 대한 나의 예가있다 : http://pastie.org/9871351. – JustAC0der

+0

공유해 주셔서 감사합니다. 예, JAXB는 XML에 이상적입니다. Jackson은 JAXB를 모델로하고 JSON을 더 많이 모델링했습니다. JAXB도 자바 SE에있다. –

관련 문제