Exception of GRPC has been added.
This commit is contained in:
parent
e9d9b7eee4
commit
8786d944cb
|
@ -1,4 +1,10 @@
|
||||||
package com.loafle.overflow.commons.exception;
|
package com.loafle.overflow.commons.exception;
|
||||||
|
|
||||||
public class OverflowException extends Exception {
|
import io.grpc.Status;
|
||||||
|
import io.grpc.StatusException;
|
||||||
|
|
||||||
|
public class OverflowException extends StatusException {
|
||||||
|
public OverflowException(Status status) {
|
||||||
|
super(status);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.loafle.overflow.commons.exception;
|
||||||
|
|
||||||
|
import io.grpc.Status;
|
||||||
|
import io.grpc.StatusRuntimeException;
|
||||||
|
|
||||||
|
public class OverflowRuntimeException extends StatusRuntimeException {
|
||||||
|
public OverflowRuntimeException(Class<? extends OverflowRuntimeException> clazz) {
|
||||||
|
super(Status.fromCode(Status.Code.UNKNOWN).withDescription(clazz.getSimpleName()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,9 @@
|
||||||
package com.loafle.overflow.module.member.exception;
|
package com.loafle.overflow.module.member.exception;
|
||||||
|
|
||||||
import com.loafle.overflow.commons.exception.OverflowException;
|
import com.loafle.overflow.commons.exception.OverflowRuntimeException;
|
||||||
|
|
||||||
public class EmailNotConfirmedException extends OverflowException {
|
public class EmailNotConfirmedException extends OverflowRuntimeException {
|
||||||
|
public EmailNotConfirmedException() {
|
||||||
|
super(EmailNotConfirmedException.class);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,6 +1,9 @@
|
||||||
package com.loafle.overflow.module.member.exception;
|
package com.loafle.overflow.module.member.exception;
|
||||||
|
|
||||||
import com.loafle.overflow.commons.exception.OverflowException;
|
import com.loafle.overflow.commons.exception.OverflowRuntimeException;
|
||||||
|
|
||||||
public class SignInIdNotExistException extends OverflowException {
|
public class SignInIdNotExistException extends OverflowRuntimeException {
|
||||||
|
public SignInIdNotExistException() {
|
||||||
|
super(SignInIdNotExistException.class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
package com.loafle.overflow.module.member.exception;
|
|
||||||
|
|
||||||
import com.loafle.overflow.commons.exception.OverflowException;
|
|
||||||
|
|
||||||
public class SignInPwNotExactException extends OverflowException {
|
|
||||||
}
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
package com.loafle.overflow.module.member.exception;
|
||||||
|
|
||||||
|
import com.loafle.overflow.commons.exception.OverflowRuntimeException;
|
||||||
|
|
||||||
|
public class SignInPwNotMatchException extends OverflowRuntimeException {
|
||||||
|
public SignInPwNotMatchException() {
|
||||||
|
super(SignInPwNotMatchException.class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,7 +4,7 @@ import com.loafle.overflow.module.email.service.EmailAuthService;
|
||||||
import com.loafle.overflow.module.member.dao.MemberDAO;
|
import com.loafle.overflow.module.member.dao.MemberDAO;
|
||||||
import com.loafle.overflow.module.member.exception.EmailNotConfirmedException;
|
import com.loafle.overflow.module.member.exception.EmailNotConfirmedException;
|
||||||
import com.loafle.overflow.module.member.exception.SignInIdNotExistException;
|
import com.loafle.overflow.module.member.exception.SignInIdNotExistException;
|
||||||
import com.loafle.overflow.module.member.exception.SignInPwNotExactException;
|
import com.loafle.overflow.module.member.exception.SignInPwNotMatchException;
|
||||||
import com.loafle.overflow.module.member.model.Member;
|
import com.loafle.overflow.module.member.model.Member;
|
||||||
import com.loafle.overflow.module.meta.model.MetaMemberStatus;
|
import com.loafle.overflow.module.meta.model.MetaMemberStatus;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
@ -23,7 +23,7 @@ public class MemberService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private EmailAuthService emailAuthService;
|
private EmailAuthService emailAuthService;
|
||||||
|
|
||||||
public Member signin(String signinId, String signinPw) throws SignInIdNotExistException, EmailNotConfirmedException, SignInPwNotExactException {
|
public Member signin(String signinId, String signinPw) throws SignInIdNotExistException, EmailNotConfirmedException, SignInPwNotMatchException {
|
||||||
Member m = this.memberDAO.findByEmail(signinId);
|
Member m = this.memberDAO.findByEmail(signinId);
|
||||||
|
|
||||||
if ( null == m ) {
|
if ( null == m ) {
|
||||||
|
@ -37,7 +37,7 @@ public class MemberService {
|
||||||
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||||
Boolean match = passwordEncoder.matches(signinPw, m.getPw());
|
Boolean match = passwordEncoder.matches(signinPw, m.getPw());
|
||||||
if(!match) {
|
if(!match) {
|
||||||
throw new SignInPwNotExactException();
|
throw new SignInPwNotMatchException();
|
||||||
}
|
}
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
package com.loafle.overflow.proxy;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by root on 17. 6. 23.
|
|
||||||
*/
|
|
||||||
public class MethodSeeker {
|
|
||||||
|
|
||||||
public static Method getMethod(Class cls, String methodName, List<Class> paramTypes) {
|
|
||||||
|
|
||||||
Method method = null;
|
|
||||||
|
|
||||||
if(paramTypes != null) {
|
|
||||||
method = MethodSeeker.getMethodType(cls, methodName, paramTypes.toArray(new Class[paramTypes.size()]));
|
|
||||||
}
|
|
||||||
|
|
||||||
return method;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Method getMethodType(Class cls, String methodName, Class<?> ...type) {
|
|
||||||
if (cls == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Method m = null;
|
|
||||||
try {
|
|
||||||
m = cls.getMethod(methodName, type);
|
|
||||||
} catch (NoSuchMethodException e) {
|
|
||||||
return MethodSeeker.getMethodType(cls.getSuperclass(), methodName, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,10 +2,17 @@ package com.loafle.overflow.proxy;
|
||||||
|
|
||||||
import com.google.gson.internal.Primitives;
|
import com.google.gson.internal.Primitives;
|
||||||
import com.google.protobuf.ByteString;
|
import com.google.protobuf.ByteString;
|
||||||
|
import com.loafle.overflow.proxy.exception.InvalidParameterException;
|
||||||
|
import com.loafle.overflow.proxy.exception.InvalidRequestException;
|
||||||
|
import com.loafle.overflow.proxy.exception.NoSuchMethodException;
|
||||||
|
import com.loafle.overflow.proxy.exception.NoSuchServiceException;
|
||||||
|
import org.codehaus.jackson.JsonGenerationException;
|
||||||
import org.codehaus.jackson.map.DeserializationConfig;
|
import org.codehaus.jackson.map.DeserializationConfig;
|
||||||
|
import org.codehaus.jackson.map.JsonMappingException;
|
||||||
import org.codehaus.jackson.map.ObjectMapper;
|
import org.codehaus.jackson.map.ObjectMapper;
|
||||||
import org.codehaus.jackson.type.JavaType;
|
import org.codehaus.jackson.type.JavaType;
|
||||||
import org.springframework.aop.support.AopUtils;
|
import org.springframework.aop.support.AopUtils;
|
||||||
|
import org.springframework.beans.BeansException;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@ -50,7 +57,7 @@ public class ServiceInvoker {
|
||||||
return serviceCache.bean;
|
return serviceCache.bean;
|
||||||
}
|
}
|
||||||
|
|
||||||
private MethodCache getMethodCache(String methodName) throws NoSuchMethodException, ClassNotFoundException {
|
private MethodCache getMethodCache(String methodName) throws NoSuchMethodException {
|
||||||
MethodCache methodCache = methodCacheMap.get(methodName);
|
MethodCache methodCache = methodCacheMap.get(methodName);
|
||||||
if (null != methodCache) {
|
if (null != methodCache) {
|
||||||
return methodCache;
|
return methodCache;
|
||||||
|
@ -101,27 +108,36 @@ public class ServiceInvoker {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cache getServiceCache(String serviceName) {
|
private Cache getServiceCache(String serviceName) throws NoSuchServiceException {
|
||||||
Cache serviceCache = serviceCacheMap.get(serviceName);
|
Cache serviceCache = serviceCacheMap.get(serviceName);
|
||||||
if (null == serviceCache) {
|
if (null != serviceCache) {
|
||||||
|
return serviceCache;
|
||||||
|
}
|
||||||
|
try {
|
||||||
Object bean = context.getBean(serviceName);
|
Object bean = context.getBean(serviceName);
|
||||||
serviceCache = new Cache(bean);
|
serviceCache = new Cache(bean);
|
||||||
serviceCacheMap.put(serviceName, serviceCache);
|
serviceCacheMap.put(serviceName, serviceCache);
|
||||||
|
} catch (BeansException e) {
|
||||||
|
throw new NoSuchServiceException();
|
||||||
}
|
}
|
||||||
|
|
||||||
return serviceCache;
|
return serviceCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Object getValue(Type parameterType, String json) throws IOException {
|
private Object getValue(Type parameterType, String json) throws InvalidParameterException {
|
||||||
JavaType targetType = objectMapper.getTypeFactory().constructType(parameterType);
|
JavaType targetType = objectMapper.getTypeFactory().constructType(parameterType);
|
||||||
if (!Primitives.isPrimitive(parameterType) && !parameterType.getTypeName().equals(String.class.getName())) {
|
if (!Primitives.isPrimitive(parameterType) && !parameterType.getTypeName().equals(String.class.getName())) {
|
||||||
|
try {
|
||||||
return objectMapper.readValue(json, targetType);
|
return objectMapper.readValue(json, targetType);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new InvalidParameterException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return objectMapper.convertValue(json, targetType);
|
return objectMapper.convertValue(json, targetType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Object[] getParameters(Type[] parameterTypes, List<ByteString> params) throws IOException {
|
private Object[] getParameters(Type[] parameterTypes, List<ByteString> params) throws InvalidParameterException {
|
||||||
if (null == parameterTypes || null == params) {
|
if (null == parameterTypes || null == params) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -140,18 +156,40 @@ public class ServiceInvoker {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String invoke(String serviceName, String methodName, List<ByteString> params) throws NoSuchMethodException, ClassNotFoundException, IOException, InvocationTargetException, IllegalAccessException {
|
public String invoke(String serviceName, String methodName, List<ByteString> params) throws Throwable {
|
||||||
Cache serviceCache = getServiceCache(serviceName);
|
Cache serviceCache = getServiceCache(serviceName);
|
||||||
Cache.MethodCache methodCache = serviceCache.getMethodCache(methodName);
|
Cache.MethodCache methodCache = serviceCache.getMethodCache(methodName);
|
||||||
|
|
||||||
|
if (null == methodCache.parameterTypes) {
|
||||||
|
if (null != params && 0 < params.size()) {
|
||||||
|
throw new InvalidParameterException();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (methodCache.parameterTypes.length != params.size()) {
|
||||||
|
throw new InvalidParameterException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Object[] parameters = null;
|
Object[] parameters = null;
|
||||||
if (null != methodCache.parameterTypes && 0 < methodCache.parameterTypes.length) {
|
if (null != methodCache.parameterTypes && 0 < methodCache.parameterTypes.length) {
|
||||||
parameters = getParameters(methodCache.parameterTypes, params);
|
parameters = getParameters(methodCache.parameterTypes, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
Object result = methodCache.method.invoke(serviceCache.getBean(), parameters);
|
Object result = null;
|
||||||
|
String jsonInString = null;
|
||||||
|
try {
|
||||||
|
result = methodCache.method.invoke(serviceCache.getBean(), parameters);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
throw new InvalidRequestException();
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
throw e.getTargetException();
|
||||||
|
}
|
||||||
|
|
||||||
String jsonInString = objectMapper.writeValueAsString(result);
|
try {
|
||||||
|
jsonInString = objectMapper.writeValueAsString(result);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new InvalidRequestException();
|
||||||
|
}
|
||||||
|
|
||||||
return jsonInString;
|
return jsonInString;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,11 +4,11 @@ import com.loafle.overflow.api.OverflowApiServerGrpc;
|
||||||
import com.loafle.overflow.api.ServerInput;
|
import com.loafle.overflow.api.ServerInput;
|
||||||
import com.loafle.overflow.api.ServerOutput;
|
import com.loafle.overflow.api.ServerOutput;
|
||||||
import io.grpc.ServerBuilder;
|
import io.grpc.ServerBuilder;
|
||||||
|
import io.grpc.StatusException;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -73,27 +73,13 @@ public class ServiceProxy {
|
||||||
.build();
|
.build();
|
||||||
responseObserver.onNext(reply);
|
responseObserver.onNext(reply);
|
||||||
responseObserver.onCompleted();
|
responseObserver.onCompleted();
|
||||||
} catch (NoSuchMethodException e) {
|
} catch (StatusException e) {
|
||||||
e.printStackTrace();
|
logger.warning(e.toString());
|
||||||
responseObserver.onError(e);
|
responseObserver.onError(e);
|
||||||
} catch (ClassNotFoundException e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
|
||||||
responseObserver.onError(e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
responseObserver.onError(e);
|
|
||||||
} catch (InvocationTargetException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
responseObserver.onError(e);
|
|
||||||
} catch (IllegalAccessException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
responseObserver.onError(e);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
responseObserver.onError(e);
|
responseObserver.onError(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.loafle.overflow.proxy.exception;
|
||||||
|
|
||||||
|
import com.loafle.overflow.commons.exception.OverflowException;
|
||||||
|
import io.grpc.Status;
|
||||||
|
|
||||||
|
public class InvalidParameterException extends OverflowException {
|
||||||
|
public InvalidParameterException() {
|
||||||
|
super(Status.fromCode(Status.Code.INVALID_ARGUMENT).withDescription(InvalidParameterException.class.getSimpleName()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.loafle.overflow.proxy.exception;
|
||||||
|
|
||||||
|
import com.loafle.overflow.commons.exception.OverflowException;
|
||||||
|
import io.grpc.Status;
|
||||||
|
|
||||||
|
public class InvalidRequestException extends OverflowException {
|
||||||
|
public InvalidRequestException() {
|
||||||
|
super(Status.fromCode(Status.Code.INTERNAL).withDescription(InvalidRequestException.class.getSimpleName()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.loafle.overflow.proxy.exception;
|
||||||
|
|
||||||
|
import com.loafle.overflow.commons.exception.OverflowException;
|
||||||
|
import io.grpc.Status;
|
||||||
|
|
||||||
|
public class NoSuchMethodException extends OverflowException {
|
||||||
|
public NoSuchMethodException() {
|
||||||
|
super(Status.fromCode(Status.Code.UNIMPLEMENTED).withDescription(NoSuchMethodException.class.getSimpleName()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.loafle.overflow.proxy.exception;
|
||||||
|
|
||||||
|
import com.loafle.overflow.commons.exception.OverflowException;
|
||||||
|
import io.grpc.Status;
|
||||||
|
|
||||||
|
public class NoSuchServiceException extends OverflowException {
|
||||||
|
public NoSuchServiceException() {
|
||||||
|
super(Status.fromCode(Status.Code.UNAVAILABLE).withDescription(NoSuchServiceException.class.getSimpleName()));
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,7 +27,7 @@ public class ServiceInvokerTest {
|
||||||
private ServiceInvoker serviceInvoker;
|
private ServiceInvoker serviceInvoker;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void invoke() throws Exception {
|
public void invoke() throws Throwable {
|
||||||
|
|
||||||
// List<ByteString> params = new ArrayList<>(2);
|
// List<ByteString> params = new ArrayList<>(2);
|
||||||
// params.add(ByteString.copyFromUtf8("[{\"id\": 1," +
|
// params.add(ByteString.copyFromUtf8("[{\"id\": 1," +
|
||||||
|
|
Loading…
Reference in New Issue
Block a user