命名参数在数据服务的查询中不能多次使用

Named parameter can't be used more than one time in a query of Data Service

我们正在使用 WXSO2 EI 6.5.0。我用这样简单的查询准备了数据服务:

<sql>SELECT e.code ,e.firstName,e.lastName,e.birthday FROM dbo.elaba_USERS_EMPLOYEES e WHERE e.firstName like :someText  or e.lastName like :someText </sql>
 <param name="someText" paramType="SCALAR" sqlType="STRING"/>

查询产生响应

<axis2ns1092:DataServiceFault xmlns:axis2ns1092="http://ws.wso2.org/dataservice">
    <axis2ns1092:current_params>{someText=Gar6va}</axis2ns1092:current_params>
    <axis2ns1092:source_data_service>
        <axis2ns1092:data_service_name>ElabaDataTest</axis2ns1092:data_service_name>
        <axis2ns1092:description>N/A</axis2ns1092:description>
        <axis2ns1092:location>/ElabaDataTest.dbs</axis2ns1092:location>
        <axis2ns1092:default_namespace>http://ws.wso2.org/dataservice</axis2ns1092:default_namespace>
    </axis2ns1092:source_data_service>
    <axis2ns1092:ds_code>DATABASE_ERROR</axis2ns1092:ds_code>
    <axis2ns1092:nested_exception>java.lang.NullPointerException</axis2ns1092:nested_exception>
    <axis2ns1092:current_request_name>_get_users_employeestest</axis2ns1092:current_request_name>
</axis2ns1092:DataServiceFault>

如果我删除一个带有参数 :some Text 的条件,查询将正常工作。 此类查询在 WSO DSS 3.5.1 中运行没有问题。

经过一番调查,我在 class 中发现了一个错误 组织wso2.carbon.dataservices.core.description.query.ExpressionQuery。有一个方法 processDynamicQuery 和代码

if (tmpParam != null && !(tempParams.get(i).isOptional()) && DBConstants.DataTypes.QUERY_STRING.equals(tmpParam.getSqlType())) {

不正确。

...tempParams.get(i).isOptional()

抛出空指针异常。

如果能找到固定代码就好了