Я использую wso2esb 4.7.0 и wso2dss 3.1.0. Я хочу выбрать какой-либо столбец из таблицы. Для этого я использовал следующий запрос в dss:
select roleid,rolename,rolecode from mrole where clientid = ? and ModifiedOn = ?
Он отлично работает как в dss, так и в esb. Вывод выглядит следующим образом:
{"roleid":"1077282521908571","rolename":"adminrole","rolecode":"adminrole"},{"roleid":"1077282521908571","rolename":"adminrole","rolecode":"adminrole"},{"roleid":"1077278842127704","rolename":"everyonerole","rolecode":"everyonerole"},{"roleid":"1077282521908571","rolename":"adminrole","rolecode":"adminrole"}
это один случай. Теперь во втором случае, если я не был изменен, то очевидно, что он показывает ошибку в dss, например:
Caused by: javax.xml.stream.XMLStreamException: DS Fault Message: Error in 'SQLQuery.processNormalQuery'
DS Code: DATABASE_ERROR
Source Data Service:-
Name: muser_DataService2.0
Location: /muser_DataService2.0.dbs
Description: N/A
Default Namespace: http://ws.wso2.org/dataservice
Current Request Name: Select_Role_Details_Op
Current Params: {clientid=214057357158656, modifiedon=}
Nested Exception:-
java.lang.NumberFormatException: For input string: ""
Чтобы решить эту проблему, я использую регистр переключения в esb, например:
<switch source="get-property('ModifiedOn')">
<case regex="''">
<property name="ModifiedOn" value="0" scope="default" type="STRING"/>
<log level="custom">
<property name="ModifiedOn in case of null: "
expression="get-property('ModifiedOn')"/>
</log>
</case>
</switch>
он показывает предупреждающее сообщение в esb, например:
[2014-10-08 11:43:54,100] WARN - SwitchCase Provided character sequence for switch case condition is 'null'. Switch case will not be executed.
и без выполнения случая переключения он напрямую движется вперед и генерирует ошибку, а dss показывает ошибку, как указано выше. Как я должен указать нулевое условие в случае переключения?