/** * Create the ConversionService instance returned by this factory bean. * <p>Creates a simple {@link GenericConversionService} instance by default. * Subclasses may override to customize the ConversionService instance that * gets created. */ protected GenericConversionService createConversionService() { return new DefaultConversionService(); }
/** * Create a StandardTypeConverter for the default ConversionService. * @see DefaultConversionService#getSharedInstance() */ public StandardTypeConverter() { this.conversionService = DefaultConversionService.getSharedInstance(); }
/** * Create a new {@code DefaultConversionService} with the set of * {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}. */ public DefaultConversionService() { addDefaultConverters(this); }
@Test public void convertStringToCustomCharArray() throws Exception { conversionService.addConverter(new Converter<String, char[]>() { @Override public char[] convert(String source) { return source.toCharArray(); } }); char[] converted = conversionService.convert("abc", char[].class); assertThat(converted, equalTo(new char[] {'a', 'b', 'c'})); }
@Test // SPR-16483 public void useCustomConversionService() throws SQLException { Timestamp timestamp = new Timestamp(0); DefaultConversionService myConversionService = new DefaultConversionService(); myConversionService.addConverter(Timestamp.class, MyLocalDateTime.class, source -> new MyLocalDateTime(source.toLocalDateTime())); SingleColumnRowMapper<MyLocalDateTime> rowMapper = SingleColumnRowMapper.newInstance(MyLocalDateTime.class, myConversionService); ResultSet resultSet = mock(ResultSet.class); ResultSetMetaData metaData = mock(ResultSetMetaData.class); given(metaData.getColumnCount()).willReturn(1); given(resultSet.getMetaData()).willReturn(metaData); given(resultSet.getObject(1, MyLocalDateTime.class)) .willThrow(new SQLFeatureNotSupportedException()); given(resultSet.getObject(1)).willReturn(timestamp); MyLocalDateTime actualMyLocalDateTime = rowMapper.mapRow(resultSet, 1); assertNotNull(actualMyLocalDateTime); assertEquals(timestamp.toLocalDateTime(), actualMyLocalDateTime.value); }
public KafkaStreamsConfiguration(Map<String, Object> configs) { Assert.notNull(configs, "Configuration map cannot be null"); this.configs = new HashMap<>(configs); // Not lambdas so we retain type information this.conversionService.addConverter(new Converter<Class<?>, String>() { @Override public String convert(Class<?> c) { return c.getName(); } }); this.conversionService.addConverter(new Converter<List<?>, String>() { @Override public String convert(List<?> l) { String value = l.toString(); // trim [...] - revert to comma-delimited list return value.substring(1, value.length() - 1); } }); }
@Test public void testEditorWithTargetFoo() { DefaultConversionService conversionService = new DefaultConversionService(); final Foo foo = new Foo(); conversionService.addConverter(new Converter<String, Foo>() { // Must be explicit type with generics @Override public Foo convert(String source) { return foo; } }); BeanFactoryTypeConverter typeConverter = new BeanFactoryTypeConverter(conversionService); UUID uuid = UUID.randomUUID(); Object convertedFoo = typeConverter.convertValue(uuid, TypeDescriptor.valueOf(UUID.class), TypeDescriptor.valueOf(Foo.class)); assertSame(foo, convertedFoo); }
@Test public void convertCannotOptimizeArray() { conversionService.addConverter(new Converter<Byte, Byte>() { @Override public Byte convert(Byte source) { return (byte) (source + 1); } }); byte[] byteArray = new byte[] {1, 2, 3}; byte[] converted = conversionService.convert(byteArray, byte[].class); assertNotSame(byteArray, converted); assertTrue(Arrays.equals(new byte[] {2, 3, 4}, converted)); }
public class CustomerConversionServiceFactoryBean extends ConversionServiceFactoryBean { List<Converter<Object, Object>> converters = new ArrayList<>(); public CustomerConversionServiceFactoryBean() { super(); DefaultConversionService conversionservice = (DefaultConversionService) super.getObject(); for(int i=0;i<converters.size();i++){ conversionservice.addConverter(converters.get(i)); } } }
@Override public ConfigurableConversionService getConversionService() { // Need to provide an independent DefaultConversionService, not the // shared DefaultConversionService used by PropertySourcesPropertyResolver. ConfigurableConversionService cs = this.conversionService; if (cs == null) { synchronized (this) { cs = this.conversionService; if (cs == null) { cs = new DefaultConversionService(); this.conversionService = cs; } } } return cs; }
@Test public void genericConverters() { QueueChannel channel = createChannel(Foo.class); DefaultConversionService conversionService = new DefaultConversionService(); conversionService.addConverter(new StringToBarConverter()); conversionService.addConverter(new IntegerToBazConverter()); DefaultDatatypeChannelMessageConverter converter = new DefaultDatatypeChannelMessageConverter(); converter.setConversionService(conversionService); channel.setMessageConverter(converter); assertTrue(channel.send(new GenericMessage<String>("foo"))); Message<?> out = channel.receive(0); assertThat(out.getPayload(), instanceOf(Bar.class)); assertTrue(channel.send(new GenericMessage<Integer>(42))); out = channel.receive(0); assertThat(out.getPayload(), instanceOf(Baz.class)); }
/** * Create a new instance with a default {@link ConversionService}. */ public GenericMessageConverter() { this.conversionService = DefaultConversionService.getSharedInstance(); }
/** * Create a new {@code DefaultConversionService} with the set of * {@linkplain DefaultConversionService#addDefaultConverters(ConverterRegistry) default converters}. */ public DefaultConversionService() { addDefaultConverters(this); }
@Test @SuppressWarnings("rawtypes") public void convertCollectionToObjectWithCustomConverter() throws Exception { List<String> source = new ArrayList<>(); source.add("A"); source.add("B"); conversionService.addConverter(new Converter<List, ListWrapper>() { @Override public ListWrapper convert(List source) { return new ListWrapper(source); } }); ListWrapper result = conversionService.convert(source, ListWrapper.class); assertSame(source, result.getList()); }
private ELEvaluator() { addPropertyAccessor(new EnvironmentAccessor()); addPropertyAccessor(new MessageAccessor()); addPropertyAccessor(new ContextAccessor()); addMethodResolver(new ELMethodResolver()); conversionService.addConverter(new MessageAccessor.MessageContextConverter()); setTypeConverter(new StandardTypeConverter(conversionService)); }
/** * Return a shared default {@code ConversionService} instance, * lazily building it once needed. * <p><b>NOTE:</b> We highly recommend constructing individual * {@code ConversionService} instances for customization purposes. * This accessor is only meant as a fallback for code paths which * need simple type coercion but cannot access a longer-lived * {@code ConversionService} instance any other way. * @return the shared {@code ConversionService} instance (never {@code null}) * @since 4.3.5 */ public static ConversionService getSharedInstance() { DefaultConversionService cs = sharedInstance; if (cs == null) { synchronized (DefaultConversionService.class) { cs = sharedInstance; if (cs == null) { cs = new DefaultConversionService(); sharedInstance = cs; } } } return cs; }
@Bean public DefaultConversionService mongoStoreConverter() { DefaultConversionService conversion = new DefaultConversionService(); if (customConverters != null) { for (Converter<?, String> converter : customConverters) { conversion.addConverter(converter); } } return conversion; } }
/** * Create a StandardTypeConverter for the default ConversionService. * @see DefaultConversionService#getSharedInstance() */ public StandardTypeConverter() { this.conversionService = DefaultConversionService.getSharedInstance(); }
/** * Create a new {@code DefaultFormattingConversionService} with the set of * {@linkplain DefaultConversionService#addDefaultConverters default converters} and, * based on the value of {@code registerDefaultFormatters}, the set of * {@linkplain #addDefaultFormatters default formatters}. * @param embeddedValueResolver delegated to {@link #setEmbeddedValueResolver(StringValueResolver)} * prior to calling {@link #addDefaultFormatters}. * @param registerDefaultFormatters whether to register default formatters */ public DefaultFormattingConversionService( @Nullable StringValueResolver embeddedValueResolver, boolean registerDefaultFormatters) { if (embeddedValueResolver != null) { setEmbeddedValueResolver(embeddedValueResolver); } DefaultConversionService.addDefaultConverters(this); if (registerDefaultFormatters) { addDefaultFormatters(this); } }
private ELEvaluator() { addPropertyAccessor(new EnvironmentAccessor()); addPropertyAccessor(new MessageAccessor()); addPropertyAccessor(new ContextAccessor()); addMethodResolver(new ELMethodResolver()); conversionService.addConverter(new MessageAccessor.MessageContextConverter()); setTypeConverter(new StandardTypeConverter(conversionService)); }