@Override
  public Object[] extract(T item) {
    ExpressionParser parser = new SpelExpressionParser();
    EvaluationContext elContext = new CoreMappingEvaluationContext(item);
    elContext.getPropertyAccessors().add(new ExtendedAttributePropertyAccessor());

    try (InputStream iStream = resource.getInputStream()) {
      List<String> expressions = IOUtils.readLines(iStream);
      List<Object> fields = Lists.newArrayListWithCapacity(expressions.size());
      for (String expression : expressions) {
        String value = parser.parseExpression(expression).getValue(elContext, String.class);
        if (value != null && value.contains("\"") && !"\"\"".equals(value)) {
          value = value.replaceAll("\"", "\"\"");
        }
        if (value != null && value.contains(",")) {
          StringBuilder sb = new StringBuilder(value.length() + 2);
          sb.append("\"");
          sb.append(value);
          sb.append("\"");
          value = sb.toString();
        }
        fields.add(value);
      }
      return fields.toArray(new Object[fields.size()]);
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
  }
 @Override
 public List<PropertyAccessor> getPropertyAccessors() {
   return delegate.getPropertyAccessors();
 }