2016-04-28 10 views
1

Ich habe einen Proxy-Dienst, der einen externen Service mit WS-Sicherheit aufrufen muss. Ich muss den Dienst aufrufen, und basierend auf der Antwort muss ich einige Informationen extrahieren und dann einen Datendienst aufrufen, um die Datenbank zu aktualisieren. Als ich die Antwort erhalte und die Nutzlast erstelle, um den Datendienst anzurufen, hat sie auch den ws Sicherheitsheader, der in einer Ausnahme endet.WSO2 ESB kann ws-security-Header in der Antwort vor dem DSS-Aufruf nicht entfernen

Ich habe

verwendet

<header action="remove" name="wsse:Security" scope="default" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" />

beim Erstellen und den Datendienst anrufen, aber ohne Glück am Ende.

Unten ist mein Proxy-Service.

<?xml version="1.0" encoding="UTF-8"?> 
<proxy name="EDI_Test_Proxy_2" startOnLoad="true" trace="disable" 
    transports="http https" xmlns="http://ws.apache.org/ns/synapse"> 
    <target> 
     <inSequence> 
      <header name="Action" scope="default" value="get_mcash_data" /> 
      <property name="Content-Type" scope="transport" type="STRING" 
       value="application/soap+xml; charset=UTF-8; action=get_mcash_data" /> 
      <call> 
       <endpoint> 
        <address trace="disable" 
         uri="http://localhost:9770/services/my_fetch_data_service" /> 
       </endpoint> 
      </call> 
      <property expression="//mc:mcash/mc:tran_id/text()" name="tran_id" 
       scope="default" type="STRING" xmlns:mc="http://ws.wso2.org/dataservice" 
       xmlns:ns="http://org.apache.synapse/xsd" /> 
      <log level="custom"> 
       <property expression="$ctx:tran_id" name="tran_id" /> 
      </log> 
      <filter xmlns:mc="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd" 
       xpath="boolean(//mc:mcash/mc:mobile_no)"> 
       <then> 
        <property expression="//mc:mcash/mc:tran_id/text()" name="tran_id" 
         scope="default" type="STRING" /> 
        <property expression="//mc:mcash/mc:mobile_no/text()" 
         name="mobile_no" scope="default" type="STRING" /> 
        <property expression="//mc:mcash/mc:tran_amt/text()" name="tran_amt" 
         scope="default" type="STRING" /> 
        <property expression="//mc:mcash/mc:tran_date/text()" 
         name="tran_date" scope="default" type="STRING" /> 
        <property expression="//mc:mcash/mc:tran_time/text()" 
         name="tran_time" scope="default" type="STRING" /> 
        <property expression="//mc:mcash/mc:part_tran_srl_num/text()" 
         name="part_tran_srl_num" scope="default" type="STRING" /> 
        <log level="custom"> 
         <property expression="$ctx:tran_id" name="tran_id" /> 
         <property expression="$ctx:mobile_no" name="mobile_no" /> 
         <property expression="$ctx:tran_amt" name="tran_amt" /> 
         <property expression="$ctx:tran_date" name="tran_date" /> 
         <property expression="$ctx:tran_time" name="tran_time" /> 
         <property expression="$ctx:part_tran_srl_num" name="tran_time" /> 
        </log> 
        <payloadFactory description="pf_mcash" media-type="xml"> 
         <format> 
          <flw:purchaceFromMMR xmlns:flw="http://flw.mwt.mobitel.com/"> 
           <!--Optional: --> 
           <bankPurchaseRequest xmlns=""> 
            <amount>$1</amount> 
            <!--Optional: --> 
            <bankCode>XXX</bankCode> 
            <!--Optional: --> 
            <date>$2</date> 
            <!--Optional: --> 
            <mobile>$3</mobile> 
            <!--Optional: --> 
            <time>$4</time> 
            <!--Optional: --> 
            <transactionId>$5</transactionId> 
           </bankPurchaseRequest> 
          </flw:purchaceFromMMR> 
         </format> 
         <args> 
          <arg evaluator="xml" expression="$ctx:tran_amt" /> 
          <arg evaluator="xml" expression="$ctx:tran_date" /> 
          <arg evaluator="xml" expression="$ctx:mobile_no" /> 
          <arg evaluator="xml" expression="$ctx:tran_time" /> 
          <arg evaluator="xml" expression="$ctx:tran_id" /> 
         </args> 
        </payloadFactory> 
        <call> 
         <endpoint> 
          <address trace="disable" 
           uri="https://my_external_web_service/to_be/called?wsdl"> 
           <enableSec policy="gov:ws-policy/sample_policy.xml" /> 
          </address> 
         </endpoint> 
        </call> 
        <loopback /> 
       </then> 
       <else> 
        <log> 
         <property name="STATUS" value="*****No data available*****" /> 
        </log> 
       </else> 
      </filter> 
     </inSequence> 
     <outSequence> 
      <header action="remove" name="wsse:Security" scope="default" 
       xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" /> 
      <header action="remove" name="To" scope="default" /> 
      <property expression="//return/mobile/text()" name="mobile" 
       scope="default" type="STRING" /> 
      <property expression="//return/date/text()" name="date" 
       scope="default" type="STRING" /> 
      <property expression="//return/recipetNo/text()" name="recipetNo" 
       scope="default" type="STRING" /> 
      <property expression="//return/resultCode/text()" name="resultCode" 
       scope="default" type="STRING" /> 
      <property expression="//return/resultDesc/text()" name="resultDesc" 
       scope="default" type="STRING" /> 
      <payloadFactory description="pf_mcash_update" 
       media-type="xml"> 
       <format> 
        <p:TestUpdate xmlns:p="http://ws.wso2.org/dataservice"> 
         <!--Exactly 1 occurrence --> 
         <p:trf_status>$1</p:trf_status> 
         <!--Exactly 1 occurrence --> 
         <p:resp_code>$2</p:resp_code> 
         <!--Exactly 1 occurrence --> 
         <p:receipt>$3</p:receipt> 
         <!--Exactly 1 occurrence --> 
         <p:rsp_message>$4</p:rsp_message> 
         <!--Exactly 1 occurrence --> 
         <p:tran_id>$5</p:tran_id> 
         <!--Exactly 1 occurrence --> 
         <p:part_tran_srl_num>$6</p:part_tran_srl_num> 
        </p:TestUpdate> 
       </format> 
       <args> 
        <arg value="10" /> 
        <arg evaluator="xml" expression="$ctx:resultCode" /> 
        <arg evaluator="xml" expression="$ctx:recipetNo" /> 
        <arg evaluator="xml" expression="$ctx:resultDesc" /> 
        <arg value="SDC311521" /> 
        <arg evaluator="xml" expression="$ctx:part_tran_srl_num" /> 
       </args> 
      </payloadFactory> 
      <header name="Action" scope="default" value="TestUpdate" /> 
      <property name="Content-Type" scope="transport" type="STRING" 
       value="application/soap+xml; charset=UTF-8; action=TestUpdate" /> 
      <call> 
       <endpoint> 
        <address trace="disable" 
         uri="http://my_internal_data_service/which_ends_up_with/ws_sec_header" /> 
       </endpoint> 
      </call> 
     </outSequence> 
     <faultSequence /> 
    </target> 
</proxy> 

Jeder Rat wird sehr geschätzt.

Antwort

1

Können Sie den folgenden Protokollmediator vor dem Aufrufmediator in der Ausgangssequenz hinzufügen und diesen mit den Ausgabeprotokollen aktualisieren. wird es uns helfen, das Problem zu identifizieren.

<log level="full"> 
      <property name="OutSequence" value="==== OUTSEQ ===="/> 
    </log> 
+0

Danke für die Kommentierung, ich bin in wird mit Anfragen so schnell wie möglich aktualisieren, In der Zwischenzeit nur zur Klärung habe ich Wall in der ' Repository/conf/axis2/axis2.xml' wie folgt ' ' ist das richtig? Ist es wie ein globales Engagement, bei dem alle Dienstleistungen in Wallung geraten? – Yasothar

1

Die Frage war ich Wall Modul <module ref="rampart" /> im axis2.xml in <ESB_HOME>repository/conf/axis2/ gefunden engagiert haben. Nach dem Auskommentieren dieser Zeile war die Ausnahme verschwunden und der dss-Aufruf funktionierte. Der Grund, warum ich glaube, wenn diese Codezeile aktiviert ist, ist ws-securiy global beschäftigt und alle Service-Aufrufe werden nach ws-security header suchen. Bitte korrigieren Sie mich, wenn ich falsch liege.