Skip to content

Commit f6c9bae

Browse files
authored
Merge pull request #195 from brabenetz/master
Fixes for #193 and #194
2 parents 8af8fdf + 71aab45 commit f6c9bae

File tree

3 files changed

+90
-65
lines changed

3 files changed

+90
-65
lines changed

core/src/main/java/ma/glasnost/orika/converter/builtin/BuiltinConverters.java

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,8 @@
1818

1919
package ma.glasnost.orika.converter.builtin;
2020

21-
import java.io.File;
22-
import java.math.BigInteger;
23-
import java.net.Inet4Address;
24-
import java.net.Inet6Address;
25-
import java.net.InetSocketAddress;
26-
import java.net.URI;
27-
import java.net.URL;
2821
import java.util.Calendar;
2922
import java.util.Date;
30-
import java.util.Locale;
31-
import java.util.UUID;
3223

3324
import javax.xml.datatype.XMLGregorianCalendar;
3425

@@ -65,19 +56,6 @@ public abstract class BuiltinConverters {
6556
* <li>java.sql.Time
6657
* <li>java.sql.Timestamp
6758
* </ul>
68-
* <li>PassThroughConverter registered for the following (additional)
69-
* immutable types:
70-
* <ul>
71-
* <li>java.net.URL
72-
* <li>java.net.URI
73-
* <li>java.util.UUID
74-
* <li>java.math.BigInteger
75-
* <li>java.util.Locale
76-
* <li>java.io.File
77-
* <li>java.net.Inet4Address
78-
* <li>java.net.Inet6Address
79-
* <li>java.net.InetSocketAddress
80-
* </ul>
8159
* <li>CloneableConverter registered for the following cloneable types:
8260
* <ul>
8361
* <li>java.util.Date
@@ -151,11 +129,6 @@ public static void register(ConverterFactory converterFactory) {
151129
converterFactory.registerConverter(new NumericConverters.DoubleToIntegerConverter(false));
152130
converterFactory.registerConverter(new NumericConverters.DoubleToLongConverter(false));
153131

154-
/*
155-
* Register additional common "immutable" types
156-
*/
157-
converterFactory.registerConverter(new PassThroughConverter.Builtin(URL.class, URI.class, UUID.class, BigInteger.class,
158-
Locale.class, File.class, Inet4Address.class, Inet6Address.class, InetSocketAddress.class));
159132
/*
160133
* Register additional common "cloneable" types
161134
*/
@@ -164,6 +137,6 @@ public static void register(ConverterFactory converterFactory) {
164137
* Register converter to instantiate by using a constructor on the
165138
* destination which takes the source as argument
166139
*/
167-
// converterFactory.registerConverter(new ConstructorConverter());
140+
converterFactory.registerConverter(new ConstructorConverter());
168141
}
169142
}

core/src/main/java/ma/glasnost/orika/metadata/Type.java

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,17 @@
2020

2121
import ma.glasnost.orika.impl.util.ClassUtil;
2222

23+
import java.io.File;
2324
import java.lang.reflect.Modifier;
2425
import java.lang.reflect.ParameterizedType;
2526
import java.lang.reflect.TypeVariable;
2627
import java.math.BigDecimal;
28+
import java.math.BigInteger;
29+
import java.net.Inet4Address;
30+
import java.net.Inet6Address;
31+
import java.net.InetSocketAddress;
32+
import java.net.URI;
33+
import java.net.URL;
2734
import java.util.*;
2835
import java.util.concurrent.atomic.AtomicInteger;
2936

@@ -77,6 +84,30 @@ public final class Type<T> implements ParameterizedType, Comparable<Type<?>> {
7784
tmpPrimitiveWrapperTypes.add(Double.class);
7885
PRIMITIVE_WRAPPER_TYPES = Collections.unmodifiableSet(tmpPrimitiveWrapperTypes);
7986

87+
Set<Class<?>> tmpPrimitiveTypes = new HashSet<Class<?>>();
88+
tmpPrimitiveTypes.add(Byte.TYPE);
89+
tmpPrimitiveTypes.add(Short.TYPE);
90+
tmpPrimitiveTypes.add(Integer.TYPE);
91+
tmpPrimitiveTypes.add(Long.TYPE);
92+
tmpPrimitiveTypes.add(Boolean.TYPE);
93+
tmpPrimitiveTypes.add(Character.TYPE);
94+
tmpPrimitiveTypes.add(Float.TYPE);
95+
tmpPrimitiveTypes.add(Double.TYPE);
96+
97+
Set<Class<?>> tmpImmutableJdk6Types = new HashSet<Class<?>>();
98+
tmpImmutableJdk6Types.add(String.class);
99+
tmpImmutableJdk6Types.add(BigDecimal.class);
100+
tmpImmutableJdk6Types.add(BigInteger.class);
101+
tmpImmutableJdk6Types.add(UUID.class);
102+
tmpImmutableJdk6Types.add(URL.class);
103+
tmpImmutableJdk6Types.add(URI.class);
104+
tmpImmutableJdk6Types.add(Locale.class);
105+
tmpImmutableJdk6Types.add(File.class);
106+
tmpImmutableJdk6Types.add(Inet4Address.class);
107+
tmpImmutableJdk6Types.add(Inet6Address.class);
108+
tmpImmutableJdk6Types.add(InetSocketAddress.class);
109+
tmpImmutableJdk6Types.add(Currency.class);
110+
80111
Set<Class<?>> tmpImmutableJdk8Types = new HashSet<Class<?>>();
81112
// TemporalAccessor
82113
addClassIfExists(tmpImmutableJdk8Types, "java.time.Instant");
@@ -100,18 +131,10 @@ public final class Type<T> implements ParameterizedType, Comparable<Type<?>> {
100131
addClassIfExists(tmpImmutableJdk8Types, "java.time.Period");
101132

102133
Set<Class<?>> tmpImmutableTypes = new HashSet<Class<?>>();
103-
tmpImmutableTypes.addAll(PRIMITIVE_WRAPPER_TYPES);
134+
tmpImmutableTypes.addAll(tmpPrimitiveWrapperTypes);
135+
tmpImmutableTypes.addAll(tmpPrimitiveTypes);
136+
tmpImmutableTypes.addAll(tmpImmutableJdk6Types);
104137
tmpImmutableTypes.addAll(tmpImmutableJdk8Types);
105-
tmpImmutableTypes.add(String.class);
106-
tmpImmutableTypes.add(BigDecimal.class);
107-
tmpImmutableTypes.add(Byte.TYPE);
108-
tmpImmutableTypes.add(Short.TYPE);
109-
tmpImmutableTypes.add(Integer.TYPE);
110-
tmpImmutableTypes.add(Long.TYPE);
111-
tmpImmutableTypes.add(Boolean.TYPE);
112-
tmpImmutableTypes.add(Character.TYPE);
113-
tmpImmutableTypes.add(Float.TYPE);
114-
tmpImmutableTypes.add(Double.TYPE);
115138
IMMUTABLE_TYPES = Collections.unmodifiableSet(tmpImmutableTypes);
116139
}
117140

tests/src/main/java/ma/glasnost/orika/test/converter/ConstructorConverterTestCase.java

Lines changed: 55 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -39,30 +39,59 @@
3939
*/
4040
public class ConstructorConverterTestCase {
4141

42-
43-
@Test
44-
public void testStringBasedConstructor() {
45-
MapperFactory factory = MappingUtil.getMapperFactory();
46-
factory.getConverterFactory().registerConverter(new ConstructorConverter());
47-
MapperFacade mapper = factory.getMapperFacade();
48-
49-
String urlString = "http://localhost:80/index.html";
50-
URL url = mapper.map(urlString, URL.class);
51-
Assert.assertNotNull(url);
52-
Assert.assertEquals(urlString, url.toExternalForm());
53-
}
54-
55-
@Test
56-
public void testPrimitiveConstructor() {
57-
MapperFactory factory = MappingUtil.getMapperFactory();
58-
factory.getConverterFactory().registerConverter(new ConstructorConverter());
59-
MapperFacade mapper = factory.getMapperFacade();
60-
61-
Double doubleValue = Double.valueOf("4.99");
62-
BigDecimal bd = mapper.map(doubleValue, BigDecimal.class);
63-
Assert.assertNotNull(bd);
64-
Assert.assertEquals(doubleValue, bd.doubleValue(), 0.0001);
65-
}
66-
67-
42+
@Test
43+
public void testStringBasedConstructor() {
44+
MapperFactory factory = MappingUtil.getMapperFactory();
45+
factory.getConverterFactory().registerConverter(new ConstructorConverter());
46+
MapperFacade mapper = factory.getMapperFacade();
47+
48+
String urlString = "http://localhost:80/index.html";
49+
URL url = mapper.map(urlString, URL.class);
50+
Assert.assertNotNull(url);
51+
Assert.assertEquals(urlString, url.toExternalForm());
52+
}
53+
54+
@Test
55+
public void testPrimitiveConstructor() {
56+
MapperFactory factory = MappingUtil.getMapperFactory();
57+
factory.getConverterFactory().registerConverter(new ConstructorConverter());
58+
MapperFacade mapper = factory.getMapperFacade();
59+
60+
Double doubleValue = Double.valueOf("4.99");
61+
BigDecimal bd = mapper.map(doubleValue, BigDecimal.class);
62+
Assert.assertNotNull(bd);
63+
Assert.assertEquals(doubleValue, bd.doubleValue(), 0.0001);
64+
}
65+
66+
@Test
67+
public void testRegisterdAsBuiltinConverterAndWorksWithCustomType() {
68+
MapperFactory factory = MappingUtil.getMapperFactory();
69+
MapperFacade mapper = factory.getMapperFacade();
70+
71+
StringContainer strCont = mapper.map("test", StringContainer.class);
72+
Assert.assertNotNull(strCont);
73+
Assert.assertEquals("test", strCont.getString());
74+
}
75+
76+
public static class StringContainer {
77+
private String string;
78+
79+
public StringContainer() {
80+
super();
81+
}
82+
83+
public StringContainer(String string) {
84+
super();
85+
this.string = string;
86+
}
87+
88+
public String getString() {
89+
return string;
90+
}
91+
92+
public void setString(String string) {
93+
this.string = string;
94+
}
95+
96+
}
6897
}

0 commit comments

Comments
 (0)