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!!!