Tomcat Erro 500 ShopLine

4 respostas
P

estou tentando instalar o Itau ShopLine mas está dificil
primeiro passo:

criei meu servlet, compilei ele e não deu nenhum erro com o codigo abaixo:
import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import Itau.Itaucripto;

public class ServletCriptoShopline extends HttpServlet
{
private String codigoEmpresa; // Código de identificação da empresa
private String chave; // Chave de criptografia da empresa
private String pedido; // Identificação do pedido
private String valor; // Valor do pedido
private String observacao; // Observações
private String nomeSacado; // Nome do sacado
private String codigoInscricao; // Código de Inscrição: 01->CPF, 02->CNPJ
private String numeroInscricao; // Número de Inscrição: CPF ou CNPJ
private String enderecoSacado; // Endereco do Sacado
private String bairroSacado; // Bairro do Sacado
private String cepSacado; // Cep do Sacado
private String cidadeSacado; // Cidade do sacado
private String estadoSacado; // Estado do Sacado
private String dataVencimento; // Vencimento do título
private String urlRetorna; // URL do retorno
private String obsAdicional1; // ObsAdicional1
private String obsAdicional2; // ObsAdicional2
private String obsAdicional3; // ObsAdicional3
public void destroy()
{
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
service(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
service(request, response);
}
public void init()
{
}

public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
PrintWriter out = response.getWriter();
String dados; //Armazena os dados criptografados
//Inicializa as variáveis
codigoEmpresa = "12345678912345678912345678978"; // <- Coloque aqui seu Código de Empresa (26 posições)
chave = "1231111111111567"; // <- Coloque aqui sua chave de criptografia (16 posições)
// Recebe valores da página anterior
pedido = request.getParameter("pedido"); // obtém o valor do campo "pedido"
valor = request.getParameter("valor"); // obtém o valor do campo "valor"
observacao = request.getParameter("observacao"); // obtém o valor do campo "observacao"
nomeSacado = request.getParameter("nomeSacado"); // obtém o valor do campo "nomeSacado"
codigoInscricao = request.getParameter("codigoInscricao"); // obtém o valor do campo "codigoInscricao"
numeroInscricao = request.getParameter("numeroInscricao");// obtém o valor do campo "numeroInscricao"
enderecoSacado = request.getParameter("enderecoSacado"); // obtém o valor do campo "enderecoSacado"
bairroSacado = request.getParameter("bairroSacado"); // obtém o valor do campo "bairroSacado"
cepSacado = request.getParameter("cepSacado"); // obtém o valor do campo "cepSacado"
cidadeSacado = request.getParameter("cidadeSacado"); // obtém o valor do campo "cidadeSacado"
estadoSacado = request.getParameter("estadoSacado"); // obtém o valor do campo "estadoSacado"
dataVencimento = request.getParameter("dataVencimento"); // obtém o valor do campo "dataVencimento"
urlRetorna = request.getParameter("urlRetorna"); // obtém o valor do campo "urlRetorna"
obsAdicional1 = request.getParameter("obsAdicional1"); // obtém o valor do campo "obsAdicional1"
obsAdicional2 = request.getParameter("obsAdicional2"); // obtém o valor do campo "obsAdicional2”
obsAdicional3 = request.getParameter("obsAdicional3"); // obtém o valor do campo "obsAdicional3"
//Inicializa a classe de criptografia do Shopline
Itaucripto cripto = new Itaucripto();
//Criptografa os dados chamando o método geraDados da classe Itaucripto
dados = cripto.geraDados(codigoEmpresa,
pedido,
valor,
observacao,
chave,
nomeSacado,
codigoInscricao,
numeroInscricao,
enderecoSacado,
bairroSacado,
cepSacado,
cidadeSacado,
estadoSacado,
dataVencimento,
urlRetorna,
obsAdicional1,
obsAdicional2,
obsAdicional3
);
//Inicia a construção da página de resposta
response.setContentType("text/html");
out.println("<html>");
out.println("<body bgcolor= \"white\">");
out.println("<head>");
out.println("<title> Teste Itaú Shopline </title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Modelo Itaú</h1>");
// Constrói o formulário para pagamento com shopline
out.println("<FORM METHOD=\"POST\"");
out.println("ACTION = \"https://shopline.itau.com.br/shopline/shopline.asp \"");
out.println("name =\"form\" onsubmit=carregabrw() target=\"SHOPLINE\">");
out.println("<INPUT TYPE = ");
out.println("\"");
out.println("hidden");
out.println("\" ");
out.println(" NAME =");
out.println("\"");
out.println("DC");
out.println("\"");
out.println("VALUE=\"" + dados + "\">");
out.println("<INPUT TYPE=\"submit\" name=\"Shopline\" value=\"Itaú Shopline\">");
out.println("</FORM>");
out.println("<script language=\"JavaScript\">");
out.println("<!--");
out.println("function carregabrw() { ");
out.println(" window.open('

depois criei uma pasta chamada itauserve dentro de C:\Tomcat 5.5\webapps>

dentro dela criei uma pasta chamada WEB-INF
dentro dela criei um arquivo chamado web.xml
com o seguinte codigo

[code]
<?xml version="1.0" encoding="ISO-8859-1" ?> 
  <!DOCTYPE web-app (View Source for full doctype...)> 
- <web-app>
- <!--  Indica ao Tomcat as Servlets da nossa aplicacao 
  --> 
- <servlet>
  <servlet-name>HelloServlet</servlet-name> 
  <servlet-class>HelloServlet</servlet-class> 
  </servlet>
- <!--  Define um padrão de url através do qual a HelloServlet será acessada.
     No caso qualquer url do tipo 
     "http://localhost:8080/HelloServletApp/QualquerCoisa.teste"
     faz com que a nossa HelloServlet seja chamada 
  --> 
- <servlet-mapping>
  <servlet-name>HelloServlet</servlet-name> 
  <url-pattern>*.teste</url-pattern> 
  </servlet-mapping>
- <!--  Define outro padrão de url através do qual a HelloServlet será acessada.
     No caso, a url "http://localhost:8080/HelloServletApp/HelloServlet"
     faz com que a nossa HelloServlet seja chamada 
  --> 
- <servlet-mapping>
  <servlet-name>HelloServlet</servlet-name> 
  <url-pattern>/HelloServlet</url-pattern> 
  </servlet-mapping>
- <session-config>
  <session-timeout>30</session-timeout> 
- <!--  30 minutes 
  --> 
  </session-config>
  </web-app>

criei um pasta chamada classes em C:\Tomcat 5.5\webapps\itauserve\WEB-INF
copiei para ela a minha classe compilada
ServletCriptoShopline.class

mas quando tento acessar http://localhost:8080/itauserve/ServletCriptoShopline
dá erro :

HTTP Status 500 -

java.lang.NullPointerException
Itau.Itaucripto.geraDados(Itaucripto.java:212)
ServletCriptoShopline.service(ServletCriptoShopline.java:73)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Alguem sabe o que pode estar acontecendo?
Eu agradeceria muito quem pudesse me ajudar.
Obrigado
,'SHOPLINE',");
out.println("\"");
out.println("toolbar=yes,menubar=yes,resizable=yes,status=no,scrollbars=yes,width=675,height=485");
out.println("\"");
out.println(");");
out.println("}");
out.println("//-->");
out.println("");
out.println("");
out.println("");
}
}
[/code]

depois criei uma pasta chamada itauserve dentro de C:\Tomcat 5.5\webapps>

dentro dela criei uma pasta chamada WEB-INF
dentro dela criei um arquivo chamado web.xml
com o seguinte codigo

<?xml version="1.0" encoding="ISO-8859-1" ?> 
  <!DOCTYPE web-app (View Source for full doctype...)> 
- <web-app>
- <!--  Indica ao Tomcat as Servlets da nossa aplicacao 
  --> 
- <servlet>
  <servlet-name>HelloServlet</servlet-name> 
  <servlet-class>HelloServlet</servlet-class> 
  </servlet>
- <!--  Define um padrão de url através do qual a HelloServlet será acessada.
     No caso qualquer url do tipo 
     "http://localhost:8080/HelloServletApp/QualquerCoisa.teste"
     faz com que a nossa HelloServlet seja chamada 
  --> 
- <servlet-mapping>
  <servlet-name>HelloServlet</servlet-name> 
  <url-pattern>*.teste</url-pattern> 
  </servlet-mapping>
- <!--  Define outro padrão de url através do qual a HelloServlet será acessada.
     No caso, a url "http://localhost:8080/HelloServletApp/HelloServlet"
     faz com que a nossa HelloServlet seja chamada 
  --> 
- <servlet-mapping>
  <servlet-name>HelloServlet</servlet-name> 
  <url-pattern>/HelloServlet</url-pattern> 
  </servlet-mapping>
- <session-config>
  <session-timeout>30</session-timeout> 
- <!--  30 minutes 
  --> 
  </session-config>
  </web-app>

criei um pasta chamada classes em C:\Tomcat 5.5\webapps\itauserve\WEB-INF
copiei para ela a minha classe compilada
ServletCriptoShopline.class

mas quando tento acessar http://localhost:8080/itauserve/ServletCriptoShopline
dá erro :

HTTP Status 500 -

java.lang.NullPointerException
Itau.Itaucripto.geraDados(Itaucripto.java:212)
ServletCriptoShopline.service(ServletCriptoShopline.java:73)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

Alguem sabe o que pode estar acontecendo?
Eu agradeceria muito quem pudesse me ajudar.
Obrigado

4 Respostas

T

É fácil mas você é que tem de fazer isso. Basicamente você passou algum parâmetro null para a rotina geraDados. Qual dos parâmetros? Não sei - você é que tem de saber. O modo mais fácil é você, para testar, imprimir todos os parâmetros que você pegou via getParameter, e temporariamente não chamar a geraDados. Quando você descobrir qual é o parâmetro null, corrija o seu programa.
Dica: alguns dos parâmetros provavelmente podem receber uma string “” em vez de null (nunca usei o Itaucripto, mas é um chute). Faça uma rotina boba que receba uma String, e retorne “” se receber null. Algo como:

private static String ifNull(String p) { return p == null ? "" : p; }
e em vez de pegar diretamente o resultado de getParameter, passe o resultado para essa rotina e depois chame a geraDados.

P

o que você falou está correto, eu alterei o codigo para

valor = "999999,99";
pedido = "99999999";
..
dados = cripto.geraDados(codigoEmpresa,
pedido,
valor,
"",//observacao,
chave,
"",//nomeSacado,
"",//codigoInscricao,
"",//numeroInscricao,
"",//enderecoSacado,
"",//bairroSacado,
"",//cepSacado,
"",//cidadeSacado,
"",//estadoSacado,
"",//dataVencimento,
"",//urlRetorna,
"",//obsAdicional1,
"",//obsAdicional2,
""//obsAdicional3
);

ai parou de dar erro e deu certo.
Mas não era bem isso que eu queria, pois os valores das variaveis ficariam sempre iguais.
O certo seria criar um pagina html para o cliente digitar seus dados e a partir dela chamar o servlet.
Já criei a pagina com o seguinte codigo

<HTML>
<HEAD>
<TITLE>Exemplo de código HTML</TITLE>
</HEAD>
<BODY>
<FORM ACTION="ServletCriptoShopline" METHOD="Post" NAME="form1">
<CENTER>Entre com os Dados
<TABLE width=100% border=1 align=center>
<TR>
<TD width=25% align=center><B>Pedido (99999999):</B></TD>
<TD><INPUT type="text" maxlength=8 size=8 name="pedido" value=""></TD>
</TR>
<TR>
<TD width=25% align=center><B>Valor (99999999,99):</B></TD>
<TD><INPUT type="text" maxlength=10 size=10 name="valor" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Observação:</B></TD>
<TD><INPUT type="text" maxlength=40 size=40 name="observacao" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Nome do Sacado:</B></TD>
<TD><INPUT type="text" maxlength=30 size=30 name="nomeSacado" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Código de Inscrição (01 CPF, 02 CNPJ):</B></TD>
<TD><INPUT type="text" maxlength=2 size=2 name="codigoInscricao" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Número de Inscrição (CPF, CNPJ):</B></TD>
<TD><INPUT type="text" maxlength=14 size=14 name="numeroInscricao" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Endereço do Sacado:</B></TD>
<TD><INPUT type="text" maxlength=40 size=40 name="enderecoSacado" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Bairro:</B></TD>
<TD><INPUT type="text" maxlength=15 size=15 name="bairroSacado" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>CEP (99999999):</B></TD>
<TD><INPUT type="text" maxlength=8 size=8 name="cepSacado" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Cidade:</B></TD>
<TD><INPUT type="text" maxlength=15 size=15 name="cidadeSacado" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Estado:</B></TD>
<TD><INPUT type="text" maxlength=2 size=2 name="estadoSacado" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>Data de Vencimento (ddmmaaaa):</B></TD>
<TD><INPUT type="text" maxlength=8 size=8 name="dataVencimento" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>URL retorna:</B></TD>
<TD><INPUT type="text" maxlength=60 size=60 name="urlRetorna" value=""></TD>
<TR>
<TD width=25% align=right><B>ObsAdicional1:</B></TD>
<TD><INPUT type="text" maxlength=60 size=60 name="obsAdicional1" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>ObsAdicional2:</B></TD>
<TD><INPUT type="text" maxlength=60 size=60 name="obsAdicional2" value=""></TD>
</TR>
<TR>
<TD width=25% align=right><B>ObsAdicional3:</B></TD>
<TD><INPUT type="text" maxlength=60 size=60 name="obsAdicional3" value=""></TD>
</TR>
</TABLE>
</CENTER>
<BR><BR>
<INPUT TYPE="submit" value="Pagar" name="Pagar">
</FORM>
</BODY>
</HTML>

o problema é que eu não sei como configurar meu arquivo web.xml para “ler” esta pagina primeiro e fazer ela chamar corretamente meu servlet e nem em qual diretorio devo colocar meu arquivo html

T

Bom, agora você pode montar um JSP (em vez de um servlet) e invocar a rotina do ITAUCRIPTO via GET ou POST. Não é difícil, mas não dá para explicar em um post simples aqui. Há muitos exemplos de montagem de aplicação Web por aí.

P

eu preciso mesmo usar jsp ?
e se eu colocasse estas linhas de codigo no web.xml

<welcome - file- list>
<welcome - file>index.html< /welcome - file>
</welcome - file- list>

sendo que no index. html já tem meu formulario para o cliente digitar suas informações e chamar meu servelet
desta forma:

<FORM ACTION="ServletCriptoShopline" METHOD="Post" NAME="form1">

não iria funcionar ?
obrigado pela ajuda.

Criado 20 de abril de 2005
Ultima resposta 22 de abr. de 2005
Respostas 4
Participantes 2