Hi Sergey,

yes, we use a 2.7.x CXF version. I think, that is because of the old NetWeaver 
server we have to use. Can you please fix this for 2.7.16 as well? Thank you 
very much. :-)


Best regards,
Marko

-----Ursprüngliche Nachricht-----
Von: Sergey Beryozkin [mailto:sberyoz...@gmail.com] 
Gesendet: Mittwoch, 8. April 2015 18:59
An: users@cxf.apache.org
Betreff: Re: AW: AW: AW: How to forward requests to a JSP page when using 
CXFNonSpringJaxrsServlet

Hi Marko

See https://issues.apache.org/jira/browse/CXF-6337

Can you please test either 3.0.5-SNAPSHOT or 3.1.0-SNAPSHOT ?
Do you need it for CXF 2.7.16 ?

Sergey

On 08/04/15 13:31, Sergey Beryozkin wrote:
> Hi Marko
>
> That should be possible to get fixed.
> As I said, the query parameters are passed along either way but if you 
> can not modify JSP or these query parameters are actually representing 
> some custom parameters, then yes, I can see why option 1 makes sense.
>
> By the way, RequestDispatcher supports dynamic resource paths set on 
> the message context, so if you have CXF MessageContext injected then 
> you'd set a property on it,
>
> "redirect.resource.path"="my.jsp?a=b"
>
> and it will work, but it is very much CXF specific....
>
> I'll try to get option 1 done before the releases...
>
> Cheers, Sergey
>
> On 08/04/15 13:13, Voss, Marko wrote:
>> Hi Sergey,
>>
>> yes, it would be great, if variant 1 would work fine. (No
>> ClassCastException)
>>
>> servletContext.getRequestDispatcher("my.jsp?a=b").forward()
>>
>>
>> Is it possible to fix this?
>>
>>
>> Best regards,
>> Marko
>>
>>
>> -----Ursprüngliche Nachricht-----
>> Von: Sergey Beryozkin [mailto:sberyoz...@gmail.com]
>> Gesendet: Mittwoch, 8. April 2015 14:07
>> An: users@cxf.apache.org
>> Betreff: Re: AW: AW: How to forward requests to a JSP page when using 
>> CXFNonSpringJaxrsServlet
>>
>> Hi
>>
>> Not at the moment, how does it work in general, is it
>>
>> servletContext.getRequestDispatcher("my.jsp?a=b").forward() ?
>>
>> Note that RequestDispatcherProvider sets query parameters (as well as 
>> path and other request properties) as HttpServletRequest parameters, 
>> see
>>
>> https://fisheye6.atlassian.com/browse/cxf/rt/frontend/jaxrs/src/main/
>> java/org/apache/cxf/jaxrs/provider/RequestDispatcherProvider.java?r=3
>> 309231e467225b18b24d90d77153a0c572a17e0#to342
>>
>>
>> Cheers, Sergey
>>
>> On 08/04/15 12:37, Voss, Marko wrote:
>>> Hi Sergey,
>>>
>>> can I somehow tell the RequestDispatcher to use the String of the 
>>> Response Entity for redirection? Just saw, that there are also query 
>>> parameters added to the JSP URL in some cases...
>>>
>>>
>>> Thanks and best regards,
>>> Marko
>>>
>>> -----Ursprüngliche Nachricht-----
>>> Von: Sergey Beryozkin [mailto:sberyoz...@gmail.com]
>>> Gesendet: Mittwoch, 8. April 2015 13:03
>>> An: users@cxf.apache.org
>>> Betreff: Re: AW: How to forward requests to a JSP page when using 
>>> CXFNonSpringJaxrsServlet
>>>
>>> Hi Marko
>>>
>>> This is one way to do it, yes, does not even has to be on the same 
>>> line, example, 
>>> org.apache.cxf.jaxrs.provider.RequestDispatcherProvider
>>> (
>>> resource.Status.JSP1=/hello.jsp
>>> resource.Status.JSP2=/foo.jsp
>>> )
>>>
>>> Perhaps another alternative is to wrap an enum value into a bean 
>>> class and redirect to a single JSP resource, which will get the 
>>> bean, check the enum, delegate to specific JSPs...
>>>
>>> Cheers, Sergey
>>>
>>> On 08/04/15 06:47, Voss, Marko wrote:
>>>> Hello Sergey,
>>>>
>>>> variant 2 was just an idea but is not really helpful, because of we 
>>>> need to do some logic in order to decide, which JSP to call. So we 
>>>> have to execute some code.
>>>>
>>>> So the idea I got is the following: The servlet does execute the 
>>>> code and returns an enum value. Based on the enum value, the 
>>>> RequestDispatcher decides, which JSP to call. This might look like
>>>> this:
>>>>
>>>> org.apache.cxf.jaxrs.provider.RequestDispatcherProvider(resource.St
>>>> at
>>>> u
>>>> s.JSP1=/hello.jsp
>>>> resource.Status.JSP2=/foo.jsp)
>>>>
>>>> The Response object gets the enum value as its entity.
>>>>
>>>> Is this correct?
>>>>
>>>>
>>>> Thank you very much and best regards,
>>>>
>>>> Marko
>>>>
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: Sergey Beryozkin [mailto:sberyoz...@gmail.com]
>>>> Gesendet: Dienstag, 7. April 2015 17:40
>>>> An: users@cxf.apache.org
>>>> Betreff: Re: How to forward requests to a JSP page when using 
>>>> CXFNonSpringJaxrsServlet
>>>>
>>>> Hi,
>>>>
>>>> Please see comments below
>>>> On 07/04/15 14:42, Voss, Marko wrote:
>>>>> Hello,
>>>>>
>>>>> I do have the following situation:
>>>>>
>>>>> We have to use the CXFNonSpringJaxrsServlet for implementing the 
>>>>> REST endpoints.
>>>>>
>>>>> The main servlet (old code to be replaced by the new REST 
>>>>> endpoints) of the application does implement internal forwarding to JSP 
>>>>> pages.
>>>>> (for example to a login page)
>>>>>
>>>>>
>>>>> 1.      I tried to implement the forwarding as it was already done
>>>>> by the old servlet using:
>>>>>
>>>>> @Context
>>>>> private ServletContext context;
>>>>>
>>>>> context.getRequestDispatcher(url).forward(request, response);
>>>>>
>>>>> But this does not work, because of a ClassCastException happening.
>>>>> The exception message was like: The ThreadLocal instance for 
>>>>> ServletContext could not be casted to the RequestDispatcher 
>>>>> instance, which is provided by the server. (NetWeaver)
>>>>>
>>>>> The ThreadLocal object is provided by CXF and the 
>>>>> RequestDispatcher implementation is provided by NetWeaver. Of 
>>>>> course, this will not work.
>>>> Hmm, interesting, may make sense supporting this variation, I'll 
>>>> have a look...
>>>>
>>>>>
>>>>>
>>>>> 2.       I was trying to use the RequestDispatcherProvider of CXF,
>>>>> but how can you configure this provider using the 
>>>>> CXFNonSpringJaxrsServlet?
>>>>>
>>>>> <servlet>
>>>>>                  <servlet-name>RestfulApp</servlet-name>
>>>>>
>>>>> <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServl
>>>>> et</servlet-class>
>>>>>
>>>>>                  <init-param>
>>>>>                         <param-name>jaxrs.serviceClasses</param-name>
>>>>>                         <param-value>
>>>>>                         ...
>>>>>                         </param-value>
>>>>>                  </init-param>
>>>>>                  <init-param>
>>>>>                         <param-name>jaxrs.providers</param-name>
>>>>>                         <param-value>
>>>>>
>>>>> org.apache.cxf.jaxrs.provider.RequestDispatcherProvider
>>>>>                         <!-- How to configure this one here??? -->
>>>>>                         </param-value>
>>>>>                  </init-param>
>>>>>                  <load-on-startup>1</load-on-startup>
>>>>>            </servlet>
>>>>>
>>>>
>>>> The simplest way to do at a servlet level is to use redirect 
>>>> parameters, see
>>>>
>>>> https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systests
>>>> /j
>>>> a
>>>> xrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml;h=a2212337bd6
>>>> a9
>>>> e
>>>> d7a212b21a6826850581601121;hb=HEAD
>>>>
>>>> or indeed you can directly configure this provider (and other
>>>> providers) as a parameter, do something like
>>>>
>>>> org.apache.cxf.jaxrs.provider.RequestDispatcherProvider(resourcePat
>>>> h=
>>>> /
>>>> WEB-INF/jsp/test.jsp
>>>> someotherproperty=somevalue)
>>>>
>>>>
>>>>>
>>>>> 3.       I was trying to implement a RequestHandler, which worked
>>>>> but when the forwarding happens, I get spammed by error messages 
>>>>> on server side, that the OutputStreams of the servlets are already 
>>>>> taken by a getWriter() method. This spam should be avoided. 
>>>>> Example
>>>>> Spam:
>>>>>
>>>>> WARNING: Interceptor for
>>>>> {http://impl.jaxrs.web.foo.bar/}MyServiceImpl has thrown 
>>>>> exception, unwinding now
>>>>> com.sap.engine.services.servlets_jsp.server.exceptions.WebIllegalStateException:
>>>>> The stream has already been taken by method [getWriter()].
>>>>> at
>>>>> com.sap.engine.services.servlets_jsp.server.runtime.client.HttpSer
>>>>> vl
>>>>> e
>>>>> tResponseFacade.getOutputStream(HttpServletResponseFacade.java:244
>>>>> )
>>>>>
>>>>> This servlet is not in use at all at this point of the request and 
>>>>> not after the request as well. So I wonder in general, why this 
>>>>> exception occurs on this servlet. It is maybe a NetWeaver thing.
>>>>>
>>>>>
>>>>> 4.       I was trying to implement an equivalent to the
>>>>> RequestDispatcherProvider, doing things here by code. But even 
>>>>> when this works, I still get the spam from above.
>>>>>
>>>> In both cases the outbound CXF JAX-RS interceptor and Http 
>>>> transport need to know the request has been redirected, this can be 
>>>> done by setting an "http.request.redirected" property on the 
>>>> current message,
>>>>
>>>> message.put("http.request.redirected", true)
>>>>
>>>> But the option 2 is simpler, can you try it and let me know if it 
>>>> works for you ?
>>>>
>>>> Thanks, Sergey
>>>>
>>>>>
>>>>> Any help is much appreciated.
>>>>>
>>>>>
>>>>> Best regards,
>>>>>
>>>>> Marko
>>>>>
>>>>
>>>
>>
>


--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to