This is an automated email from the ASF dual-hosted git repository.

junma pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-site.git


The following commit(s) were added to refs/heads/main by this push:
     new 3ef966ced65 [fix][doc]Fix broken links pointing to javadoc (#547)
3ef966ced65 is described below

commit 3ef966ced652f63bcf70f56ee5b5e01324a6a3a4
Author: Jun Ma <60642177+momo-...@users.noreply.github.com>
AuthorDate: Fri Apr 28 18:57:11 2023 +0800

    [fix][doc]Fix broken links pointing to javadoc (#547)
    
    * fix javadoc links
    
    * `/` fix
---
 docs/admin-api-tutorial.md                         |  2 +-
 docs/administration-geo.md                         |  2 +-
 docs/client-libraries-consumers.md                 |  2 +-
 docs/client-libraries-java-initialize.md           |  2 +-
 docs/client-libraries-java-use.md                  |  8 +++----
 docs/client-libraries-producers.md                 |  6 ++---
 docs/concepts-messaging.md                         |  6 ++---
 .../version-2.10.x/admin-api-overview.md           |  2 +-
 versioned_docs/version-2.10.x/admin-api-topics.md  |  6 ++---
 .../version-2.10.x/administration-geo.md           |  2 +-
 .../version-2.10.x/client-libraries-java.md        | 20 ++++++++---------
 .../version-2.10.x/concepts-messaging.md           |  6 ++---
 versioned_docs/version-2.11.x/admin-get-started.md |  2 +-
 .../version-2.11.x/administration-geo.md           |  2 +-
 .../version-2.11.x/client-libraries-java.md        | 26 +++++++++++-----------
 .../version-2.11.x/concepts-messaging.md           |  6 ++---
 versioned_docs/version-2.8.x/admin-api-brokers.md  |  2 +-
 versioned_docs/version-2.8.x/admin-api-clusters.md |  2 +-
 .../version-2.8.x/admin-api-functions.md           |  2 +-
 .../version-2.8.x/admin-api-namespaces.md          |  2 +-
 versioned_docs/version-2.8.x/admin-api-overview.md |  2 +-
 versioned_docs/version-2.8.x/admin-api-topics.md   |  6 ++---
 versioned_docs/version-2.8.x/administration-geo.md |  2 +-
 .../version-2.8.x/client-libraries-java.md         | 20 ++++++++---------
 versioned_docs/version-2.8.x/concepts-messaging.md |  6 ++---
 versioned_docs/version-2.9.x/admin-api-overview.md |  2 +-
 versioned_docs/version-2.9.x/admin-api-topics.md   |  6 ++---
 versioned_docs/version-2.9.x/administration-geo.md |  2 +-
 .../version-2.9.x/client-libraries-java.md         | 20 ++++++++---------
 versioned_docs/version-2.9.x/concepts-messaging.md |  6 ++---
 30 files changed, 89 insertions(+), 91 deletions(-)

diff --git a/docs/admin-api-tutorial.md b/docs/admin-api-tutorial.md
index fd3b5b45c86..6423b699eff 100644
--- a/docs/admin-api-tutorial.md
+++ b/docs/admin-api-tutorial.md
@@ -41,7 +41,7 @@ If you want to test REST APIs in postman, you can use the 
REST API JSON files [h
 </TabItem>
 <TabItem value="Java">
 
-To use the Java admin API, instantiate a {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object, 
and specify a URL for a Pulsar broker and a {@inject: 
javadoc:PulsarAdminBuilder:/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder}.
 The following is a minimal example using `localhost`.
+To use the Java admin API, instantiate a 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object, 
and specify a URL for a Pulsar broker and a 
[PulsarAdminBuilder](/api/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder)
 object. The following is a minimal example using `localhost`.
 
 ```java
 String url = "http://localhost:8080";;
diff --git a/docs/administration-geo.md b/docs/administration-geo.md
index 21df5bc8540..71210062156 100644
--- a/docs/administration-geo.md
+++ b/docs/administration-geo.md
@@ -146,7 +146,7 @@ topicLevelPoliciesEnabled=true
 
 By default, messages are replicated to all clusters configured for the 
namespace. You can restrict replication selectively by specifying a replication 
list for a message, and then that message is replicated only to the subset in 
the replication list.
 
-The following is an example of the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} object:
+The following is an example of the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the 
[Message](/api/client/org/apache/pulsar/client/api/Message) object:
 
 ```java
 List<String> restrictReplicationTo = Arrays.asList(
diff --git a/docs/client-libraries-consumers.md 
b/docs/client-libraries-consumers.md
index 1c67eed20b1..28cfb4c0d5a 100644
--- a/docs/client-libraries-consumers.md
+++ b/docs/client-libraries-consumers.md
@@ -552,7 +552,7 @@ The following is an example.
    CompletableFuture<Message> asyncMessage = consumer.receiveAsync();
    ```
 
-   Async receive operations return a {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of 
a [`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+   Async receive operations return a 
[Message](/api/client/org/apache/pulsar/client/api/Message) wrapped inside of a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
  </TabItem>
 </Tabs>
diff --git a/docs/client-libraries-java-initialize.md 
b/docs/client-libraries-java-initialize.md
index 03456b99644..38ddedd60f4 100644
--- a/docs/client-libraries-java-initialize.md
+++ b/docs/client-libraries-java-initialize.md
@@ -5,7 +5,7 @@ sidebar_label: "Initialize"
 ---
 
 
-You can instantiate a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
+You can instantiate a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
 
 ```java
 PulsarClient client = PulsarClient.builder()
diff --git a/docs/client-libraries-java-use.md 
b/docs/client-libraries-java-use.md
index f4827d02994..1d9fea6e0fa 100644
--- a/docs/client-libraries-java-use.md
+++ b/docs/client-libraries-java-use.md
@@ -6,7 +6,7 @@ sidebar_label: "Use"
 
 ## Create a producer
 
-Once you've instantiated a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object, 
you can create a {@inject: 
javadoc:Producer:/client/org/apache/pulsar/client/api/Producer} for a specific 
Pulsar [topic](reference-terminology.md#topic).
+Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object, 
you can create a [Producer](/api/client/org/apache/pulsar/client/api/Producer) 
for a specific Pulsar [topic](reference-terminology.md#topic).
 
 ```java
 Producer<byte[]> producer = client.newProducer()
@@ -48,9 +48,9 @@ stringProducer.send("My message");
 
 ## Create a consumer
 
-In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
+In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
 
-Once you've instantiated a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object, 
you can create a {@inject: 
javadoc:Consumer:/client/org/apache/pulsar/client/api/Consumer} by specifying a 
[topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-types).
+Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object, 
you can create a [Consumer](/api/client/org/apache/pulsar/client/api/Consumer) 
by specifying a [topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-types).
 
 ```java
 Consumer consumer = client.newConsumer()
@@ -100,7 +100,7 @@ Consumer consumer = client.newConsumer()
 
 ## Create a reader
 
-With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
{@inject: javadoc:Reader:/client/org/apache/pulsar/client/api/Reader} objects 
by specifying a topic and a {@inject: 
javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId}.
+With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
[Reader](/api/client/org/apache/pulsar/client/api/Reader) objects by specifying 
a topic and a [MessageId](/api/client/org/apache/pulsar/client/api/MessageId).
 
 The following is an example.
 
diff --git a/docs/client-libraries-producers.md 
b/docs/client-libraries-producers.md
index 63fe47a1dfd..3389aac794a 100644
--- a/docs/client-libraries-producers.md
+++ b/docs/client-libraries-producers.md
@@ -260,7 +260,7 @@ producer.sendAsync(msg, [](Result result, MessageId 
messageId) {
 </Tabs>
 ````
 
-As you can see from the example above, async send operations return a 
{@inject: javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId} 
wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+As you can see from the example above, async send operations return a 
[MessageId](/api/client/org/apache/pulsar/client/api/MessageId) wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ## Publish messages to partitioned topics
 
@@ -374,15 +374,13 @@ The following is an example:
 
 ### Customize message router
 
-
-
 ````mdx-code-block
 <Tabs groupId="lang-choice"
   defaultValue="Java"
   values={[{"label":"Java","value":"Java"},{"label":"C++","value":"C++"}]}>
 <TabItem value="Java">
 
-To use a custom message router, you need to provide an implementation of the 
{@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface, which has just one `choosePartition` method:
+To use a custom message router, you need to provide an implementation of the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface, which has just one `choosePartition` method:
 
 ```java
 public interface MessageRouter extends Serializable {
diff --git a/docs/concepts-messaging.md b/docs/concepts-messaging.md
index def107b0cd5..7647680b27d 100644
--- a/docs/concepts-messaging.md
+++ b/docs/concepts-messaging.md
@@ -929,19 +929,19 @@ Partitioned topics need to be explicitly created via the 
[admin API](admin-api-o
 
 When publishing to partitioned topics, you must specify a *routing mode*. The 
routing mode determines which partition---that is, which internal topic---each 
message should be published to.
 
-There are three {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 available:
+There are three 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 available:
 
 | Mode                  | Description                                          
                                                                                
                                                                                
                                                                                
                                                                                
                                                                             |
 
|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | `RoundRobinPartition` | If no key is provided, the producer will publish 
messages across all partitions in round-robin fashion to achieve maximum 
throughput. Please note that round-robin is not done per individual message but 
rather it's set to the same boundary of batching delay, to ensure batching is 
effective. While if a key is specified on the message, the partitioned producer 
will hash the key and assign message to a particular partition. This is the 
default mode. |
 | `SinglePartition`     | If no key is provided, the producer will randomly 
pick one single partition and publish all the messages into that partition. 
While if a key is specified on the message, the partitioned producer will hash 
the key and assign message to a particular partition.                           
                                                                                
                                                                                
     |
-| `CustomPartition`     | Use custom message router implementation that will 
be called to determine the partition for a particular message. User can create 
a custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.                                                                      
                                                            |
+| `CustomPartition`     | Use custom message router implementation that will 
be called to determine the partition for a particular message. User can create 
a custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.                                                                      
                                                            |
 
 ### Ordering guarantee
 
 The ordering of messages is related to MessageRoutingMode and Message Key. 
Usually, user would want an ordering of Per-key-partition guarantee.
 
-If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
{@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder}, 
when using either `SinglePartition` or `RoundRobinPartition` mode.
+If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder), 
when using either `SinglePartition` or `RoundRobinPartition` mode.
 
 | Ordering guarantee | Description                                             
                             | Routing Mode and Key                             
                                                |
 
|:-------------------|:-------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------|
diff --git a/versioned_docs/version-2.10.x/admin-api-overview.md 
b/versioned_docs/version-2.10.x/admin-api-overview.md
index 1673b902349..e08df4204d6 100644
--- a/versioned_docs/version-2.10.x/admin-api-overview.md
+++ b/versioned_docs/version-2.10.x/admin-api-overview.md
@@ -71,7 +71,7 @@ You can find details for the REST API exposed by Pulsar 
brokers in this {@inject
 </TabItem>
 <TabItem value="Java">
 
-To use the Java admin API, instantiate a {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object, 
and specify a URL for a Pulsar broker and a {@inject: 
javadoc:PulsarAdminBuilder:/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder}.
 The following is a minimal example using `localhost`:
+To use the Java admin API, instantiate a 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object, 
and specify a URL for a Pulsar broker and a 
[PulsarAdminBuilder](/api/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder)
 object. The following is a minimal example using `localhost`:
 
 ```java
 
diff --git a/versioned_docs/version-2.10.x/admin-api-topics.md 
b/versioned_docs/version-2.10.x/admin-api-topics.md
index 161d686039f..d22c922742b 100644
--- a/versioned_docs/version-2.10.x/admin-api-topics.md
+++ b/versioned_docs/version-2.10.x/admin-api-topics.md
@@ -2338,13 +2338,13 @@ You can publish to partitioned topics using Pulsar 
client libraries. When publis
 
 You can specify the routing mode in the ProducerConfiguration object that you 
use to configure your producer. The routing mode determines which 
partition(internal topic) that each message should be published to.
 
-The following {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 options are available.
+The following 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 options are available.
 
 Mode     | Description
 :--------|:------------
 `RoundRobinPartition` | If no key is provided, the producer publishes messages 
across all partitions in round-robin policy to achieve the maximum throughput. 
Round-robin is not done per individual message, round-robin is set to the same 
boundary of batching delay to ensure that batching is effective. If a key is 
specified on the message, the partitioned producer hashes the key and assigns 
message to a particular partition. This is the default mode.
 `SinglePartition`     | If no key is provided, the producer picks a single 
partition randomly and publishes all messages into that partition. If a key is 
specified on the message, the partitioned producer hashes the key and assigns 
message to a particular partition.
-`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.
+`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.
 
 The following is an example:
 
@@ -2364,7 +2364,7 @@ producer.send("Partitioned topic message".getBytes());
 
 ### Custom message router
 
-To use a custom message router, you need to provide an implementation of the 
{@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface, which has just one `choosePartition` method:
+To use a custom message router, you need to provide an implementation of the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface, which has just one `choosePartition` method:
 
 ```java
 
diff --git a/versioned_docs/version-2.10.x/administration-geo.md 
b/versioned_docs/version-2.10.x/administration-geo.md
index 892af4555f4..978a4f7a333 100644
--- a/versioned_docs/version-2.10.x/administration-geo.md
+++ b/versioned_docs/version-2.10.x/administration-geo.md
@@ -157,7 +157,7 @@ topicLevelPoliciesEnabled=true
 
 By default, messages are replicated to all clusters configured for the 
namespace. You can restrict replication selectively by specifying a replication 
list for a message, and then that message is replicated only to the subset in 
the replication list.
 
-The following is an example for the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} object:
+The following is an example for the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the 
[Message](/api/client/org/apache/pulsar/client/api/Message) object:
 
 ```java
 
diff --git a/versioned_docs/version-2.10.x/client-libraries-java.md 
b/versioned_docs/version-2.10.x/client-libraries-java.md
index f1da3c4e833..4c5d744eb5f 100644
--- a/versioned_docs/version-2.10.x/client-libraries-java.md
+++ b/versioned_docs/version-2.10.x/client-libraries-java.md
@@ -106,7 +106,7 @@ pulsar+ssl://pulsar.us-west.example.com:6651
 
 ## Client
 
-You can instantiate a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
+You can instantiate a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
 
 ```java
 
@@ -157,7 +157,7 @@ If you create a client, you can use the `loadConf` 
configuration. The following
 `socks5ProxyUsername`|string|SOCKS5 proxy username | None
 `socks5ProxyPassword`|string|SOCKS5 proxy password | None
 
-Check out the Javadoc for the {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} class 
for a full list of configurable parameters.
+Check out the Javadoc for the 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) class for 
a full list of configurable parameters.
 
 > In addition to client-level configuration, you can also apply 
 > [producer](#configure-producer) and [consumer](#configure-consumer) specific 
 > configuration as described in sections below.
 
@@ -510,7 +510,7 @@ In automatic failover cluster, the primary cluster and 
backup cluster are aware
 
 ## Producer
 
-In Pulsar, producers write messages to topics. Once you've instantiated a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
(as in the section [above](#client-configuration)), you can create a {@inject: 
javadoc:Producer:/client/org/apache/pulsar/client/api/Producer} for a specific 
Pulsar [topic](reference-terminology.md#topic).
+In Pulsar, producers write messages to topics. Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
(as in the section [above](#client-configuration)), you can create a 
[Producer](/api/client/org/apache/pulsar/client/api/Producer) for a specific 
Pulsar [topic](reference-terminology.md#topic).
 
 ```java
 
@@ -587,7 +587,7 @@ Name| Type |  <div>Description</div>|  Default
 
 You can configure parameters if you do not want to use the default 
configuration.
 
-For a full list, see the Javadoc for the {@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 
class. The following is an example.
+For a full list, see the Javadoc for the 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder) 
class. The following is an example.
 
 ```java
 
@@ -618,7 +618,7 @@ 
producer.sendAsync("my-async-message".getBytes()).thenAccept(msgId -> {
 
 ```
 
-As you can see from the example above, async send operations return a 
{@inject: javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId} 
wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+As you can see from the example above, async send operations return a 
[MessageId](/api/client/org/apache/pulsar/client/api/MessageId) wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Configure messages
 
@@ -699,9 +699,9 @@ If you are using multiple interceptors, they apply in the 
order they are passed
 
 ## Consumer
 
-In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
+In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
 
-Once you've instantiated a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object, 
you can create a {@inject: 
javadoc:Consumer:/client/org/apache/pulsar/client/api/Consumer} by specifying a 
[topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-types).
+Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object, 
you can create a [Consumer](/api/client/org/apache/pulsar/client/api/Consumer) 
by specifying a [topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-types).
 
 ```java
 
@@ -790,7 +790,7 @@ When you create a consumer, you can use the `loadConf` 
configuration. The follow
 `maxPendingChunkedMessage`|int| The maximum size of a queue holding pending 
chunked messages. When the threshold is reached, the consumer drops pending 
messages to optimize memory utilization.|10
 `expireTimeOfIncompleteChunkedMessageMillis`|long|The time interval to expire 
incomplete chunks if a consumer fails to receive all the chunks in the 
specified time period. The default value is 1 minute. | 60000
 
-You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the {@inject: 
javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} 
class.
+You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the 
[ConsumerBuilder](/api/client/org/apache/pulsar/client/api/ConsumerBuilder) 
class.
 
 The following is an example.
 
@@ -817,7 +817,7 @@ CompletableFuture<Message> asyncMessage = 
consumer.receiveAsync();
 
 ```
 
-Async receive operations return a {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of 
a [`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+Async receive operations return a 
[Message](/api/client/org/apache/pulsar/client/api/Message) wrapped inside of a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Batch receive
 
@@ -1329,7 +1329,7 @@ If you are using multiple interceptors, they apply in the 
order they are passed
 
 ## Reader
 
-With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
{@inject: javadoc:Reader:/client/org/apache/pulsar/client/api/Reader} objects 
by specifying a topic and a {@inject: 
javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId}.
+With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
[Reader](/api/client/org/apache/pulsar/client/api/Reader) objects by specifying 
a topic and a [MessageId](/api/client/org/apache/pulsar/client/api/MessageId).
 
 The following is an example.
 
diff --git a/versioned_docs/version-2.10.x/concepts-messaging.md 
b/versioned_docs/version-2.10.x/concepts-messaging.md
index 4b41ecf98e4..da3bfa1df27 100644
--- a/versioned_docs/version-2.10.x/concepts-messaging.md
+++ b/versioned_docs/version-2.10.x/concepts-messaging.md
@@ -777,19 +777,19 @@ Partitioned topics need to be explicitly created via the 
[admin API](admin-api-o
 
 When publishing to partitioned topics, you must specify a *routing mode*. The 
routing mode determines which partition---that is, which internal topic---each 
message should be published to.
 
-There are three {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 available:
+There are three 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 available:
 
 Mode     | Description
 :--------|:------------
 `RoundRobinPartition` | If no key is provided, the producer will publish 
messages across all partitions in round-robin fashion to achieve maximum 
throughput. Please note that round-robin is not done per individual message but 
rather it's set to the same boundary of batching delay, to ensure batching is 
effective. While if a key is specified on the message, the partitioned producer 
will hash the key and assign message to a particular partition. This is the 
default mode.
 `SinglePartition`     | If no key is provided, the producer will randomly pick 
one single partition and publish all the messages into that partition. While if 
a key is specified on the message, the partitioned producer will hash the key 
and assign message to a particular partition.
-`CustomPartition`     | Use custom message router implementation that will be 
called to determine the partition for a particular message. User can create a 
custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.
+`CustomPartition`     | Use custom message router implementation that will be 
called to determine the partition for a particular message. User can create a 
custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.
 
 ### Ordering guarantee
 
 The ordering of messages is related to MessageRoutingMode and Message Key. 
Usually, user would want an ordering of Per-key-partition guarantee.
 
-If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
{@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder}, 
when using either `SinglePartition` or `RoundRobinPartition` mode.
+If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder), 
when using either `SinglePartition` or `RoundRobinPartition` mode.
 
 Ordering guarantee | Description | Routing Mode and Key
 :------------------|:------------|:------------
diff --git a/versioned_docs/version-2.11.x/admin-get-started.md 
b/versioned_docs/version-2.11.x/admin-get-started.md
index 8298bcbdc0a..bb1cd6d2b69 100644
--- a/versioned_docs/version-2.11.x/admin-get-started.md
+++ b/versioned_docs/version-2.11.x/admin-get-started.md
@@ -38,7 +38,7 @@ You can find details for the REST API exposed by Pulsar 
brokers in [REST API doc
 </TabItem>
 <TabItem value="Java">
 
-To use the Java admin API, instantiate a {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object, 
and specify a URL for a Pulsar broker and a {@inject: 
javadoc:PulsarAdminBuilder:/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder}.
 The following is a minimal example using `localhost`.
+To use the Java admin API, instantiate a 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object, 
and specify a URL for a Pulsar broker and a 
[PulsarAdminBuilder](/api/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder).
 The following is a minimal example using `localhost`.
 
 ```java
 String url = "http://localhost:8080";;
diff --git a/versioned_docs/version-2.11.x/administration-geo.md 
b/versioned_docs/version-2.11.x/administration-geo.md
index b7c70ec2dff..42989fbb6cc 100644
--- a/versioned_docs/version-2.11.x/administration-geo.md
+++ b/versioned_docs/version-2.11.x/administration-geo.md
@@ -146,7 +146,7 @@ topicLevelPoliciesEnabled=true
 
 By default, messages are replicated to all clusters configured for the 
namespace. You can restrict replication selectively by specifying a replication 
list for a message, and then that message is replicated only to the subset in 
the replication list.
 
-The following is an example of the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} object:
+The following is an example of the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the 
[Message](/api/client/org/apache/pulsar/client/api/Message) object:
 
 ```java
 List<String> restrictReplicationTo = Arrays.asList(
diff --git a/versioned_docs/version-2.11.x/client-libraries-java.md 
b/versioned_docs/version-2.11.x/client-libraries-java.md
index ea912920fde..f3aa79209b9 100644
--- a/versioned_docs/version-2.11.x/client-libraries-java.md
+++ b/versioned_docs/version-2.11.x/client-libraries-java.md
@@ -87,7 +87,7 @@ pulsar+ssl://pulsar.us-west.example.com:6651
 
 ## Client
 
-You can instantiate a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
+You can instantiate a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
 
 ```java
 PulsarClient client = PulsarClient.builder()
@@ -138,7 +138,7 @@ If you create a client, you can use the `loadConf` 
configuration. The following
 `socks5ProxyPassword`|string|SOCKS5 proxy password | None
 `connectionMaxIdleSeconds`|int|Release the connection if it is not used for 
more than `connectionMaxIdleSeconds` seconds.If `connectionMaxIdleSeconds` < 0, 
disabled the feature that auto release the idle connection|180
 
-Check out the Javadoc for the {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} class 
for a full list of configurable parameters.
+Check out the Javadoc for the 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) class for 
a full list of configurable parameters.
 
 > In addition to client-level configuration, you can also apply 
 > [producer](#configure-producer) and [consumer](#configure-consumer) specific 
 > configuration as described in sections below.
 
@@ -163,7 +163,7 @@ Dpulsar.allocator.out_of_memory_policy=ThrowException
 
 ## Producer
 
-In Pulsar, producers write messages to topics. Once you've instantiated a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
(as in the section [above](#client-configuration)), you can create a {@inject: 
javadoc:Producer:/client/org/apache/pulsar/client/api/Producer} for a specific 
Pulsar [topic](reference-terminology.md#topic).
+In Pulsar, producers write messages to topics. Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
(as in the section [above](#client-configuration)), you can create a 
[Producer](/api/client/org/apache/pulsar/client/api/Producer) for a specific 
Pulsar [topic](reference-terminology.md#topic).
 
 ```java
 Producer<byte[]> producer = client.newProducer()
@@ -230,7 +230,7 @@ Name| Type |  <div>Description</div>|  Default
 
 You can configure parameters if you do not want to use the default 
configuration.
 
-For a full list, see the Javadoc for the {@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 
class. The following is an example.
+For a full list, see the Javadoc for the 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder) 
class. The following is an example.
 
 ```java
 Producer<byte[]> producer = client.newProducer()
@@ -251,13 +251,13 @@ You can publish messages to partitioned topics using 
Pulsar client libraries. Wh
 
 You can specify the routing mode in the `ProducerConfiguration` object used to 
configure your producer. The routing mode determines which partition (internal 
topic) each message should be published to.
 
-The following {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 options are available.
+The following 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 options are available.
 
 Mode     | Description
 :--------|:------------
 `RoundRobinPartition` | If no key is provided, the producer publishes messages 
across all partitions in the round-robin policy to achieve the maximum 
throughput. Round-robin is not done per individual message. It is set to the 
same boundary of batching delay to ensure that batching is effective. If a key 
is specified on the message, the partitioned producer hashes the key and 
assigns the message to a particular partition. This is the default mode.
 `SinglePartition`     | If no key is provided, the producer picks a single 
partition randomly and publishes all messages into that partition. If a key is 
specified on the message, the partitioned producer hashes the key and assigns 
the message to a particular partition.
-`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.
+`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.
 
 The following is an example:
 
@@ -275,7 +275,7 @@ producer.send("Partitioned topic message".getBytes());
 
 #### Custom message router
 
-To use a custom message router, you need to provide an implementation of the 
{@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface, which has just one `choosePartition` method:
+To use a custom message router, you need to provide an implementation of the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface, which has just one `choosePartition` method:
 
 ```java
 public interface MessageRouter extends Serializable {
@@ -336,7 +336,7 @@ 
producer.sendAsync("my-async-message".getBytes()).thenAccept(msgId -> {
 });
 ```
 
-As you can see from the example above, async send operations return a 
{@inject: javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId} 
wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+As you can see from the example above, async send operations return a 
[MessageId](/api/client/org/apache/pulsar/client/api/MessageId) wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Configure messages
 
@@ -416,9 +416,9 @@ Multiple interceptors apply in the order they are passed to 
the `intercept` meth
 
 ## Consumer
 
-In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
+In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
 
-Once you've instantiated a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object, 
you can create a {@inject: 
javadoc:Consumer:/client/org/apache/pulsar/client/api/Consumer} by specifying a 
[topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-types).
+Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object, 
you can create a [Consumer](/api/client/org/apache/pulsar/client/api/Consumer) 
by specifying a [topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-types).
 
 ```java
 Consumer consumer = client.newConsumer()
@@ -502,7 +502,7 @@ When you create a consumer, you can use the `loadConf` 
configuration. The follow
 `expireTimeOfIncompleteChunkedMessageMillis`|long|The time interval to expire 
incomplete chunks if a consumer fails to receive all the chunks in the 
specified time period. The default value is 1 minute. | 60000
 `ackReceiptEnabled`|boolean| If `ackReceiptEnabled` is enabled, ACK returns a 
receipt. The client got the ack receipt means the broker has processed the ack 
request, but if without transaction, the broker does not guarantee persistence 
of acknowledgments, which means the messages still have a chance to be 
redelivered after the broker crashes. With the transaction, the client can only 
get the receipt after the acknowledgments have been persistent. | false
 
-You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the {@inject: 
javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} 
class.
+You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the 
[ConsumerBuilder](/api/client/org/apache/pulsar/client/api/ConsumerBuilder) 
class.
 
 The following is an example.
 
@@ -525,7 +525,7 @@ The following is an example.
 CompletableFuture<Message> asyncMessage = consumer.receiveAsync();
 ```
 
-Async receive operations return a {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of 
a [`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+Async receive operations return a 
[Message](/api/client/org/apache/pulsar/client/api/Message) wrapped inside of a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Batch receive
 
@@ -990,7 +990,7 @@ If you are using multiple interceptors, they apply in the 
order they are passed
 
 ## Reader
 
-With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
{@inject: javadoc:Reader:/client/org/apache/pulsar/client/api/Reader} objects 
by specifying a topic and a {@inject: 
javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId}.
+With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
[Reader](/api/client/org/apache/pulsar/client/api/Reader) objects by specifying 
a topic and a [MessageId](/api/client/org/apache/pulsar/client/api/MessageId).
 
 The following is an example.
 
diff --git a/versioned_docs/version-2.11.x/concepts-messaging.md 
b/versioned_docs/version-2.11.x/concepts-messaging.md
index df7e1a48c4c..01735effb82 100644
--- a/versioned_docs/version-2.11.x/concepts-messaging.md
+++ b/versioned_docs/version-2.11.x/concepts-messaging.md
@@ -936,19 +936,19 @@ Partitioned topics need to be explicitly created via the 
[admin API](admin-api-o
 
 When publishing to partitioned topics, you must specify a *routing mode*. The 
routing mode determines which partition---that is, which internal topic---each 
message should be published to.
 
-There are three {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 available:
+There are three 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 available:
 
 | Mode                  | Description                                          
                                                                                
                                                                                
                                                                                
                                                                                
                                                                             |
 
|:----------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
 | `RoundRobinPartition` | If no key is provided, the producer will publish 
messages across all partitions in round-robin fashion to achieve maximum 
throughput. Please note that round-robin is not done per individual message but 
rather it's set to the same boundary of batching delay, to ensure batching is 
effective. While if a key is specified on the message, the partitioned producer 
will hash the key and assign message to a particular partition. This is the 
default mode. |
 | `SinglePartition`     | If no key is provided, the producer will randomly 
pick one single partition and publish all the messages into that partition. 
While if a key is specified on the message, the partitioned producer will hash 
the key and assign message to a particular partition.                           
                                                                                
                                                                                
     |
-| `CustomPartition`     | Use custom message router implementation that will 
be called to determine the partition for a particular message. User can create 
a custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.                                                                      
                                                            |
+| `CustomPartition`     | Use custom message router implementation that will 
be called to determine the partition for a particular message. User can create 
a custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter)interface.
                                                                                
                                                  |
 
 ### Ordering guarantee
 
 The ordering of messages is related to MessageRoutingMode and Message Key. 
Usually, user would want an ordering of Per-key-partition guarantee.
 
-If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
{@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder}, 
when using either `SinglePartition` or `RoundRobinPartition` mode.
+If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder), 
when using either `SinglePartition` or `RoundRobinPartition` mode.
 
 | Ordering guarantee | Description                                             
                             | Routing Mode and Key                             
                                                |
 
|:-------------------|:-------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------|
diff --git a/versioned_docs/version-2.8.x/admin-api-brokers.md 
b/versioned_docs/version-2.8.x/admin-api-brokers.md
index 4c79487d036..8a1672b17ea 100644
--- a/versioned_docs/version-2.8.x/admin-api-brokers.md
+++ b/versioned_docs/version-2.8.x/admin-api-brokers.md
@@ -20,7 +20,7 @@ Pulsar brokers consist of two components:
 
 * The [`brokers`](reference-pulsar-admin.md#brokers) command of the 
[`pulsar-admin`](reference-pulsar-admin.md) tool
 * The `/admin/v2/brokers` endpoint of the admin {@inject: rest:REST:/} API
-* The `brokers` method of the {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin.html} 
object in the [Java API](client-libraries-java.md)
+* The `brokers` method of the 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object in 
the [Java API](client-libraries-java.md)
 
 In addition to being configurable when you start them up, brokers can also be 
[dynamically configured](#dynamic-broker-configuration).
 
diff --git a/versioned_docs/version-2.8.x/admin-api-clusters.md 
b/versioned_docs/version-2.8.x/admin-api-clusters.md
index 75122ea6d7f..074cbdd97a0 100644
--- a/versioned_docs/version-2.8.x/admin-api-clusters.md
+++ b/versioned_docs/version-2.8.x/admin-api-clusters.md
@@ -18,7 +18,7 @@ Clusters can be managed via:
 
 * The [`clusters`](reference-pulsar-admin.md#clusters) command of the 
[`pulsar-admin`](reference-pulsar-admin.md) tool
 * The `/admin/v2/clusters` endpoint of the admin {@inject: rest:REST:/} API
-* The `clusters` method of the {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object 
in the [Java API](client-libraries-java.md)
+* The `clusters` method of the 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object in 
the [Java API](client-libraries-java.md)
 
 ## Clusters resources
 
diff --git a/versioned_docs/version-2.8.x/admin-api-functions.md 
b/versioned_docs/version-2.8.x/admin-api-functions.md
index 2ac8843a392..44e921eb313 100644
--- a/versioned_docs/version-2.8.x/admin-api-functions.md
+++ b/versioned_docs/version-2.8.x/admin-api-functions.md
@@ -23,7 +23,7 @@ Method | Description
 ---|---
 **Admin CLI** | The [`functions`](reference-pulsar-admin.md#functions) command 
of the [`pulsar-admin`](reference-pulsar-admin.md) tool.
 **REST API** |The `/admin/v3/functions` endpoint of the admin {@inject: 
rest:REST:/} API.
-**Java Admin API**| The `functions` method of the {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object 
in the [Java API](client-libraries-java.md).
+**Java Admin API**| The `functions` method of the 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object in 
the [Java API](client-libraries-java.md).
 
 ## Function resources
 
diff --git a/versioned_docs/version-2.8.x/admin-api-namespaces.md 
b/versioned_docs/version-2.8.x/admin-api-namespaces.md
index 03646dfa67f..97563174d1b 100644
--- a/versioned_docs/version-2.8.x/admin-api-namespaces.md
+++ b/versioned_docs/version-2.8.x/admin-api-namespaces.md
@@ -17,7 +17,7 @@ Namespaces can be managed via:
 
 * The [`namespaces`](reference-pulsar-admin.md#clusters) command of the 
[`pulsar-admin`](reference-pulsar-admin.md) tool
 * The `/admin/v2/namespaces` endpoint of the admin {@inject: rest:REST:/} API
-* The `namespaces` method of the {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object 
in the [Java API](client-libraries-java.md)
+* The `namespaces` method of the 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object in 
the [Java API](client-libraries-java.md)
 
 ## Namespaces resources
 
diff --git a/versioned_docs/version-2.8.x/admin-api-overview.md 
b/versioned_docs/version-2.8.x/admin-api-overview.md
index 03d51fc4195..2a176e5f619 100644
--- a/versioned_docs/version-2.8.x/admin-api-overview.md
+++ b/versioned_docs/version-2.8.x/admin-api-overview.md
@@ -60,7 +60,7 @@ You can find details for the REST API exposed by Pulsar 
brokers in this {@inject
 </TabItem>
 <TabItem value="Java">
 
-To use the Java admin API, instantiate a {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object, 
and specify a URL for a Pulsar broker and a {@inject: 
javadoc:PulsarAdminBuilder:/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder}.
 The following is a minimal example using `localhost`:
+To use the Java admin API, instantiate a 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object, 
and specify a URL for a Pulsar broker and a 
[PulsarAdminBuilder](/api/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder).
 The following is a minimal example using `localhost`:
 
 ```java
 
diff --git a/versioned_docs/version-2.8.x/admin-api-topics.md 
b/versioned_docs/version-2.8.x/admin-api-topics.md
index d490b24ecfc..c31124e26d3 100644
--- a/versioned_docs/version-2.8.x/admin-api-topics.md
+++ b/versioned_docs/version-2.8.x/admin-api-topics.md
@@ -2050,13 +2050,13 @@ You can publish to partitioned topics using Pulsar 
client libraries. When publis
 
 You can specify the routing mode in the ProducerConfiguration object that you 
use to configure your producer. The routing mode determines which 
partition(internal topic) that each message should be published to.
 
-The following {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 options are available.
+The following 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 options are available.
 
 Mode     | Description
 :--------|:------------
 `RoundRobinPartition` | If no key is provided, the producer publishes messages 
across all partitions in round-robin policy to achieve the maximum throughput. 
Round-robin is not done per individual message, round-robin is set to the same 
boundary of batching delay to ensure that batching is effective. If a key is 
specified on the message, the partitioned producer hashes the key and assigns 
message to a particular partition. This is the default mode.
 `SinglePartition`     | If no key is provided, the producer picks a single 
partition randomly and publishes all messages into that partition. If a key is 
specified on the message, the partitioned producer hashes the key and assigns 
message to a particular partition.
-`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.
+`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.
 
 The following is an example:
 
@@ -2076,7 +2076,7 @@ producer.send("Partitioned topic message".getBytes());
 
 ### Custom message router
 
-To use a custom message router, you need to provide an implementation of the 
{@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface, which has just one `choosePartition` method:
+To use a custom message router, you need to provide an implementation of the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface, which has just one `choosePartition` method:
 
 ```java
 
diff --git a/versioned_docs/version-2.8.x/administration-geo.md 
b/versioned_docs/version-2.8.x/administration-geo.md
index 88037bfc786..144b6ac397a 100644
--- a/versioned_docs/version-2.8.x/administration-geo.md
+++ b/versioned_docs/version-2.8.x/administration-geo.md
@@ -136,7 +136,7 @@ Once you create a geo-replication namespace, any topics 
that producers or consum
 
 By default, messages are replicated to all clusters configured for the 
namespace. You can restrict replication selectively by specifying a replication 
list for a message, and then that message is replicated only to the subset in 
the replication list.
 
-The following is an example for the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} object:
+The following is an example for the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the 
[Message](/api/client/org/apache/pulsar/client/api/Message) object:
 
 ```java
 
diff --git a/versioned_docs/version-2.8.x/client-libraries-java.md 
b/versioned_docs/version-2.8.x/client-libraries-java.md
index 5f885261f21..d2eed9d3f0c 100644
--- a/versioned_docs/version-2.8.x/client-libraries-java.md
+++ b/versioned_docs/version-2.8.x/client-libraries-java.md
@@ -93,7 +93,7 @@ pulsar+ssl://pulsar.us-west.example.com:6651
 
 ## Client
 
-You can instantiate a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
+You can instantiate a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
 
 ```java
 
@@ -141,13 +141,13 @@ int|`requestTimeoutMs`|Maximum duration for completing a 
request |60000
 int|`defaultBackoffIntervalNanos`| Default duration for a backoff interval | 
TimeUnit.MILLISECONDS.toNanos(100);
 long|`maxBackoffIntervalNanos`|Maximum duration for a backoff 
interval|TimeUnit.SECONDS.toNanos(30)
 
-Check out the Javadoc for the {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} class 
for a full list of configurable parameters.
+Check out the Javadoc for the 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) class for 
a full list of configurable parameters.
 
 > In addition to client-level configuration, you can also apply 
 > [producer](#configuring-producers) and [consumer](#configuring-consumers) 
 > specific configuration as described in sections below.
 
 ## Producer
 
-In Pulsar, producers write messages to topics. Once you've instantiated a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
(as in the section [above](#client-configuration)), you can create a {@inject: 
javadoc:Producer:/client/org/apache/pulsar/client/api/Producer} for a specific 
Pulsar [topic](reference-terminology.md#topic).
+In Pulsar, producers write messages to topics. Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
(as in the section [above](#client-configuration)), you can create a 
[Producer](/api/client/org/apache/pulsar/client/api/Producer) for a specific 
Pulsar [topic](reference-terminology.md#topic).
 
 ```java
 
@@ -222,7 +222,7 @@ CompressionType|`compressionType`|Message data compression 
type used by a produc
 
 You can configure parameters if you do not want to use the default 
configuration.
 
-For a full list, see the Javadoc for the {@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 
class. The following is an example.
+For a full list, see the Javadoc for the 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder) 
class. The following is an example.
 
 ```java
 
@@ -253,7 +253,7 @@ 
producer.sendAsync("my-async-message".getBytes()).thenAccept(msgId -> {
 
 ```
 
-As you can see from the example above, async send operations return a 
{@inject: javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId} 
wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+As you can see from the example above, async send operations return a 
[MessageId](/api/client/org/apache/pulsar/client/api/MessageId) wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Configure messages
 
@@ -274,9 +274,9 @@ You can terminate the builder chain with `sendAsync()` and 
get a future return.
 
 ## Consumer
 
-In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
+In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
 
-Once you've instantiated a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object, 
you can create a {@inject: 
javadoc:Consumer:/client/org/apache/pulsar/client/api/Consumer} by specifying a 
[topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-modes).
+Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object, 
you can create a [Consumer](/api/client/org/apache/pulsar/client/api/Consumer) 
by specifying a [topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-modes).
 
 ```java
 
@@ -360,7 +360,7 @@ DeadLetterPolicy|`deadLetterPolicy`|Dead letter policy for 
consumers.<br /><br /
 boolean|`autoUpdatePartitions`|If `autoUpdatePartitions` is enabled, a 
consumer subscribes to partition increasement automatically.<br /><br 
/>**Note**: this is only for partitioned consumers.|true
 boolean|`replicateSubscriptionState`|If `replicateSubscriptionState` is 
enabled, a subscription state is replicated to geo-replicated clusters.|false
 
-You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the {@inject: 
javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} 
class.
+You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the 
[ConsumerBuilder](/api/client/org/apache/pulsar/client/api/ConsumerBuilder) 
class.
 
 The following is an example.
 
@@ -387,7 +387,7 @@ CompletableFuture<Message> asyncMessage = 
consumer.receiveAsync();
 
 ```
 
-Async receive operations return a {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of 
a [`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+Async receive operations return a 
[Message](/api/client/org/apache/pulsar/client/api/Message) wrapped inside of a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Batch receive
 
@@ -764,7 +764,7 @@ If the message key is not specified, messages without keys 
are dispatched to one
 
 ## Reader
 
-With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
{@inject: javadoc:Reader:/client/org/apache/pulsar/client/api/Reader} objects 
by specifying a topic and a {@inject: 
javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId}.
+With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
[Reader](/api/client/org/apache/pulsar/client/api/Reader) objects by specifying 
a topic and a [MessageId](/api/client/org/apache/pulsar/client/api/MessageId).
 
 The following is an example.
 
diff --git a/versioned_docs/version-2.8.x/concepts-messaging.md 
b/versioned_docs/version-2.8.x/concepts-messaging.md
index 7c354fac0b7..9675dd11e0b 100644
--- a/versioned_docs/version-2.8.x/concepts-messaging.md
+++ b/versioned_docs/version-2.8.x/concepts-messaging.md
@@ -504,19 +504,19 @@ Partitioned topics need to be explicitly created via the 
[admin API](admin-api-o
 
 When publishing to partitioned topics, you must specify a *routing mode*. The 
routing mode determines which partition---that is, which internal topic---each 
message should be published to.
 
-There are three {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 available:
+There are three 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 available:
 
 Mode     | Description
 :--------|:------------
 `RoundRobinPartition` | If no key is provided, the producer will publish 
messages across all partitions in round-robin fashion to achieve maximum 
throughput. Please note that round-robin is not done per individual message but 
rather it's set to the same boundary of batching delay, to ensure batching is 
effective. While if a key is specified on the message, the partitioned producer 
will hash the key and assign message to a particular partition. This is the 
default mode.
 `SinglePartition`     | If no key is provided, the producer will randomly pick 
one single partition and publish all the messages into that partition. While if 
a key is specified on the message, the partitioned producer will hash the key 
and assign message to a particular partition.
-`CustomPartition`     | Use custom message router implementation that will be 
called to determine the partition for a particular message. User can create a 
custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.
+`CustomPartition`     | Use custom message router implementation that will be 
called to determine the partition for a particular message. User can create a 
custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.
 
 ### Ordering guarantee
 
 The ordering of messages is related to MessageRoutingMode and Message Key. 
Usually, user would want an ordering of Per-key-partition guarantee.
 
-If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
{@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder}, 
when using either `SinglePartition` or `RoundRobinPartition` mode.
+If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder), 
when using either `SinglePartition` or `RoundRobinPartition` mode.
 
 Ordering guarantee | Description | Routing Mode and Key
 :------------------|:------------|:------------
diff --git a/versioned_docs/version-2.9.x/admin-api-overview.md 
b/versioned_docs/version-2.9.x/admin-api-overview.md
index a05c5545c55..c5d125d7940 100644
--- a/versioned_docs/version-2.9.x/admin-api-overview.md
+++ b/versioned_docs/version-2.9.x/admin-api-overview.md
@@ -71,7 +71,7 @@ You can find details for the REST API exposed by Pulsar 
brokers in this {@inject
 </TabItem>
 <TabItem value="Java">
 
-To use the Java admin API, instantiate a {@inject: 
javadoc:PulsarAdmin:/admin/org/apache/pulsar/client/admin/PulsarAdmin} object, 
and specify a URL for a Pulsar broker and a {@inject: 
javadoc:PulsarAdminBuilder:/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder}.
 The following is a minimal example using `localhost`:
+To use the Java admin API, instantiate a 
[PulsarAdmin](/api/admin/org/apache/pulsar/client/admin/PulsarAdmin) object, 
and specify a URL for a Pulsar broker and a 
[PulsarAdminBuilder](/api/admin/org/apache/pulsar/client/admin/PulsarAdminBuilder).
 The following is a minimal example using `localhost`:
 
 ```java
 
diff --git a/versioned_docs/version-2.9.x/admin-api-topics.md 
b/versioned_docs/version-2.9.x/admin-api-topics.md
index 4a60dfdcb36..661f17ec234 100644
--- a/versioned_docs/version-2.9.x/admin-api-topics.md
+++ b/versioned_docs/version-2.9.x/admin-api-topics.md
@@ -2316,13 +2316,13 @@ You can publish to partitioned topics using Pulsar 
client libraries. When publis
 
 You can specify the routing mode in the ProducerConfiguration object that you 
use to configure your producer. The routing mode determines which 
partition(internal topic) that each message should be published to.
 
-The following {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 options are available.
+The following 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 options are available.
 
 Mode     | Description
 :--------|:------------
 `RoundRobinPartition` | If no key is provided, the producer publishes messages 
across all partitions in round-robin policy to achieve the maximum throughput. 
Round-robin is not done per individual message, round-robin is set to the same 
boundary of batching delay to ensure that batching is effective. If a key is 
specified on the message, the partitioned producer hashes the key and assigns 
message to a particular partition. This is the default mode.
 `SinglePartition`     | If no key is provided, the producer picks a single 
partition randomly and publishes all messages into that partition. If a key is 
specified on the message, the partitioned producer hashes the key and assigns 
message to a particular partition.
-`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.
+`CustomPartition`     | Use custom message router implementation that is 
called to determine the partition for a particular message. You can create a 
custom routing mode by using the Java client and implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.
 
 The following is an example:
 
@@ -2342,7 +2342,7 @@ producer.send("Partitioned topic message".getBytes());
 
 ### Custom message router
 
-To use a custom message router, you need to provide an implementation of the 
{@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface, which has just one `choosePartition` method:
+To use a custom message router, you need to provide an implementation of the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface, which has just one `choosePartition` method:
 
 ```java
 
diff --git a/versioned_docs/version-2.9.x/administration-geo.md 
b/versioned_docs/version-2.9.x/administration-geo.md
index 07008c70593..6f46e732e14 100644
--- a/versioned_docs/version-2.9.x/administration-geo.md
+++ b/versioned_docs/version-2.9.x/administration-geo.md
@@ -136,7 +136,7 @@ Once you create a geo-replication namespace, any topics 
that producers or consum
 
 By default, messages are replicated to all clusters configured for the 
namespace. You can restrict replication selectively by specifying a replication 
list for a message, and then that message is replicated only to the subset in 
the replication list.
 
-The following is an example for the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} object:
+The following is an example for the [Java API](client-libraries-java.md). Note 
the use of the `setReplicationClusters` method when you construct the 
[Message](/api/client/org/apache/pulsar/client/api/Message) object:
 
 ```java
 
diff --git a/versioned_docs/version-2.9.x/client-libraries-java.md 
b/versioned_docs/version-2.9.x/client-libraries-java.md
index 755a5f8dc66..421359ab2a4 100644
--- a/versioned_docs/version-2.9.x/client-libraries-java.md
+++ b/versioned_docs/version-2.9.x/client-libraries-java.md
@@ -93,7 +93,7 @@ pulsar+ssl://pulsar.us-west.example.com:6651
 
 ## Client
 
-You can instantiate a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
+You can instantiate a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
using just a URL for the target Pulsar 
[cluster](reference-terminology.md#cluster) like this:
 
 ```java
 
@@ -144,13 +144,13 @@ If you create a client, you can use the `loadConf` 
configuration. The following
 `socks5ProxyUsername`|string|SOCKS5 proxy username | None
 `socks5ProxyPassword`|string|SOCKS5 proxy password | None
 
-Check out the Javadoc for the {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} class 
for a full list of configurable parameters.
+Check out the Javadoc for the 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) class for 
a full list of configurable parameters.
 
 > In addition to client-level configuration, you can also apply 
 > [producer](#configure-producer) and [consumer](#configure-consumer) specific 
 > configuration as described in sections below.
 
 ## Producer
 
-In Pulsar, producers write messages to topics. Once you've instantiated a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
(as in the section [above](#client-configuration)), you can create a {@inject: 
javadoc:Producer:/client/org/apache/pulsar/client/api/Producer} for a specific 
Pulsar [topic](reference-terminology.md#topic).
+In Pulsar, producers write messages to topics. Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
(as in the section [above](#client-configuration)), you can create a 
[Producer](/api/client/org/apache/pulsar/client/api/Producer) for a specific 
Pulsar [topic](reference-terminology.md#topic).
 
 ```java
 
@@ -225,7 +225,7 @@ Name| Type |  <div>Description</div>|  Default
 
 You can configure parameters if you do not want to use the default 
configuration.
 
-For a full list, see the Javadoc for the {@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder} 
class. The following is an example.
+For a full list, see the Javadoc for the 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder) 
class. The following is an example.
 
 ```java
 
@@ -256,7 +256,7 @@ 
producer.sendAsync("my-async-message".getBytes()).thenAccept(msgId -> {
 
 ```
 
-As you can see from the example above, async send operations return a 
{@inject: javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId} 
wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+As you can see from the example above, async send operations return a 
[MessageId](/api/client/org/apache/pulsar/client/api/MessageId) wrapped in a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Configure messages
 
@@ -318,9 +318,9 @@ If you are using multiple interceptors, they apply in the 
order they are passed
 
 ## Consumer
 
-In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
{@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
+In Pulsar, consumers subscribe to topics and handle messages that producers 
publish to those topics. You can instantiate a new 
[consumer](reference-terminology.md#consumer) by first instantiating a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object 
and passing it a URL for a Pulsar broker (as [above](#client-configuration)).
 
-Once you've instantiated a {@inject: 
javadoc:PulsarClient:/client/org/apache/pulsar/client/api/PulsarClient} object, 
you can create a {@inject: 
javadoc:Consumer:/client/org/apache/pulsar/client/api/Consumer} by specifying a 
[topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-modes).
+Once you've instantiated a 
[PulsarClient](/api/client/org/apache/pulsar/client/api/PulsarClient) object, 
you can create a [Consumer](/api/client/org/apache/pulsar/client/api/Consumer) 
by specifying a [topic](reference-terminology.md#topic) and a 
[subscription](concepts-messaging.md#subscription-modes).
 
 ```java
 
@@ -404,7 +404,7 @@ When you create a consumer, you can use the `loadConf` 
configuration. The follow
 `autoUpdatePartitions`|boolean|If `autoUpdatePartitions` is enabled, a 
consumer subscribes to partition increasement automatically.<br /><br 
/>**Note**: this is only for partitioned consumers.|true
 `replicateSubscriptionState`|boolean|If `replicateSubscriptionState` is 
enabled, a subscription state is replicated to geo-replicated clusters.|false
 
-You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the {@inject: 
javadoc:ConsumerBuilder:/client/org/apache/pulsar/client/api/ConsumerBuilder} 
class.
+You can configure parameters if you do not want to use the default 
configuration. For a full list, see the Javadoc for the 
[ConsumerBuilder](/api/client/org/apache/pulsar/client/api/ConsumerBuilder) 
class.
 
 The following is an example.
 
@@ -431,7 +431,7 @@ CompletableFuture<Message> asyncMessage = 
consumer.receiveAsync();
 
 ```
 
-Async receive operations return a {@inject: 
javadoc:Message:/client/org/apache/pulsar/client/api/Message} wrapped inside of 
a [`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
+Async receive operations return a 
[Message](/api/client/org/apache/pulsar/client/api/Message) wrapped inside of a 
[`CompletableFuture`](http://www.baeldung.com/java-completablefuture).
 
 ### Batch receive
 
@@ -868,7 +868,7 @@ If you are using multiple interceptors, they apply in the 
order they are passed
 
 ## Reader
 
-With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
{@inject: javadoc:Reader:/client/org/apache/pulsar/client/api/Reader} objects 
by specifying a topic and a {@inject: 
javadoc:MessageId:/client/org/apache/pulsar/client/api/MessageId}.
+With the [reader interface](concepts-clients.md#reader-interface), Pulsar 
clients can "manually position" themselves within a topic and read all messages 
from a specified message onward. The Pulsar API for Java enables you to create 
[Reader](/api/client/org/apache/pulsar/client/api/Reader) objects by specifying 
a topic and a [MessageId](/api/client/org/apache/pulsar/client/api/MessageId).
 
 The following is an example.
 
diff --git a/versioned_docs/version-2.9.x/concepts-messaging.md 
b/versioned_docs/version-2.9.x/concepts-messaging.md
index 571ce974ff8..7285e21aaf7 100644
--- a/versioned_docs/version-2.9.x/concepts-messaging.md
+++ b/versioned_docs/version-2.9.x/concepts-messaging.md
@@ -518,19 +518,19 @@ Partitioned topics need to be explicitly created via the 
[admin API](admin-api-o
 
 When publishing to partitioned topics, you must specify a *routing mode*. The 
routing mode determines which partition---that is, which internal topic---each 
message should be published to.
 
-There are three {@inject: 
javadoc:MessageRoutingMode:/client/org/apache/pulsar/client/api/MessageRoutingMode}
 available:
+There are three 
[MessageRoutingMode](/api/client/org/apache/pulsar/client/api/MessageRoutingMode)
 available:
 
 Mode     | Description
 :--------|:------------
 `RoundRobinPartition` | If no key is provided, the producer will publish 
messages across all partitions in round-robin fashion to achieve maximum 
throughput. Please note that round-robin is not done per individual message but 
rather it's set to the same boundary of batching delay, to ensure batching is 
effective. While if a key is specified on the message, the partitioned producer 
will hash the key and assign message to a particular partition. This is the 
default mode.
 `SinglePartition`     | If no key is provided, the producer will randomly pick 
one single partition and publish all the messages into that partition. While if 
a key is specified on the message, the partitioned producer will hash the key 
and assign message to a particular partition.
-`CustomPartition`     | Use custom message router implementation that will be 
called to determine the partition for a particular message. User can create a 
custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the {@inject: 
javadoc:MessageRouter:/client/org/apache/pulsar/client/api/MessageRouter} 
interface.
+`CustomPartition`     | Use custom message router implementation that will be 
called to determine the partition for a particular message. User can create a 
custom routing mode by using the [Java client](client-libraries-java.md) and 
implementing the 
[MessageRouter](/api/client/org/apache/pulsar/client/api/MessageRouter) 
interface.
 
 ### Ordering guarantee
 
 The ordering of messages is related to MessageRoutingMode and Message Key. 
Usually, user would want an ordering of Per-key-partition guarantee.
 
-If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
{@inject: 
javadoc:ProducerBuilder:/client/org/apache/pulsar/client/api/ProducerBuilder}, 
when using either `SinglePartition` or `RoundRobinPartition` mode.
+If there is a key attached to message, the messages will be routed to 
corresponding partitions based on the hashing scheme specified by 
[HashingScheme](/api/client/org/apache/pulsar/client/api/HashingScheme) in 
[ProducerBuilder](/api/client/org/apache/pulsar/client/api/ProducerBuilder), 
when using either `SinglePartition` or `RoundRobinPartition` mode.
 
 Ordering guarantee | Description | Routing Mode and Key
 :------------------|:------------|:------------

Reply via email to