Help on other functions

142 views
Skip to first unread message

mdachi

unread,
Oct 29, 2010, 11:47:43 AM10/29/10
to temenos-ofs-jdbc
Hello all,

I have tested the data services with the test configuration (.dbs)
file and it works fine with the getUserList function. Now I want to
extend it to perform funds transfers and balance enquiries as well as
authorize transactions. However, when I modified the sample
configuration file to include more operations (functions) I always get
an error saying the OFS was not valid.

Is there anyone who has got example configurations to enable the WS to
send OFS strings for Funds.Transfers, Balance inquiries, etc? I am
more specifically looking at how I can successfully pass parameters to
the OFS.

Your help is highly appreciated.

Thanks,

Hamisi
---------

Dmitry.

unread,
Oct 29, 2010, 2:12:42 PM10/29/10
to temenos-ofs-jdbc
Hamisi,

You can check the modifyCustomer operation defined in test service:
http://code.google.com/p/temenos-ofs-jdbc/wiki/Wso2DataServiceExample

This is an example how to send ofs application message.

There is a query defined:
SELECT SENDOFS CUSTOMER,/I/PROCESS,{{USER}}/{{PASS}}/,{{set ?1}}
LAST.NAME:1: = set ?2
END
----
SELECT SENDOFS END are the keywords for driver.
You just need to start query with SELECT SENDOFS and end it with END.

After SENDOFS you need to specify everything except data.
APPLICATION,VERSION/COMMAND/SUBCOMMAND,USER/PASSWORD,ID
Refer http://code.google.com/p/temenos-ofs-jdbc/wiki/OFSSyntax

In our case:
CUSTOMER,/I/PROCESS,{{USER}}/{{PASS}}/,{{set ?1}}
where
{{USER}} - special placeholder for username (will be substituted on
execution)
{{PASS}} - special placeholder for password
{{set ?1}} - will be substituted with first service parameter

Then in each next new line there should be data defined.
In our case only one field defined LAST.NAME:1:
And on execution it's value will be assigned to the second parameter

So, if first parameter will be 123 and second ABC then the
following OFS will be sent to server:
CUSTOMER,/I/PROCESS,T24_USER/T24_PASS/,123,LAST.NAME:1:="ABC"
--
You can check the dataservice logs to see real OFS request and
response.
--
I can help you to construct query from your working OFS.
--
Regards,
Dmitry

mdachi

unread,
Oct 30, 2010, 4:19:05 AM10/30/10
to temenos-ofs-jdbc
Thanks very much Dmitry,

I seem to now understand what you mean. Here is my query that I want
to create for funds transfer:

FUNDSTRANSFER,/I/PROCESS,HAMISI/
123456,,TRANSACTION.TYPE=AC,DEBIT.ACCT.NO=DEBIT.CURRENCY=TZS,DEBIT.AMOUNT=1000.00,DEBIT.VALUE.DATE=20100906,CREDIT.ACCT.NO=005009656717

I will add the rest of the parameters once I see how the format will
be.

Please help me create the query for the DS.

Thanks very much.

Hamisi
------

On Oct 29, 9:12 pm, "Dmitry." <dlukya...@ukr.net> wrote:
> Hamisi,
>
> You can check the modifyCustomer operation defined in test service:http://code.google.com/p/temenos-ofs-jdbc/wiki/Wso2DataServiceExample
>
> This is an example how to send ofs application message.
>
> There is a query defined:
> SELECT SENDOFS CUSTOMER,/I/PROCESS,{{USER}}/{{PASS}}/,{{set ?1}}
>    LAST.NAME:1:        = set ?2
> END
> ----
> SELECT SENDOFS END are the keywords for driver.
> You just need to start query with SELECT SENDOFS and end it with END.
>
> After SENDOFS you need to specify everything except data.
> APPLICATION,VERSION/COMMAND/SUBCOMMAND,USER/PASSWORD,ID
> Referhttp://code.google.com/p/temenos-ofs-jdbc/wiki/OFSSyntax

Dmitry.

unread,
Oct 30, 2010, 4:47:52 AM10/30/10
to temenos-ofs-jdbc
Hamisi,

Define an operation in your dataservice with 6 parameters:
1. TransactionType
2. DebitAccountNo
3. CreditAccountNo
4. CurrencyCode
5. DebitAmount
6. DebitValueDate

Then use this as sql query:

SELECT SENDOFS FUNDSTRANSFER,/I/PROCESS,{{USER}}/{{PASS}},
TRANSACTION.TYPE::= set ?1
DEBIT.ACCT.NO:: = set ?2
CURRENCY:: = set ?4
DEBIT.AMOUNT:: = set ?5
DEBIT.VALUE.DATE::= set ?6
CREDIT.ACCT.NO:: = set ?3
END

Regards,
Dmitry

mdachi

unread,
Oct 30, 2010, 5:06:01 AM10/30/10
to temenos-ofs-jdbc
Thanks very much Dmitry and I will try this immediately

mdachi

unread,
Oct 30, 2010, 5:19:05 AM10/30/10
to temenos-ofs-jdbc
Hello Dmitry,

I looked at the query and found :: in front of every parameter. I
thought it should be :1:, :2: for the first, second, ... parameters.
Otherwise I am building up the service configuration file for that
purpose.

Thanks,

Hamisi
------

On Oct 30, 11:47 am, "Dmitry." <dlukya...@ukr.net> wrote:

Dmitry.

unread,
Oct 30, 2010, 5:38:32 AM10/30/10
to temenos-ofs-jdbc
Actually it's a syntax of OFS.
FIELD:Mv:Sv=VALUE

where
Mv is a multivalue number
Sv is a subvalue number

There are fields in temenos that could have several values - arrays
If the field is a single value field, you can omit Mv and Sv numbers.

In case of FT (as i remember) all the fields specified are single
values fields,
so we should use FIELD::=VALUE

the peference to the parameter number is expression "set ?3"
this refers to dataservice parameter #3

Regards

mdachi

unread,
Oct 30, 2010, 5:45:37 AM10/30/10
to temenos-ofs-jdbc
Thanks for your clarification.

I will tell you the results of the changes I made shortly.

Hamisi
------

mdachi

unread,
Nov 1, 2010, 3:06:39 AM11/1/10
to temenos-ofs-jdbc
Hello Dmitry,

I hope you are fine after the long weekend. I tried the query with no
success. I decided to test the getCustomerById. I did this by passing
one parameter in the URL and all I got was an error. The surprising
fact is that the getUserList is working fine, even when I invoke it in
the browser like so: http://192.168.102.127:9763/services/ACBMobileWS/getUserList.
It returns the list of users without no issues. Now, when I try to
pass one parameter to getCustomerById, passing a valid customer
number, it fails.

Here is the URL http://192.168.102.127:9763/services/ACBMobileWS/getCustomerById?id=734585

734585 is my customer number in the test system.

Here is the output in the browser:

<soapenv:Reason>
-
<soapenv:Text xml:lang="en-US">
Source Data Service:-
Name: ACBMobileWS
Location: C:\wsoa2\WSO2DA~1.2\bin\..\repository\deployment\server
\dataservices\ACBMobileWS.dbs
Description: T24 OFS Service
Default Namespace: http://my.namespace
Current Request Name: getCustomerById
Current Params: {ID=734585}
Nested Exception:-
java.lang.NullPointerException

at
org.wso2.carbon.dataservices.core.description.query.SQLQuery.createProcessedSql(SQLQuery.java:
714)

at
org.wso2.carbon.dataservices.core.description.query.SQLQuery.createProcessedPreparedStatement(SQLQuery.java:
764)

at
org.wso2.carbon.dataservices.core.description.query.SQLQuery.processNormalQuery(SQLQuery.java:
472)

at
org.wso2.carbon.dataservices.core.description.query.SQLQuery.runQuery(SQLQuery.java:
1412)

at
org.wso2.carbon.dataservices.core.description.query.Query.execute(Query.java:
214)

at
org.wso2.carbon.dataservices.core.engine.CallQuery.execute(CallQuery.java:
150)

at
org.wso2.carbon.dataservices.core.engine.CallQueryGroup.execute(CallQueryGroup.java:
108)

at
org.wso2.carbon.dataservices.core.description.operation.Operation.execute(Operation.java:
64)

at
org.wso2.carbon.dataservices.core.engine.DataService.invoke(DataService.java:
318)

at
org.wso2.carbon.dataservices.core.engine.DSOMDataSource.serialize(DSOMDataSource.java:
90)

at
org.wso2.carbon.dataservices.core.engine.DSOMDataSource.serialize(DSOMDataSource.java:
76)

at
org.apache.axiom.om.impl.llom.OMSourcedElementImpl.serializeAndConsume(OMSourcedElementImpl.java:
800)

at
org.apache.axis2.transport.http.ApplicationXMLFormatter.writeTo(ApplicationXMLFormatter.java:
143)

at
org.apache.axis2.transport.http.CommonsHTTPTransportSender.sendUsingOutputStream(CommonsHTTPTransportSender.java:
361)

at
org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:
238)

at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)

at
org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:
45)

at
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:
114)

at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:178)

at
org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:
144)

at
org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:
139)

at org.apache.axis2.transport.http.AxisServlet
$RestRequestProcessor.processURLRequest(AxisServlet.java:816)

at
org.wso2.carbon.core.transports.CarbonServlet.handleRestRequest(CarbonServlet.java:
149)

at
org.wso2.carbon.core.transports.CarbonServlet.doGet(CarbonServlet.java:
138)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at
org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:
90)

at
org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:
111)

at
org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:
67)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at org.wso2.carbon.bridge.BridgeServlet.service(BridgeServlet.java:
154)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
269)

at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
188)

at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
210)

at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
174)

at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)

at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
117)

at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
108)

at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
151)

at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
870)

at org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
665)

at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
528)

at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:
81)

at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:685)

at java.lang.Thread.run(Thread.java:619)


</soapenv:Text>
</soapenv:Reason>

Where do I go wrong?

Thanks,

Hamisi
------

On Oct 30, 12:38 pm, "Dmitry." <dlukya...@ukr.net> wrote:

Dmitry.

unread,
Nov 1, 2010, 3:43:14 AM11/1/10
to temenos-ofs-jdbc
As I remember, the syntax of dbs files changed a little
from version 2.0 to version 2.5

So, try to create your service from scratch using web console.
Today I'll try to create sample dbs file using dss 2.5.1

Regards,
Dmitry


On Nov 1, 9:06 am, mdachi <malip...@gmail.com> wrote:
> Hello Dmitry,
>
> I hope you are fine after the long weekend. I tried the query with no
> success. I decided to test the getCustomerById. I did this by passing
> one parameter in the URL and all I got was an error. The surprising
> fact is that the getUserList is working fine, even when I invoke it in
> the browser like so:http://192.168.102.127:9763/services/ACBMobileWS/getUserList.
> It returns the list of users without no issues. Now, when I try to
> pass one parameter to getCustomerById, passing a valid customer
> number, it fails.
>
> Here is the URLhttp://192.168.102.127:9763/services/ACBMobileWS/getCustomerById?id=7...
> ...
>
> read more »

mdachi

unread,
Nov 1, 2010, 4:34:04 AM11/1/10
to temenos-ofs-jdbc
OK thanks,

But how do I use the web console?

Hamisi
------
> ...
>
> read more »

Dmitry.

unread,
Nov 1, 2010, 1:24:53 PM11/1/10
to temenos-ofs-jdbc

Dmitry Lukyanov

unread,
Nov 1, 2010, 4:41:41 PM11/1/10
to temenos-ofs-jdbc
This should work with DataServices 2.5.1
In version 2.5.1 tag <with-param ... > is mandatory...
Tomorrow I'll check this dbs on real t24 server.


--- Original Message ---
пїЅпїЅ пїЅпїЅпїЅпїЅ: "Dmitry."
пїЅпїЅпїЅпїЅ: "temenos-ofs-jdbc"
пїЅпїЅпїЅпїЅ: 1 November 2010, 19:24:53
пїЅпїЅпїЅпїЅ: Re: Help on other functions

--
Regards,
Dmitry

T24Test25.dbs

Dmitry.

unread,
Nov 4, 2010, 3:09:09 AM11/4/10
to temenos-ofs-jdbc
We found a bug that is arises when t24jdbc.xml file not found in conf
directory.
Here is a new version:
http://code.google.com/p/temenos-ofs-jdbc/downloads/detail?name=t24jdbc-trunk.r134.zip

Also you can use new version of example T24Test25.dbs that you'll find
inside of archive.

Regards,
Dmitry.

On Nov 1, 10:41 pm, "Dmitry Lukyanov" <dlukya...@ukr.net> wrote:
> This should work with DataServices 2.5.1
> In version 2.5.1 tag <with-param ... > is mandatory...
> Tomorrow I'll check this dbs on real t24 server.
>
> --- Original Message ---
>
>  пїЅпїЅ пїЅпїЅпїЅпїЅ: "Dmitry."  
>  пїЅпїЅпїЅпїЅ: "temenos-ofs-jdbc"  
>  пїЅпїЅпїЅпїЅ: 1 November 2010, 19:24:53
>  пїЅпїЅпїЅпїЅ: Re: Help on other functions
>
> > See this manual
> >http://wso2.org/project/solutions/data-services/java/2.5.1/docs/quick...
> > --
> > Regards,
> >  Dmitry
>
> --
> Regards,
>   Dmitry
>
>
>
>  T24Test25.dbs
> 2KViewDownload

mdachi

unread,
Nov 8, 2010, 12:55:32 PM11/8/10
to temenos-ofs-jdbc
Hello Dmitry,

I tested the service and the test dbs it worked with Get user and
customer modification. Now I am crafting my first FUNDS.TRANSFER OFS
and test it. Will revert back with results.

Your assistance is much appreciated.

Thanks,

Hamisi
------

On Nov 4, 10:09 am, "Dmitry." <dlukya...@ukr.net> wrote:
> We found a bug that is arises when t24jdbc.xml file not found in conf
> directory.
> Here is a new version:http://code.google.com/p/temenos-ofs-jdbc/downloads/detail?name=t24jd...
>
> Also you can use new version of example T24Test25.dbs that you'll find
> inside of archive.
>
> Regards,
>   Dmitry.
>
> On Nov 1, 10:41 pm, "Dmitry Lukyanov" <dlukya...@ukr.net> wrote:
>
> > This should work with DataServices 2.5.1
> > In version 2.5.1 tag <with-param ... > is mandatory...
> > Tomorrow I'll check this dbs on real t24 server.
>
> > --- Original Message ---
>
> >  ï¿½ï¿½ ����: "Dmitry."  
> >  ï¿½ï¿½ï¿½ï¿½: "temenos-ofs-jdbc"  
> >  ï¿½ï¿½ï¿½ï¿½: 1 November 2010, 19:24:53
> >  ï¿½ï¿½ï¿½ï¿½: Re: Help on other functions

mdachi

unread,
Nov 8, 2010, 1:42:07 PM11/8/10
to temenos-ofs-jdbc
Hello Dmitry,

It worked with account balance enquiry that I designed for my
application. Great web service!! Thanks for the assistance as well.

Now I have only one challenge left for me to resolve. I know that the
return values are contained in the list of fields I specified in the
result element section. Now the challenge is, with FUNDS.TRANSFER,
output columns are produced based on the results of the query on the
server. For example, if the FT succeeds, then the result will contain
fields such as RECORD.STATUS=... and when an error is obtained, the
output will contain fields such as OVERRIDE, which are not returned
when the query succeeds.

How do I handle this situation?

Please help.

Thanks,

Hamisi
------


On Nov 4, 10:09 am, "Dmitry." <dlukya...@ukr.net> wrote:
> We found a bug that is arises when t24jdbc.xml file not found in conf
> directory.
> Here is a new version:http://code.google.com/p/temenos-ofs-jdbc/downloads/detail?name=t24jd...
>
> Also you can use new version of example T24Test25.dbs that you'll find
> inside of archive.
>
> Regards,
>   Dmitry.
>
> On Nov 1, 10:41 pm, "Dmitry Lukyanov" <dlukya...@ukr.net> wrote:
>
> > This should work with DataServices 2.5.1
> > In version 2.5.1 tag <with-param ... > is mandatory...
> > Tomorrow I'll check this dbs on real t24 server.
>
> > --- Original Message ---
>
> >  ï¿½ï¿½ ����: "Dmitry."  
> >  ï¿½ï¿½ï¿½ï¿½: "temenos-ofs-jdbc"  
> >  ï¿½ï¿½ï¿½ï¿½: 1 November 2010, 19:24:53
> >  ï¿½ï¿½ï¿½ï¿½: Re: Help on other functions
Message has been deleted

Dmitry.

unread,
Nov 8, 2010, 3:56:50 PM11/8/10
to temenos-ofs-jdbc
Ok,

application ofs request always returns only one column for now: @id
it contains id of the inserted/modified record (FT in your case)

but you can do two ofs requests in one service operation.
let's assume you have enquiry "ENQ.FT" that returns required columns
by parameter FT.ID

so, your query could be like this:
---------------------------------------------------
SELECT SENDOFS FUNDSTRANSFER,/I/PROCESS,{{USER}}/{{PASS}},
TRANSACTION.TYPE::= set ?1
DEBIT.ACCT.NO:: = set ?2
CURRENCY:: = set ?4
DEBIT.AMOUNT:: = set ?5
DEBIT.VALUE.DATE::= set ?6
CREDIT.ACCT.NO:: = set ?3
END

//this is a comment
//lets redefine the value of the parameter #1
//with the value from resultset with name @id
?1 = set ?@id

//second ofs must start with SENDOFS (without SELECT)
SENDOFS ENQUIRY.SELECT,,{{USER}}/{{PASS}},ENQ.FT
//at this moment ?1 contains FT id from the previous ofs
FT.ID:EQ = set ?1
END
---------------------------------------------------
syntax quite strange but it's enough for us.


Now about the errors.
If any of the ofs returns error, this error will be thrown as an
exception.
On the level of service you'll get standard SOAP FAULT message.
http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383507

Fault message will contain message from temenos server

Regards,
Dmitry

mdachi

unread,
Nov 8, 2010, 11:20:40 PM11/8/10
to temenos-ofs-jdbc
Hello Dmitry,

Thanks for the work around. Let me correct myself, in case of a failed
OFS there is no issue, I know SOAP will return an error. In my
question I meant if the OFS did not succeed for reasons like not
enough funds in the account, the system raises and OVERRIDE which
indicates that the FT was not completed but a string is returned from
the server.

Now, this is where my problem is. OFS returns columns depending on the
status of the accounts, whether there are any overrides etc. In other
words, it returns columns dynamically depending on the situation.

My initial solution would be to have a set of columns defined for a
general OFS message. On returning I would inspect which columns have
values and which have not returned anything. But it seems the system
for now throws an exception if a column is defined in the dbs file but
nor returned by the OFS.

Let me test your suggestion and see what it will produce. My aim is to
check if the result produced OVERRIDE or not. I can check the balance
first and work my way out, but there are other conditions to watch.
The best solution would be to return the defined columns and inspect
them.

I appreciate your assistance, though.

Thanks,

Hamisi
------
> On the level of service you'll get standard SOAP FAULT message.http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383507

mdachi

unread,
Nov 9, 2010, 1:10:21 AM11/9/10
to temenos-ofs-jdbc
Hello Dmitry,

I am happy that now I was able to send FT to the server and got a
response as follows:

<doFundsTransferResponse>
<ft>
<id>FT10285130549492</id>
</ft>
</doFundsTransferResponse>

I checked and yes, the FT was fine. Now, what I am trying to do is see
how to find the other details using the FT obtained from the server.

I will test and maybe find a workaround and will come back to you with
results.

Thanks,

Hamisi
------

mdachi

unread,
Nov 9, 2010, 9:39:32 AM11/9/10
to temenos-ofs-jdbc
Hello Dmitry,

I succeeded in achieving my task of posting a transaction using OFS.
It was a long journey since I discovered the OFS string was produced
differently than I expected until when I corrected it.

Now my last challenge. The username and password I configured in the
configuration file (T24Test.dbs) seems to be cached. When I put a
different user (for authorization, say) the logs shows the OFS is
using the new user. On posting to T24, and when I do FT S XXXXXXXXXX,
it shows the inputter is the same original user.

Now, what should I do or where should I go and change?

I tried to change the username and password to come via parameters but
in vain. The system shows FT was posted by the original user.

Please help.

Hamisi
-----

Dmitry.

unread,
Nov 9, 2010, 10:21:20 AM11/9/10
to temenos-ofs-jdbc
did you set query to something like that?
SELECT SENDOFS FUNDSTRANSFER,/I/PROCESS,{{set ?1}}/{{set ?2}},
...

in this case user name must come through first parameter
and pass through second.

--
Regards,
Dmitry

mdachi

unread,
Nov 9, 2010, 11:07:58 AM11/9/10
to temenos-ofs-jdbc
Exactly,

That is what I did. Now I am going to delete the service and restart
the application and then reinstall the service once more and see what
happens. For the large part I have achieved what I am wanted to do.

I am testing it Windows but eventually I want to run it on Linux
because of stability in production.

Thanks,

Hamisi
------

mdachi

unread,
Nov 9, 2010, 12:11:17 PM11/9/10
to temenos-ofs-jdbc
Hello Dmitry,

I deleted the service, restart the server and recreated the service
again. Below is the configuration of such an operation:


<!--================================= doFundsTransfer
======================================-->
<operation name="doFundsTransfer">
<description>Funds Transfer Function</description>
<call-query href="doFundsTransfer" >
<with-param name="uID" query-param="uID" />
<with-param name="uPass" query-param="uPass" />
<with-param name="transactionType" query-
param="transactionType" />
<with-param name="debitAccountNumber" query-
param="debitAccountNumber" />
<with-param name="debitCurrency" query-
param="debitCurrency" />
<with-param name="debitAmount" query-param="debitAmount" /
>
<with-param name="debitValueDate" query-
param="debitValueDate" />
<with-param name="creditAccountNumber" query-
param="creditAccountNumber" />
<with-param name="creditValueDate" query-
param="creditValueDate" />
<with-param name="creditTheirRef" query-
param="creditTheirRef" />
<with-param name="commissionCode" query-
param="commissionCode" />
<with-param name="chargeCode" query-param="chargeCode" />
<with-param name="channelName" query-param="channelName" /
>
</call-query>
</operation>
<query id="doFundsTransfer" useConfig="ACBMobile">
<sql>SELECT SENDOFS FUNDS.TRANSFER,/I/PROCESS,{{set ?1}}/
{{set ?2}},
TRANSACTION.TYPE:: = set ?3
DEBIT.ACCT.NO:: = set ?4
DEBIT.CURRENCY:: = set ?5
DEBIT.AMOUNT:: = set ?6
DEBIT.VALUE.DATE:: = set ?7
CREDIT.ACCT.NO:: = set ?8
CREDIT.VALUE.DATE: = set ?9
CREDIT.THEIR.REF:: = set ?10
COMMISSION.CODE:: = set ?11
CHARGE.CODE:: = set ?12
CHANNEL.NAME:: = set ?13
END
</sql>
<!-- application always returns @id -->
<result element="doFundsTransferResponse" rowName="ft" >
<element name="id" column="@ID" />
</result>
<param name="uID" sqlType="STRING"
type="IN" ordinal="1" />
<param name="uPass" sqlType="STRING"
type="IN" ordinal="2" />
<param name="transactionType" sqlType="STRING"
type="IN" ordinal="3" />
<param name="debitAccountNumber" sqlType="STRING"
type="IN" ordinal="4" />
<param name="debitCurrency" sqlType="STRING"
type="IN" ordinal="5" />
<param name="debitAmount" sqlType="STRING"
type="IN" ordinal="6" />
<param name="debitValueDate" sqlType="STRING"
type="IN" ordinal="7" />
<param name="creditAccountNumber" sqlType="STRING"
type="IN" ordinal="8" />
<param name="creditValueDate" sqlType="STRING"
type="IN" ordinal="9" />
<param name="creditTheirRef" sqlType="STRING"
type="IN" ordinal="10" />
<param name="commissionCode" sqlType="STRING"
type="IN" ordinal="11" />
<param name="chargeCode" sqlType="STRING"
type="IN" ordinal="12" />
<param name="channelName" sqlType="STRING"
type="IN" ordinal="13" />
</query>

and the error I get after I fill all those parameters in the order
shown is:

Fault: Internal Server Error [detail]
<faultstring>DS Fault Message: Error in 'SQLQuery.processNormalQuery'
Source Data Service:- Name: T24Test3 Location: C:\wsoa2\WSO2DA~1.2\bin
\..\repository\deployment\server\dataservices\T24Test3.dbs
Description: Test service Default Namespace: http://my.namespace
Current Request Name: doFundsTransfer Current Params:
{debitCurrency=TZS, creditAccountNumber=10200686198,
channelName=MOBILE, creditTheirRef=TEST, creditValueDate=20101012,
uID=HMALIPULA, uPass=OL1VER123, transactionType=AC,
commissionCode=WAIVE, debitAmount=5000, chargeCode=WAIVE,
debitValueDate=20101012, debitAccountNumber=005009656717} Nested
Exception:- org.t24.driver.T24Exception: T24 OFS Error: SECURITY
VIOLATION&#xd; at
org.t24.driver.T24ResultSet.t24ParseApp(T24ResultSet.java:198)&#xd; at
org.t24.driver.T24ResultSet.&lt;init>(T24ResultSet.java:173)&#xd; at
org.t24.driver.T24QueryFormatter.executeOfs(T24QueryFormatter.java:
226)&#xd; at
org.t24.driver.T24QueryFormatter.execute(T24QueryFormatter.java:
95)&#xd; at
org.t24.driver.T24PreparedStatement.execute(T24PreparedStatement.java:
31)&#xd; at
org.t24.driver.T24PreparedStatement.executeQuery(T24PreparedStatement.java:
42)&#xd; at
org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:
93)&#xd; at
org.wso2.carbon.dataservices.core.description.query.SQLQuery.processNormalQuery(SQLQuery.java:
476)&#xd; at
org.wso2.carbon.dataservices.core.description.query.SQLQuery.runQuery(SQLQuery.java:
1412)&#xd; at
org.wso2.carbon.dataservices.core.description.query.Query.execute(Query.java:
214)&#xd; at
org.wso2.carbon.dataservices.core.engine.CallQuery.execute(CallQuery.java:
150)&#xd; at
org.wso2.carbon.dataservices.core.engine.CallQueryGroup.execute(CallQueryGroup.java:
108)&#xd; at
org.wso2.carbon.dataservices.core.description.operation.Operation.execute(Operation.java:
64)&#xd; at
org.wso2.carbon.dataservices.core.engine.DataService.invoke(DataService.java:
318)&#xd; at
org.wso2.carbon.dataservices.core.engine.DSOMDataSource.serialize(DSOMDataSource.java:
90)&#xd; at
org.wso2.carbon.dataservices.core.engine.DSOMDataSource.serialize(DSOMDataSource.java:
76)&#xd; at
org.apache.axiom.om.impl.llom.OMSourcedElementImpl.serializeAndConsume(OMSourcedElementImpl.java:
800)&#xd; at
org.apache.axis2.transport.http.ApplicationXMLFormatter.writeTo(ApplicationXMLFormatter.java:
143)&#xd; at
org.apache.axis2.transport.http.CommonsHTTPTransportSender.sendUsingOutputStream(CommonsHTTPTransportSender.java:
361)&#xd; at
org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:
238)&#xd; at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:
443)&#xd; at
org.apache.axis2.receivers.AbstractInOutSyncMessageReceiver.invokeBusinessLogic(AbstractInOutSyncMessageReceiver.java:
45)&#xd; at
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:
114)&#xd; at
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:178)&#xd;
at
org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:
144)&#xd; at
org.apache.axis2.transport.http.util.RESTUtil.processXMLRequest(RESTUtil.java:
89)&#xd; at org.apache.axis2.transport.http.AxisServlet
$RestRequestProcessor.processXMLRequest(AxisServlet.java:805)&#xd; at
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:
221)&#xd; at javax.servlet.http.HttpServlet.service(HttpServlet.java:
709)&#xd; at javax.servlet.http.HttpServlet.service(HttpServlet.java:
802)&#xd; at
org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:
90)&#xd; at
org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:
111)&#xd; at
org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:
67)&#xd; at javax.servlet.http.HttpServlet.service(HttpServlet.java:
802)&#xd; at
org.wso2.carbon.bridge.BridgeServlet.service(BridgeServlet.java:
154)&#xd; at javax.servlet.http.HttpServlet.service(HttpServlet.java:
802)&#xd; at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:
269)&#xd; at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:
188)&#xd; at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:
210)&#xd; at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:
174)&#xd; at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:
127)&#xd; at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:
117)&#xd; at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:
108)&#xd; at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:
151)&#xd; at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:
870)&#xd; at org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:
665)&#xd; at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:
528)&#xd; at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:
81)&#xd; at org.apache.tomcat.util.threads.ThreadPool
$ControlRunnable.run(ThreadPool.java:685)&#xd; at
java.lang.Thread.run(Thread.java:619)&#xd; </faultstring>

I don't know what went wrong. I filled the parameters in the order
shown. Funny enough, in another operation, when I pass the user and
pass via parameters it works.

I don't know what goes wrong and where.

Please help.

Thanks,

Hamisi
------

Dmitry.

unread,
Nov 9, 2010, 1:10:24 PM11/9/10
to temenos-ofs-jdbc
Hamisi,

It seems there is user/pass caching on the level of temenos libraries
or even server.
Tomorrow I'll ask my people what they know.

But why do you need this?
Because we don't have such a need.

Regards,
Dmitry

mdachi

unread,
Nov 10, 2010, 1:32:50 AM11/10/10
to temenos-ofs-jdbc
Hello Dmitry,

Hope you are fine. In T24 there is a user and an authorizer for an FT.
Hence I need to use a different user for authorization than the one
who posted the transaction. That is why I need to have two different
users.

Unfortunately the system caches the user and when trying to authorize
it refuses because the same user attempts to perform both functions.

Is there any user out there who use the ds 2.5.1 in production and
what is their experience?

Thanks,

Hamisi
------

Dmitry.

unread,
Nov 10, 2010, 12:22:07 PM11/10/10
to temenos-ofs-jdbc
several solutions:

1. Your T24 developers could create a special version with "zero"
authorization.
So, you just need one user. We are using this feature on production.

2. You declare two connections in your service:
<config id="t24">
<property
name="org.wso2.ws.dataservice.driver">org.t24.driver.T24Driver</
property>
<!-- in your channel.xml there should be channel named
MYCHANNEL -->
<property
name="org.wso2.ws.dataservice.protocol">jdbc:org:t24:MYCHANNEL</
property>
<property name="org.wso2.ws.dataservice.user">T24_USER</
property>
<property name="org.wso2.ws.dataservice.password">T24_PASS</
property>
<property name="org.wso2.ws.dataservice.minpoolsize">0</
property>
<property name="org.wso2.ws.dataservice.maxpoolsize">3</
property>
</config>
<config id="t24auth">
<property
name="org.wso2.ws.dataservice.driver">org.t24.driver.T24Driver</
property>
<!-- in your channel.xml there should be channel named
MYCHANNEL -->
<property
name="org.wso2.ws.dataservice.protocol">jdbc:org:t24:MYCHANNEL</
property>
<property name="org.wso2.ws.dataservice.user">T24_USER2</
property>
<property name="org.wso2.ws.dataservice.password">T24_PASS</
property>
<property name="org.wso2.ws.dataservice.minpoolsize">0</
property>
<property name="org.wso2.ws.dataservice.maxpoolsize">3</
property>
</config>

Then create two operations: doFundsTransfer and
authorizeFundsTransfer.
And assign them different connections.

mdachi

unread,
Nov 10, 2010, 11:30:34 PM11/10/10
to temenos-ofs-jdbc
Hello Dmitry,

I had already adopted the second solution, but I was met with an
unrelated issue. I am resolving this new issue and will test the
solution. The reason why I don't want to use zero authorizers is
because I intend to use it for automated payments. It is critical to
wait for the notification that the other system successfully completed
the transaction before you authorize the transaction.

I will let you know of the results.

Thanks,

Hamisi
------

mdachi

unread,
Nov 11, 2010, 10:34:43 AM11/11/10
to temenos-ofs-jdbc
Hello Dmitry,

I got it to work when I changed the listener in T24. I created a new
listener and now two users are using it to POST OFS messages and are
able to authorize.

Now my next issue is that when I send user/pass in the parameters,
they end up showing in the logs. How do I hide them from showing in
the logs? Or, how do I disable the logging so that I don't compromise
security? Or is there any other way of not displaying user/pass when
sent in the params?

Hamisi
------

Dmitry.

unread,
Nov 11, 2010, 1:19:36 PM11/11/10
to temenos-ofs-jdbc
We will think about the question how to hide password in logs.
You can disable logging.
Go to Configure - Logging - Filter Loggers by
Search logger that contains "t24" and set logging level to ERROR.

Regards,
Dmitry

mdachi

unread,
Nov 11, 2010, 11:23:17 PM11/11/10
to temenos-ofs-jdbc
OK,

Let me try it. Again, I am developing my application in Windows, but
eventually I will love to run my dataservices server on Linux. I
looked at the download section did not find any Linux downloads. I am
running RedHat 5. Is there any site where I can get the RPMs for it?

Thanks,

Hamisi
------

Dmitry.

unread,
Nov 12, 2010, 11:10:08 AM11/12/10
to temenos-ofs-jdbc
Nothing special. Extract the same zip on linux and it will work.
use "bin/wso2server.sh start" to start your server on linux.
We have exactly RedHat5 on production.

Regards,
Dmitry

mdachi

unread,
Nov 15, 2010, 8:03:56 AM11/15/10
to temenos-ofs-jdbc
Great. Will do.

Thanks,

Hamisi
------

mdachi

unread,
Nov 16, 2010, 2:39:07 AM11/16/10
to temenos-ofs-jdbc
Hello Dmitry,

My requirement for FT and enquiries have been met by the web service.
I have one problem with customer statements. When I run an enquiry on
MINI.STATEMENT, I get an error. When I run CUST.STATEMENT a similar
error is thrown at me. The error message I get when I run
MINI.STATEMENT is this;

Fault: Internal Server Error [detail]
<faultstring>DS Fault Message: Error in 'SQLQuery.processNormalQuery'
Source Data Service:- Name: T24Test1 Location: C:\wsoa2\WSO2DA~1.2\bin
\..\repository\deployment\server\dataservices\T24Test1.dbs
Description: Test service Default Namespace: http://my.namespace
Current Request Name: getMiniStatement Current Params:
{account=005009656717, bkdate=20100530} Nested Exception:-
org.t24.driver.T24Exception: T24 response parser error. Header count
missmatch data column count, headerCount(3), columnCount(1)&#xd; at
org.t24.driver.T24ResultSet.t24ParseEnq(T24ResultSet.java:281)&#xd; at
org.t24.driver.T24ResultSet.&lt;init>(T24ResultSet.java:168)&#xd;
at ,,,,,,,,,

It complains that there are three header columns but I have one data
column. When I check the enquiry I really see three headers but in my
service I have specified two fields as follows:

<!--================================= getMiniStatement
======================================-->
<operation name="getMiniStatement">
<description>Get Mini Statement</description>
<call-query href="getMiniStatement">
<with-param name="account" query-param="account" />
<with-param name="bkdate" query-param="bkdate" />
</call-query>
</operation>

<query id="getMiniStatement" useConfig="t241">
<sql>SELECT SENDOFS ENQUIRY.SELECT,,{{USER}}/
{{PASS}},ACB.MINI.STATEMENT
ACCOUNT:EQ = set ?1
BOOKING.DATE:LE = set ?2
END
</sql>
<result element="getMiniStatementResponse" rowName="stmtrow" >
<element name="valdate" column="POST" />
<element name="pam" column="PAMT"/>
</result>
<param name="account" sqlType="STRING" type="IN"
ordinal="1" />
<param name="bkdate" sqlType="STRING" type="IN"
ordinal="2" />
</query>

You can see, I try to obtain the POST and PAMT fields from the
enquiry.

Has anyone experienced an issue with statement enquiries?

Please help.

Hamisi
------

Dmitry.

unread,
Nov 16, 2010, 7:59:16 AM11/16/10
to temenos-ofs-jdbc
This error message means that driver can't parse response from t24.
T24 returns 3 column headers, and 1 column value.
Could you activate OFS logging and send me OFS response, so I can
provide more help.

Regards

mdachi

unread,
Nov 16, 2010, 8:31:27 AM11/16/10
to temenos-ofs-jdbc
Hello Dmitry,

I did test the same enquiry from the file listener. Please see the OFS
response from the server (in one line):
HEADER="Account"/HEADER="Statement"/HEADER="Branch Name"/HEADER=F
ACCOUNT/HEADER=F BRANCH/HEADER="Account :"/HEADER="Account Name: "/
HEADER="Currency :"/HEADER=F ACC/HEADER=F ACC/HEADER=F ACC/HEADER=F
CCY/HEADER="Value Dte"/HEADER="Description"/HEADER="Reference"/
HEADER="Post Date"/HEADER="Txn Amount"/HEADER="Running Bal"/HEADER=@ID/
HEADER="Balance At Period Start"/HEADER=F CONS.AMT.BFWD/HEADER="No
Account Entries for Given Dates",VALDESC::Value date/
PDESC::Description/CHEQ.NO::CHEQ.NO/REFNO::Reference/POST::Post date/
PAMT:CLASS-POSNEG:Amount/Running Balance::Running
Balance,"10100570942 ","","TZS","Balance At Period
Start","Account" "Statement","Branch Name" "Main Branch
(0101)","Account :","Account Name: ","Currency :","HAMISI OMAR
MALIPULA","22 MAY 10 " "Balance Take On - Credit
" " " "FT10142105988992 " "22 MAY
10" " 2,768,753.11"," 0.00","
2,768,753.11","TAKE ON CUST AC","Balance At Period
End","","","","","",""," 2,768,753.11" "" ""

Thanks,

Hamisi
------

Dmitry.

unread,
Nov 16, 2010, 9:19:52 AM11/16/10
to temenos-ofs-jdbc
Quite strange OFS response...
You have more headers then data columns.
Your enquiry response must be relational-like.
Number of headers must correspond to number of columns.
You must rework your enquiry to be supported.

Regards,
Dmitry

On Nov 16, 3:31 pm, mdachi <malip...@gmail.com> wrote:
> Hello Dmitry,
>

mdachi

unread,
Nov 16, 2010, 10:29:39 AM11/16/10
to temenos-ofs-jdbc
Hello Dmitry,

I took a standard enquiry that works on the system and blanked out all
fields but three. This includes the headers that come with the
standard T24 MINI.STATEMENT. When I run it in Browser it is OK.

You may be right in that maybe T24 hides those headers but actually
shows them in the OFS response. Let me see if I can work out how to
remove them completely, which might not be very easy.

Let me give it a try and test it once more.

Thanks for the assistance.

Hamisi
------

Ibrahim Ahmed

unread,
Nov 19, 2014, 10:04:30 AM11/19/14
to temenos-...@googlegroups.com
HI All ,

Im try access the same transaction Funds.Transfer and i need to read all OFS response in the same Transaction not by using any else enquiry , are any one found solution for that ................

thanks

ibrahim


On Friday, October 29, 2010 5:47:43 PM UTC+2, mdachi wrote:
Hello all,

I have tested the data services with the test configuration (.dbs)
file and it works fine with the getUserList function. Now I want to
extend it to perform funds transfers and balance enquiries as well as
authorize transactions. However, when I modified the sample
configuration file to include more operations (functions) I always get
an error saying the OFS was not valid.

Is there anyone who has got example configurations to enable the WS to
send OFS strings for Funds.Transfers, Balance inquiries, etc? I am
more specifically looking at how I can successfully pass parameters to
the OFS.

Your help is highly appreciated.

Thanks,

Hamisi
---------
Reply all
Reply to author
Forward
0 new messages