Also versuche ich Jetty in meine Web-Anwendung zu integrieren, so dass jemand, wenn ich es als ein Glas verpacken, einfach die JAR-Datei ausführen kann, ohne sich um die Konfiguration eines Servers kümmern zu müssen. Ich habe jedoch einige Probleme beim Einrichten meiner Hauptklasse, damit der Jetty auf meine Ressourcenklassen zugreifen kann. Ich habe Tutorials angeschaut, aber sie haben mir nicht genau das gegeben, wonach ich suche. Das habe ich bisher.Wie Jetty und Jersey in meine Java-Anwendung einbetten
package pojo;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.DefaultServlet;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class Main {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
context.setContextPath("/");
ServletHolder h = new ServletHolder(new DefaultServlet());
h.setInitParameter("javax.ws.rs.Application","resources.DBCollection");
context.addServlet(h, "/*");
server.setHandler(context);
server.start();
server.join();
}
}
Und ich versuche es zu dieser Klasse zuzuordnen:
package resources;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;
import pojo.Party;
@Path("/parties")
public class DBCollection {
@Context
UriInfo url;
@Context
Request request;
String name;
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Party> getAllParties() throws Exception
{
List<Party> list = new ArrayList<Party>();
list.addAll(DBConnection.getPartyCollection().values());
return list;
}
@GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public String getPartyCount() throws Exception
{
return String.valueOf(DBConnection.getPartyCollection().size());
}
@Path("{party}")
public DBResource getParty(@PathParam("party")String party)
{
return new DBResource(url,request,party);
}
}
Hier ist meine POM-Datei:
<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>PartyAPI</groupId>
<artifactId>PartyAPIMaven</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.17.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.0.0.RC0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.0.0.RC0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlets</artifactId>
<version>9.0.0.RC0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.6.0-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>oss.sonatype.org</id>
<name>OSS Sonatype Staging</name>
<url>https://oss.sonatype.org/content/groups/staging</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.6</version>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>com.resteasy.Star.Main</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
wenn ich geben Sie localhost: 8111/WebAPI/Parteien Ich erhalte einen Fehler 500 (Anmerkung: ich den Port 8111 geändert, weil ich eine NetBind Exception bekommen), wie kann ich das beheben, dass (kein Stapel Strace gedruckt wird). Außerdem konnte ich Javadocs nicht finden, würde es Ihnen etwas ausmachen zu erklären was setInitParameter macht und was Sie mit "statischem" Inhalt vs Jersey Inhalt meinen. – sreya
Statischer Inhalt ist Inhalt, der nicht dynamisch ist und statisch bleibt, egal wer danach fragt (wie Bilder, Javascript, CSS, etc). Jersey-Ressourcen fallen unter die Dynamic-Content-Szenarien. Dinge, die von Ihrem Code generiert werden, um zurück an den Endbenutzer (Browser) gesendet zu werden. Wie für den Fehler 500, aktualisieren Sie Ihre Frage mit dem StackTrace produziert. Ich weiß auch nicht, dass ich Jersey-Besonderheiten nicht kommentieren kann (da ich sie wirklich nicht kenne. Ich bin ein Jetty-Entwickler) –
Ich bekomme keine Stack-Trace :(, ich gehe davon aus, dass ich das Programm einfach vom Main ausführen kann Klasse oder muss ich aus dem Projektverzeichnis ausführen?Macht das Sinn – sreya