как установить тип для шестнадцатеричного и преобразовать из шестнадцатеричного в строку в wso2

#wso2 #hex

#wso2 #шестнадцатеричный

Вопрос:

у меня есть исходный код, подобный этому

 <api context="/EtheriumTransaction" name="EtheriumTransaction" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <log>
                <property expression="json-eval($)" name="payload"/>
            </log>
            <!-- 
            <log>
                <property expression="json-eval($.id)" name="idusr"/>
            </log>
             -->
             <!-- Get Value of Json -->
            <property expression="json-eval($.id)" name="idusr" scope="default" type="STRING"/>
            <property expression="json-eval($.type)" name="types" scope="default" type="STRING"/>
            <property expression="json-eval($.from_address)" name="address_from" scope="default" type="STRING"/>
            <property expression="json-eval($.to_address)" name="address_to" scope="default" type="STRING"/>
            <property expression="json-eval($.amount)" name="amount" scope="default" type="STRING"/>
           <!-- Convert Amount will send and fee become hex  -->
            <script language="js">
            var log = mc.getServiceLog();
            var amountString = mc.getProperty("amount");
            var amountFloat = parseFloat(amountString);
            var feeString   = "0.1";
            var feeFloat = parseFloat(feeString);
            var newAmount = amountFloat - feeFloat;
            log.info("New Amount : "   newAmount );
            var feeHex = ("0x"   feeFloat.toString(16));
            var newAmountHex = ("0x"  newAmount.toString(16));
            log.info("New AmountHex : "   newAmountHex    "feeHex"   feeHex );
            mc.setProperty("newAmountHexs", newAmountHex);
            </script>
            <log>
            <property name="newAmount_hex" scope="default" type="String" expression="$ctx:newAmountHexs" />
            </log>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>
  

из сценариев я могу получить значение шестнадцатеричного. но когда я хочу войти, используя свойство wso2, я не могу получить свое шестнадцатеричное значение.. я попытался использовать type=»STRING», я не могу получить значение. мой вопрос в том, как получить значение шестнадцатеричного в wso2?

после проверки проблема в том, что wso2 не может добавить свойство для шестнадцатеричного.. итак, мне нужно преобразовать мой var newAmountHex = («0x» newAmount.toString(16)); стать строковым значением

я использую это

var newAmountHexString = hex_to_ascii(newAmountHex); функция hex_to_ascii(str1) { var hex = str1.toString(); var str = «; для (var n = 0; n < hex.length; n = 2) { str = String.fromCharCode(parseInt(hex.substr(n, 2), 16)); } возвращает str ; }

но я получил ошибку в for (var n = 0; n < hex.length; n = 2) невозможно использовать < в скрипте на wso2 вот мой журнал

 [2020-09-03 04:11:16,006] [EI-Core]  INFO - CommonScriptMessageContext New Amount : 9.9
[2020-09-03 04:11:16,008] [EI-Core]  INFO - CommonScriptMessageContext New AmountHex : 0x9.e666666666668feeHex0x0.1999999999999a
[2020-09-03 04:11:16,009] [EI-Core]  INFO - LogMediator To: /EtheriumTransaction, MessageID: urn:uuid:ccc5bd5d-99d4-4d82-9ae3-87252d5c2af8, Direction: request, newAmount_hex = 
  

Ответ №1:

wso2 иногда ведет себя странно, но чтобы получить ваше значение в свойстве, вам нужно добавить .toString() в конце значения, которое вы устанавливаете как свойство.

 mc.setProperty("newAmountHexs", newAmountHex.toString());
  

Это работает для меня 🙂

Комментарии:

1. И еще одна вещь. Для преобразования float в hex вы можете использовать: var newAmountHex = java.lang. Float.toHexString(newAmount)