所以我试图编写一个java Rest API。当其他Rest API工作时,这个给出了潜在的错误。我正在使用tomcat服务器。问题是我不知道我做错了什么。它给出了java.lang.verifyError。
提前致谢!
这是DAO功能:
public Collection<CFUser> getUsers() {
Query q;
q = em.createQuery("SELECT u FROM CFUser u");
return q.getResultList();
}
这是REST调用:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Collection<CFUser> getUsers() {
return DAO.getInstance().getUsers();
}
这是收到的错误:
Type Exception Report
Message org.glassfish.jersey.server.ContainerException:
java.lang.VerifyError: (class: org/eclipse/persistence/jaxb/generated0,
method: setValue signature: (Ljava/lang/Object;)V) Incompatible argument to
function
Description The server encountered an unexpected condition that prevented it
from fulfilling the request.
Exception
javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.VerifyError: (class: org/eclipse/persistence/jaxb/generated0, method: setValue signature: (Ljava/lang/Object;)V) Incompatible argument to function
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:392)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因
org.glassfish.jersey.server.ContainerException: java.lang.VerifyError: (class: org/eclipse/persistence/jaxb/generated0, method: setValue signature: (Ljava/lang/Object;)V) Incompatible argument to function
org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:249)
org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:231)
org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:436)
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:265)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:267)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:318)
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236)
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1010)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
根本原因
java.lang.VerifyError: (class: org/eclipse/persistence/jaxb/generated0, method: setValue signature: (Ljava/lang/Object;)V) Incompatible argument to function
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:348)
org.eclipse.persistence.internal.security.PrivilegedAccessHelper.getClassForName(PrivilegedAccessHelper.java:124)
org.eclipse.persistence.mappings.AggregateMapping.convertClassNamesToClasses(AggregateMapping.java:374)
org.eclipse.persistence.mappings.foundation.AbstractCompositeCollectionMapping.convertClassNamesToClasses(AbstractCompositeCollectionMapping.java:289)
org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping.convertClassNamesToClasses(XMLCompositeCollectionMapping.java:304)
org.eclipse.persistence.descriptors.ClassDescriptor.convertClassNamesToClasses(ClassDescriptor.java:1656)
org.eclipse.persistence.oxm.XMLDescriptor.convertClassNamesToClasses(XMLDescriptor.java:1104)
org.eclipse.persistence.sessions.Project.convertClassNamesToClasses(Project.java:514)
org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:1105)
org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:1089)
org.eclipse.persistence.jaxb.JAXBContext.<init>(JAXBContext.java:189)
org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:165)
org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:152)
org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:112)
org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:102)
org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.getJAXBContext(MOXyJsonProvider.java:303)
org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.getJAXBContext(MOXyJsonProvider.java:322)
org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.isWriteable(MOXyJsonProvider.java:534)
org.glassfish.jersey.moxy.json.internal.ConfigurableMoxyJsonProvider.isWriteable(ConfigurableMoxyJsonProvider.java:190)
org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.isWriteable(MOXyJsonProvider.java:532)
org.glassfish.jersey.moxy.json.internal.ConfigurableMoxyJsonProvider.isWriteable(ConfigurableMoxyJsonProvider.java:190)
org.glassfish.jersey.message.internal.MessageBodyFactory$MbwModel.isWriteable(MessageBodyFactory.java:274)
org.glassfish.jersey.message.internal.MessageBodyFactory$MbwModel.isWriteable(MessageBodyFactory.java:267)
org.glassfish.jersey.message.internal.MessageBodyFactory._getMessageBodyWriter(MessageBodyFactory.java:858)
org.glassfish.jersey.message.internal.MessageBodyFactory.getMessageBodyWriter(MessageBodyFactory.java:822)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:223)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:149)
org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:103)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:149)
org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:88)
org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:149)
org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1139)
org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:574)
org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:381)
org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:371)
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:262)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
org.glassfish.jersey.internal.Errors.process(Errors.java:315)
org.glassfish.jersey.internal.Errors.process(Errors.java:297)
org.glassfish.jersey.internal.Errors.process(Errors.java:267)
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:318)
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:236)
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1010)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:373)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
CFUser:
package Classes;
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import Playfield.Player;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author gebruiker
*/
@Entity
@Table(name = "CFUser")
@XmlRootElement
public class CFUser implements Serializable, IDataBaseObject {
//<editor-fold defaultstate="collapsed" desc="variables">
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Basic//(optional = false)
@Column(name = "User_id")
private int UserId;
@Column(name = "User_active")
private Boolean UserActive;
@Column(name = "User_classname")
private String UserClassname;
@Basic//(optional = false)
@Column(name = "User_firstname")
private String UserFirstname;
@Column(name = "User_clan")
private Clan userClan;
@Basic(optional = false)
@Column(name = "User_lastname")
private String UserLastname;
@Column(name = "User_level")
private BigInteger UserLevel;
@Column(name = "User_password", nullable = false)
private String UserPassword;
@Basic//(optional = false)
@Column(name = "User_role")
private String UserRole;
@Column(name = "User_Username", nullable = false)
private String Username;
@Column(name = "User_location")
private BigInteger UserLocation;
@Basic
HashMap<Long, int[]> History;// hashmap which maps lesson id to an array of int[0] id exersize, int[1] phase
@ManyToMany(mappedBy = "members")
private List<ClassGroup> classGroups;
@OneToOne
private ClassGroup currentGroup;
public ClassGroup getCurrentGroup() {
return currentGroup;
}
public void setCurrentGroup(ClassGroup currentGroup) {
this.currentGroup = currentGroup;
}
//</editor-fold>
//<editor-fold defaultstate="collapsed" desc="functions">
@Override
public int getId() {
return UserId;
}
@Override
public void setId(int UserId) {
this.UserId = UserId;
}
public Boolean getUserActive() {
return UserActive;
}
public void setUserActive(Boolean UserActive) {
this.UserActive = UserActive;
}
public String getUserClassname() {
return UserClassname;
}
public void setUserClassname(String UserClassname) {
this.UserClassname = UserClassname;
}
public String getUserFirstname() {
return UserFirstname;
}
public void setUserFirstname(String UserFirstname) {
this.UserFirstname = UserFirstname;
}
public Clan getUserClan() {
return userClan;
}
public void setUserClan(Clan userClan) {
this.userClan = userClan;
}
public String getUserLastname() {
return UserLastname;
}
public void setUserLastname(String UserLastname) {
this.UserLastname = UserLastname;
}
public BigInteger getUserLevel() {
return UserLevel;
}
public void setUserLevel(BigInteger UserLevel) {
this.UserLevel = UserLevel;
}
public String getUserPassword() {
return UserPassword;
}
public void setUserPassword(String UserPassword) {
this.UserPassword = UserPassword;
}
public String getUserRole() {
return UserRole;
}
public void setUserRole(String UserRole) {
this.UserRole = UserRole;
}
public String getUsername() {
return Username;
}
public void setUsername(String Username) {
this.Username = Username;
}
public BigInteger getUserLocation() {
return UserLocation;
}
public void setUserLocation(BigInteger UserLocation) {
this.UserLocation = UserLocation;
}
@Override
public int hashCode() {
int hash = 7;
hash = 71 * hash + this.UserId;
return hash;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final CFUser other = (CFUser) obj;
if (this.UserId != other.UserId) {
return false;
}
return true;
}
@Override
public String toString() {
return "Generated_classes.Users[ UserId=" + UserId + " ]";
}
public HashMap<Long, int[]> getHistory() {
return History;
}
public void setHistory(HashMap<Long, int[]> History) {
this.History = History;
}
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private Player player;
public Player getPlayer() {
return player;
}
public void setPlayer(Player player) {
this.player = player;
if (player.getUser() != this) {
player.setUser(this);
}
}
public List<ClassGroup> getClassGroups() {
return classGroups;
}
public void setClassGroups(List<ClassGroup> classGroups) {
this.classGroups = classGroups;
}
//</editor-fold>
}
答案 0 :(得分:1)
这主要是因为库更改,也可能是因为您针对不同的库进行编译而且可能在运行时使用另一个库。