2017-03-12 182 views
1

其实我使用的是代理服务,并给予它的要点是如下: -WSO2映射问题

<proxy xmlns="http://ws.apache.org/ns/synapse" name="TestProxy" transports="jms" statistics="disable" trace="disable" startOnLoad="true"> 
    <inSequence> 
    <property name="userName" value="****"></property> 
    <property name="password" value="****"></property> 
    <property name="url" value="********"></property>   
    <property name="action" value="updateData"></property> 
    <iterate id="Item" expression="//itemList/item" sequential="true"> 
     <target> 
      <sequence> 
          <property name="DSP" expression="//DSP/text()"></property> 
          <property name="USER" expression="//USER/text()"></property> 
          <property name="PID" expression="//PID/text()"></property> 
          <property name="PMJ" expression="//PMJ/text()"></property> 
          <property name="PMT" expression="//PMT/text()"></property> 
          <property name="NZPO" expression="//NZPO/text()"></property> 
          <property name="PD" expression="//PD/text()"></property> 
          <property name="SD" expression="//SD/text()"></property> 
          <class name="com.esb.integration.mediators.DbLookup"></class> 
          <log separator=",**after updatedb call**" description=""></log> 
          <payloadFactory media-type="json"> 
           <format>  {"Result":"$1..."} </format> 
           <args> 
            <arg evaluator="xml" expression="get-property('status')"></arg> 
           </args> 
          </payloadFactory> 
          <log separator=", ***Updatedb Response***"> 
           <property name="Response" expression="json-eval($.)"></property> 
          </log> 
      </sequence> 
      </target> 
      </iterator>   
    </inSequence> 
    <loopback/> 
     <outSequence/> 
    <parameter name="transport.jms.ContentType">application/json</parameter> 
<parameter name="transport.jms.Destination">TestProxy.Q</parameter> 

Java类是如下: -

package com.esb.integration.mediators; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.ResultSetMetaData; 
import java.sql.Statement; 

import org.apache.axiom.om.OMAbstractFactory; 
import org.apache.axiom.om.OMElement; 
import org.apache.axiom.om.OMFactory; 
import org.apache.axiom.om.OMNamespace; 
import org.apache.axiom.om.OMText; 

import org.apache.synapse.MessageContext; 
import org.apache.synapse.mediators.AbstractMediator; 

public class DbLookup extends AbstractMediator { 

    private String url; 
    private String userName; 
    private String password; 
    private String database; 
    private String status; 
    private String action; 
    private String DSP; 
    private String USER; 
    private String PID; 
    private String PMJ; 
    private String PMT; 
    private String NZPO; 
    private String PD; 
    private String SD; 
    public boolean mediate(MessageContext context) { 

     String url = (String) context.getProperty("url"); 
     String userName = (String) context.getProperty("userName"); 
     String password = (String) context.getProperty("password"); 
     String database = (String) context.getProperty("database"); 
     String status = (String) context.getProperty("status"); 
     String action = (String) context.getProperty("action"); 

     try { 
      System.out.println("Inside DB Extractor"); 
      System.out.println("Action: "+action); 
      Class.forName("com.access.JDBCDriver"); 

      Connection conn = DriverManager.getConnection(url,userName,password); 
      Statement stmt = conn.createStatement(); 
      System.out.println("After getting connection"); 

      if (action.equals("updateData")){ 
       System.out.println("Inside if: "+action); 
       int result =0; 
       DSP = (String) context.getProperty("DSP"); 
       USER = (String) context.getProperty("USER"); 
       PID = (String) context.getProperty("PID"); 
       PMJ = (String) context.getProperty("PMJ"); 
       PMT = (String) context.getProperty("PMT"); 
       NZPO = (String) context.getProperty("NZPO"); 
       PD = (String) context.getProperty("PD"); 
       SD = (String) context.getProperty("SD"); 

       String updateQuery = "Update Table Set DSP = '"+DSP+"',USER = '"+USER+"',PID = '"+PID+"',PMJ="+PMJ+",PMT="+PMT+" Where DSP<>'Y' AND NZPO='"+NZPO+"' AND PD='"+PD+"' AND SD="+SD; 
       System.out.println("Query String: "+updateQuery); 
       result = stmt.executeUpdate(updateQuery); 
       if(result>0){ 
        String response = "successfully updated "+result+" rows"; 
        System.out.println("successfully added "+result); 
        context.setProperty("status",response); 
        return true; 
       } 

       else{ 
        System.out.println("failed"); 
        context.setProperty("status","0 rows were updated"); 
        return true; 
       } 

      } 
      else { 
       context.setProperty("status","Failed"); 
       return false; 
      } 
     }catch (Exception e) { 
      System.out.println("Got an exception! "); 
      System.out.println(e.getMessage()); 
      context.setProperty("status","Failed"); 
      return false; 
     } 
    } 

    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 
    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 
    public String getDatabase() { 
     return database; 
    } 

    public void setDatabase(String database) { 
     this.database = database; 
    } 
    public String getstatus() { 
     return status; 
    } 

    public void setstatus(String status) { 
     this.status = status; 
    } 

    public String getAction() { 
     return action; 
    } 

    public void setAction(String action) { 
     this.action = action; 
    } 


    public String getDSP() { 
     return DSP; 
    } 
    public void setDSP(String DSP) { 
     DSP = DSP; 
    } 
    public String getUSER() { 
     return USER; 
    } 
    public void setUSER(String USER) { 
     USER = USER; 
    } 
    public String getPID() { 
     return PID; 
    } 
    public void setPID(String PID) { 
     PID = PID; 
    } 
    public String getPMJ() { 
     return PMJ; 
    } 
    public void setPMJ(String PMJ) { 
     PMJ = PMJ; 
    } 
    public String getPMT() { 
     return PMT; 
    } 
    public void setPMT(String PMT) { 
     PMT = PMT; 
    } 
    public String getNZPO() { 
     return NZPO; 
    } 
    public void setNZPO(String NZPO) { 
     NZPO = NZPO; 
    } 
    public String getPD() { 
     return PD; 
    } 
    public void setPD(String PD) { 
     PD = PD; 
    } 
    public String getSD() { 
     return SD; 
    } 
    public void setSD(String SD) { 
     SD = SD; 
    } 
} 

代理工作正常。

但是,无法记录结果的值。

每当它显示为空值(如{“结果”:“...”})。

我想看看结果每次的值时,迭代器调解员将得到执行。

我也试过“$ ctx:status”。

但它不起作用。

我该怎么做?

回答

0

而不是默认(突触)范围,请使用operation范围。

集:

org.apache.synapse.core.axis2.Axis2MessageContext axis2smc = (org.apache.synapse.core.axis2.Axis2MessageContext) synCtx; 
org.apache.axis2.context.MessageContext axis2MessageCtx = axis2smc.getAxis2MessageContext(); 
axis2smc.getAxis2MessageContext().getOperationContext().setProperty("status", resultValue); 

得到:

get-property('operation','status') 
+0

所以我应该修改如下面的Java代码? 如果(结果> 0){ \t \t \t \t \t字符串resultValue = “成功更新 ”+结果+“ 行”; \t \t \t \t \t System.out.println(“successfully added”+ result); \t \t \t \t \t org.apache.synapse.core.axis2.Axis2MessageContext axis2smc =(org.apache.synapse.core.axis2.Axis2MessageContext)synCtx; \t \t \t \t \t org.apache.axis2.context.MessageContext axis2MessageCtx = axis2smc.getAxis2MessageContext(); \t \t \t \t \t axis2smc.getAxis2MessageContext()。getOperationContext()。setProperty(“status”,resultValue); \t \t \t \t \t context.setProperty(“status”,resultValue); \t \t \t \t \t return true; \t \t \t \t} –

+0

对我来说它没有操作范围。 –