WSO2映射问题 [英] WSO2 mapping issue

查看:59
本文介绍了WSO2映射问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

实际上,我正在使用代理服务,并给出了要点如下:-

Actually I'm using a proxy service and have given a gist of it which is as below:-

<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;
    }
}

代理正常工作.

但是,无法记录Result的值.

But ,not able to log the value of Result.

每次显示为null.(例如{"Result":"..."})

Every time it's showing as null.(like {"Result":"..."} )

我希望每次迭代器调解器执行时都看到Result的值.

I want to see the value of Result everytime when the iterator mediator will get execute.

我也尝试过使用"$ ctx:status".

I've also tried with "$ctx:status".

但这是行不通的.

我该怎么做?

推荐答案

而不是默认(突触)作用域,请使用 operation 作用域.

Instead of default (synapse) scope, use operation scope.

设置:

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

这篇关于WSO2映射问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆