"factory already defined" error fixed

pull/762/head
Nikita 8 years ago
parent 746fe900ed
commit f92cd4a03e

@ -117,56 +117,112 @@ public class ConfigSupport {
private final ObjectMapper jsonMapper = createMapper(null);
private final ObjectMapper yamlMapper = createMapper(new YAMLFactory());
public ConfigSupport() {
URLBuilder.init();
}
public <T> T fromJSON(String content, Class<T> configType) throws IOException {
return jsonMapper.readValue(content, configType);
URLBuilder.replaceURLFactory();
try {
return jsonMapper.readValue(content, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromJSON(File file, Class<T> configType) throws IOException {
return jsonMapper.readValue(file, configType);
URLBuilder.replaceURLFactory();
try {
return jsonMapper.readValue(file, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromJSON(URL url, Class<T> configType) throws IOException {
return jsonMapper.readValue(url, configType);
URLBuilder.replaceURLFactory();
try {
return jsonMapper.readValue(url, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromJSON(Reader reader, Class<T> configType) throws IOException {
return jsonMapper.readValue(reader, configType);
URLBuilder.replaceURLFactory();
try {
return jsonMapper.readValue(reader, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromJSON(InputStream inputStream, Class<T> configType) throws IOException {
return jsonMapper.readValue(inputStream, configType);
URLBuilder.replaceURLFactory();
try {
return jsonMapper.readValue(inputStream, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public String toJSON(Config config) throws IOException {
return jsonMapper.writeValueAsString(config);
URLBuilder.replaceURLFactory();
try {
return jsonMapper.writeValueAsString(config);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromYAML(String content, Class<T> configType) throws IOException {
return yamlMapper.readValue(content, configType);
URLBuilder.replaceURLFactory();
try {
return yamlMapper.readValue(content, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromYAML(File file, Class<T> configType) throws IOException {
return yamlMapper.readValue(file, configType);
URLBuilder.replaceURLFactory();
try {
return yamlMapper.readValue(file, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromYAML(URL url, Class<T> configType) throws IOException {
return yamlMapper.readValue(url, configType);
URLBuilder.replaceURLFactory();
try {
return yamlMapper.readValue(url, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromYAML(Reader reader, Class<T> configType) throws IOException {
return yamlMapper.readValue(reader, configType);
URLBuilder.replaceURLFactory();
try {
return yamlMapper.readValue(reader, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public <T> T fromYAML(InputStream inputStream, Class<T> configType) throws IOException {
return yamlMapper.readValue(inputStream, configType);
URLBuilder.replaceURLFactory();
try {
return yamlMapper.readValue(inputStream, configType);
} finally {
URLBuilder.restoreURLFactory();
}
}
public String toYAML(Config config) throws IOException {
return yamlMapper.writeValueAsString(config);
URLBuilder.replaceURLFactory();
try {
return yamlMapper.writeValueAsString(config);
} finally {
URLBuilder.restoreURLFactory();
}
}
public static ConnectionManager createConnectionManager(Config configCopy) {

@ -31,22 +31,23 @@ import java.net.URLStreamHandlerFactory;
*/
public class URLBuilder {
private static volatile boolean init = false;
private static URLStreamHandlerFactory currentFactory;
static {
init();
public static void restoreURLFactory() {
try {
Field field = URL.class.getDeclaredField("factory");
field.setAccessible(true);
field.set(null, currentFactory);
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
public static void init() {
if (init) {
return;
}
init = true;
public static void replaceURLFactory() {
try {
Field field = URL.class.getDeclaredField("factory");
field.setAccessible(true);
final URLStreamHandlerFactory currentFactory = (URLStreamHandlerFactory) field.get(null);
currentFactory = (URLStreamHandlerFactory) field.get(null);
if (currentFactory != null) {
field.set(null, null);
}
@ -100,6 +101,7 @@ public class URLBuilder {
}
public static URL create(String url) {
replaceURLFactory();
try {
String[] parts = url.split(":");
if (parts.length-1 >= 3) {
@ -115,6 +117,8 @@ public class URLBuilder {
}
} catch (MalformedURLException e) {
throw new IllegalArgumentException(e);
} finally {
restoreURLFactory();
}
}

Loading…
Cancel
Save