HTTP 404 - WebService não inicia em produção

28 respostas
javawebjava
rodriguesabner

Fala pessoal!! Tudo certo? Então, tô com um sério problema aqui, meu webservice roda normal em localhost, mas quando eu jogo no domínio ele não vai!!

Olha os prints:

image

Meu ApplicationConfig:

@javax.ws.rs.ApplicationPath("api")
public class ApplicationConfig extends Application {

Minha classe do WebService

@Path("")
public class ws {
       @GET
    @Produces("application/json")
    @Path("user/list")
    public String list_user() {
        List<User> list;

        UsersDAO dao = new UsersDAO();
        list = dao.listar();

        Gson g = new Gson();
        return g.toJson(list);
    }
}

EDIT: No log do servidor também não acusa nenhum erro, o estranho é que quando eu acesso o index.html, do projeto (ONLINE), ele mostra o index

image

28 Respostas

Villagram

@rodriguesabner
Fala dev, blz? Acho q o seu problema está na definição da sua rota…eu faria assim

@Path("/")
 public class ws{
          @GET  
          @Produces("application/json")
          @Path("user/list")
          public String list_user(){
                List<User> list;
                
                UsersDAO dao = new UsersDAO();
                list = dao.listar();

                Gson g = new Gson();
               return g.toJson(list);
      }
}

Espero que ajude, boa sorte.

rodriguesabner

Opa Villagram, quanto tempo, assim que eu chegar em casa eu faço o teste. Sabe explicar se isso realmente causa alguma interferência? Eu consigo rodar localmente o Webservice

Villagram

Realmente faz muito tempo…hehehehe…existem outras coisas que podem interferir em produção, mas como a rota não está sendo encontrada no contexto…acho q é isso.

Eu uso Spring para construir minhas aplicações Rest então eu realmente estou chutando forte…hehehehehe. Precisaria ver os logs do Tomcat para ter certeza.

rodriguesabner

Pior que o log não acusa nada, fala que fez o deploy e simplesmente não roda, mas é uma boa opção, até porque do jeito que está “sem path”, então o encontra o Index, mas não encontra o que vem depois. Vou tentar!! Valeu mesmo

B

como está o mapeamento no web.xml?

tente:
@Path("/user/list")

rodriguesabner

Já testo!!!

rodriguesabner

Boa noite!!

Então, fiz as mudanças que vocês indicaram, mas continua o mesmo, fui olhar meus endpoints no Localhost e ficou meio bugado

image

@Path("/")
public class ws {

    @Context
    private UriInfo context;

    public ws() {
    } 
}

@GET
    @Produces("application/json")
    @Path("/user/list")
    public String list_user() {
        List<User> list;

        UsersDAO dao = new UsersDAO();
        list = dao.listar();

        Gson g = new Gson();
        return g.toJson(list);
    }

Olhei o meu .log e só fala e está tudo normal:

2019-09-10 20:52:51,919 [localhost-startStop-1] INFO  org.apache.catalina.startup.HostConfig- Deployment of web application directory [/opt/web/webapps/.old] has finished in [105] ms
2019-09-10 20:52:52,010 [main] INFO  org.apache.coyote.http11.Http11NioProtocol- Starting ProtocolHandler ["http-nio-8080"]
2019-09-10 20:52:52,030 [main] INFO  org.apache.catalina.startup.Catalina- Server startup in 2102 ms
Villagram

Boa noite amigo…

Só coloque a barra no @Path da classe ou no método…é por isso que ficou bugado. hehehehe.

Acho q só isso já resolve.

rodriguesabner

Nada, o problema é no Path mesmo! Olha:

@Path("/")
public class ws {}

@GET
@Produces("application/json")
@Path("user/list")
public String list_user() {}

image

Villagram

Então melhor tirar o @Path da classe por completo e deixar só o do método…

rodriguesabner

Eu já fiz isso bro, mas dá o mesmo erro. Online ele não acha o path, mas offline fica normal

Villagram

Essa aplicação foi toda construida por você ou tem mais pessoas envolvidas? O que parece é que o serviço não está sendo exposto no contexto.

rodriguesabner

Só por mim, então, quando eu abro o Index do projeto ele mostra normal, mas quando é pra setar algum path ele não encontra, como se estivesse errado. Creio que se o problema fosse no servidor, o Index nem iniciava

Villagram

Vi aqui que você está utilizando o IIS para publicar a API provavelmente é alguma configuração nele que está impedindo de ir além do root.

Villagram

@rodriguesabner

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
        <handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
</system.webServer>
Villagram

@rodriguesabner
Acabei de pensar em algo aqui…tem dados para retornar nesse serviço??

rodriguesabner

Já testo esse código, e sobre os dados, sim, já tô alimentando. Eu tô fazendo um app e já tenho que fazer alguns testes de como vai ficar

rodriguesabner

IIS não é .NET? Eu tentei jogar o código que você mandou acima no web.xml, mas não tive sucesso. Troquei do hospedagem pra ver se era um problema deles, mas o erro continua. Eu usei Java pra gerar o serviço. Com certeza é erro de configuração (só não sei qual), eu fiz um teste com o php e consegui rodar tranquilo no servidor online.

Villagram

Você precisa usar assim não pode utilizar um framework como o Spring?

rodriguesabner

Olha, em JavaEE sou bem ignorante kkkkk, quando se trata de web eu tenho menos complicação com PHP. Então resumindo, eu sei o básico do básico do JavaEE

Villagram

Entendido, essa biblioteca que você está usando em Java sempre me deu dor de cabeça para configurar, se tiver necessidade de fazer Java mesmo eu posso te ajudar a construir com Spring se não tiver nenhum problema pra você é claro.

Quando eu tinha problemas na configuração do jeito que você está tendo eu apagava todo o projeto e escrevia novamente e na maioria das vezes rodava, mesmo não tendo mudado nada.

Se quiser ajuda com Spring me passa um e-mail com cel e a gente vai conversando por lá. [email removido]

javaflex

Se ta no início do projeto vale mais jogar fora e mudar pra spring boot. E se for uma aplicação média, PHP seria mil vezes mais prático.

rodriguesabner

Estamos no inicio sim, pois é, se tratando de web o PHP facilita bastante. Na primeira tentativa o wservice já funcionou

javaflex

Se PHP atende é perda tempo manter em Java, que é bem mais custoso, tanto em desenvolvimento quanto em infra.

B

tenta tirar a barra no Path

assim:

@Path("")
public class QualquerCoisa

rodriguesabner

Eu deixava sem, na verdade só funcionava sem a /, fazendo isso localmente funcionava tranquilo, mas online não funcionava de jeito nenhum. Minha solução foi trocar pro PHP mesmo.

Como é chatinho encontrar isso (ainda mais em postgresql), vou postar o código:

arquivo: get_all.php

<?php
header('Content-Type: application/json');

require_once('db.php');

$SQL = 'SELECT * FROM suatabela ORDER BY id';

$statement = $connection->prepare($SQL);
$statement->execute();
$menu = $statement->fetchAll(PDO::FETCH_OBJ);

$data = array();

foreach ($menu as $item) {
    //$data[] = $item; //print_all
    $data['coluna_0'] = $item->nome_da_coluna;
    $data['coluna_1'] = $item->nome_da_coluna;
    $data['coluna_2'] = $item->nome_da_coluna;
    $data['coluna_3'] = $item->nome_da_coluna;
    $data['coluna_4'] = $item->nome_da_coluna;
    $data['coluna_5'] = $item->nome_da_coluna;
}

$final = json_encode(['nome_da_colecao' => $data]);
echo $final;

db.php

<?php
$dsn = 'pgsql:host=localhost;dbname=banco';
$username = 'user';
$password = 'senha';
$options = [];
try {
$connection = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
echo $e;
}

Output:

{"nome_da_colecao":{"coluna_0":1,"coluna_1":"Alguma Coisa","coluna_2":"Alguma Coisa","coluna_3":"Alguma Coisa","coluna_4":"Alguma Coisa","coluna_5":"Alguma Coisa"}}
javaflex

Boa decisão. Se for o caso pode simplificar mais o script retornando json direto pelo PDO: https://stackoverflow.com/questions/2770273/pdostatement-to-json

rodriguesabner

Boa!

Criado 7 de setembro de 2019
Ultima resposta 13 de set. de 2019
Respostas 28
Participantes 4