2011-04-24 5 views
5

के साथ एक REST webservice लिखना मैं जावा में एक आरईएसटी webservice लिखने की कोशिश कर रहा हूं (नेटबीन्स, ग्लासफ़िश और जर्सी का उपयोग करके)।@XmlRootElement

मैंने एक छोटा ऐप लिखा है और यह काम करता है।

package service; 

import java.io.IOException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.ws.rs.*; 
import javax.ws.rs.core.Response; 
import converter.FlyedpConverter; 
import entities.FlysCombination; 

@Path("/getdates") 
public class FlyedpResource { 

    @GET 
    @Path("{date}") 
    @Produces({"application/json"}) 
    public Response get(@PathParam("date") String date) throws IOException { 
     FlysCombination comb = new FlysCombination(); 
     FlysCombination x = FlysCombination.instance(); 
     comb = x.getcomb(date); 

     System.out.println(comb.toString()); 

     if (comb == null) { 
     return Response.status(Response.Status.NOT_FOUND).build(); 
     } 
     return Response.ok(comb).build(); 
    } 
} 

मेरी कक्षा FlysCombination:

package entities; 

import converter.FlyedpConverter; 
import java.util.ArrayList; 

public class FlysCombination { 

    public FlysCombination() {} 

    public static FlysCombination flycomb = null; 

    public static FlysCombination instance() { 
     if (flycomb == null) { 
     flycomb = new FlysCombination(); 
     } 
     return flycomb; 
    } 

    private String session; 
    @SuppressWarnings("rawtypes") 
    private ArrayList combinations = new ArrayList(); 

    public FlysCombination(String session,ArrayList combinations) { 
     this.session=session; 
     this.combinations=combinations; 
    } 

    public ArrayList getcombinations() { 
     return combinations; 
    } 

    public void setcombinations(ArrayList goingthere) { 
     this.combinations = goingthere; 
    } 

    public String getsession() { 
     return session; 
    } 

    public void setsession(String session) { 
     this.session = session; 
    } 


    public FlysCombination getcomb(String a) { 
     FlyedpConverter fly = new FlyedpConverter (a); 
     combinations.add(fly); 
     session="sdjkbsqdjhf"; 
     FlysCombination flycomb = new FlysCombination (session,combinations); 

     return(flycomb); 
    } 
} 

और FlyedpConverter:

package converter; 

public class FlyedpConverter { 
    private String keydate; 

    public FlyedpConverter(String keydate) { 
     this.keydate=keydate; 
    } 

    public String getkeydate() { 
     return keydate; 
    } 

    public void setkeydate(String keydate) { 
     this.keydate = keydate; 
    } 
} 

मैं निम्न त्रुटि हो रही है:

Status: 500 (Internal Server Error) javax.ws.rs.WebApplicationException 
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:268) 
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1029) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:941) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:932) 
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:384) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:451) 
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:632) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188) 
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641) 
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97) 
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185) 
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226) 
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:69) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309) 
at java.lang.Thread.run(Thread.java:680) 

लेकिन तब मैं निम्नलिखित की कोशिश की मुझे लगता है कि समस्या @XmlRootElement में है, मुझे नहीं पता कि यह कहां लिखता है ... जब मैं डीबग करता हूं, तो कॉम वैरिएबल में परिणाम होता है, इसलिए समस्या return Response.ok(comb).build();

क्या कोई मेरी मदद कर सकता है?

+0

कृपया अपनी पोस्ट को सही तरीके से प्रारूपित करें, और कोड को सबसे छोटे उदाहरण में कम करें जो समस्या को पुन: उत्पन्न करता है। –

उत्तर

1

आप @XmlRootElement के साथ अपने FlysCombination वर्ग टिप्पणी करने की JAXB क्रमबद्धता

+0

मैं करता हूं लेकिन समस्या persisit:/ क्या आप मुझसे संपर्क कर सकते हैं? यदि आप चाहें तो मैं भुगतान कर सकता हूं ... मैं किसी की सहायता करता हूं जो मेरी मदद करता है। मेरा मेल: [email protected] thanx – user723023

+0

मुझे आपके पोस्ट किए गए क्लास कोड पर एनोटेशन नहीं दिख रहा है? – fmucar

+0

मैंने कोशिश की लेकिन जब यह काम नहीं किया तो मैंने इसे हटा दिया – user723023

0

प्रदर्शन क्या यह लायक है के लिए जाने की जरूरत है: मैं एक ऐसी ही समस्या हुई थी।

मेरी जेएक्सबी कक्षाएं स्वचालित रूप से एक मैवेन कॉन्फ़िगरेशन में xjc के साथ जेनरेट की जाती हैं, इसलिए मैं मैन्युअल रूप से @XmlRootElement नहीं जोड़ सकता (कोड प्रत्येक निर्माण के साथ पुन: उत्पन्न होता है)।

मैं xml प्रकार का उपयोग अन्य तत्व प्रकार के रूप में रूट तत्व के रूप में करता हूं, इसलिए JAXB XmlRootElement एनोटेशन (See this article) नहीं जोड़ता है।

इसके अलावा, मैं xml कॉम्प्लेक्स टाइप को किसी तत्व में संशोधित नहीं करना चाहता (हालांकि यह शायद सबसे सामान्य समाधान है)। उस स्थिति में मुझे दो बुकमार्क ऑब्जेक्ट्स (डेटा मॉडल से एक और जैक्सबी मॉडल से एक) के साथ काम करना है, जो बहुत भ्रमित है।

@Provider 
@Produces(MediaType.APPLICATION_XML) 
public class CustomBodyWriter extends AbstractRootElementProvider { 

    public CustomBodyWriter(@Context Providers ps) { 
    super(ps, MediaType.APPLICATION_XML_TYPE); 
    } 

    @Override 
    public boolean isWriteable(Class<?> type, Type genericType, Annotation annotations[], MediaType mediaType) { 
    return isSupported(mediaType); 
    } 

    @Override 
    protected void writeTo(Object t, MediaType mediaType, Charset c, Marshaller m, OutputStream entityStream) throws JAXBException { 
    if (t instanceof BookmarkType) { 
     JAXBElement<BookmarkType> bookmark = new ObjectFactory().createBookmark((BookmarkType) t); 
     m.marshal(bookmark, entityStream); 
    } else { 
     m.marshal(t, entityStream); 
    } 
    } 
} 

आशा इस किसी की मदद कर सकते हैं:

तो मैं डिफ़ॉल्ट प्रदाता, कोड overrode।

1

यह त्रुटि तब उत्पन्न होती है जब रिटर्न प्रकार सही परिभाषित नहीं किया गया है .. देखें .. आपके पास अपने webservice का रिटर्न प्रकार एप्लिकेशन/जेसन के रूप में है।

यदि आप एक्सएमएल वापस करने का प्रयास करते हैं तो यह काम नहीं करेगा। या तो आप अपना रिटर्न टाइप एप्लिकेशन/एक्सएमएल में बदल सकते हैं और अपने बीन में @XMLRootElement जोड़ सकते हैं या आप बीन में जेसन के लिए संबंधित प्रकार जोड़ सकते हैं।

संबंधित मुद्दे