#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)