Error generating classes from generateClientApi or generateClientApiV2
Nobody has claimed this yet.
- Dominant language
- Kotlin
- Stars
- 217
- Forks
- 116
- PR merge metrics
- No merged PRs in 30d
Description
Error generating classes from generateClientApi or generateClientApiV2.
Constructors with invalid number of arguments.
schemas:
type Query {
shows: [Show]
}
type Show {
title: String,
id: String
}
I'm using graphqlcodegen-maven-plugin to generate the code. When I run mvn clean install the command generates the classes but with an error:
file: ShowsProjectionRoot.java
package com.graphql.engine.codegen.client;
import com.netflix.graphql.dgs.client.codegen.BaseSubProjectionNode;
import javax.annotation.processing.Generated;
@Generated(
value = "com.netflix.graphql.dgs.codegen.CodeGen",
date = "2024-05-21T18:53:11.998886400Z"
)
@com.graphql.engine.codegen.Generated
public class ShowsProjectionRoot<PARENT extends BaseSubProjectionNode<?, ?>, ROOT extends BaseSubProjectionNode<?, ?>> extends BaseSubProjectionNode<PARENT, ROOT> {
public ShowsProjectionRoot() {
super(null, null, java.util.Optional.of("Show")); //current line with the error because the constructor only accepts two argument
}
public ShowsProjectionRoot<PARENT, ROOT> title() {
getFields().put("title", null);
return this;
}
public ShowsProjectionRoot<PARENT, ROOT> ano() {
getFields().put("ano", null);
return this;
}
}
this is error:
constructor BaseSubProjectionNode in class com.netflix.graphql.dgs.client.codegen.BaseSubProjectionNode<T,R> cannot be applied to given types;
other file ShowsGraphQLQuery with error:
package com.graphql.engine.codegen.client;
import com.netflix.graphql.dgs.client.codegen.GraphQLQuery;
import java.lang.Override;
import java.lang.String;
import java.util.HashSet;
import java.util.Set;
import javax.annotation.processing.Generated;
@Generated(
value = "com.netflix.graphql.dgs.codegen.CodeGen",
date = "2024-05-21T18:53:11.998886400Z"
)
@com.graphql.engine.codegen.Generated
public class ShowsGraphQLQuery extends GraphQLQuery {
public ShowsGraphQLQuery(String queryName) {
super("query", queryName); // current line with the error because the constructor only accepts one argument
}
public ShowsGraphQLQuery() {
super("query");
}
@Override
public String getOperationName() {
return "shows";
}
public static Builder newRequest() {
return new Builder();
}
@Generated(
value = "com.netflix.graphql.dgs.codegen.CodeGen",
date = "2024-05-21T18:53:11.998886400Z"
)
@com.graphql.engine.codegen.Generated
public static class Builder {
private Set<String> fieldsSet = new HashSet<>();
private String queryName;
public ShowsGraphQLQuery build() {
return new ShowsGraphQLQuery(queryName);
}
public Builder queryName(String queryName) {
this.queryName = queryName;
return this;
}
}
}
ERROR: no suitable constructor found for GraphQLQuery(java.lang.String,java.lang.String)
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.graphql</groupId>
<artifactId>engine</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>engine</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-graphql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.graphql</groupId>
<artifactId>spring-graphql-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- DGS dependencies. We don't have to specify a version here! -->
<dependency>
<groupId>com.netflix.graphql.dgs</groupId>
<artifactId>graphql-dgs-spring-boot-starter</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.netflix.graphql.dgs</groupId>
<artifactId>graphql-dgs-platform-dependencies</artifactId>
<!-- The DGS BOM/platform dependency. This is the only place you set version of DGS -->
<version>3.10.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>io.github.deweyjose</groupId>
<artifactId>graphqlcodegen-maven-plugin</artifactId>
<version>1.50</version>
<executions>
<execution>
<id>dgs-codegen</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<schemaPaths>
<param>src/main/resources/graphql-client</param>
</schemaPaths>
<packageName>com.graphql.engine.codegen</packageName>
<addGeneratedAnnotation>true</addGeneratedAnnotation>
<generateBoxedTypes>true</generateBoxedTypes>
<generateDataTypes>true</generateDataTypes>
<generateClientApiV2>true</generateClientApiV2>
<writeToFiles>true</writeToFiles>
<generateDocs>true</generateDocs>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>add-dgs-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/generated-sources</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running mvn clean install with the supplied schema and pom.xml, then inspect the generated ShowsProjectionRoot.java and ShowsGraphQLQuery.java constructors against their DGS base classes. Done means the generated client classes compile successfully with generateClientApiV2 enabled and the reported constructor errors are resolved.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- graphql, java
- Domain
- api, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100