Consumir um uma dll Delphi em Grails
02/10/2015 18:17
1
Boa noite!

Tenho uma DLL disponibilizada no IIS onde preciso consumir uma função dessa dll feita em Delphi. Não tenho a menor ideia de como fazer isso em grails!!!

Alguém poderia indicar algum caminho !!
Tags: IIS, DLL, WSDL, DELPHI, WEBSERVICES


1
Esta dll é exposta como um webservice, certo?
Veja se isto ajuda
http://mrhaki.blogspot.com.br/2010/11/groovy-goodness-use-groovyws-to-access.html


1
se seu problema for executar o código da DLL e esta não for exposta como um WebService ou uma interface REST, de uma olhada em uma tecnologia Java chamada JNI.


1
Obrigado Henrique!

Estou tentando de outra forma, vou chamar uma função que retorna um CLOB do banco com o XML. 

Fiz alguns testes com o CFX e não gerou erro só que também não consigo ver o xml na tela


import java.sql.Clob
import javax.jws.*
@WebService(serviceName="GetContadorService", name="GetContador")
class GetContadorController {
def getContadorService
static expose = [ 'cxfjax' ]

   @WebResult(name = 'index')
    @WebMethod(operationName = 'index')
    def index() { 
Clob clobValue
def resultado = getContadorService.buscarContador()
  for (Clob clob : resultado){
 clobValue  = clob
  }     
          BufferedReader reader = new BufferedReader(new
InputStreamReader(clobValue.getAsciiStream()));
String read = null;
StringBuffer buffer = new StringBuffer();
while((read = reader.readLine()) != null )
{
buffer.append(read);
}
buffer.each { row ->
println row
  }
return buffer
}
}


Quando dou um print no buffer, vejo no console o xml o valor que vem do CLOB, mas não vejo o retorno no browser http://localhost:8080/webServico/getContador/index?wsdl
o que falta para meu wsdl funcionar? A pagina index.gsp está vazia, preciso incluir alguma variável? 

index.gsp
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>


1
Rafael,

O resultado deve ser "montado" no GSP. Você já deu uma olhada na documentação do Grails?

https://grails.org/single-page-documentation.html
14/10/2015 20:07


1
Oi Rafael,

no caso, não é a tecnologia GSP que você deve usar, mas sim apenas externalizar o resultado do XML na saída. A solução é simples.

Basta que você escreva código similar ao que vou expor abaixo na action do seu controlador:


def actionDoSeuControlador() {
          def resultado = seuService.obterXML() //imaginando que vai retornar uma string
          render file:resultado.getBytes(), contentType:"application/xml"
}


Esta é apenas uma das formas. O que ocorre: quando você chama o método render, é possível definir formas customizadas de renderização. Ao invés de simplesmente chamar uma rquivo GSP tal como o Evaldo falou e que não bate com o seu caso.

Você não deve "montar um GSP", pois o GSP é usado para se representar os dados em um modelo dentro do fluxo padrão do Grails. No seu caso, o que está sendo retornado é conteúdo bruto (raw) e, para tal, não precisa nem deve ser montado em um GSP ou coisa similar.


0
Vlw Evaldo / Henrique

Eu tinha montado uma GSP vazia e respondia para ela! Vou alterar para a forma que você  mostrou, usando a renderização!!!


1
Perfeito o que o Kiko disse, seu resultado foge do fluxo "padrão" do Grails, ou seja, você tem que informar o tipo de saída.
Mas vale a pena estudar o uso do GSP para que você saiba exatamente onde e como usá-lo.
Segue um exemplo que retorna JSON:

render(contentType: "application/json") {
                    registros = array {
                        registros id: 0
                        registros mensagem: "MENSAGEM RETORNO"
                }
                return
            }
15/10/2015 14:58


0
Vale a pena dar uma olhada no tópico "9.1.6 Customizing Response Rendering" do link https://grails.org/single-page-documentation.html
15/10/2015 15:18



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto