Home > Software engineering >  COMPILATION ERROR : package XXX does not exist
COMPILATION ERROR : package XXX does not exist

Time:12-19

I am using the open-api generator plugin in my java project.

For more information about the plugin, see enter image description here

Here is a part of my pom.xml where i registered the openapi-generator-maven-plugin in the <build> section :

  <plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>6.2.1</version>
    <executions>
      <execution>
        <goals>
          <goal>generate</goal>
        </goals>
        <configuration>
          <inputSpec>${project.basedir}/src/main/resources/pistache-api.yaml</inputSpec>
          <generatorName>jaxrs-spec</generatorName>
          <apiPackage>com.example.api</apiPackage>
          <modelPackage>
            com.example.api.model
          </modelPackage>
          <configOptions>
            <useSwaggerAnnotations>false</useSwaggerAnnotations>
            <library>quarkus</library>
            <interfaceOnly>true</interfaceOnly>
            <dateLibrary>java8</dateLibrary>
            <useTags>true</useTags>
            <useBeanValidation>false</useBeanValidation>
            <returnResponse>true</returnResponse>
          </configOptions>
        </configuration>
      </execution>
    </executions>
  </plugin>

Here is my controller src/main/java/com/example/controller/BasicAuth.java in which I implement the generated interface and in which the errors are located:

package com.example.controller;

import com.example.api.UsersApi;
import com.example.client.RestClientBasicAuth;
import com.example.config.BasicUserConfig;
import org.eclipse.microprofile.rest.client.inject.RestClient;


import javax.inject.Inject;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

import static com.example.RestResourceRoot.APPLICATION_PATH;

@Path(APPLICATION_PATH)
public class BasicAuth implements UsersApi {

    @Override
    public Response retrievePwdGet() {
       // my custom implementation 
    }
}

Here is the interface target/generated-sources/openapi/src/gen/java/com/example/api/UsersApi.java :

package com.example.api;


import javax.ws.rs.*;
import javax.ws.rs.core.Response;


import java.io.InputStream;
import java.util.Map;
import java.util.List;


@Path("/retrieve-pwd")
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen", date = "2022-12-10T18:01:45.461936200 01:00[Europe/Paris]")
public interface UsersApi {

    @GET
    @Produces({ "application/json" })
    Response retrievePwdGet();
}

I don't know what's going wrong here. My IDE does not report any errors, although I know that the IDE cannot be fully trusted.

Finally, my application can be started correctly via the IDE, but the controller endpoint for my GET method is not the one defined in the UsersApi interface. The path is not api/v1/retrieve-pwd, but api/v1.

This behavior is also strange. Maybe by overloading the method in my controller the path can be modified, but, the path is not defined on the method but on the interface.

I await your comments or feedback and thank you in advance

CodePudding user response:

Problem was generated files : they were not compiled. This explain errors messages.

Solution was adding a maven helper plugin :

 <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
          <execution>
            <id>add-source</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>add-source</goal>
            </goals>
            <configuration>
              <sources>
                <source>src/main/newsrc/</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
  • Related