Mulesoft — загрузить файл свойств JSON или XML в глобальную переменную

Я пытаюсь загрузить относительно простой файл конфигурации в переменную, к которой я могу получить глобальный доступ через MEL. Я не хочу использовать обычное поле свойств, потому что моя структура не плоская.

Я смог немного приблизиться, загрузив файл в виде bean-компонента следующим образом, но это оставило меня с гигантской строкой, а не с хэш-картой (я понимаю, почему, я просто не знал, как это исправить):

    <spring:bean id="ClientConfiguration" name="ClientConfiguration" class="java.lang.String" scope="singleton">
        <spring:constructor-arg>
            <spring:bean id="Test" name="org.springframework.util.FileCopyUtils" class="org.springframework.util.FileCopyUtils" factory-method="copyToByteArray">
                <spring:constructor-arg type="java.io.InputStream" value="classpath:client-configuration.json"/>
            </spring:bean>
        </spring:constructor-arg>
    </spring:bean>

Мысли о подходящих или лучших способах сделать это?


person Steve N    schedule 02.11.2016    source источник
comment
Итак, вы хотите, чтобы хэш-карта была доступна в контексте внешнего файла?   -  person Mauro Rocco    schedule 04.11.2016
comment
Да, по существу.   -  person Steve N    schedule 04.11.2016


Ответы (1)


Вот решение.

Файл класса:

package com.example;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;


public class JSONUtil {

    File in;
    public File getIn() {
        return in;
    }
    public void setIn(File in) {
        this.in = in;
    }

    public Map<String, Object> getConfigAsMap(){        
        try{
            ObjectMapper mapper = new ObjectMapper();
            TypeReference<HashMap<String,Object>> typeRef = new TypeReference<HashMap<String,Object>>() {};

            Map<String, Object> map = mapper.readValue( in, typeRef);
            System.out.println(map);
            return map;
        } catch(Exception exception){
            exception.printStackTrace();
            return null;
        }
    }
}

Конфигурация:

    <spring:bean id="JSONUtil" class="com.example.JSONUtil" >
              <spring:property name="in"  value="classpath:client-configuration.json"/>
    </spring:bean>

    <spring:bean name="ClientConfiguration" factory-bean="JSONUtil" factory-method="getConfigAsMap" />

Это работает, и конфигурация JSON загружается как карта.

person user1760178    schedule 08.11.2016