Aloisio
Aloisio

Reputation: 51

RestClient Error javax.ws.rs.WebApplicationException: Unknown error, status code 404

I'm trying to request from a Quarkus's api to Jersey's api, but Jersey API returns a 404 error:

javax.ws.rs.WebApplicationException: Unknown error, status code 404

It looks like quarkus rest client doesn't recognize or can't parse the payload json.

Did you already get something like that?

the payload should be something like that:

{
    "code": 404,
    "description": "some description....",
    "label": "API_ERROR_OBJECT_NOT_FOUND",
    "message": "Requested Object not found"
}

The code:

@ApplicationScoped
public class MachineService {

    @Inject
    @RestClient
    ICoreSummaryRest iCoreSummaryRest;

    public Boolean transferDatacollector(ObjectNode transferDatacollector) {
        try {
            String resp = iCoreSummaryRest.updateDataCollectosTransfer
                (transferDatacollector.toString());
            return Boolean.valueOf(resp);
        }catch (Exception e){
            return null;
        }
    }

interface

import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
import org.eclipse.microprofile.rest.client.annotation.RegisterProvider;
import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;


@Path("/")
@RegisterRestClient(configKey="country-api")
@RegisterClientHeaders(CustomHeadersRest.class)
public interface ICoreSummaryRest {

@PUT
    @Produces(MediaType.APPLICATION_JSON)
    @Path("datacollectors/transfer/")
    public String updateDataCollectosTransfer(String transferDatacollectorJSON);

}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                      http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <!-- The Basics -->
    <parent>
        <groupId>com.mycompany</groupId>
        <artifactId>my-project</artifactId>
        <version>1.0.0</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>my-project-resource</artifactId>
    <version>1.0.0</version>

    <dependencies>
        <!-- Dependências Gerais Quarkus BOM -->
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-reactive-jackson</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-jsonb</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.jboss.spec.javax.ws.rs</groupId>
            <artifactId>jboss-jaxrs-api_2.1_spec</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-smallrye-openapi</artifactId>
            <scope>provided</scope>
        </dependency>
        <!--  <dependency>
              <groupId>io.quarkus</groupId>
              <artifactId>quarkus-smallrye-graphql</artifactId>
          </dependency> -->
          <dependency>
              <groupId>org.eclipse.microprofile.rest.client</groupId>
              <artifactId>microprofile-rest-client-api</artifactId>
          </dependency>
          <!-- Dependências do Projeto -->
        <dependency>
            <groupId>com.mycompany</groupId>
            <artifactId>my-project-service</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- Dependência JTS -->
        <dependency>
            <groupId>org.locationtech.jts</groupId>
            <artifactId>jts-core</artifactId>
        </dependency>
        <!-- Dependência mycompany -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
    </dependencies>

    <!-- Build Settings -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.jboss.jandex</groupId>
                <artifactId>jandex-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

Upvotes: 2

Views: 8603

Answers (2)

Charlie
Charlie

Reputation: 2231

If you want to read the body you can catch the error like this:

try {
  String resourceResponse = errorRestClient.getResource();
} catch (WebApplicationException e) {
  String respStr = e.getResponse().readEntity(String.class);
  LOGGER.error(respStr);
}

Which will print this for the following mockbin at http://mockbin.org/bin/3144eda0-9fa7-4893-90ee-5d624d51bcd2

2022-01-30 17:59:45,851 ERROR [org.acm.arc.ErrorHTTPrestAPI] (vert.x-eventloop-thread-11) { "description": "some description....", "label": "API_ERROR_OBJECT_NOT_FOUND", "message": "Requested Object not found" }

My interface looks like this

@ApplicationScoped
@Path("/")
@RegisterRestClient(baseUri="http://mockbin.org/bin/3144eda0-9fa7-4893-90ee-5d624d51bcd2")
public interface ErrorRestClient {

    @GET
    @Path("")
    String getResource();

}

Upvotes: 2

Felipe Windmoller
Felipe Windmoller

Reputation: 1753

If I understood correctly this issue, when RestClient receives one response different from 2xx it automatically throws this exception.

Perhaps you can disable the ResponseExceptionMapper or create one interceptor to handle this exception.

Below I just quote the answer from this issue

This exception is thrown by the default rest client ResponseExceptionMapper.

You should be able to disable it by adding the following property to application.properties:

microprofile.rest.client.disable.default.mapper=false

See the Default ResponxeExceptionMapper and ResponseExceptionMapper sections of the MicroProfile Rest Client specification.

Upvotes: 0

Related Questions