老实说,我不知道是什么原因导致了这个错误,我所知道的是,当我试图在servlet中示例化一个DAO对象,并使用请求调度程序发送对象时,就会发生这种情况。
SRVE0777E: Exception thrown by application class 'com.projecteden.mainmenu.SelectSurvivorData.doGet:27'
java.lang.ClassCastException: class com.projecteden.livingobjects.entities.SurvivorPO cannot be cast to class com.projecteden.livingobjects.entities.SurvivorPO (com.projecteden.livingobjects.entities.SurvivorPO is in unnamed module of loader com.ibm.ws.classloading.internal.AppClassLoader @3a649edc; com.projecteden.livingobjects.entities.SurvivorPO is in unnamed module of loader com.ibm.ws.classloading.internal.AppClassLoader @3c834c19)
at com.projecteden.mainmenu.SelectSurvivorData.doGet(SelectSurvivorData.java:27)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:686)
at [internal classes]
package com.projecteden.mainmenu;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.projecteden.livingobjects.DAO.SurvivorDAO;
@WebServlet("/GetSurvivorData")
public class SelectSurvivorData extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
SurvivorDAO getList = new SurvivorDAO();
response.setContentType("text/html;charset=UTF-8");
request.setAttribute("test", getList.getAllSurvivors().get(0).getName());
request.getRequestDispatcher("WebPages/MainMenu/SelectPlayer.jsp").forward(request, response);
}
}
package com.projecteden.livingobjects.DAO;
import java.util.List;
import com.projecteden.livingobjects.entities.SurvivorPO;
public class SurvivorDAO extends LivingObjectsEM
{
public List<SurvivorPO> findWithId(String id)
{
return em.createQuery(
"SELECT c FROM SurvivorPO c WHERE c.id LIKE :id")
.setParameter("id", id)
.setMaxResults(1)
.getResultList();
}
public List<SurvivorPO> getAllSurvivors()
{
return em.createQuery(
"SELECT c FROM SurvivorPO c")
.setMaxResults(10)
.getResultList();
}
}
package com.projecteden.livingobjects.entities;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "survivor_stats")
public class SurvivorPO
{
@Id
@Column(name ="id")
@GeneratedValue(strategy=GenerationType.AUTO, generator="SurvivorIdGenerator")
@SequenceGenerator(name="SurvivorIdGenerator", sequenceName="SurvivorSequencesId")
private int id;
@Column(name ="name")
private String name;
@Embedded
private StatsPO stats;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public StatsPO getStats() {
return stats;
}
public void setStats(StatsPO stats) {
this.stats = stats;
}
@Override
public String toString() {
return "HeroPO [id=" + id + ", name=" + name + ", stats=" + stats + "]";
}
}
至于我正在使用的其他东西:这是一个包含JPA2.2、JSP、 Bootstrap 5、MySQL、动态Web模块4.0、Java16、JS 1.0和EclpipseLink的Maeven项目
如果你需要进一步的解释,尽管问。
1条答案
按热度按时间6yt4nkrj1#
对于任何遇到类似问题的人来说,我已经设法解决了这个问题。根据我的理解(这并不完美)Liberty Web Sphere在某种程度上有自己的类加载器,这似乎与我的DAO和PO冲突,因为它们可能使用了不同的类加载器。WebSphere/server.xml
打开此文件后,应该会出现一个GUI,其中包含几个不同的窗口,显示"服务器配置“,列表中应该有一个名为“Web应用程序:“项目名称”"打开后,内部应该有一个名为Classloader的设置,我将其更改为$(server.config.dir),通过该更改,我的项目似乎再次正常运行。
请记住,我专门使用Eclipse、Liberty Web Sphere、Eclipse Link和Maevan / Dynamic Web应用程序。我也不知道这是否是最佳实践,但对于一个简单的项目,你不打算张贴在任何地方,我认为这个解决方案将是好的。这也是一个非常具体的问题,一个非常具体的解决方案,所以这可能或可能不工作在类似的情况下类似的错误。
如果你碰巧遇到这个错误,但是它引用了两个分离的类,那么根据我的发现,很可能你调用了Obj 1 obj = new Obj 2();这个错误实际上与Obj 2和Obj 1不兼容有关。但是如果你有Obj 1 obj = new Obj 1;如果出现这个错误,那么从我所看到的来看,它很可能是一个类加载器错误。
祝其他有这个错误的人好运,因为上帝知道它让我头疼了6个小时,只是为了解决这个问题。