Hi Sergey, I am facing another problem while calling my REST service. I have already sent my impl class code earlier in this mail thread. It seems that my partly impl code executes 2 times. following is my tomcat log. Please look into the log marked bold. any idea please?
Regards, parimal 17-Nov-2009 12:34:51 org.apache.cxf.binding.http.interceptor.DispatchInterceptor handleMessage INFO: Invoking GET on /hi 17-Nov-2009 12:34:51 org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor handleMessage INFO: URIParameterInterceptor handle message on path [/hi] with content-type [null] 12:34:51,843 [http-8080-1] INFO HelloWorldImpl - Recieved request ==> hello 12:34:51,843 [http-8080-1] INFO HelloWorldImpl - Recieved request ==> hello *12:34:51,843 [http-8080-1] INFO HelloWorldImpl - propertyCode=10810145* *12:34:51,843 [http-8080-1] INFO HelloWorldImpl - propertyCode=10810145* *12:34:51,843 [http-8080-1] INFO HelloWorldImpl - FilePath=I://home//opera//PMS/10810145/DEL10965261change.xml* *12:34:51,843 [http-8080-1] INFO HelloWorldImpl - FilePath=I://home//opera//PMS/10810145/DEL10965261change.xml* *12:34:51,844 [http-8080-1] INFO HelloWorldImpl - Content-length=8773* *12:34:51,844 [http-8080-1] INFO HelloWorldImpl - Content-length=8773* On Tue, Nov 17, 2009 at 11:41 AM, Parimal Dhinoja <[email protected]>wrote: > Thank you so much Sergey for prompt reply and the links. > > I agree that JAX-RS might be more appropriate solution to my problem. > > But I still has a query about Response object. As you see, I need to read > the phisical XML files that are stored on file system and based on user > query parameter, I need to read one of those files and feed into Response > stream. > > As per my understanding, jax-rs return xml response of the pojo class you > have defined. > > so Please let me know, what I have implemented to return my physical xml > file, is correct and whether it will work. I have to get HttpResponse from > MessageContext and feed my xml file into response's body. > > As I said, I am new to CXF and may be there are better solutions to the > problem I have which I am not aware of. It would be great if you suggest > specific to my problem on hand. > > Again, I really appreciate you help. > > Regards, > Parimal > > > > On Tue, Nov 17, 2009 at 4:16 PM, Sergey Beryozkin > <[email protected]>wrote: > >> Hi >> >> >> Thank you Sergey, >>> >>> Yes it seems working. now I haven't got any exception. but I am not >>> verifying it. Actually following is my code in impl. I am sending xml >>> file >>> in Httpresponse stream. and I do not know if anything will add to >>> response >>> or overwrite by further interceptor process. I am using this service from >>> browser. Please let me know what I am doing is right way of doing it. I >>> am >>> beginner to CXF REST. >>> >> >> this is a JAXWS code but you can do REST with it if you'd like to. You'd >> probably want to use Provider<Source> though, see >> >> >> http://svn.apache.org/repos/asf/cxf/trunk/distribution/src/main/release/samples/restful_dispatch/ >> >> alternatively, please consider using JAXRS >> >> http://cxf.apache.org/docs/jax-rs.html >> >> hope it helps, Sergey >> >> >> >>> @WebService(endpointInterface = >>> "com.traveltripper.stargazer.service.impl.HelloWorld") >>> public class HelloWorldImpl implements HelloWorld >>> { >>> >>> private static final Log log = LogFactory.getLog(HelloWorldImpl.class); >>> >>> @Resource >>> private WebServiceContext context; >>> >>> public void getHi() >>> { >>> try >>> { >>> MessageContext ctx = context.getMessageContext(); >>> HttpServletRequest request = (HttpServletRequest) >>> ctx.get(AbstractHTTPDestination.HTTP_REQUEST); >>> HttpServletResponse response = (HttpServletResponse) >>> ctx.get(AbstractHTTPDestination.HTTP_RESPONSE); >>> response.setContentType("text/xml"); >>> String reqParameter = request.getParameter("propertyCode"); >>> String filePath = "c://"+ "DEL10965261change.xml"; >>> >>> FileInputStream fis = new FileInputStream(new File(filePath)); >>> >>> BufferedInputStream bis = new BufferedInputStream(fis); >>> ServletOutputStream sos = response.getOutputStream(); >>> byte[] buffer = new byte[5000]; >>> response.setHeader("Content-Length:", >>> String.valueOf(bis.available())); >>> log.info("Content-length=" + bis.available()); >>> while (true) >>> { >>> int bytesRead = bis.read(buffer, 0, buffer.length); >>> if (bytesRead < 0) break; >>> sos.write(buffer, 0, bytesRead); >>> } >>> fis.close(); >>> sos.flush(); >>> sos.close(); >>> >>> } >>> catch (Exception e) >>> { >>> e.getMessage(); >>> } >>> >>> } >>> } >>> >>> On Mon, Nov 16, 2009 at 3:40 PM, Sergey Beryozkin < >>> [email protected] >>> >>>> wrote: >>>> >>> >>> >>>> Hi >>>> >>>> Please try writing to response.getOutputStream() and it should work. I >>>> missed overriding >>>> response.getWriter() in the HttpResponse context implementation. >>>> >>>> let me know please if it works >>>> Sergey >>>> >>>> >>>> Parimal Dhinoja wrote: >>>> > >>>> > Hi, >>>> > >>>> > I have implemented RESTful CXF service with my spring project. in impl >>>> > class, I have used MessageContext to retrieve HttpResponse and I am >>>> using >>>> > response.getWriter() to set HttpResponse with my content. >>>> > >>>> > when I call this service from browser, I get the response what I have >>>> set >>>> > in >>>> > impl, but on tomcat console, I am getting following exception. Please >>>> > help. >>>> > this is the last piece of work I have left to finish my task. >>>> > >>>> > 16-Nov-2009 13:47:31 org.apache.cxf.phase.PhaseInterceptorChain >>>> > doIntercept >>>> > WARNING: Interceptor has thrown exception, unwinding now >>>> > java.lang.IllegalStateException: getWriter() has already been called >>>> for >>>> > this response >>>> > at >>>> > >>>> org.apache.catalina.connector.Response.getOutputStream(Response.java:579) >>>> > at >>>> > >>>> >>>> org.apache.catalina.connector.ResponseFacade.getOutputStream(ResponseFacade.java:183) >>>> > at >>>> > >>>> >>>> javax.servlet.ServletResponseWrapper.getOutputStream(ServletResponseWrapper.java:102) >>>> > at >>>> > >>>> >>>> org.apache.cxf.transport.http.AbstractHTTPDestination.flushHeaders(AbstractHTTPDestination.java:482) >>>> > at >>>> > >>>> >>>> org.apache.cxf.transport.http.AbstractHTTPDestination$WrappedOutputStream.onFirstWrite(AbstractHTTPDestination.java:546) >>>> > at >>>> > >>>> >>>> org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:61) >>>> > at >>>> > >>>> >>>> com.sun.xml.internal.stream.writers.UTF8OutputStreamWriter.write(UTF8OutputStreamWriter.java:94) >>>> > >>>> > -- >>>> > Regards, >>>> > Parimal >>>> > "Nothing is stationary,Change is a part of Life" >>>> > >>>> > >>>> >>>> -- >>>> View this message in context: >>>> >>>> http://old.nabble.com/Exception-%3A-getWriter%28%29-has-already-been-called-for-this-response-tp26378624p26379082.html >>>> Sent from the cxf-user mailing list archive at Nabble.com. >>>> >>>> >>>> >>> >>> -- >>> Regards, >>> Parimal >>> "Nothing is stationary,Change is a part of Life" >>> >>> > > > -- > Regards, > Parimal > "Nothing is stationary,Change is a part of Life" > -- Regards, Parimal "Nothing is stationary,Change is a part of Life"
