Serviços de back-end para componentes de edição de texto legislativo estruturado (lexml-emenda, lexml-eta e lexml-parecer)
Um dos serviços faz a conversão de textos de proposições no formato LexML para o formato jsonix recorendo ao conversor jsonix-lexml.
Maiores informações sobre o conversor jsonix-lexml podem ser encontradas em https://github.com/lexml/jsonix-lexml.
Configurar a propriedade jsonix.cli no arquivo application.properties ou application.yaml da sua aplicação Java, informando a localização do executável do conversor lexml-jsonix.
Exemplo:
lexml-jsonix.cli=c:\\temp\\jsonix-lexml-win.exeReleases dos executáveis para os três ambientes suportados (Linux, MacOS X e Windows) podem ser encontrados em https://github.com/lexml/jsonix-lexml/releases/.
Instanciar um bean que implementa a interface ConversorLexmlJsonix. Essa interface define os métodos para conversão de um texto em formato Lexml para json e vice-versa. A classe ConversorLexmlJsonixImpl implementa essa interface e utiliza o executável mencionado no item anterior para realizar a conversão. Exemplo de uso:
package com.lexmljsonixteste.jsonix;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import br.gov.lexml.eta.lexmljsonix.conversor.ConversorLexmlJsonix;
@RestController
@RequestMapping("lexml-jsonix")
public class ConversorController {
@Autowired
private ConversorLexmlJsonix conversorLexmlJsonix;
@RequestMapping(value = "xml-to-json", produces = MediaType.APPLICATION_JSON_VALUE)
public String xmlToJson(@RequestBody String xml) {
return conversorLexmlJsonix.xmlToJson(xml);
}
@RequestMapping(value = "json-to-xml", produces = MediaType.APPLICATION_XML_VALUE)
public String jsonToXml(@RequestBody String json) {
return conversorLexmlJsonix.jsonToXml(json);
}
}A classe LexmlJsonixServiceImpl implementa a interface LexmlJsonixService e disponibiliza métodos para listar proposições, bem como método para obter o texto de uma proposição em formato Lexml. Exemplo de uso:
package com.lexmljsonixteste.lex;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import br.gov.lexml.eta.lexmljsonix.service.LexmlJsonixService;
import br.gov.lexml.eta.lexmljsonix.service.Proposicao;
@RestController
@CrossOrigin(origins = "*")
public class ProposicoesController {
@Autowired
private LexmlJsonixService lexmlJsonixService;
@GetMapping("proposicoes")
public List<Proposicao> getProposicoes(@RequestParam String sigla, @RequestParam Integer ano, String numero) {
return lexmlJsonixService.getProposicoes(sigla, ano, numero);
}
@GetMapping("proposicao")
public Proposicao getProposicao(@RequestParam String sigla, @RequestParam Integer ano, @RequestParam String numero) {
return lexmlJsonixService.getProposicao(sigla, ano, numero);
}
@RequestMapping(value = "proposicao/texto-lexml/xml", produces = MediaType.APPLICATION_XML_VALUE)
public String getTextoProposicaoAsXml(@RequestParam String sigla, @RequestParam Integer ano, @RequestParam String numero) {
return lexmlJsonixService.getTextoProposicaoAsXml(sigla, ano, numero);
}
@RequestMapping(value = "proposicao/texto-lexml/xml/sdleg", produces = MediaType.APPLICATION_XML_VALUE)
public String getTextoProposicaoAsXml(@RequestParam String idSdlegDocumentoItemDigital) {
return lexmlJsonixService.getTextoProposicaoAsXml(idSdlegDocumentoItemDigital);
}
@RequestMapping(value = "proposicao/texto-lexml/json", produces = MediaType.APPLICATION_JSON_VALUE)
public String getTextoProposicaoAsJson(@RequestParam String sigla, @RequestParam Integer ano, @RequestParam String numero) {
return lexmlJsonixService.getTextoProposicaoAsJson(sigla, ano, numero);
}
@RequestMapping(value = "proposicao/texto-lexml/json/sdleg", produces = MediaType.APPLICATION_JSON_VALUE)
public String getTextoProposicaoAsJson(@RequestParam String idSdlegDocumentoItemDigital) {
return lexmlJsonixService.getTextoProposicaoAsJson(idSdlegDocumentoItemDigital);
}
}A classe LexmlJsonixServiceImpl utiliza um serviço disponibilizado pelo Senado Federal para realizar a pesquisa de proposições e para obter o texto em formato Lexml da proposição.
- A url para pesquisar proposições é: https://legis.senado.gov.br/legis/resources/lex/proposicoes
- A url para obter o arquivo zip que contém o texto em formato lexml da proposição é: https://legis.senado.gov.br/sdleg-getter/documento/download
Essas urls podem ser alteradas a partir do arquivo application.properties da sua aplicação, conforme o exemplo abaixo:
lexml-jsonix.url-proposicoes=http://nova-url-do-servico-de-pesquisa-de-proposicoes
lexml-jsonix.url-sdleg=http://nova-url-do-servico-que-retorna-texto-lexmlObservação: As urls acima podem ser alteradas, mas o formato do retorno deve permanecer o mesmo para que a classe LexmlJsonixServiceImpl funcione corretamente. Caso você possua outros serviços que retornem dados equivalentes, você poderá criar uma nova classe que implementa a interface LexmlJsonixService e construir o código para tratar os dados retornados nos novos serviços.