InputStream - SOAP

0 respostas
L

Fala galera…

Eu tenho um WebService que está gerando um erro por causa de um Filter.

Criei o serviço e funciona corretamente. Quando eu ativo o filter ocorre o erro.
O filter é simples!! eu só tenho ele para validar o loging/sessao do usuário…

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author Leo
 */
@WebFilter(filterName="NewFilter", urlPatterns={"/*"})
public class NewFilter implements Filter {

    private static final boolean debug = true;
    PrintWriter out;

    private FilterConfig filterConfig = null;

    } 

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
	throws IOException, ServletException {

	HttpServletRequest temp = (HttpServletRequest)request;
        ServletInputStream stream = temp.getInputStream();
        
        String cTL = convertStreamToString(stream);
        //fazer alguns tratamentos com o retorno ctl......e prosseguir	

        chain.doFilter(request, response);
	
    }

    public String convertStreamToString(InputStream is) throws IOException {
        String retorno = "";
        if (is != null) {
            Writer writer = new StringWriter();
            char[] buffer = new char[1024];

        try {
           Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
           int n;
           while((n = reader.read(buffer)) != -1) {
               writer.write(buffer, 0, n);
           }
        }catch(IOException e){
            e.printStackTrace();
        }
        
    retorno =  writer.toString();
    }
    return retorno;
    }

    }
}

No método convertStreamToString ele faz tudo certinho. Pega informações do que preciso, trato algumas informações e pronto.
Quando eu “subo” a chamada no chain.doFilter(request, response); me gera este erro no SOAPUI.

<S:Envelope xmlns:S=“http://schemas.xmlsoap.org/soap/envelope/”>
<S:Body>
<S:Fault xmlns:ns4=“http://www.w3.org/2003/05/soap-envelope”>
<faultcode>S:Client</faultcode>
<faultstring>Couldn’t create SOAP message due to exception: XML reader error: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [1,0]</faultstring>
</S:Fault>
</S:Body>
</S:Envelope>

Pelo que me parece , após passar pelo filter, o InputStream do request está fechado ou está vazio.

Dúvida:
Quando eu executo o getInputStream, o request perde este valor? Fiz este teste chamando várias vezes o getInputStream no filter e não me gera exceção mas parece que após executar o filter, o getInputStream funciona como se fosse o nextElement do Iterator…

Caso o request perca o inputStream, como eu populo novamente o ServletInputStream do request?

Se não for este problema, o que pode ser?
Sei que o erro é por causa do getInputStream…pois se eu comentar este trecho, para o erro…

obrigado!!!

Criado 15 de novembro de 2010
Respostas 0
Participantes 1