2016-12-13 14 views
0

Я создал API в ESB, как этот фрагмент кода:URL параметр wso2esb

<api xmlns="http://ws.apache.org/ns/synapse" name="contact_v1" 
    <resource methods="GET" uri-template="/contact-by-email?email={query.param.email}" inSequence="crm_contact-by-email_v1" outSequence="crm_contact-by-email_v1" faultSequence="crm_contact-by-email-error_v1"/> 
</api> 

В моей последовательности я извлечь запрос из параметров, электронная почта, как этот

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="crm_contact-by-email_v1" xmlns="http://ws.apache.org/ns/synapse"> 
    <in> 

     <script language="js"><![CDATA[try { 
        var randomnumber1=Math.floor((Math.random() * 10000) + 1); 
        mc.setProperty("sessionnumber", randomnumber1.toString()); 
       } catch(e) { 
       }]]></script> 

     <property expression="$axis2:REST_URL_POSTFIX" name="myURL" 
      scope="default" type="STRING" xmlns:ns="http://org.apache.synapse/xsd"/> 
     <script language="js"><![CDATA[try { 
      var log = mc.getServiceLog(); 
      var email = mc.getProperty('query.param.email'); 
      log.info("emailxxxxxx "+email); 

      } catch(e) {}]]></script> 

    </in> 
    <out> 
     <send/> 
     <drop/> 
    </out> 
</sequence> 

Когда я делаю запрос с шифровальный адрес электронной почты, такой как

test%40test.com 

Работает без проблем.

Но когда я делаю запрос с

[email protected] 

он появляется сообщение об ошибке

<tp:fault xmlns:tp="https://xxxxxxx.com/"><tp:code>404</tp:code><tp:type>Status report</tp:type><tp:message>Not Found</tp:message><tp:description>The requested resource (//[email protected]) is not available.</tp:description></tp:fault> 

ли у вас есть идея

С наилучшими пожеланиями

ответ

2

символов, как @ зарезервированы символы для разделителей в спецификации RFC для URI-шаблонов (я могу объяснить больше, если вам интересно). Поэтому, чтобы разрешить @ в качестве значения параметра электронной почты, определите шаблон uri с {+ query.param.email}, как показано ниже.

<api xmlns="http://ws.apache.org/ns/synapse" name="contact_v1" 
    <resource methods="GET" uri-template="/contact-by-email?email={+query.param.email}" inSequence="crm_contact-by-email_v1" outSequence="crm_contact-by-email_v1" faultSequence="crm_contact-by-email-error_v1"/> 
</api> 
+0

Спасибо @maheeka. оно работает –

 Смежные вопросы

  • Нет связанных вопросов^_^