diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
index 200c623..016ea2c 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
@@ -32,7 +32,7 @@
 
 /**
  * Utility methods dealing with TAPI modelObject which includes global class grouping.
- * <p>
+ *
  * <p> tapi-common@2018-03-07.yang
  * grouping global-class {
  * leaf uuid {
@@ -43,6 +43,7 @@
  * uses name-and-value;
  * }
  * }
+ * </p>
  * <p>
  * grouping name-and-value {
  * leaf value-name {
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLocalClassUtil.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLocalClassUtil.java
index f593d20..7ff0a2b 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLocalClassUtil.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiLocalClassUtil.java
@@ -30,7 +30,7 @@
 /**
  * Utility methods dealing with TAPI modelObject which includes local class grouping.
  * <p>
- * <p> tapi-common@2018-03-07.yang
+ * tapi-common@2018-03-07.yang
  * grouping local-class {
  * leaf local-id {
  * type string;
@@ -40,6 +40,7 @@
  * uses name-and-value;
  * }
  * }
+ * </p>
  * <p>
  * grouping name-and-value {
  * leaf value-name {
diff --git a/apps/pi-demo/common/src/main/java/org/onosproject/pi/demo/app/common/AbstractUpgradableFabricApp.java b/apps/pi-demo/common/src/main/java/org/onosproject/pi/demo/app/common/AbstractUpgradableFabricApp.java
index c290da3..bd12b13 100644
--- a/apps/pi-demo/common/src/main/java/org/onosproject/pi/demo/app/common/AbstractUpgradableFabricApp.java
+++ b/apps/pi-demo/common/src/main/java/org/onosproject/pi/demo/app/common/AbstractUpgradableFabricApp.java
@@ -481,6 +481,7 @@
      * @param did     a device id
      * @param tableId a table id
      * @return a new flow rule builder
+     * @throws FlowRuleGeneratorException if device has no pipeline interpreter
      */
     protected FlowRule.Builder flowRuleBuilder(DeviceId did, PiTableId tableId)
             throws FlowRuleGeneratorException {
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/EditOperationType.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/EditOperationType.java
index d0b968a..00db65f 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/EditOperationType.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/EditOperationType.java
@@ -23,10 +23,11 @@
 
 
 /**
- * <p>Java class for editOperationType.
- * 
- * <p>The following schema fragment specifies the expected         content contained within this class.
+ * Java class for editOperationType.
  * <p>
+ * The following schema fragment specifies the expected content contained
+ * within this class.
+ * </p>
  * <pre>
  * &lt;simpleType name="editOperationType"&gt;
  *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorInfoType.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorInfoType.java
index d780fc1..7dde59f 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorInfoType.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorInfoType.java
@@ -114,20 +114,17 @@
 
     /**
      * Gets the value of the badAttributeAndBadElementAndOkElement property.
-     * 
      * <p>
      * This accessor method returns a reference to the live list,
      * not a snapshot. Therefore any modification you make to the
      * returned list will be present inside the JAXB object.
-     * This is why there is not a <CODE>set</CODE> method for the badAttributeAndBadElementAndOkElement property.
-     * 
-     * <p>
+     * This is why there is not a <CODE>set</CODE> method for the
+     * badAttributeAndBadElementAndOkElement property.
+     * </p>
      * For example, to add a new item, do as follows:
      * <pre>
      *    getBadAttributeAndBadElementAndOkElement().add(newItem);
      * </pre>
-     * 
-     * 
      * <p>
      * Objects of the following type(s) are allowed in the list
      * {@link JAXBElement }{@code <}{@link QName }{@code >}
@@ -136,8 +133,8 @@
      * {@link JAXBElement }{@code <}{@link QName }{@code >}
      * {@link JAXBElement }{@code <}{@link QName }{@code >}
      * {@link JAXBElement }{@code <}{@link String }{@code >}
-     * 
-     * 
+     * </p>
+     * @return list of properties
      */
     public List<JAXBElement<? extends Serializable>> getBadAttributeAndBadElementAndOkElement() {
         if (badAttributeAndBadElementAndOkElement == null) {
@@ -148,26 +145,23 @@
 
     /**
      * Gets the value of the any property.
-     * 
      * <p>
      * This accessor method returns a reference to the live list,
      * not a snapshot. Therefore any modification you make to the
      * returned list will be present inside the JAXB object.
      * This is why there is not a <CODE>set</CODE> method for the any property.
-     * 
-     * <p>
+     * </p>
      * For example, to add a new item, do as follows:
      * <pre>
      *    getAny().add(newItem);
      * </pre>
-     * 
-     * 
+     *
      * <p>
      * Objects of the following type(s) are allowed in the list
      * {@link Element }
      * {@link Object }
-     * 
-     * 
+     * </p>
+     * @return list of properties
      */
     public List<Object> getAny() {
         if (any == null) {
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorSeverity.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorSeverity.java
index ff7a7e7..79af702 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorSeverity.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorSeverity.java
@@ -23,10 +23,10 @@
 
 
 /**
- * <p>Java class for ErrorSeverity.
+ * Java class for ErrorSeverity.
  * 
  * <p>The following schema fragment specifies the expected         content contained within this class.
- * <p>
+ * </p>
  * <pre>
  * &lt;simpleType name="ErrorSeverity"&gt;
  *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorTag.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorTag.java
index fd69b8f..331c47d 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorTag.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorTag.java
@@ -23,10 +23,10 @@
 
 
 /**
- * <p>Java class for ErrorTag.
+ * Java class for ErrorTag.
  * 
- * <p>The following schema fragment specifies the expected         content contained within this class.
- * <p>
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * </p>
  * <pre>
  * &lt;simpleType name="ErrorTag"&gt;
  *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorType.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorType.java
index 3d86610..32c7690 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorType.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ErrorType.java
@@ -23,10 +23,10 @@
 
 
 /**
- * <p>Java class for ErrorType.
+ * Java class for ErrorType.
  * 
- * <p>The following schema fragment specifies the expected         content contained within this class.
- * <p>
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * </p>
  * <pre>
  * &lt;simpleType name="ErrorType"&gt;
  *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string"&gt;
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/Hello.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/Hello.java
index 220e8a8..2e1b720 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/Hello.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/Hello.java
@@ -28,10 +28,11 @@
 
 
 /**
- * <p>Java class for anonymous complex type.
+ * Java class for anonymous complex type.
  * 
- * <p>The following schema fragment specifies the expected         content contained within this class.
- * 
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ * </p>
+ *
  * <pre>
  * &lt;complexType&gt;
  *   &lt;complexContent&gt;
@@ -169,7 +170,7 @@
          * Objects of the following type(s) are allowed in the list
          * {@link String }
          * 
-         * 
+         * @return list of capabilities
          */
         public List<String> getCapability() {
             if (capability == null) {
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ObjectFactory.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ObjectFactory.java
index 2328f26..c61c0c6 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ObjectFactory.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/ObjectFactory.java
@@ -61,7 +61,7 @@
 
     /**
      * Create an instance of {@link Hello }
-     * 
+     * @return hello message
      */
     public Hello createHello() {
         return new Hello();
@@ -69,7 +69,7 @@
 
     /**
      * Create an instance of {@link RpcErrorType }
-     * 
+     * @return error type
      */
     public RpcErrorType createRpcErrorType() {
         return new RpcErrorType();
@@ -77,7 +77,7 @@
 
     /**
      * Create an instance of {@link RpcType }
-     * 
+     * @return rpc type
      */
     public RpcType createRpcType() {
         return new RpcType();
@@ -85,7 +85,7 @@
 
     /**
      * Create an instance of {@link RpcReplyType }
-     * 
+     * @return rpc reply type
      */
     public RpcReplyType createRpcReplyType() {
         return new RpcReplyType();
@@ -93,7 +93,7 @@
 
     /**
      * Create an instance of {@link RpcOperationType }
-     * 
+     * @return rpc operation type
      */
     public RpcOperationType createRpcOperationType() {
         return new RpcOperationType();
@@ -101,7 +101,7 @@
 
     /**
      * Create an instance of {@link RpcResponseType }
-     * 
+     * @return rpc response type
      */
     public RpcResponseType createRpcResponseType() {
         return new RpcResponseType();
@@ -109,7 +109,7 @@
 
     /**
      * Create an instance of {@link Hello.Capabilities }
-     * 
+     * @return hello capabilities
      */
     public Hello.Capabilities createHelloCapabilities() {
         return new Hello.Capabilities();
@@ -117,7 +117,7 @@
 
     /**
      * Create an instance of {@link ErrorInfoType }
-     * 
+     * @return error info type
      */
     public ErrorInfoType createErrorInfoType() {
         return new ErrorInfoType();
@@ -125,7 +125,7 @@
 
     /**
      * Create an instance of {@link RpcErrorType.ErrorMessage }
-     * 
+     * @return error message
      */
     public RpcErrorType.ErrorMessage createRpcErrorTypeErrorMessage() {
         return new RpcErrorType.ErrorMessage();
diff --git a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/RpcReplyType.java b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/RpcReplyType.java
index 83d30d9..abfe059 100644
--- a/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/RpcReplyType.java
+++ b/protocols/netconf/api/src/main/java/org/onosproject/netconf/rpc/RpcReplyType.java
@@ -116,7 +116,7 @@
      * Objects of the following type(s) are allowed in the list
      * {@link RpcErrorType }
      * 
-     * 
+     * @return list of rpc error types
      */
     public List<RpcErrorType> getRpcError() {
         if (rpcError == null) {
@@ -145,7 +145,7 @@
      * Objects of the following type(s) are allowed in the list
      * {@link RpcResponseType }
      * 
-     * 
+     * @return list of rpc response types
      */
     public List<RpcResponseType> getRpcResponse() {
         if (rpcResponse == null) {
diff --git a/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppChannelInitializer.java b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppChannelInitializer.java
index 1d44e29..8a9c752 100644
--- a/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppChannelInitializer.java
+++ b/protocols/xmpp/core/ctl/src/main/java/org/onosproject/xmpp/core/ctl/XmppChannelInitializer.java
@@ -41,7 +41,7 @@
 
     /**
      * Initializes pipeline for XMPP channel.
-     * @throws Exception
+     * @throws Exception if unable to initialize the pipeline
      */
     @Override
     protected void initChannel(SocketChannel channel) throws Exception {
