Eliminate NormalizedNodePayload
[netconf.git] / restconf / restconf-nb / src / main / java / org / opendaylight / restconf / nb / jaxrs / JaxRsRestconf.java
index 670ffcf00bd9fb807f06b0fb6a82b694eb52adb5..8e8135ad4ef4d803d8a79d46d6aadaa66170e2cc 100644 (file)
@@ -18,6 +18,7 @@ import java.text.ParseException;
 import java.util.Date;
 import java.util.List;
 import javax.inject.Singleton;
+import javax.ws.rs.BadRequestException;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.Encoded;
@@ -37,23 +38,23 @@ import javax.ws.rs.core.EntityTag;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
-import javax.ws.rs.core.Response.Status;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.ParamConverter;
 import javax.ws.rs.ext.ParamConverterProvider;
 import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.NonNullByDefault;
 import org.eclipse.jdt.annotation.Nullable;
 import org.opendaylight.restconf.api.ApiPath;
 import org.opendaylight.restconf.api.FormattableBody;
+import org.opendaylight.restconf.api.HttpStatusCode;
 import org.opendaylight.restconf.api.MediaTypes;
+import org.opendaylight.restconf.api.QueryParameters;
 import org.opendaylight.restconf.api.query.PrettyPrintParam;
 import org.opendaylight.restconf.common.errors.RestconfDocumentedException;
 import org.opendaylight.restconf.common.errors.RestconfError;
 import org.opendaylight.restconf.common.errors.RestconfFuture;
+import org.opendaylight.restconf.nb.rfc8040.ErrorTagMapping;
 import org.opendaylight.restconf.nb.rfc8040.URLConstants;
-import org.opendaylight.restconf.nb.rfc8040.databind.jaxrs.QueryParams;
-import org.opendaylight.restconf.nb.rfc8040.legacy.ErrorTags;
-import org.opendaylight.restconf.nb.rfc8040.legacy.NormalizedNodePayload;
 import org.opendaylight.restconf.server.api.ConfigurationMetadata;
 import org.opendaylight.restconf.server.api.CreateResourceResult;
 import org.opendaylight.restconf.server.api.DataGetResult;
@@ -71,6 +72,7 @@ import org.opendaylight.restconf.server.api.ModulesGetResult;
 import org.opendaylight.restconf.server.api.OperationInputBody;
 import org.opendaylight.restconf.server.api.PatchStatusContext;
 import org.opendaylight.restconf.server.api.RestconfServer;
+import org.opendaylight.restconf.server.api.ServerRequest;
 import org.opendaylight.restconf.server.api.XmlChildBody;
 import org.opendaylight.restconf.server.api.XmlDataPostBody;
 import org.opendaylight.restconf.server.api.XmlOperationInputBody;
@@ -116,10 +118,32 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         }
     };
 
-    private final RestconfServer server;
+    private final @NonNull RestconfServer server;
+    private final @NonNull ServerRequest emptyRequest;
+    private final @NonNull PrettyPrintParam prettyPrint;
+    private final @NonNull ErrorTagMapping errorTagMapping;
 
-    public JaxRsRestconf(final RestconfServer server) {
+    public JaxRsRestconf(final RestconfServer server, final ErrorTagMapping errorTagMapping,
+            final PrettyPrintParam prettyPrint) {
         this.server = requireNonNull(server);
+        this.errorTagMapping = requireNonNull(errorTagMapping);
+        this.prettyPrint = requireNonNull(prettyPrint);
+        emptyRequest = ServerRequest.of(QueryParameters.of(), prettyPrint);
+
+        LOG.info("RESTCONF data-missing condition is reported as HTTP status {}", switch (errorTagMapping) {
+            case ERRATA_5565 -> "404 (Errata 5565)";
+            case RFC8040 -> "409 (RFC8040)";
+        });
+    }
+
+    private @NonNull ServerRequest requestOf(final UriInfo uriInfo) {
+        final QueryParameters params;
+        try {
+            params = QueryParameters.ofMultiValue(uriInfo.getQueryParameters());
+        } catch (IllegalArgumentException e) {
+            throw new BadRequestException(e.getMessage(), e);
+        }
+        return params.isEmpty() ? emptyRequest : ServerRequest.of(params, prettyPrint);
     }
 
     @Override
@@ -140,7 +164,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     @SuppressWarnings("checkstyle:abbreviationAsWordInName")
     public void dataDELETE(@Encoded @PathParam("identifier") final ApiPath identifier,
             @Suspended final AsyncResponse ar) {
-        server.dataDELETE(identifier).addCallback(new JaxRsRestconfCallback<>(ar) {
+        server.dataDELETE(emptyRequest, identifier).addCallback(new JaxRsRestconfCallback<>(ar) {
             @Override
             Response transform(final Empty result) {
                 return Response.noContent().build();
@@ -164,7 +188,8 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaType.TEXT_XML
     })
     public void dataGET(@Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) {
-        completeDataGET(server.dataGET(QueryParams.newDataGetParams(uriInfo)), ar);
+        final var request = requestOf(uriInfo);
+        completeDataGET(server.dataGET(request), request.prettyPrint(), ar);
     }
 
     /**
@@ -185,14 +210,19 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void dataGET(@Encoded @PathParam("identifier") final ApiPath identifier, @Context final UriInfo uriInfo,
             @Suspended final AsyncResponse ar) {
-        completeDataGET(server.dataGET(identifier, QueryParams.newDataGetParams(uriInfo)), ar);
+        final var request = requestOf(uriInfo);
+        completeDataGET(server.dataGET(request, identifier), request.prettyPrint(), ar);
     }
 
-    private static void completeDataGET(final RestconfFuture<DataGetResult> future, final AsyncResponse ar) {
+    @NonNullByDefault
+    private static void completeDataGET(final RestconfFuture<DataGetResult> future, final PrettyPrintParam prettyPrint,
+            final AsyncResponse ar) {
         future.addCallback(new JaxRsRestconfCallback<>(ar) {
             @Override
             Response transform(final DataGetResult result) {
-                final var builder = Response.ok().entity(result.payload()).cacheControl(NO_CACHE);
+                final var builder = Response.ok()
+                    .entity(new JaxRsFormattableBody(result.body(), prettyPrint))
+                    .cacheControl(NO_CACHE);
                 fillConfigurationMetadata(builder, result);
                 return builder.build();
             }
@@ -226,7 +256,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void dataXmlPATCH(final InputStream body, @Suspended final AsyncResponse ar) {
         try (var xmlBody = new XmlResourceBody(body)) {
-            completeDataPATCH(server.dataPATCH(xmlBody), ar);
+            completeDataPATCH(server.dataPATCH(emptyRequest, xmlBody), ar);
         }
     }
 
@@ -248,7 +278,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     public void dataXmlPATCH(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body,
             @Suspended final AsyncResponse ar) {
         try (var xmlBody = new XmlResourceBody(body)) {
-            completeDataPATCH(server.dataPATCH(identifier, xmlBody), ar);
+            completeDataPATCH(server.dataPATCH(emptyRequest, identifier, xmlBody), ar);
         }
     }
 
@@ -267,7 +297,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void dataJsonPATCH(final InputStream body, @Suspended final AsyncResponse ar) {
         try (var jsonBody = new JsonResourceBody(body)) {
-            completeDataPATCH(server.dataPATCH(jsonBody), ar);
+            completeDataPATCH(server.dataPATCH(emptyRequest, jsonBody), ar);
         }
     }
 
@@ -288,7 +318,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     public void dataJsonPATCH(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body,
             @Suspended final AsyncResponse ar) {
         try (var jsonBody = new JsonResourceBody(body)) {
-            completeDataPATCH(server.dataPATCH(identifier, jsonBody), ar);
+            completeDataPATCH(server.dataPATCH(emptyRequest, identifier, jsonBody), ar);
         }
     }
 
@@ -308,6 +338,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
      * <a href="https://www.rfc-editor.org/rfc/rfc8072#section-2">RFC8072, section 2</a>.
      *
      * @param body YANG Patch body
+     * @param uriInfo URI info
      * @param ar {@link AsyncResponse} which needs to be completed with a {@link PatchStatusContext}
      */
     @PATCH
@@ -317,9 +348,10 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaTypes.APPLICATION_YANG_DATA_JSON,
         MediaTypes.APPLICATION_YANG_DATA_XML
     })
-    public void dataYangJsonPATCH(final InputStream body, @Suspended final AsyncResponse ar) {
+    public void dataYangJsonPATCH(final InputStream body, @Context final UriInfo uriInfo,
+            @Suspended final AsyncResponse ar) {
         try (var jsonBody = new JsonPatchBody(body)) {
-            completeDataYangPATCH(server.dataPATCH(jsonBody), ar);
+            completeDataYangPATCH(server.dataPATCH(requestOf(uriInfo), jsonBody), ar);
         }
     }
 
@@ -329,6 +361,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
      *
      * @param identifier path to target
      * @param body YANG Patch body
+     * @param uriInfo URI info
      * @param ar {@link AsyncResponse} which needs to be completed with a {@link PatchStatusContext}
      */
     @PATCH
@@ -339,9 +372,9 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaTypes.APPLICATION_YANG_DATA_XML
     })
     public void dataYangJsonPATCH(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body,
-            @Suspended final AsyncResponse ar) {
+            @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) {
         try (var jsonBody = new JsonPatchBody(body)) {
-            completeDataYangPATCH(server.dataPATCH(identifier, jsonBody), ar);
+            completeDataYangPATCH(server.dataPATCH(requestOf(uriInfo), identifier, jsonBody), ar);
         }
     }
 
@@ -350,6 +383,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
      * <a href="https://www.rfc-editor.org/rfc/rfc8072#section-2">RFC8072, section 2</a>.
      *
      * @param body YANG Patch body
+     * @param uriInfo URI info
      * @param ar {@link AsyncResponse} which needs to be completed with a {@link PatchStatusContext}
      */
     @PATCH
@@ -359,9 +393,10 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaTypes.APPLICATION_YANG_DATA_JSON,
         MediaTypes.APPLICATION_YANG_DATA_XML
     })
-    public void dataYangXmlPATCH(final InputStream body, @Suspended final AsyncResponse ar) {
+    public void dataYangXmlPATCH(final InputStream body, @Context final UriInfo uriInfo,
+            @Suspended final AsyncResponse ar) {
         try (var xmlBody = new XmlPatchBody(body)) {
-            completeDataYangPATCH(server.dataPATCH(xmlBody), ar);
+            completeDataYangPATCH(server.dataPATCH(requestOf(uriInfo), xmlBody), ar);
         }
     }
 
@@ -370,6 +405,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
      * <a href="https://www.rfc-editor.org/rfc/rfc8072#section-2">RFC8072, section 2</a>.
      *
      * @param identifier path to target
+     * @param uriInfo URI info
      * @param body YANG Patch body
      * @param ar {@link AsyncResponse} which needs to be completed with a {@link PatchStatusContext}
      */
@@ -381,27 +417,28 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaTypes.APPLICATION_YANG_DATA_XML
     })
     public void dataYangXmlPATCH(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body,
-            @Suspended final AsyncResponse ar) {
+            @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) {
         try (var xmlBody = new XmlPatchBody(body)) {
-            completeDataYangPATCH(server.dataPATCH(identifier, xmlBody), ar);
+            completeDataYangPATCH(server.dataPATCH(requestOf(uriInfo), identifier, xmlBody), ar);
         }
     }
 
-    private static void completeDataYangPATCH(final RestconfFuture<DataYangPatchResult> future,
+    private void completeDataYangPATCH(final RestconfFuture<DataYangPatchResult> future,
             final AsyncResponse ar) {
         future.addCallback(new JaxRsRestconfCallback<>(ar) {
             @Override
             Response transform(final DataYangPatchResult result) {
-                final var status = result.status();
-                final var builder = Response.status(statusOf(status))
-                    .entity(new YangPatchStatusBody(() -> PrettyPrintParam.FALSE, status));
+                final var patchStatus = result.status();
+                final var statusCode = statusOf(patchStatus);
+                final var builder = Response.status(statusCode.code(), statusCode.phrase())
+                    .entity(new YangPatchStatusBody(patchStatus));
                 fillConfigurationMetadata(builder, result);
                 return builder.build();
             }
 
-            private static Status statusOf(final PatchStatusContext result) {
+            private HttpStatusCode statusOf(final PatchStatusContext result) {
                 if (result.ok()) {
-                    return Status.OK;
+                    return HttpStatusCode.OK;
                 }
                 final var globalErrors = result.globalErrors();
                 if (globalErrors != null && !globalErrors.isEmpty()) {
@@ -415,11 +452,11 @@ public final class JaxRsRestconf implements ParamConverterProvider {
                         }
                     }
                 }
-                return Status.INTERNAL_SERVER_ERROR;
+                return HttpStatusCode.INTERNAL_SERVER_ERROR;
             }
 
-            private static Status statusOfFirst(final List<RestconfError> error) {
-                return ErrorTags.statusOf(error.get(0).getErrorTag());
+            private @NonNull HttpStatusCode statusOfFirst(final List<RestconfError> error) {
+                return errorTagMapping.statusOf(error.get(0).getErrorTag());
             }
         });
     }
@@ -440,7 +477,8 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     public void postDataJSON(final InputStream body, @Context final UriInfo uriInfo,
             @Suspended final AsyncResponse ar) {
         try (var jsonBody = new JsonChildBody(body)) {
-            completeDataPOST(server.dataPOST(jsonBody, QueryParams.normalize(uriInfo)), uriInfo, ar);
+            final var request = requestOf(uriInfo);
+            completeDataPOST(server.dataPOST(request, jsonBody), request.prettyPrint(), uriInfo, ar);
         }
     }
 
@@ -460,7 +498,8 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void postDataJSON(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body,
             @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) {
-        completeDataPOST(server.dataPOST(identifier, new JsonDataPostBody(body), QueryParams.normalize(uriInfo)),
+        final var request = requestOf(uriInfo);
+        completeDataPOST(server.dataPOST(request, identifier, new JsonDataPostBody(body)), request.prettyPrint(),
             uriInfo, ar);
     }
 
@@ -480,7 +519,8 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void postDataXML(final InputStream body, @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) {
         try (var xmlBody = new XmlChildBody(body)) {
-            completeDataPOST(server.dataPOST(xmlBody, QueryParams.normalize(uriInfo)), uriInfo, ar);
+            final var request = requestOf(uriInfo);
+            completeDataPOST(server.dataPOST(request, xmlBody), request.prettyPrint(), uriInfo, ar);
         }
     }
 
@@ -501,12 +541,13 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void postDataXML(@Encoded @PathParam("identifier") final ApiPath identifier, final InputStream body,
             @Context final UriInfo uriInfo, @Suspended final AsyncResponse ar) {
-        completeDataPOST(server.dataPOST(identifier, new XmlDataPostBody(body), QueryParams.normalize(uriInfo)),
+        final var request = requestOf(uriInfo);
+        completeDataPOST(server.dataPOST(request, identifier, new XmlDataPostBody(body)), request.prettyPrint(),
             uriInfo, ar);
     }
 
-    private static void completeDataPOST(final RestconfFuture<? extends DataPostResult> future, final UriInfo uriInfo,
-            final AsyncResponse ar) {
+    private static void completeDataPOST(final RestconfFuture<? extends DataPostResult> future,
+            final PrettyPrintParam prettyPrint, final UriInfo uriInfo, final AsyncResponse ar) {
         future.addCallback(new JaxRsRestconfCallback<DataPostResult>(ar) {
             @Override
             Response transform(final DataPostResult result) {
@@ -520,7 +561,8 @@ public final class JaxRsRestconf implements ParamConverterProvider {
                 }
                 if (result instanceof InvokeResult invokeOperation) {
                     final var output = invokeOperation.output();
-                    return output == null ? Response.noContent().build() : Response.ok().entity(output).build();
+                    return output == null ? Response.noContent().build()
+                        : Response.ok().entity(new JaxRsFormattableBody(output, prettyPrint)).build();
                 }
                 LOG.error("Unhandled result {}", result);
                 return Response.serverError().build();
@@ -543,7 +585,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void dataJsonPUT(@Context final UriInfo uriInfo, final InputStream body, @Suspended final AsyncResponse ar) {
         try (var jsonBody = new JsonResourceBody(body)) {
-            completeDataPUT(server.dataPUT(jsonBody, QueryParams.normalize(uriInfo)), ar);
+            completeDataPUT(server.dataPUT(requestOf(uriInfo), jsonBody), ar);
         }
     }
 
@@ -564,7 +606,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     public void dataJsonPUT(@Encoded @PathParam("identifier") final ApiPath identifier, @Context final UriInfo uriInfo,
             final InputStream body, @Suspended final AsyncResponse ar) {
         try (var jsonBody = new JsonResourceBody(body)) {
-            completeDataPUT(server.dataPUT(identifier, jsonBody, QueryParams.normalize(uriInfo)), ar);
+            completeDataPUT(server.dataPUT(requestOf(uriInfo), identifier, jsonBody), ar);
         }
     }
 
@@ -584,7 +626,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     })
     public void dataXmlPUT(@Context final UriInfo uriInfo, final InputStream body, @Suspended final AsyncResponse ar) {
         try (var xmlBody = new XmlResourceBody(body)) {
-            completeDataPUT(server.dataPUT(xmlBody, QueryParams.normalize(uriInfo)), ar);
+            completeDataPUT(server.dataPUT(requestOf(uriInfo), xmlBody), ar);
         }
     }
 
@@ -606,7 +648,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     public void dataXmlPUT(@Encoded @PathParam("identifier") final ApiPath identifier, @Context final UriInfo uriInfo,
             final InputStream body, @Suspended final AsyncResponse ar) {
         try (var xmlBody = new XmlResourceBody(body)) {
-            completeDataPUT(server.dataPUT(identifier, xmlBody, QueryParams.normalize(uriInfo)), ar);
+            completeDataPUT(server.dataPUT(requestOf(uriInfo), identifier, xmlBody), ar);
         }
     }
 
@@ -634,7 +676,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaTypes.APPLICATION_YANG_DATA_JSON, MediaType.APPLICATION_JSON
     })
     public void operationsGET(@Suspended final AsyncResponse ar) {
-        completeOperationsGet(server.operationsGET(), ar);
+        server.operationsGET(emptyRequest).addCallback(new FormattableBodyCallback(ar, prettyPrint));
     }
 
     /**
@@ -650,16 +692,8 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaTypes.APPLICATION_YANG_DATA_JSON, MediaType.APPLICATION_JSON
     })
     public void operationsGET(@PathParam("operation") final ApiPath operation, @Suspended final AsyncResponse ar) {
-        completeOperationsGet(server.operationsGET(operation), ar);
-    }
-
-    private static void completeOperationsGet(final RestconfFuture<FormattableBody> future, final AsyncResponse ar) {
-        future.addCallback(new JaxRsRestconfCallback<FormattableBody>(ar) {
-            @Override
-            Response transform(final FormattableBody result) {
-                return Response.ok().entity(result).build();
-            }
-        });
+        server.operationsGET(emptyRequest, operation)
+            .addCallback(new FormattableBodyCallback(ar, prettyPrint));
     }
 
     /**
@@ -668,7 +702,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
      * @param identifier module name and rpc identifier string for the desired operation
      * @param body the body of the operation
      * @param uriInfo URI info
-     * @param ar {@link AsyncResponse} which needs to be completed with a {@link NormalizedNodePayload} output
+     * @param ar {@link AsyncResponse} which needs to be completed with a {@link FormattableBody} output
      */
     @POST
     // FIXME: identifier is just a *single* QName
@@ -698,7 +732,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
      * @param identifier module name and rpc identifier string for the desired operation
      * @param body the body of the operation
      * @param uriInfo URI info
-     * @param ar {@link AsyncResponse} which needs to be completed with a {@link NormalizedNodePayload} output
+     * @param ar {@link AsyncResponse} which needs to be completed with a {@link FormattableBody} output
      */
     @POST
     // FIXME: identifier is just a *single* QName
@@ -723,7 +757,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
 
     private void operationsPOST(final ApiPath identifier, final UriInfo uriInfo, final AsyncResponse ar,
             final OperationInputBody body) {
-        server.operationsPOST(uriInfo.getBaseUri(), identifier, QueryParams.normalize(uriInfo), body)
+        server.operationsPOST(requestOf(uriInfo), uriInfo.getBaseUri(), identifier, body)
             .addCallback(new JaxRsRestconfCallback<>(ar) {
                 @Override
                 Response transform(final InvokeResult result) {
@@ -749,12 +783,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
         MediaType.TEXT_XML
     })
     public void yangLibraryVersionGET(@Suspended final AsyncResponse ar) {
-        server.yangLibraryVersionGET().addCallback(new JaxRsRestconfCallback<NormalizedNodePayload>(ar) {
-            @Override
-            Response transform(final NormalizedNodePayload result) {
-                return Response.ok().entity(result).build();
-            }
-        });
+        server.yangLibraryVersionGET(emptyRequest).addCallback(new FormattableBodyCallback(ar, prettyPrint));
     }
 
     // FIXME: References to these resources are generated by our yang-library implementation. That means:
@@ -784,7 +813,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     @Path("/" + URLConstants.MODULES_SUBPATH + "/{fileName : [^/]+}")
     public void modulesYangGET(@PathParam("fileName") final String fileName,
             @QueryParam("revision") final String revision, @Suspended final AsyncResponse ar) {
-        completeModulesGET(server.modulesYangGET(fileName, revision), ar);
+        completeModulesGET(server.modulesYangGET(emptyRequest, fileName, revision), ar);
     }
 
     /**
@@ -801,7 +830,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     public void modulesYangGET(@Encoded @PathParam("mountPath") final ApiPath mountPath,
             @PathParam("fileName") final String fileName, @QueryParam("revision") final String revision,
             @Suspended final AsyncResponse ar) {
-        completeModulesGET(server.modulesYangGET(mountPath, fileName, revision), ar);
+        completeModulesGET(server.modulesYangGET(emptyRequest, mountPath, fileName, revision), ar);
     }
 
     /**
@@ -816,7 +845,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     @Path("/" + URLConstants.MODULES_SUBPATH + "/{fileName : [^/]+}")
     public void modulesYinGET(@PathParam("fileName") final String fileName,
             @QueryParam("revision") final String revision, @Suspended final AsyncResponse ar) {
-        completeModulesGET(server.modulesYinGET(fileName, revision), ar);
+        completeModulesGET(server.modulesYinGET(emptyRequest, fileName, revision), ar);
     }
 
     /**
@@ -833,7 +862,7 @@ public final class JaxRsRestconf implements ParamConverterProvider {
     public void modulesYinGET(@Encoded @PathParam("mountPath") final ApiPath mountPath,
             @PathParam("fileName") final String fileName, @QueryParam("revision") final String revision,
             @Suspended final AsyncResponse ar) {
-        completeModulesGET(server.modulesYinGET(mountPath, fileName, revision), ar);
+        completeModulesGET(server.modulesYinGET(emptyRequest, mountPath, fileName, revision), ar);
     }
 
     private static void completeModulesGET(final RestconfFuture<ModulesGetResult> future, final AsyncResponse ar) {