Restful => HTTP ERROR: 500

andyx1975

Aktives Mitglied
Hallo,

ich bin ziemlich neu im Bereich Webprogrammierung und ich habe ein Problem mit Restful bei dem ich nicht mehr weiter weiß und keine Lösung finde. Ich bekomme den folgenden Fehler der durch die rot markierte Zeile verursacht wird:

@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public DEmail read(@PathParam("id") long id) {
return em.find(DEmail.class, id);
}

[XML]
Aug 16, 2011 11:07:17 AM com.sun.jersey.api.core.WebAppResourceConfig init
Information: Scanning for root resource and provider classes in the Web app resource paths:
/WEB-INF/lib
/WEB-INF/classes
Aug 16, 2011 11:07:18 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
Information: Root resource classes found:
class uds.web.admin.server.EmailService
Aug 16, 2011 11:07:18 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
Information: Provider classes found:
class org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
class org.codehaus.jackson.jaxrs.JacksonJsonProvider
class org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper
class org.codehaus.jackson.jaxrs.JsonParseExceptionMapper
Aug 16, 2011 11:07:18 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
Information: Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'
Aug 16, 2011 11:07:37 AM com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException
Schwerwiegend: The RuntimeException could not be mapped to a response, re-throwing to the HTTP container
java.lang.NullPointerException
at uds.web.admin.server.EmailService.read(EmailService.java:53)
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:601)
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:324)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:513)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)
[/XML]


Die Klasse DEmail sieht wie folgt aus:
Java:
package uds.web.admin.server;

import java.io.Serializable;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.Date;

import javax.persistence.*;
import static javax.persistence.GenerationType.SEQUENCE;
import static javax.persistence.TemporalType.TIMESTAMP;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * Entity implementation class for Entity: DEmail
 *
 */
@Entity
@XmlRootElement
@Table(name = "email_sended")
@NamedQuery(name = "findEmails", query = "SELECT e FROM DEmail e")
public class DEmail implements Serializable {

	
	@Id
	@GeneratedValue( strategy = SEQUENCE )
	@Column(columnDefinition="SERIAL")
    private Integer email_id;
	
	@Column
	private String ToRecipients;
	
	@Column
	private String CcRecipients;
	
	@Column
	private String BccRecipients;
	
	@Column
	private String headline;
	
	@Column(columnDefinition="TEXT")
	private String email_text;
	
	@Column
	private String email_type;
	
	@Column
	private Boolean selfCopy;
	
	@Column
	private String creator;
	
	@Column
	@Temporal( TIMESTAMP )
    private Date creations_date;
	
	private static final long serialVersionUID = 1L;
	
	
	
	
	

	public DEmail() {
		super();
	}   
	public Integer getEmail_id() {
		return this.email_id;
	}

	public void setEmail_id(Integer email_id) {
		this.email_id = email_id;
	}   
	public String getToRecipients() {
		return this.ToRecipients;
	}

	public void setToRecipients(String ToRecipients) {
		this.ToRecipients = ToRecipients;
	}   
	public String getCcRecipients() {
		return this.CcRecipients;
	}

	public void setCcRecipients(String CcRecipients) {
		this.CcRecipients = CcRecipients;
	}   
	public String getBccRecipients() {
		return this.BccRecipients;
	}

	public void setBccRecipients(String BccRecipients) {
		this.BccRecipients = BccRecipients;
	}   
	public String getHeadline() {
		return this.headline;
	}

	public void setHeadline(String headline) {
		this.headline = headline;
	}   
	public String getText() {
		return this.email_text;
	}

	public void setText(String text) {
		this.email_text = text;
	}   
	public String getEmail_type() {
		return this.email_type;
	}

	public void setEmail_type(String email_type) {
		this.email_type = email_type;
	}   
	public Boolean getSelfCopy() {
		return this.selfCopy;
	}

	public void setSelfCopy(Boolean selfCopy) {
		this.selfCopy = selfCopy;
	}   
	public String getCreator() {
		return this.creator;
	}

	public void setCreator(String creator) {
		this.creator = creator;
	}   
	public Date getCreations_date() {
		return this.creations_date;
	}

	public void setCreations_date(Date creations_date) {
		this.creations_date = creations_date;
	}
   
}


Meine Providerklasse sieht wie folgt aus:
Java:
package uds.web.admin.server;

import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.Query;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;


// [url]http://localhost:8888/rest/emails/1[/url]

/**
 * Session Bean implementation class EmailService
 */
@Stateless
@LocalBean
@Path("/emails")
public class EmailService {

    /**
     * Default constructor. 
     */
    public EmailService() {

    }
    
    
    @PersistenceContext(unitName="EmailService", type=PersistenceContextType.TRANSACTION)
    EntityManager em;

    @POST
    @Consumes(MediaType.APPLICATION_XML)
    public void create(DEmail email) {
        em.persist(email);
    }
    
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("{id}")
    public DEmail read(@PathParam("id") long id) {
        return em.find(DEmail.class, id);
    }
    
    @GET
    @Produces(MediaType.APPLICATION_XML)
    @Path("readAll")
    public List<DEmail> readAll(){

        Query  query = em.createNamedQuery("findEmails");
        List<DEmail> email = query.getResultList();

        System.out.println("email : "+email);

        return email;

     }
    
   
    

}


Meine web.xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>GWebAdmin.html</welcome-file>
</welcome-file-list>
<display-name>Emails</display-name>
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<persistence-context-ref>
<persistence-context-ref-name>persistence/em</persistence-context-ref-name>
<persistence-unit-name>EmailService</persistence-unit-name>
</persistence-context-ref>

</web-app>
[/XML]
 

AFlieger

Mitglied
Ich würde den Fehler in der persistence.xml vermuten, sprich, dass dort kein Eintrag mit dem Namen
EmailService existiert bzw. nicht gefunden wird.
 

andyx1975

Aktives Mitglied
ok nach langer Pause habe ich das Thema noch einmal aufgenommen. Der Fehler lag darin, dass ich die JAR Dateien von Eclipse Link in den WEBINF/lib Ordner kopieren musste. Danach wurde der JPA Provider gefunden.
 

Ähnliche Java Themen

Neue Themen


Oben