Как передать динамические поля Запрос к базе данных с помощью WSO2ESB ИЛИ WSO2DSS

Я хочу передать свой запрос в базу данных для получения столбца. Я передаю динамические столбцы с помощью ESB, моя конфигурация такая

 <proxy xmlns="http://ws.apache.org/ns/synapse" name="dbl3" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">   <target>
         <inSequence>
            <property name="A" value="select e_name,e_address from emp where " scope="default" type="STRING"/>
            <property name="B" expression="//fieldname/text()" scope="default" type="STRING"/>
            <property name="C" expression="//fieldvalue/text()" scope="default" type="STRING"/>
            <property name="D" value="=" scope="default" type="STRING"/>
            <property name="E" expression="concat(get-property('A'),get-property('B'),get-property('D'),get-property('C'))" scope="default" type="STRING"/>
            <dblookup>
               <connection>
                  <pool>
                     <password>Youtility11</password>
                     <user>youtilitydba</user>
                     <url>jdbc:postgresql://localhost:5432/sample</url>
                     <driver>org.postgresql.Driver</driver>
                  </pool>
               </connection>
               <statement>
                  <sql>get-property('E')</sql>
                  <result name="ee" column="e_name"/>
               </statement>
            </dblookup>
            <log level="custom">
               <property name="AA" expression="get-property('A')"/>
               <property name="BB" expression="get-property('B')"/>
               <property name="CC" expression="get-property('C')"/>
               <property name="DD" expression="get-property('ee')"/>
               <property name="EE" expression="get-property('E')"/>
            </log>
         </inSequence>
         <outSequence>
                <send/>
             </outSequence>   </target>   <description></description> </proxy>

Мой вывод такой:

EE = select e_name,e_address from emp where e_address=thane
EE = select e_name,e_address from emp where e_no=5

На основе входных значений будет сгенерирован запрос, как я могу передать вышеуказанный запрос в базу данных? Моя ошибка такова:

[2013-01-24 14:22:32,743] ERROR - DBLookupMediator Error executing statement : get-property('E') against DataSource : jdbc:postgresql://localhost:5432/sample
org.postgresql.util.PSQLException: ERROR: syntax error at or near "get"
 Position: 1
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
    at org.apache.synapse.mediators.db.DBLookupMediator.processStatement(DBLookupMediator.java:46)
    at org.apache.synapse.mediators.db.AbstractDBMediator.mediate(AbstractDBMediator.java:143)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:154)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
    at org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:144)
    at org.apache.axis2.transport.http.util.RESTUtil.processXMLRequest(RESTUtil.java:89)
    at org.apache.synapse.transport.nhttp.util.RESTUtil.processPOSTRequest(RESTUtil.java:189)
    at org.apache.synapse.transport.nhttp.ServerWorker.processEntityEnclosingMethod(ServerWorker.java:411)
    at org.apache.synapse.transport.nhttp.ServerWorker.run(ServerWorker.java:268)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:679)

person user1983299    schedule 24.01.2013    source источник
comment
как мы можем передать переменную в оператор sql или базу данных... используя wso2 esb   -  person user1983299    schedule 24.01.2013


Ответы (1)


Боюсь, вы не можете передать оператор SQL элементу "<sql/>" посредников DBLookup/DBReport, используя конструкцию "get-property". Кроме того, я считаю, что то, что вы пытаетесь сделать, - это своего рода хак для передачи переменных в запрос SQL. Правильный способ сделать это — использовать WSO2 Data Services Server. Пожалуйста, обратитесь к документации WSO2 DSS [1], которая предоставляет вам исчерпывающее руководство по использованию его для выполнения ваших задач по манипулированию данными с его богатым набором функций, предлагаемых пользователям.

[1] http://docs.wso2.org/wiki/display/DSS301/WSO2+Data+Services+Server+Documentation

person Prabath Abeysekara    schedule 23.02.2013
comment
Не похоже, что DSS может справиться с этим намного лучше. Вот недавняя запись в блоге, демонстрирующая, как динамические запросы поддерживается в DSS. В основном части динамического SQL-запроса передаются как параметры строки HTTP-запроса и предупреждают об атаках SQL-инъекций. Вообще не чистое решение :( - person Brian; 09.10.2018