Xpath base64Decode не работает в Wso2Esb 4.8.1 - PullRequest
0 голосов
/ 04 марта 2019

Я получаю поток base64, который мне нужно декодировать.Я провожу некоторые исследования, но я застрял, вот мой код:

<outSequence>
     <property name="cadena" value="Hola mundo" scope="default" type="STRING"/>
     <property name="cadena64"
               expression="base64Encode(get-property('cadena'))"
               scope="default"
               type="STRING"/>
     <property 
               name="cadenaASCII"
               expression="syn:base64Decode(syn:get-property('cadena64'))"
               scope="default"
               type="STRING"/>
     <payloadFactory media-type="json">
        <format>
          {"cadena":"$1",
            "cadena64":"$2",
            "cadenaASCII":"$3",
          }
        </format>
        <args>
           <arg evaluator="xml" expression="get-property('cadena')"/>
           <arg evaluator="xml" expression="get-property('cadena64')"/>
           <arg evaluator="xml" expression="get-property('cadenaASCII')"/>
        </args>
     </payloadFactory>
     <send/>
  </outSequence>

Я включил Xpath 2.0, раскомментировав строку

synapse.xpath.dom.failover.enabled=true

, расположенную в $ ESB_HOME / repository /каталог conf (и перезапуск службы).

Это ошибка, которую я получаю:

Evaluation of the XPath expression syn:base64Decode(syn:get-property('cadena64')) resulted in an error  More TID[-1234] [ESB] [2019-03-04 19:27:23,359] ERROR {org.apache.synapse.util.xpath.SynapseXPath} - Evaluation of the XPath expression syn:base64Decode(syn:get-property('cadena64')) resulted in an error net.sf.saxon.xpath.XPathEvaluator.compile(XPathEvaluator.java:378) org.apache.synapse.util.xpath.SynapseXPath.evaluateDOMXPath(SynapseXPath.java:529) org.apache.synapse.util.xpath.SynapseXPath.stringValueOf(SynapseXPath.java:364) org.apache.synapse.mediators.builtin.PropertyMediator.getResultValue(PropertyMediator.java:302) org.apache.synapse.mediators.builtin.PropertyMediator.mediate(PropertyMediator.java:96) org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77) org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47) org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131) org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:268) org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:488) org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:170) org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) org.apache.synapse.transport.passthru.ClientWorker.run(ClientWorker.java:225) org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) java.lang.Thread.run(Thread.java:745) 

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

ваш код работает в ESB 5.0.0, так что ничего не поделаешь (но обновление будет решением вашей проблемы!) Я считаю подозрительным, что Encode работает, а Decode - нет.Не могли бы вы попробовать без base64Decode без syn:?

0 голосов
/ 06 марта 2019

Я думаю, что только кодирование поддерживается / реализовано в 4.8.1, в противном случае, как уже упоминалось, можно обновить ESB.Следующее сработало для меня в 4.8.1

   <property name="contentBase64" expression="//t:Content" scope="default" type="STRING"/>

<script language="js"><![CDATA[importPackage(Packages.org.apache.commons.codec.binary); var log = mc.getServiceLog();      log.info("1");var c = mc.getProperty("contentBase64");log.info("2:"+c);var bc = Base64.decodeBase64(c);log.info("3:"+bc);  var result = "";  for(var i = 0; i                                                                                                                               
                                             < bc.length; ++i){     result+= (String.fromCharCode(bc[i]));  }   log.info("result:"+result);      mc.setProperty("contentDecoded", result);]]></script>

Доступ к декодированному контенту можно получить в свойстве «contentDecoded».

Надеюсь, это поможет.

0 голосов
/ 05 марта 2019

В указанной вами ошибке содержится плохо отформатированная трассировка стека:

Evaluation of the XPath expression syn:base64Decode(syn:get-property('cadena64')) resulted in an error  
More TID[-1234] [ESB] [2019-03-04 19:27:23,359] ERROR {org.apache.synapse.util.xpath.SynapseXPath} - 
Evaluation of the XPath expression syn:base64Decode(syn:get-property('cadena64')) resulted in an error 
net.sf.saxon.xpath.XPathEvaluator.compile(XPathEvaluator.java:378) 
org.apache.synapse.util.xpath.SynapseXPath.evaluateDOMXPath(SynapseXPath.java:529) 
....

Это дает нам некоторую информацию, но не так, как нам бы хотелось.Он говорит нам, что выражение XPath было оценено Saxon, и говорит нам, что Saxon сообщал о статической ошибке в выражении.Это также говорит нам, что это довольно старая версия Saxon, поскольку в версиях, по крайней мере, начиная с Saxon 9.6, класс XPathEvaluator содержал около 330 строк.Что он не говорит нам, так это какая на самом деле ошибка.

Плохая диагностика, по-видимому, является обязанностью синапса Apache.

Боюсь, что это всего лишь маленький шаг к ответувопрос, но я надеюсь, что информация кому-то пригодится.

...