facebook

REST WebService Sample

  1. MyEclipse Archived
  2.  > 
  3. Web Services
Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #296495 Reply

    This looks like an quick way to set-up a REST Web Service.

    However, I have one question for example this tutorial webservice would require a separate network call to add each customer. Would it be possible to create a web service method using this wizard that would take multiple customers as an XML input element from a POST and still take advantage of JAXB to convert the list of Custoner entities from Java to XML and back.

    Put another way I would need to be able to send the XML output of the call to

    @GET
    public List<Customer> getCustomers() {
    List<Customer> customers = new ArrayList<Customer>();
    customers.addAll(customerMap.values());
    return customers;
    }

    to a REST service to add mulitple Customers with one network call.

    If this is possible could you please include source code like the tutorial for example here is the single Customer Add method,

    @POST
    @Path(“add”)
    @Produces(“text/plain”)
    @Consumes(“application/xml”)
    public String addCustomer(Customer customer) {
    int id = customerMap.size();
    customer.setId(id);
    customerMap.put(id, customer);
    return “Customer ” + customer.getName() + ” added with Id ” + id;
    }

    Thank you.

    #296507 Reply

    If this is not possible to do using the REST WebServices wizard could someone from Support please say so. I did create a separate class package com.myeclipseide.ws;

    import javax.xml.bind.annotation.XmlRootElement;

    import java.util.ArrayList;
    //import java.util.Collection;
    import java.util.List;

    @XmlRootElement
    public class Customers {
    public List<Customer> customerlist;

    }
    and added the following to the CustomersResource. java file.


    @POST


    @Path
    (“addall”)
    @Produces(“text/plain”)
    @Consumes(“application/xml”)
    public String addCustomers(Customers customers) {

    return “addCustomers webservice called!”;
    }

    The List is not properly populated it only has one Customer object and the name and address are blank.

    Thank you

    #296575 Reply

    Perhaps this is NOT possible…here is some incentive for someone that has done this….

    I’ll offer $50.00 via paypal

    if someone has an answer that works with the MyEclipse REST Tutorial on how to POST multiple customers to the REST webservice by modifying the CustomerResource with the appropriate method.

    #296659 Reply

    Brian Fernandes
    Moderator

    kayak,

    Here is a small snippet that will help, replace your Customers class with this

    @XmlRootElement
    public class Customers {
    
        @XmlElement(required = true)
        protected List<Customer> customer;
    
        public String toString() {
            if (customer == null) {
                return "no customers added";
            }
            String rVal = "";
            for (Iterator iterator = customer.iterator(); iterator.hasNext();) {
                Customer customer = (Customer) iterator.next();
                rVal += customer.getName() + ", ";
            }
            return rVal;
        }
    }

    The important lines are

    @XmlElement(required = true)
    protected List<Customer> customer; 

    The code you added to CustomerResources is fine, you could call customers.toString() to see the names of the added customers.

    Hope this helps!

    #296661 Reply

    Brian,

    Your the man! That was exactly what I was missing was the @XmlElement(required = true) on the List <Customer> in the Customers class.

    I’ll certainly be buying the product now that I have this out of the way. If you give let me know which paypal account I’ll be happy to send you the $50.00 for answering my question.

    Now all I need to do is get an answer to the one I posted on how to deploy this webservice to a standalone Tomcat and I’ll be a happy camper. I’ve tried copying the .war file that is created but get a 404 error. I even tried moving the files manually and copying all of the jar files for jersey that are included in the war file to the lib directory under the restdemo directory which is located in webapps on the standalone Tomcat install. No luck.

    Thanks again

    #299767 Reply

    Karun
    Member

    Hello Brian/ Kayak,

    I am facing a similar situation as Kayak did. I did what you told to kayak in your previous post. I did the same thing but to me I get an error.

    Source not found for Class<T>.getDeclaredConstructors0(boolean) line: not available [native method]

    can you please help ASAP.

    Thanks,
    Karun

    #299770 Reply

    Karun
    Member

    Hello Brian/ Kayak,

    I made some changes and now I get this error.

    SEVERE: Servlet.service() for servlet JAX-RS REST Servlet threw exception
    com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
    com.siemens.ikm.cks.sqm.webservices.visits.ChartAbstractionResource$ChartAbstractions is a non-static inner class, and JAXB can’t handle those.
    this problem is related to the following location:
    at com.siemens.ikm.cks.sqm.webservices.visits.ChartAbstractionResource$ChartAbstractions

    at com.sun.xml.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:102)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:447)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:288)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1111)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:154)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:121)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:214)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:375)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:574)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:522)
    at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getStoredJAXBContext(AbstractJAXBProvider.java:199)
    at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getJAXBContext(AbstractJAXBProvider.java:177)
    at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getUnmarshaller(AbstractJAXBProvider.java:131)
    at com.sun.jersey.core.provider.jaxb.AbstractJAXBProvider.getUnmarshaller(AbstractJAXBProvider.java:104)
    at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.readFrom(AbstractRootElementProvider.java:97)
    at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:391)
    at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:81)
    at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityParamInInvoker.getParams(EntityParamDispatchProvider.java:99)
    at com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$TypeOutInvoker._dispatch(EntityParamDispatchProvider.java:136)
    at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
    at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:154)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)
    at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:71)
    at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:111)
    at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:63)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:543)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:502)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:493)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:308)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:314)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:239)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)

    @karun.anantharam wrote:

    Hello Brian/ Kayak,

    I am facing a similar situation as Kayak did. I did what you told to kayak in your previous post. I did the same thing but to me I get an error.

    Source not found for Class<T>.getDeclaredConstructors0(boolean) line: not available [native method]

    can you please help ASAP.

    Thanks,
    Karun

Viewing 7 posts - 1 through 7 (of 7 total)
Reply To: REST WebService Sample

You must be logged in to post in the forum log in