IE:com.adms.fcl3.entity.User无法强制转换为com.adms.fcl3.entity.User
自从将项目从EJB/ManagedBeans迁移到CDI以来,我开始遇到这种错误,所以我的猜测是AoP/Injection混乱了类.
但我没有证据证明这一点.也没有解决方案.
负责的代码:
public User getByLoginPasswdValid(String login, String passwd) {
TypedQuery<User> q = em.createNamedQuery("User.findByLoginPasswdValid", User.class);
q.setParameter("login", login);
q.setParameter("passwd", passwd);
List<User> results = q.getResultList();
if (results.isEmpty()) {
return null;
}
return results.get(0);
}
Run Code Online (Sandbox Code Playgroud)
失败了return results.get(0);.Debuger向我确认该列表有效,具有User对象,具有适当的值等...
我对 Java EE 还很陌生,当我查看编译后的代码时(我找不到 javax:javaee-api-6.0 的源代码),我注意到了这个类。
package javax.servlet;
import java.util.EventObject;
public class ServletContextEvent extends EventObject
{
public ServletContextEvent(ServletContext paramServletContext);
public ServletContext getServletContext();
}
Run Code Online (Sandbox Code Playgroud)
但是,javax:javaee-api-7.0 中的同一个类就是这个。
package javax.servlet;
import java.util.EventObject;
public class ServletContextEvent extends EventObject
{
private static final long serialVersionUID = -7501701636134222423L;
public ServletContextEvent(ServletContext source)
{
super(source);
}
public ServletContext getServletContext()
{
return (ServletContext)super.getSource();
}
}
Run Code Online (Sandbox Code Playgroud)
同一包中的 ServletException 也会发生这种情况(可能还有更多,因为我没有逐一介绍)。
假设 Java Decompiler 给了我源代码的样子,从纯 Java 语法的角度来看,我无法理解为什么 6.0 类不是抽象的(或者不是接口)。
问题 1. 为什么 6.0 中的类不是抽象类或接口?
问题 2. 为什么在 7.0 中更改了实现?大家有没有意识到用javaee-api编译代码时6.0版本会出问题?
我问的原因是因为在 Intellij IDEA …
我试图在我的JSP页面中使用以下标记库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Run Code Online (Sandbox Code Playgroud)
但是Eclipse向我显示了此错误:
Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
Run Code Online (Sandbox Code Playgroud)
我已经使用此依赖项在我的类路径中有了JSTL:
<dependency>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我使用WildFly 9。
我对这两个其他taglib有相同的问题:
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
Run Code Online (Sandbox Code Playgroud)
备注:以下链接给出了404 HTTP错误:http : //central.maven.org/maven2/javax/servlet/jsp/jstl/jstl/1.2/jstl-1.2.jar
谢谢。
我正在编写一个 JavaEE 应用程序,但遇到以下问题:如果我在其中一个类 (TraceMessage) 中初始化任何新变量并启动应用程序,则会收到以下错误:
java.io.InvalidClassException: com.nsn.extmon.util.TraceMessage; local class incompatible: stream classdesc serialVersionUID = -5424907704652912574, local class serialVersionUID = -5748024201087063218
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:612)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1630)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1779)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at java.util.ArrayList.readObject(ArrayList.java:771)
at sun.reflect.GeneratedMethodAccessor355.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1058)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1907)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1806)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at com.nsn.extmon.databaseHandling.ResultDataHandler.getTraceMessages(ResultDataHandler.java:137)
at com.nsn.extmon.util.TraceResultBean.traceRead(TraceResultBean.java:50)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at org.apache.myfaces.view.facelets.el.ContextAwareTagMethodExpression.invoke(ContextAwareTagMethodExpression.java:96)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at org.richfaces.component.RowKeyContextEventWrapper.broadcast(RowKeyContextEventWrapper.java:104)
at org.richfaces.component.UIDataAdaptor.broadcast(UIDataAdaptor.java:452)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:1013) …Run Code Online (Sandbox Code Playgroud) 我有一个被调用的类MediaList,我想用JSON-String和向后解析这个类的值.
public class KeywordList {
private List<Keyword> keywords = new ArrayList<>();
}
Run Code Online (Sandbox Code Playgroud)
这里是JSON-String:
{
"keywords": [
{
"id": 12,
"name": "Thesis",
"mediaCount": 31
}, ...
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用谷歌lib gson,但我只是想使用标准的java版本与jax-rs,因为我不希望第三方工具在我的项目中.
我正在开发一个 JEE 应用程序,我想在应用程序启动时进行一些迁移。实际上,我正在使用payara-microDocker 作为服务器。由于未知原因,该代码从未被执行。
这是我的代码:
@Singleton
@Startup
public class FlywayMigration {
@PostConstruct
public void startMigration(){
System.out.println("Starting flyway migration");
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的 pom 中添加了 javaee-api 作为依赖项:
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是我的 Dockerfile 的内容:
FROM payara/micro
COPY ./target/mywebapp.war $DEPLOY_DIR
Run Code Online (Sandbox Code Playgroud)
构建并运行 docker 镜像后,应用程序的日志显示该应用程序启动良好:
Payara Micro URLs
http://5b258e6a441a:8080/mywebapp
'mywebapp' REST Endpoints
GET /mywebapp/api/hello
GET /mywebapp/api/myresource
Run Code Online (Sandbox Code Playgroud)
谁能帮我找到解决方案?
在这个最简单的例子中,我做错了什么?(Glassfish 4.0-b87 + Eclipse Kepler m6)
Myself.java
package com.example.cancelbug;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.inject.Inject;
@Singleton
@Startup
public class Myself {
@Inject Other other;
private Future < Integer > future;
@PostConstruct
public void post_construct () {
System.out.println("post_construct started");
future = other.ton_of_work();
System.out.println("post_construct ended");
}
@PreDestroy
public void pre_destroy () {
System.out.println("pre_destroy started");
System.out.println("cancel result: " + Boolean.toString(future.cancel(true)));
try {
System.out.println("future result: " + future.get().toString());
} catch (InterruptedException | ExecutionException e) {
System.out.println("future …Run Code Online (Sandbox Code Playgroud) 这是我的班级
package main;
import java.util.Hashtable;
public class Information {
private final static String name = "Info Name";
private final static String direccion = "direction street number";
Hashtable<String,String> coordenates = new Hashtable<String,String>();
coordenates.put("lat", "36.564565465");
coordenates.put("lng", "64.584616511");
}
Run Code Online (Sandbox Code Playgroud)
我从oracle文档中学到了很多东西
This example creates a hashtable of numbers. It uses the names of the numbers as keys:
Hashtable<String, Integer> numbers
= new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
To retrieve a number, use the following code:
Integer n = numbers.get("two"); …Run Code Online (Sandbox Code Playgroud) 我有一个类的哈希码实现,哈希码实现与eclipse生成的一致,也是这里讨论的最常被接受的实践
这是我的哈希码实现(此方法中使用的所有ID都构成了对象的键):
public int hashCode() {
final int prime = 31;
int hashCode = 1;
if(uId != null){
hashCode = prime * hashCode + uId.hashCode();
}
if(rId != null){
hashCode = prime * hashCode + rId.hashCode();
}
if(bId != null){
hashCode = prime * hashCode + bId.hashCode();
}
if(reId != null){
hashCode = prime * hashCode + reId.hashCode();
}
if(cId != null){
hashCode = prime * hashCode + cId.hashCode();
}
return hashCode;
}
Run Code Online (Sandbox Code Playgroud)
我遇到了一个使用非常大的数据集进行测试的场景,而且我的集合没有这个类的预期数量的对象.仔细观察下面两个数据集导致相同的哈希码:50268236873,因此一条记录被添加到集合中的最后一个替换,因为它们的哈希码是相同的.
Existing record :
Record@2c0781cd[uId=54046,rId=10967,bId=177,reId=1728,cId=50194] …Run Code Online (Sandbox Code Playgroud) 我正在使用Java EE - JAX-RS 2.0技术构建Mobile后端API.
由于大多数移动客户端消耗都是异步http调用
所以我的问题是: 我应该为所有JAX-RS资源使用异步功能吗?原因如果不是?
以下是模板Mobile Async API
@Path("/async_api")
public class AsyncResource {
@GET
@Path("/loadUsers")
@Produces(MediaType.APPLICATION_JSON)
public void loadUsers(@Suspended AsyncResponse asyncResponse) {
//TODO: ManagedExecutorService
new Thread(new Runnable() {
@Override
public void run() {
List users = loadBigUsers();
asyncResponse.resume(users);
}
private List loadBigUsers() {
return null; // Return big list
}
}).start();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!