Pergunta

Sou novo em usar o Groovy e comecei a usá -lo para testar alguns serviços de descanso. Estou tendo um problema analisando minha resposta XML de nosso serviço devido ao 'conteúdo não permitido no Prolog'. Depois de uma busca por um tempo, me deparei com um post dizendo que pode haver um marcador de pedidos de bytes no começo. Para compensar, segui a abordagem deles para aparar os personagens antes do primeiro <e depois analisar a resposta. Enquanto isso funciona, também me disseram que a questão é que a resposta está voltando como 'codificação de transferência: rolada'.

Usando o httpbuilder, existe uma maneira de lidar com respostas em pedaços sem desligar os personagens? Se eu tentar:

def http = new HTTPBuilder('url')
http.request( Method.valueOf("GET"), XML )

Recebo o conteúdo não permitido na mensagem Prolog. No entanto:

http.request( Method.valueOf("GET"), TEXT )

Funciona, mas requer aparar o texto até o primeiro <antes de enviar a resposta ao XMLParser.

Foi útil?

Solução

Eu tive o mesmo problema quando precisava interagir com um servidor IIS. O XML retornou tinha um caractere falso na frente do XML real retornado pelo servidor da Web. Eu trabalhei assim:

StringReader reader = builder.get( path: 'rcserver/systeminfo.xml', contentType: ContentType.TEXT )
def text = reader.getText()
def xml = new XmlSlurper().parseText(text.substring(1));

Outras dicas

A classe Httpbuilder tem um setContentEncoding() Método que permite especificar o tipo de conteúdo da resposta.

Talvez algo como:

http.contentEncoding = ContentEncoding.Type.GZIP
http.request( Method.GET, XML)

Espero que isto ajude.

Eu estava tendo esse problema também atingindo um servidor do IIS sobre o HTTPS. Aqui está uma pequena adição à resposta de Wim DeBlauwe para uma solicitação de postagem. Você deve enviar um tipo diferente na solicitação do que espera na resposta.

Envie uma postagem com XML como tipo de solicitação e texto como tipo de resposta. Em seguida, analise a resposta do texto em XML. Isso funcionou para mim.

Em Groovy:

def reader = http.request(Method.POST, ContentType.TEXT){
    uri.path = "myPath.api"
    send ContentType.XML, postBodyXml
}
def text = reader.getText()
def resultxml = new XmlSlurper().parseText(text.substring(1));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top