【发布时间】:2013-01-29 23:14:30
【问题描述】:
如果我将它部署在 JAR 之外,我有一个可以完美运行的项目。但是,当它部署为 JAR 时,它无法获取会话。以下是工件:
Main.java:
public class Main {
public static void main(String[] args) throws Exception{
JndiContext registry=new JndiContext();
CamelContext context=new DefaultCamelContext(registry);
context.addRoutes(new RouteBuilder() {
@Override
public void configure() {
try{
from("jetty:http://0.0.0.0:7700?matchOnUriPrefix=true&sessionSupport=true").bean(HtmlProcessor.class);
}
catch(Exception e){
e.printStackTrace();
}
}
});
context.start();
Thread.sleep(1000000);
context.stop();
}
}
HtmlProcessor.java:
public class HtmlProcessor {
public String login(Exchange exchange){
HttpSession session=exchange.getIn(HttpServletRequest.class).getSession();
Integer count=(Integer)session.getAttribute("count");
if (count==null) count=0;
count++;
session.setAttribute("count", count);
StringBuilder sb=new StringBuilder();
sb.append("<html><body><form>");
sb.append(count);
sb.append("<BR><input type=text name=username></form></body></html>");
return sb.toString();
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>user1</groupId>
<artifactId>jettysession</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<camel.version>2.10.3</camel.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-core</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jetty</artifactId>
<version>${camel.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>1.13</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>assemble</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
<configuration>
<archive>
<manifestEntries>
<Bundle-ClassPath>.</Bundle-ClassPath>
<Main-Class>user1.Main</Main-Class>
</manifestEntries>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
</project>
这是异常中有意义的部分:
java.lang.NullPointerException 在 user1.HtmlProcessor.login(HtmlProcessor.java:10) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:341) ...【问题讨论】:
-
HtmlProcessor.java 的第 10 行代码是做什么的?
-
这是第 10 行“HttpSession session=exchange.getIn(HttpServletRequest.class).getSession();”。基本上,getIn() 返回 null。我很高兴看到你的名字!我知道您对骆驼有深入的了解,可以提供帮助。
-
您能否也向其他用户更详细地解释一下该 maven 程序集为您的项目做了什么。是否将所有 JAR 放入一个 uber JAR,以及如何运行该 JAR 等。如果是这样,请特别注意某些文件可能会覆盖其他文件,从而导致 uber JAR 不完整。
-
stackoverflow.com/questions/574594/… 解释了 jar-with-dependencies。是的..它是一个超级 JAR。关于在哪里查找覆盖文件的任何建议?
-
另外,要运行 jar,只需键入
java -jar jettysession-0.0.1-SNAPSHOT-jar-with-dependencies.jar。然后,打开浏览器访问http://localhost:7700/?username=a。每次加载页面时,您应该会看到一个数字增加 1。
标签: java session jetty apache-camel