2016-04-26 2 views
1

У меня есть файл web.xml, который содержит переменные в параметрах context-param и init-param. Я хочу заменить эту переменную значениями, взятыми из файла свойств при запуске приложения.Замените переменные web.xml при запуске

Моя web.xml такова:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 

<display-name>APP NAME</display-name> 
<description> 
    App description 
</description> 
<context-param> 
    <param-name>my-param-name</param-name> 
    <param-value>${my-param-name}</param-value> 
</context-param> 
<filter> 
    <filter-name>Authentication Filter</filter-name> 
    <filter-class>my.app.Filter</filter-class> 
    <init-param> 
     <param-name>filter-var-name</param-name> 
     <param-value>${filter-var-value}</param-value> 
    </init-param> 
</filter> 
... 
</web-app> 

И web.properties

my-param-name=${PARAM_VALUE_TO_BE_SETTED_BY_TOOL} 
filter-var-value=${FILTER_VALUE_TO_BE_SETTED_BY_TOOL} 

Вот как работает развертывание:

1) Инструмент развертывания читать данный файл свойств и замените переменные значениями PROD или Dev (значения, заданные в этом инструменте) и нажмите файл в прикладной модуль под JBoss;

2) Запустите развертывание приложения на JBoss. Я хочу, чтобы переменные web.xml заменялись значениями файлов свойств при запуске.

Заранее спасибо.

+0

Можете ли вы рассказать о том, почему вы хотите это сделать? Если это просто «не возиться с webapp web.xml», вы должны рассмотреть возможность использования параметров контекста для этих значений и настроить их при развертывании (в отдельном контексте. Xml для вашего контекста). – Jan

+0

две мысли по этому поводу: а) заменить значения непосредственно в сети .xml вместо внутреннего файла свойств на шаге 1 или перекодировать фильтр, и вместо этого вы получаете доступ к параметрам контекста для считывания значений свойств. – Jan

+0

Первый - это то, что у меня сейчас, но не очень хорошее, потому что у меня должен быть один файл войны для PROD и DEV. Я не могу реализовать второе предложение, потому что не могу перекодировать все фильтры. –

ответ

0

Мы создали обернутый фильтр, который расширяет сервлет-фильтр, чтобы установить значения в переменные web.xml. Эти значения берутся из файла внешних свойств для DEV и PROD envirnments.

web.xml:

... 
<filter> 
    <filter-name>CAS Authentication Filter</filter-name> 
    <filter-class>my.package.WrappedFilter</filter-class> 
    <init-param> 
     <param-name>key</param-name> 
     <param-value>wrappedCasFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>class</param-name> 
     <param-value>org.jasig.cas.client.authentication.AuthenticationFilter</param-value> 
    </init-param> 
</filter> 
... 

Свойства файла:

wrappedCasFilter.init.casServerLoginUrl = https://URL 

Мне грустно, что я cant't показать вам содержание WrappedFilter.

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