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(ネイティブメソッド) sun.reflect.NativeMethodAccessorImpl.invoke (不明なソース) で sun.reflect.DelegatingMethodAccessorImpl.invoke (不明なソース) で java.lang.reflect.Method.invoke (不明なソース) で org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:341) で ...