2016-04-01 9 views
2

私はObjectをCSV Stringにマーシャリングしようとしています。私は、CSV Stringに任意のオブジェクトを変換することができます方法を作成しましたが、私は例外得続ける:marshalオブジェクトをCSVに

java.lang.NoSuchMethodError: org.codehaus.jackson.map.ObjectMapper.writer(Lorg/codehaus/jackson/FormatSchema;)Lorg/codehaus/jackson/map/ObjectWriter; 

元帥方法

public static final synchronized String marshal(final Object object, final CsvSchema csvSchema) throws IOException { 
     String CSV_FILTER_NAME = "csvFilter"; 
     HashSet<String> columnNames = new HashSet<>(); 
     for (CsvSchema.Column column : csvSchema) { 
      columnNames.add(column.getName()); 
     } 
     SimpleBeanPropertyFilter csvReponseFilter = new SimpleBeanPropertyFilter.FilterExceptFilter(columnNames); 
     FilterProvider filterProvider = new SimpleFilterProvider().addFilter(CSV_FILTER_NAME, csvReponseFilter); 
     CsvMapper csvMapper = new CsvMapper(); 
     csvMapper.setFilters(filterProvider); 
     csvMapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() { 
      @Override 
      public Object findFilterId(AnnotatedClass annotatedClass) { 
       return CSV_FILTER_NAME; 
      } 
     }); 
     ObjectWriter objectWriter = csvMapper.writer(csvSchema); 
     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
     objectWriter.writeValue(byteArrayOutputStream, csvSchema); 
     return new String(byteArrayOutputStream.toByteArray(), "UTF-8"); 
    } 

Mainメソッド

public static void main(String args[]) { 
     CsvSchema csvSchema = CsvSchema.builder() 
       .addColumn("name") 
       .addColumn("age") 
       .addColumn("height") 
       .addColumn("weight") 
       .setUseHeader(true) 
       .build() 
       .withLineSeparator("\n"); 
     Person person = new Person("Tim", "32", "184", "100"); 
     try { 
      System.out.println(CsvUtilities.marshal(person, csvSchema)); 
     } catch (IOException ex) { 
      Logger.getLogger(CsvUtilities.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

この例外の原因は何ですか?

EDITは、ここに私のすべての輸入品だ:

import com.fasterxml.jackson.dataformat.csv.CsvMapper; 
import com.fasterxml.jackson.dataformat.csv.CsvSchema; 
import java.io.ByteArrayOutputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.HashSet; 
import java.util.List; 
import java.util.logging.Logger; 
import org.apache.commons.io.IOUtils; 
import org.apache.commons.lang3.StringUtils; 
import org.codehaus.jackson.map.ObjectWriter; 
import org.codehaus.jackson.map.introspect.AnnotatedClass; 
import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector; 
import org.codehaus.jackson.map.ser.FilterProvider; 
import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter; 
import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider; 
+0

ObjectWriter objectWriter = csvMapper.writer(csvSchema); APIドキュメントとして、作者はインポートからのmap.ObjectWriterではなく、databindパッケージからcom.fasterxml.jackson.databind.ObjectWriterを返すべきです。 – slee

+0

インポートをdatabindに変更すると、この行は 'ObjectWriter objectWriter = csvMapper.writer(csvSchema);を破棄します'互換性のない型:org.codehaus.jackson.map.ObjectWriterはcom.fasterxml.jackson.databindに変換できません.ObjectWriter' – Hooli

+0

私はjacksonのバージョンが重要だと思います。古いバージョンであるfastxml jacksonとcodehaus jacksonを混在させています。 fastxml jacksonのみを使用してみてください。 p.s.アイデアのようなIDEでプログラミングした場合、何が起こったのかを簡単に知ることができます。 – slee

答えて

-1

は、あなたのクラスパスにjarファイルを参照してください。この方法を持たないジャックソンジャーの2つまたは異なるバージョンが存在する可能性があります。クラスローダーによって古いバージョンが報告された可能性があります。

また、プロジェクトに追加した依存関係も調べてください。