diff --git a/java_exception.go b/java_exception.go
index 6190c18..abe725d 100644
--- a/java_exception.go
+++ b/java_exception.go
@@ -17,6 +17,7 @@
 import "github.com/dubbogo/hessian2/java_exception"
 
 func init() {
+	RegisterPOJO(&java_exception.Method{})
 	RegisterPOJO(&java_exception.Class{})
 	RegisterPOJO(&java_exception.Throwable{})
 	RegisterPOJO(&java_exception.Exception{})
@@ -105,4 +106,6 @@
 	RegisterPOJO(&java_exception.MissingFormatArgumentException{})
 	RegisterPOJO(&java_exception.MissingFormatWidthException{})
 	RegisterPOJO(&java_exception.DubboGenericException{})
+	RegisterPOJO(&java_exception.IncompleteAnnotationException{})
+	RegisterPOJO(&java_exception.AnnotationTypeMismatchException{})
 }
diff --git a/java_exception/annotation_type_mismatch_exception.go b/java_exception/annotation_type_mismatch_exception.go
new file mode 100644
index 0000000..e1b44ff
--- /dev/null
+++ b/java_exception/annotation_type_mismatch_exception.go
@@ -0,0 +1,37 @@
+// Copyright 2016-2019 yiduwangkai@gmail.com
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package java_exception
+
+type AnnotationTypeMismatchException struct {
+	SerialVersionUID     int64
+	DetailMessage        string
+	StackTrace           []StackTraceElement
+	FoundType            string
+	Element              Method
+	SuppressedExceptions []Throwabler
+	Cause                Throwabler
+}
+
+func NewAnnotationTypeMismatchException(detailMessage string) *AnnotationTypeMismatchException {
+	return &AnnotationTypeMismatchException{DetailMessage: detailMessage, StackTrace: []StackTraceElement{}}
+}
+
+func (e AnnotationTypeMismatchException) Error() string {
+	return e.DetailMessage
+}
+
+func (AnnotationTypeMismatchException) JavaClassName() string {
+	return "java.lang.annotation.AnnotationTypeMismatchException"
+}
diff --git a/java_exception/exception.go b/java_exception/exception.go
index 2a458a2..73a4477 100644
--- a/java_exception/exception.go
+++ b/java_exception/exception.go
@@ -90,6 +90,15 @@
 	Name string
 }
 
+type Method struct {
+	Name string
+}
+
+
+func (Method) JavaClassName() string {
+	return "java.lang.reflect.Method"
+}
+
 func (Class) JavaClassName() string {
 	return "java.lang.Class"
 }
diff --git a/java_exception/incomplete_annotation_exception.go b/java_exception/incomplete_annotation_exception.go
new file mode 100644
index 0000000..b18378a
--- /dev/null
+++ b/java_exception/incomplete_annotation_exception.go
@@ -0,0 +1,37 @@
+// Copyright 2016-2019 yiduwangkai@gmail.com
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package java_exception
+
+type IncompleteAnnotationException struct {
+	SerialVersionUID     int64
+	DetailMessage        string
+	StackTrace           []StackTraceElement
+	ElementName          string
+	AnnotationType       Class
+	SuppressedExceptions []Throwabler
+	Cause                Throwabler
+}
+
+func NewIncompleteAnnotationException(detailMessage string) *IncompleteAnnotationException {
+	return &IncompleteAnnotationException{DetailMessage: detailMessage, StackTrace: []StackTraceElement{}}
+}
+
+func (e IncompleteAnnotationException) Error() string {
+	return e.DetailMessage
+}
+
+func (IncompleteAnnotationException) JavaClassName() string {
+	return "java.lang.annotation.IncompleteAnnotationException"
+}
diff --git a/java_exception_test.go b/java_exception_test.go
index 9028c13..6af7841 100644
--- a/java_exception_test.go
+++ b/java_exception_test.go
@@ -107,6 +107,8 @@
 	doTestException(t, "throw_MissingFormatArgumentException", "Format specifier 'MissingFormatArgumentException'")
 	doTestException(t, "throw_MissingFormatWidthException", "MissingFormatWidthException")
 	doTestException(t, "throw_DubboGenericException", "DubboGenericException")
+	doTestException(t, "throw_IncompleteAnnotationException", "java.lang.Override missing element IncompleteAnnotationException")
+	doTestException(t, "throw_AnnotationTypeMismatchException", "Incorrectly typed data found for annotation element null (Found data of type AnnotationTypeMismatchException)")
 }
 
 func doTestException(t *testing.T, method, content string) {
diff --git a/test_hessian/src/main/java/test/TestThrowable.java b/test_hessian/src/main/java/test/TestThrowable.java
index 686f379..7e40b7e 100644
--- a/test_hessian/src/main/java/test/TestThrowable.java
+++ b/test_hessian/src/main/java/test/TestThrowable.java
@@ -18,6 +18,8 @@
 import com.alibaba.dubbo.rpc.service.GenericException;
 
 import java.io.*;
+import java.lang.annotation.AnnotationTypeMismatchException;
+import java.lang.annotation.IncompleteAnnotationException;
 import java.lang.instrument.IllegalClassFormatException;
 import java.lang.instrument.UnmodifiableClassException;
 import java.lang.invoke.LambdaConversionException;
@@ -395,4 +397,13 @@
   public static Object throw_DubboGenericException() {
     return new GenericException("DubboGenericExceptionClass","DubboGenericException");
   }
+
+  public static Object throw_IncompleteAnnotationException() {
+    return new IncompleteAnnotationException(Override.class, "IncompleteAnnotationException");
+  }
+
+  public static Object throw_AnnotationTypeMismatchException() {
+    return new AnnotationTypeMismatchException(Override.class.getEnclosingMethod(), "AnnotationTypeMismatchException");
+  }
+
 }
