Hallo,
ich habe vor einen Restful Service zu Programmieren, jedoch kann ich den Service per Link nicht ansprechen. Ich benutze SmartGWT und den damit ausgelieferten Jetty. Ich versuche den Service über "http://localhost:8888/CustomerService/rest/customers/1" aufzurufen und erhalte einen 404er als Ergbnis. Was mache ich falsch?
Wenn ich Jetty starte bekomme ich in der Konsole die folgende Meldung:
Der Aufruf GWT.getModuleBaseURL() ergibt folgendes Erbenis:
http://127.0.0.1:8888/uds.web.admin.webAdminUds/
Meine web.xml sieht wie folgt aus:
[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">
<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>CustomerService</persistence-unit-name>
</persistence-context-ref>
</web-app>
[/XML]
Mene Service Klasse wie folgt:
Die Customer Klasse:
Die Address Klasse:
Und die PhoneNumber Klasse:
ich habe vor einen Restful Service zu Programmieren, jedoch kann ich den Service per Link nicht ansprechen. Ich benutze SmartGWT und den damit ausgelieferten Jetty. Ich versuche den Service über "http://localhost:8888/CustomerService/rest/customers/1" aufzurufen und erhalte einen 404er als Ergbnis. Was mache ich falsch?
Wenn ich Jetty starte bekomme ich in der Konsole die folgende Meldung:
Java:
Aug 10, 2011 4:38:21 PM 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 10, 2011 4:38:25 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
Information: Root resource classes found:
class uds.web.admin.data.CustomerService
Aug 10, 2011 4:38:25 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
Information: Provider classes found:
class org.codehaus.jackson.jaxrs.JacksonJsonProvider
class org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
class org.codehaus.jackson.jaxrs.JsonParseExceptionMapper
class org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper
Aug 10, 2011 4:38:25 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
Information: Initiating Jersey application, version 'Jersey: 1.8 06/24/2011 12:17 PM'
Der Aufruf GWT.getModuleBaseURL() ergibt folgendes Erbenis:
http://127.0.0.1:8888/uds.web.admin.webAdminUds/
Meine web.xml sieht wie folgt aus:
[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">
<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>CustomerService</persistence-unit-name>
</persistence-context-ref>
</web-app>
[/XML]
Mene Service Klasse wie folgt:
Java:
package uds.web.admin.data;
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;
@Stateless
@LocalBean
@Path("/customers")
public class CustomerService {
@PersistenceContext(unitName="CustomerService",
type=PersistenceContextType.TRANSACTION)
EntityManager entityManager;
@POST
@Consumes(MediaType.APPLICATION_XML)
public void create(Customer customer) {
entityManager.persist(customer);
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("{id}")
public Customer read(@PathParam("id") long id) {
return entityManager.find(Customer.class, id);
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public void update(Customer customer) {
entityManager.merge(customer);
}
@DELETE
@Path("{id}")
public void delete(@PathParam("id") long id) {
Customer customer = read(id);
if(null != customer) {
entityManager.remove(customer);
}
}
@GET
@Produces(MediaType.APPLICATION_XML)
@Path("findCustomersByCity/{city}")
public List <Customer> findCustomersByCity(@PathParam("city") String city) {
Query query = entityManager.createNamedQuery("findCustomersByCity");
query.setParameter("city", city);
return query.getResultList();
}
}
Die Customer Klasse:
Java:
package uds.web.admin.data;
import java.io.Serializable;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.Set;
/**
* Entity implementation class for Entity: Customer
*
*/
@Entity
@XmlRootElement
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
@Column(name="FIRST_NAME")
private String firstName;
@Column(name="LAST_NAME")
private String lastName;
@OneToOne(mappedBy="customer", cascade={CascadeType.ALL})
private Address address;
@OneToMany(mappedBy="customer", cascade={CascadeType.ALL})
private Set<PhoneNumber> phoneNumbers;
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getFirstName() {
return this.firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return this.lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Address getAddress() {
return this.address;
}
public void setAddress(Address address) {
this.address = address;
}
public Set<PhoneNumber> getPhoneNumbers() {
return this.phoneNumbers;
}
public void setPhoneNumbers(Set<PhoneNumber> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
}
}
Die Address Klasse:
Java:
package uds.web.admin.data;
import java.io.Serializable;
import javax.persistence.*;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;
/**
* Entity implementation class for Entity: Address
*
*/
@Entity
public class Address implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String city;
private String street;
@OneToOne
@PrimaryKeyJoinColumn
private Customer customer;
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getCity() {
return this.city;
}
public void setCity(String city) {
this.city = city;
}
public String getStreet() {
return this.street;
}
public void setStreet(String street) {
this.street = street;
}
@XmlInverseReference(mappedBy="address")
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
Und die PhoneNumber Klasse:
Java:
package uds.web.admin.data;
import java.io.Serializable;
import javax.persistence.*;
import org.eclipse.persistence.oxm.annotations.XmlInverseReference;
/**
* Entity implementation class for Entity: PhoneNumber
*
*/
@Entity
@Table(name="PHONE_NUMBER")
public class PhoneNumber implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long id;
private String num;
private String type;
@ManyToOne
@JoinColumn(name="ID_CUSTOMER")
private Customer customer;
public long getId() {
return this.id;
}
public void setId(long id) {
this.id = id;
}
public String getNum() {
return this.num;
}
public void setNum(String num) {
this.num = num;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
@XmlInverseReference(mappedBy="phoneNumbers")
public Customer getCustomer() {
return this.customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
Zuletzt bearbeitet von einem Moderator: