Testes na versão 2.2.0 do WSO2 Data Services Server
Estava eu, numa calma sexta-feira, realizando testes na recém lançada versão 2.2.0 do WSO2 Data Services Server, e para começá-los resolvi fazer deploy dos serviços que já temos desenvolvido, pensando que tudo seria tranquilo, como estava o meu dia, mas... ledo engano.
Erro - Primeiro ato
Fui no básico: "Add > Data Service > Upload" e...
Um erro que não me diz muito, então o jeito foi ver o que poderia ser por "tentativa" e erro. Após um pouco de luta e leitura do código fonte do arquivo DBS, descobri que era algum método que executa uma procedure e não tinha o ordinal preenchido.
<query id="productsByGroup" useConfig="default"> <sql>call sp_productsByGroup @group_id = ?</sql> <param name="cliente" ordinal="" sqlType="INTEGER" type="IN"/> <result defaultNamespace="http://ds.ws.mcorp.com.br/products" element="products" rowName="product"> <element column="id" name="id"/> <element column="name" name="name"/> </result> </query>
Então peguei a linha 3 e corrigi, deixando assim:
<query id="productsByGroup" useConfig="default"> <sql>call sp_productsByGroup @group_id = ?</sql> <param name="cliente" ordinal="1" sqlType="INTEGER" type="IN"/> <result defaultNamespace="http://ds.ws.mcorp.com.br/products" element="products" rowName="product"> <element column="id" name="id"/> <element column="name" name="name"/> </result> </query>
Ou seja, devíamos ter prestado mais atenção quando falavam ser obrigatório para procedures o preenchimento desse campo, mas como nunca deu problema, então não prestávamos a devida atenção.
Erro - Segundo ato
Com o serviço devidamente publicado, fui a execução dos métodos para ver se tudo iria bem. Primeiro método (sem parâmetros de entrada) foi tranquilo, retornou tudo que eu precisava. Já no segundo método...
E voltamos a busca do erro perdido... E dessa vez não foi falta de atenção nossa, apenas o plugin que o pessoal do WSO2 disponibiliza (e que ensinei a compilar) que não preencheu o atributo como devia. Na chamada da operação estava assim:
<operation name="productsByGroup"> <call-query href="productsByGroup"> <with-param name="group_id" query-param=""/> </call-query> </operation>
Enquanto deveria estar assim:
<operation name="productsByGroup"> <call-query href="productsByGroup"> <with-param name="group_id" query-param="group_id"/> </call-query> </operation>
E feito todas essas alterações na definição dos data service, tudo correu bem e tranquilo com essa nova versão.
Mas ainda acho que vale a pena esperar um pouco pra ver se não aparece nenhuma correção que levem eles a gerar a versão 2.2.1; também tenho que verificar se os patches que aplicamos na versão anterior deixaram de ser necessário. Mas isso fica pra uma próximo oportunidade.