Ошибка открытия JPA при получении токена доступа к каналу - PullRequest
0 голосов
/ 18 января 2019

Я реализую поддержку OAuth2.0 с использованием Apache CXF. Я также использую OpenJPA для сохранения клиента и токенов. Токены доступа генерируются и хранятся правильно. Однако, когда они проверены, и сервер пытается извлечь токен из базы данных, я получаю исключение ниже. Я проверил, и значение токена, установленного в запросе, является правильным. Запись токена существует в таблице. Код JPA создается поставщиком данных JPA JPACodeDataProvider, который поставляется с CXF

Кто-нибудь знает в чем может быть проблема?

 <openjpa-3.0.0-r422266:1833209 nonfatal general error> org.apache.openjpa.pers
stence.PersistenceException: null
FailedObject: SELECT t FROM BearerAccessToken t WHERE t.tokenKey = :tokenKey [j
va.lang.String]
        at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:1029)
        at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:928)
        at org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManage
.java:1035)
        at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:
79)
        at org.apache.openjpa.jdbc.sql.SelectImpl$SelectResult.load(SelectImpl.
ava:2382)
        at org.apache.openjpa.jdbc.sql.AbstractResult.load(AbstractResult.java:
73)
        at org.apache.openjpa.jdbc.kernel.InstanceResultObjectProvider.getResul
Object(InstanceResultObjectProvider.java:59)
        at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.ja
a:35)
        at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1262)
        at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1015)
        at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:871)
        at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:802)
        at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.ja
a:541)
        at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:274)
        at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.jav
:290)
        at com.awaresoft.oauthcxf.services.AwareIMDataProvider$1.execute(AwareI
DataProvider.java:31)
        at com.awaresoft.oauthcxf.services.AwareIMDataProvider$1.execute(AwareI
DataProvider.java:1)
        at org.apache.cxf.rs.security.oauth2.provider.JPAOAuthDataProvider.exec
te(JPAOAuthDataProvider.java:76)
        at com.awaresoft.oauthcxf.services.AwareIMDataProvider.getAccessToken(A
areIMDataProvider.java:22)
        at org.apache.cxf.rs.security.oauth2.services.AbstractAccessTokenValida
or.getAccessTokenValidation(AbstractAccessTokenValidator.java:138)
        at org.apache.cxf.rs.security.oauth2.filters.OAuthRequestFilter.validat
Request(OAuthRequestFilter.java:106)
        at org.apache.cxf.rs.security.oauth2.filters.OAuthRequestFilter.filter(
AuthRequestFilter.java:87)
        at org.apache.cxf.jaxrs.utils.JAXRSUtils.runContainerRequestFilters(JAX
SUtils.java:1688)
        at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(J
XRSInInterceptor.java:109)
        at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JA
RSInInterceptor.java:78)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercep
orChain.java:308)
        at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInit
ationObserver.java:121)
        at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(Abstrac
HTTPDestination.java:267)
        at org.apache.cxf.transport.servlet.ServletController.invokeDestination
ServletController.java:234)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletCon
roller.java:208)
        at org.apache.cxf.transport.servlet.ServletController.invoke(ServletCon
roller.java:160)
        at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSp
ingServlet.java:216)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(A
stractHTTPServlet.java:301)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractH
TPServlet.java:225)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
        at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(Abstrac
HTTPServlet.java:276)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(App
icationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Application
ilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:5
)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(App
icationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(Application
ilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapper
alve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContext
alve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authentic
torBase.java:504)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.
ava:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.
ava:81)
        at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAcc
ssLogValve.java:650)

1 Ответ

0 голосов
/ 19 января 2019

Сбой происходит в JDBCStoreManager в методе setInverseRelation в следующем коде:

               ClassMapping cm =
                    (ClassMapping) _conf.getMetaDataRepositoryInstance().getCachedMetaData(pc.getClass());
                FieldMapping[] fmd = cm.getFieldMappings();

cm равно нулю, поэтому cm.getFieldMappings () вылетает. ClassMapping отсутствует в кэше метаданных. По какой-то причине кеш имеет только оригинальные классы, но pc.getClass возвращает класс ENHANCED. Очень похоже на ошибку в Open JPA. Кто-нибудь может это подтвердить?

...