<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <title>Cannot see custom API in API explorer</title>
  <link rel="self" href="https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=122741044" />
  <subtitle>Cannot see custom API in API explorer</subtitle>
  <id>https://liferay.dev/c/message_boards/find_thread?p_l_id=119785294&amp;threadId=122741044</id>
  <updated>2026-04-05T02:58:58Z</updated>
  <dc:date>2026-04-05T02:58:58Z</dc:date>
  <entry>
    <title>RE: RE: Cannot see custom API in API explorer</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122752078" />
    <author>
      <name>Dan Griffiths</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122752078</id>
    <updated>2024-07-03T18:39:22Z</updated>
    <published>2024-07-03T10:23:56Z</published>
    <summary type="html">&lt;p&gt;OK. So I've sorted that now. The error was caused by having a blank
  space character in the &lt;strong&gt;tag&lt;/strong&gt; element of the openapi.yaml.&lt;/p&gt;
&lt;p&gt;It compiles, deploys and shows up in the API explorer without issue.
  Now I just have to work out how to apply this to an existing rest (not
  rest builder) project.....&lt;/p&gt;</summary>
    <dc:creator>Dan Griffiths</dc:creator>
    <dc:date>2024-07-03T10:23:56Z</dc:date>
  </entry>
  <entry>
    <title>RE: RE: Cannot see custom API in API explorer</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122749825" />
    <author>
      <name>Dan Griffiths</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122749825</id>
    <updated>2024-07-03T18:39:28Z</updated>
    <published>2024-07-02T12:38:23Z</published>
    <summary type="html">&lt;p&gt;Thanks for the response so I created a REST Builder project with the
  following openapi.yaml:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;info:
    description: "Simple API to test the inclusion in the built-in API explorer"
    license:
        name: "Apache 2.0"
        url: "http://www.apache.org/licenses/LICENSE-2.0.html"
    title: "AppleRest"
    version: v1.0
openapi: 3.0.1
paths:
    "":
        get:
            tags:
                -   "Service Endpoints"
            operationId: working
            responses:
                200:
                    description: "Server contacted and results returned"
                    content:
                        text/plain:
                            schema:
                                type: string
                            example: "It works!"
    "/morning":
        get:
            tags:
                -   "Service Endpoints"
            operationId: hello
            responses:
                200:
                    description: "Server contacted and results returned"
                    content:    
                        text/plain:
                            schema:
                                type: string
                            example: "Good morning"
    "/morning/{name}":
        get:
            tags:
                -   "Service Endpoints"
            operationId: morning
            parameters:
                -   name: "name"
                    in: path
                    schema:
                        type: string
                    required: true
            responses:
                200:
                    description: "Server contacted and results returned"
                    content:
                        text/plain:
                            schema:
                                type: string
                            example: "Good morning Bob"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;However, when I run the &lt;strong&gt;buildREST&lt;/strong&gt; gradle task, I
  receive the following error:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-java"&gt;Exception in thread "main" java.lang.RuntimeException: Error generating REST API
IllegalStateException occurred while parsing file src\main\java\apple\rest\internal\resource\v1_0\OpenAPIResourceImpl.java.
	at com.liferay.portal.tools.rest.builder.RESTBuilder.main(RESTBuilder.java:119)
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: IllegalStateException occurred while parsing file src\main\java\apple\rest\internal\resource\v1_0\OpenAPIResourceImpl.java.
	at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:105)
	at com.liferay.portal.tools.java.parser.JavaParser._parse(JavaParser.java:973)
	at com.liferay.portal.tools.java.parser.JavaParser.parse(JavaParser.java:82)
	at com.liferay.portal.tools.java.parser.JavaParser.parse(JavaParser.java:69)
	at com.liferay.portal.tools.java.parser.JavaParser.parse(JavaParser.java:63)
	at com.liferay.portal.tools.rest.builder.internal.util.FileUtil._format(FileUtil.java:149)
	at com.liferay.portal.tools.rest.builder.internal.util.FileUtil.write(FileUtil.java:142)
	at com.liferay.portal.tools.rest.builder.RESTBuilder._createOpenAPIResourceFile(RESTBuilder.java:1015)
	at com.liferay.portal.tools.rest.builder.RESTBuilder.build(RESTBuilder.java:261)
	at com.liferay.portal.tools.rest.builder.RESTBuilder.main(RESTBuilder.java:108)
Caused by: java.lang.IllegalStateException: src\main\java\apple\rest\internal\resource\v1_0\OpenAPIResourceImpl.java:81:6: unexpected token: add
	at com.puppycrawl.tools.checkstyle.JavaParser$1.reportError(JavaParser.java:93)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.typeDefinition(GeneratedJavaRecognizer.java:411)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.compilationUnit(GeneratedJavaRecognizer.java:202)
	at com.puppycrawl.tools.checkstyle.JavaParser.parse(JavaParser.java:99)
	... 9 more
Caused by: src\main\java\apple\rest\internal\resource\v1_0\OpenAPIResourceImpl.java:81:6: unexpected token: add
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.traditionalStatement(GeneratedJavaRecognizer.java:5628)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.statement(GeneratedJavaRecognizer.java:4397)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.compoundStatement(GeneratedJavaRecognizer.java:4063)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.field(GeneratedJavaRecognizer.java:3543)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.classBlock(GeneratedJavaRecognizer.java:2643)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.newExpression(GeneratedJavaRecognizer.java:7902)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.primaryExpression(GeneratedJavaRecognizer.java:4476)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.postfixExpression(GeneratedJavaRecognizer.java:7532)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.unaryExpressionNotPlusMinus(GeneratedJavaRecognizer.java:7461)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.unaryExpression(GeneratedJavaRecognizer.java:7276)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.multiplicativeExpression(GeneratedJavaRecognizer.java:7141)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.additiveExpression(GeneratedJavaRecognizer.java:7092)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.shiftExpression(GeneratedJavaRecognizer.java:7035)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.relationalExpression(GeneratedJavaRecognizer.java:6952)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.equalityExpression(GeneratedJavaRecognizer.java:6903)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.andExpression(GeneratedJavaRecognizer.java:6874)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.exclusiveOrExpression(GeneratedJavaRecognizer.java:6845)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.inclusiveOrExpression(GeneratedJavaRecognizer.java:6816)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.logicalAndExpression(GeneratedJavaRecognizer.java:6787)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.logicalOrExpression(GeneratedJavaRecognizer.java:6758)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.conditionalExpression(GeneratedJavaRecognizer.java:2237)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.assignmentExpression(GeneratedJavaRecognizer.java:6510)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.expression(GeneratedJavaRecognizer.java:4910)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.initializer(GeneratedJavaRecognizer.java:4753)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.varInitializer(GeneratedJavaRecognizer.java:4667)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.variableDeclarator(GeneratedJavaRecognizer.java:4640)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.variableDefinitions(GeneratedJavaRecognizer.java:1655)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.field(GeneratedJavaRecognizer.java:3480)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.classBlock(GeneratedJavaRecognizer.java:2643)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.classDefinition(GeneratedJavaRecognizer.java:634)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.typeDefinitionInternal(GeneratedJavaRecognizer.java:556)
	at com.puppycrawl.tools.checkstyle.grammar.GeneratedJavaRecognizer.typeDefinition(GeneratedJavaRecognizer.java:389)
	... 11 more

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':modules:apple-rest:apple-rest-impl:buildREST'.
&amp;gt; Process 'command 'C:\Other\jdk-11.0.2\bin\java.exe'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Dan Griffiths</dc:creator>
    <dc:date>2024-07-02T12:38:23Z</dc:date>
  </entry>
  <entry>
    <title>RE: Cannot see custom API in API explorer</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122749415" />
    <author>
      <name>Mohammed Yasin</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122749415</id>
    <updated>2024-07-02T06:37:16Z</updated>
    <published>2024-07-02T06:37:15Z</published>
    <summary type="html">&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;You can try building Rest API through Rest builder then it will show
  up on API explorer.&lt;/p&gt;
&lt;p&gt;You can refer&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
  &lt;a href="https://learn.liferay.com/w/dxp/headless-delivery/apis-with-rest-builder"&gt;https://learn.liferay.com/w/dxp/headless-delivery/apis-with-rest-builder&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</summary>
    <dc:creator>Mohammed Yasin</dc:creator>
    <dc:date>2024-07-02T06:37:15Z</dc:date>
  </entry>
  <entry>
    <title>Cannot see custom API in API explorer</title>
    <link rel="alternate" href="https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122741043" />
    <author>
      <name>Dan Griffiths</name>
    </author>
    <id>https://liferay.dev/c/message_boards/find_message?p_l_id=119785294&amp;messageId=122741043</id>
    <updated>2024-06-27T18:06:12Z</updated>
    <published>2024-06-27T09:44:42Z</published>
    <summary type="html">&lt;p&gt;I have created a very simple REST service using the 'rest' template
  in Liferay Developer Studio amd deployed it to a local Liferay
  application server (Liferay DXP 2024 Q1.5). Here is the
  RestApplication code:&amp;nbsp;&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-java"&gt;package banana.rest.application;

import java.util.Collections;

import java.util.Set;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Application;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.jaxrs.whiteboard.JaxrsWhiteboardConstants;
/**
 * 
 * @author Daniel.Griffiths
 */
@Component(
	property = {
		JaxrsWhiteboardConstants.JAX_RS_APPLICATION_BASE + "=/banana-rest/banana",
		JaxrsWhiteboardConstants.JAX_RS_NAME + "=banana.Rest"
	},
	service = Application.class
)
public class BananaRestApplication extends Application {

	public Set&amp;lt;Object&amp;gt; getSingletons() {
		return Collections.&amp;lt;Object&amp;gt;singleton(this);
	}
	
	@GET
	@Produces("text/plain")
	public String working() {
		return "It works!";
	}

	@GET
	@Path("/morning")
	@Produces("text/plain")
	public String hello() {
		return "Good morning!";
	}

	@GET
	@Path("/morning/{name}")
	@Produces("text/plain")
	public String morning(
		@PathParam("name") String name,
		@QueryParam("drink") String drink) {

		String greeting = "Good Morning " + name;

		if (drink != null) {
			greeting += ". Would you like some " + drink + "?";
		}

		return greeting;
	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I can access this API by going to
  http://localhost:8080/o/banana-rest/banana (and the text 'It works!'
  is returned as expected) without a problem but when I go to
  'http://localhost:8080/o/api', this API is not listed, only the
  built-in ones.&lt;/p&gt;
&lt;p&gt;Am I correct in thinking that my custom API should be listed in&amp;nbsp; the
  API explorer? If not, I have seen several posts regarding dependencies
  that you can add to JAX-RS web services to produce the OpenAPI
  documentation but it makes no mention of Liferay. What am I missing?&lt;/p&gt;</summary>
    <dc:creator>Dan Griffiths</dc:creator>
    <dc:date>2024-06-27T09:44:42Z</dc:date>
  </entry>
</feed>
