Joseph Elia
Joseph Elia

Reputation: 11

How can we inject properties into wso2 Micro Integrator and Enterprise Integrator using file.properties?

I want to use the .car file on another server without using integration studio. So I want to be able to change the hostname and port dynamically using a configuration file. My endpoint URL has variables in it {uri.var.x} that's why I can't use $FILE:x to get the complete URL from file.properties.

I have already tried How to read a property injected from file.properties in WSO2 - micro integrator? but it did not work.

Upvotes: 1

Views: 831

Answers (1)

ycr
ycr

Reputation: 14574

You can simply read the Property from the file and assign it to the variable you desire. Then use it in your Endpoint configurations.

<property expression="get-property('file', 'x')" name="uri.var.x"/>

You can store the values in a properties file called file.properties in the MI_HOME/conf folder and it will be loaded automatically. If you are using a different fileName you can pass it to the server startup script like -Dproperties.file.path=/home/dev/dev.properties. Then you can read them through a Property Mediator.

Further, if you want to construct the full URL from multiple properties you can use Xpath functions.

<property expression="concat('https://', get-property('file', 'host'), ':', get-property('file', 'port'))" name="uri.var.x" scope="default" type="STRING" />

If the properties are not picked from the default file, pass the file path like below.

sh micro-integrator.sh -Dproperties.file.path=./conf/file.properties

Update on WSO2 EI

It seems file scope is not supported in EI. But instead, you can read variables from Environment variables with get-property('env', 'NAME_OF_VARIABLE')

<property expression="concat('https://', get-property('env', 'host'), ':', get-property('env', 'port'))" name="uri.var.x" scope="default" type="STRING"/>

If you want to read them from a properties file, you can do something like the below. Assuming you have a properties file like below.

stockQuoteEP=http://localhost:9000/services/SimpleStockQuoteService
ycr=test1234
host=localycr
port=6676

Add the following script to integrator.sh to export the properties as environment variables. You can improve the script as you require.

while read line; do
   echo "Exporting $line" 
   export $line
done < /home/wso2/wso2ei-6.6.0/conf/file.properties

enter image description here

Then in your integration read them as below.

<property expression="concat('https://', get-property('env', 'host'), ':', get-property('env', 'port'))" name="uri.var.x" scope="default" type="STRING"/>

Update 2 on File Scope in Property mediator

As Sanoj mentioned, file scope in the property mediator is only available from MI 4.0 onward vanilla packs. If you have a WSO2 subscription you can get it as an update for both MI and EI.

Upvotes: 2

Related Questions