LifeRay RelayShip создает множество исключений для класса
Я создаю один пример, который демонстрирует отношения в LifeRay. Я беру пример сущности Book и Author для отношения многих ко многим. Я создаю этот пример ниже в блоге.
http://www.liferaysavvy.com/2014/01/liferay-service-builder-many-to-many_12.html
Но я столкнулся с проблемой исключения приведения классов. В блоге также было написано, что он вызывает исключения приведения классов.
11:05:00,422 ERROR [RuntimePageImpl-2][render_portlet_jsp:132] null
java.lang.ClassCastException: com.ds.portlet.library.model.impl.AuthorImpl cannot be cast to com.ds.portlet.library.model.Author
at com.ds.portlet.library.service.persistence.AuthorPersistenceImpl.fetchByPrimaryKey(AuthorPersistenceImpl.java:691)
at com.ds.portlet.library.service.persistence.AuthorPersistenceImpl.findByPrimaryKey(AuthorPersistenceImpl.java:653)
at com.ds.portlet.library.service.persistence.AuthorPersistenceImpl.findByPrimaryKey(AuthorPersistenceImpl.java:59)
at com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice.invoke(ShardPersistenceAdvice.java:54)
at com.liferay.portal.service.persistence.impl.TableMapperImpl.getBaseModels(TableMapperImpl.java:400)
at com.liferay.portal.service.persistence.impl.TableMapperImpl.getRightBaseModels(TableMapperImpl.java:265)
at com.ds.portlet.library.service.persistence.BookPersistenceImpl.getAuthors(BookPersistenceImpl.java:1183)
at com.ds.portlet.library.service.persistence.BookPersistenceImpl.getAuthors(BookPersistenceImpl.java:1162)
at com.ds.portlet.library.service.persistence.BookPersistenceImpl.getAuthors(BookPersistenceImpl.java:1143)
at com.liferay.portal.dao.shard.advice.ShardPersistenceAdvice.invoke(ShardPersistenceAdvice.java:54)
at com.ds.portlet.library.service.base.AuthorLocalServiceBaseImpl.getBookAuthors(AuthorLocalServiceBaseImpl.java:374)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:115)
at com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:62)
at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:51)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:111)
at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:175)
at com.ds.portlet.library.service.AuthorLocalServiceUtil.getBookAuthors(AuthorLocalServiceUtil.java:321)
at org.apache.jsp.view_jsp._jspService(view_jsp.java:420)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
Я хотел бы знать причину этого.
1 ответ
Я ожидаю, что участвующие классы будут дважды на пути к классам - подобно тому, что ответил Дэвид Небингер в этом посте. Причины того, что он упоминает: вы могли бы иметь xxx-service.jar
на глобальном classpath, а также в вашем WEB-INF/lib
или вы можете иметь его на WEB-INF/lib
и добавил WEB-INF/service
как исходную папку, так что те же классы находятся в WEB-INF/classes
снова.
Всякий раз, когда я видел проблемы загрузчика классов, что класс не может быть преобразован по типу к его законному суперклассу или интерфейсу, это была проблема дублирующих классов на пути к классам. В древнем прошлом это также включало в себя нелепое сообщение о том, что java-объект не является потомком java.lang.Object - явно неверный, но имел в виду другой java.lang.Object, который находился на пути к классам.
Хитрость в том, что им нужен какой-то определенный порядок создания экземпляров, который не всегда легко воспроизвести. Если вы обнаружили ситуацию, в которой вы всегда будете получать сообщение, оно, вероятно, всегда будет терпеть неудачу одинаково. Отношения "многие ко многим" в сервис-билдере Liferay могут быть способом вызвать эти проблемы.