2015-12-17 3 views
6

мне нужно передать URI файла свойств по следующей методике (третья сторона банка)Как получить расположение URL от пути сервера для файла свойств

defaultConfiguration = Factory.createDefaultConfiguration(propertiesUrl.toURI()); 
PayClient client = Factory.createClient(defaultConfiguration); 

Когда я раскрываю свой код на сервере, я введите этот путь, т.е. propertiesUrl.toURI(), как abc://localhost/server/test/payment/ConfigLookup.properties

Приложение стороннего сообщества отказывается от этого значения и не создает конфигурацию, которая используется для создания клиента подключения.

Образец кода, в котором файл свойств находится в моей локальной папке bin, отлично работает при передаче.

Путь получил в propertiesUrl.toURI()

file:/D:/Code/bin/ConfigLookup.properties 

выше создает успешное соединение.

Просьба направлять меня на то, что отсутствует между ними. Как заставить код сервера работать так же, как работает локальный код.

+0

Что такое схема «abc:»? –

+0

На самом деле это сервер, на котором мы развертываем код. После развертывания Post он выглядит как projectname (который я назвал abc) :: //localhost/server/test/payment/ConfigLookup.properties – user2967948

+0

Непонятно, что означает «отказ от этого значения», есть ли какая-то ошибка сообщение или конфигурация просто не загружается. Делает ли третья сторона банку какой-либо регистрации? Можете ли вы получить от него какие-либо записи, которые могли бы дать больше информации о том, что он ищет? –

ответ

0

Вы можете получить ресурс через classloader, а затем для файла URI, см. here.

+0

Я получил ресурс, однако он выглядит как abc: //localhost/server/test/payment/ConfigLookup.properties, который сторонняя банда не принимает в качестве допустимого URI. – user2967948

1

Очевидно, что сторонний JAR ожидает локальный URI на основе файловой системы на диске. Это на самом деле ошибка на их стороне. Можно получить содержимое через uri.toURL().openStream(), не беспокоясь о контексте, на котором фактически находится URI. Отказ от стоимости подсказывает, что сторонняя сторона использует для этого new FileInputStream(new File(uri)). Прежде всего, об этом следует сообщать на их стороне, чтобы они могли правильно ее исправить.

В то же время лучше всего преобразовать его в локальный локальный диск с файловой системой, вместо этого предлагая виртуальную файловую систему или веб-URI. Это можно сделать, создав временный файл с помощью File#createTempFile() в управляемой контейнером временной папке, введя в нее содержимое и, наконец, предоставив временный файл в качестве URI.

Ниже приведен пример того, что вы находитесь внутри сервлета и таким образом имеете getServletContext() уже в руках. В противном случае используемая среда Java EE, которую вы используете, должна иметь возможность давать/вводить вам ServletContext.

String tempDir = (String) getServletContext().getAttribute(ServletContext.TEMPDIR); 
File tempFile = File.createTempFile("temp-", ".properties", new File(tempDir)); 
Files.copy(propertiesUrl.openStream(), tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING); 
// ... 
defaultConfiguration = Factory.createDefaultConfiguration(tempFile.toURI()); 

Тем не менее, вы абсолютно уверены, что этот файл свойств не следует, а поместить в /WEB-INF папку? Сейчас это общедоступно для всех, кто имеет веб-браузер. См. Также a.o. Where to place and how to read configuration resource files in servlet based application?

Смежные вопросы