У меня есть Interceptor, который получает некоторую информацию заголовка от моего внешнего интерфейса и создает объект для регистрации информации запроса (user, ip, url, querystring, contenttype, timetoexecute, status). После создания сущности я вызываю службу, чтобы сохранить ее в базе данных DB2.
import java.util.Enumeration;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.common.model.HttpRequestLog;
import com.common.service.HttpRequestLogService;
import com.common.security.Authenticator;
@Component
public class LoggerInterceptor extends HandlerInterceptorAdapter {
@Autowired
Authenticator authenticator;
@Autowired
HttpRequestLogService httpRequestLogService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
request.setAttribute("startTime", System.currentTimeMillis());
response.addHeader("RequestUUID", UUID.randomUUID().toString());
return true;
}
private String getParameters(HttpServletRequest request) {
StringBuffer params = new StringBuffer();
Enumeration<?> e = request.getParameterNames();
while (e.hasMoreElements()) {
String param = (String) e.nextElement();
params.append(params.length() > 1 ? "&" : "").append(param).append("=").append(request.getParameter(param));
}
return params.toString();
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
if (!(request instanceof RequestWrapper)) {
return;
}
RequestWrapper requestWrapper = (RequestWrapper) request;
String ip = requestWrapper.getHeader("X-FORWARDED-FOR");
String params = getParameters(requestWrapper);
HttpRequestLog log = new HttpRequestLog();
log.setUser(authenticator.getCurrentUser() != null ? authenticator.getCurrentUser().getLogin() : "UNKNOWN");
log.setIp(ip != null && ip.length() > 0 ? ip : requestWrapper.getRemoteAddr());
log.setUrl(requestWrapper.getRequestURI());
log.setQueryString(params.length() > 0 ? params.substring(0, Math.min(params.length() - 1, 500)) : "");
log.setType(requestWrapper.getContentType() == null || requestWrapper.getContentType().isEmpty() ? "NORMAL" : "AJAX");
log.setResponseStatusCode(response.getStatus());
log.setRequestUUID(response.getHeader("RequestUUID"));
log.setBackExecutionTime(System.currentTimeMillis() - (Long) request.getAttribute("startTime"));
if (requestWrapper.getContentLength() > 0
&& requestWrapper.getContentType().toUpperCase().equals("APPLICATION/JSON; CHARSET=UTF-8")) {
String body = requestWrapper.getRequestBody();
log.setJson(body.substring(0, Math.min(body.length() - 1, 5000)));
}
httpRequestLogService.add(log);
}
}
Код объекта:
import javax.persistence.Column;
import javax.persistence.Entity;
@Entity
public class HttpRequestLog extends VersionedAbstractEntity {
private static final long serialVersionUID = -4708725273090125695L;
@Column(nullable = false)
private String requestUUID;
@Column(nullable = false)
private String user;
@Column(nullable = false)
private String ip;
@Column(nullable = false)
private String url;
@Column(length = 500)
private String queryString;
@Column(nullable = false)
private String type;
@Column(length = 5000)
private String json;
@Column(nullable = false)
private int responseStatusCode;
@Column(nullable = false)
private long backExecutionTime;
@Column(nullable = false)
private Long frontExecutionTime;
public String getRequestUUID() {
return requestUUID;
}
public void setRequestUUID(String requestUUID) {
this.requestUUID = requestUUID;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getQueryString() {
return queryString;
}
public void setQueryString(String queryString) {
this.queryString = queryString;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
public int getResponseStatusCode() {
return responseStatusCode;
}
public void setResponseStatusCode(int responseStatusCode) {
this.responseStatusCode = responseStatusCode;
}
public long getBackExecutionTime() {
return backExecutionTime;
}
public void setBackExecutionTime(long backExecutionTime) {
this.backExecutionTime = backExecutionTime;
}
public long getFrontExecutionTime() {
return frontExecutionTime;
}
public void setFrontExecutionTime(long frontExecutionTime) {
this.frontExecutionTime = frontExecutionTime;
}
}
Служба имеет DAO, расширяющий JPARepository. Вызов следующий:
@Service
public class HttpRequestLogServiceImpl implements HttpRequestLogService {
@Autowired
private HttpRequestLogDao httpRequestLogDao;
@Override
public HttpRequestLog add(HttpRequestLog httpRequestLog) {
return httpRequestLogDao.save(httpRequestLog);
}
}
Этот метод вызывается столько раз, сколько новых запросов делается в бэкэнд (иногда больше, чем 1 в секунду). Но для некоторых запросов этот метод вызывает странное исключение:
com.sun.proxy.$Proxy1511.hashCode(Unknown Source); java.util.HashMap.hash(HashMap.java:338); java.util.HashMap.get(HashMap.java:556);
org.hibernate.resource.jdbc.internal.ResourceRegistryStandardImpl.release(ResourceRegistryStandardImpl.java:76);
org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.releaseStatements(AbstractBatchImpl.java:157);
org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl.execute(AbstractBatchImpl.java:150);
org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.executeBatch(JdbcCoordinatorImpl.java:214);
org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:103);
org.hibernate.dialect.identity.GetGeneratedKeysDelegate.prepare(GetGeneratedKeysDelegate.java:51);
org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:39);
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2855);
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3426);
org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81);
org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:619);
org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:273);
org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:254);
org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:299);
org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:317);
org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:272);
org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:178);
org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:109);
org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67);
org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189);
org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132);
org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58);
org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:775);
org.hibernate.internal.SessionImpl.persist(SessionImpl.java:748);
org.hibernate.internal.SessionImpl.persist(SessionImpl.java:753);
org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1146);
sun.reflect.GeneratedMethodAccessor2885.invoke(Unknown Source);
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43);
java.lang.reflect.Method.invoke(Method.java:497);
org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347);
com.sun.proxy.$Proxy1393.persist(Unknown Source);
sun.reflect.GeneratedMethodAccessor2885.invoke(Unknown Source);
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43);
java.lang.reflect.Method.invoke(Method.java:497);
org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298);
com.sun.proxy.$Proxy1393.persist(Unknown Source);
org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:508);
sun.reflect.GeneratedMethodAccessor2883.invoke(Unknown Source);
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43);
java.lang.reflect.Method.invoke(Method.java:497);
org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:513);
org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:498);
org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:475;
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99);
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282);
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179); org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213);
com.sun.proxy.$Proxy1471.save(Unknown Source);
com.common.service.HttpRequestLogServiceImpl.add(HttpRequestLogServiceImpl.java:17);
com.common.service.HttpRequestLogServiceImpl$$FastClassBySpringCGLIB$$95d535d4.invoke();
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204);
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157);
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85);
com.logger.LoggerAdvisor.before(LoggerAdvisor.java:80);
sun.reflect.GeneratedMethodAccessor2882.invoke(Unknown Source);
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43);
java.lang.reflect.Method.invoke(Method.java:497);
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629);
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618);
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92);
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179);
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673);
com.common.service.HttpRequestLogServiceImpl$$EnhancerBySpringCGLIB$$dacea43f.add();
com.web.utility.LoggerInterceptor.postHandle(LoggerInterceptor.java:71);
org.springframework.web.servlet.HandlerExecutionChain.applyPostHandle(HandlerExecutionChain.java:151);
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:974);
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901);
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970);
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872);
javax.servlet.http.HttpServlet.service(HttpServlet.java:647);
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846);
javax.servlet.http.HttpServlet.service(HttpServlet.java:728);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
com.web.utility.RequestWrapperFilter.doFilter(RequestWrapperFilter.java:17);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.bufferAndPostProcess(ContentBufferingFilter.java:169);
org.sitemesh.webapp.contentfilter.ContentBufferingFilter.doFilter(ContentBufferingFilter.java:126);
org.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:120);
org.sitemesh.config.ConfigurableSiteMeshFilter.doFilter(ConfigurableSiteMeshFilter.java:163);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:110);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317);
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127);
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331);
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214);
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177);
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347);
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:263);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:108);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:115);
org.springframework.boot.web.support.ErrorPageFilter.access$000(ErrorPageFilter.java:59);
org.springframework.boot.web.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:90);
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107);
org.springframework.boot.web.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:108);
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243);
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210);
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222);
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123);
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502);
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171);
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99);
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953);
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118);
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408);
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023);
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589);
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312);
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142);
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617);
java.lang.Thread.run(Thread.java:745)
Не могли бы вы дать мне какие-нибудь подсказки, которые помогут мне попытаться выяснить, что происходит?