Re: Failing to set an Origin header with a WebClient
Hi The hint from Alex Declent, The solution is to set the system property sun.net.http.allowRestrictedHeaders to true. , should help here as well, I may update the CORS tests to use WebClient and see if it helps... Cheers, Sergey On 01/12/11 16:13, Sergey Beryozkin wrote: Hi Dan On 01/12/11 16:09, Daniel Kulp wrote: On Thursday, December 01, 2011 10:04:27 AM Sergey Beryozkin wrote: Hi Benson so HTTPUrlConnection drops 'Origin' ? It's unfortunate. It seems we'd need to look into some sort of integration with Apache Http Client at some time, Started working on that a long time ago: http://svn.apache.org/repos/asf/cxf/branches/async- client/rt/transports/http/src/main/java/org/apache/cxf/transport/http/async/ Just never had time to really finish it. :-( The reflection trick you proposed may get us past this particular issue :-)...Making it OSGI can be a concern, but may be, as far as CORS is concerned, it's mainly targeted at browser consumers, not sure though Actually, just wondering if it is possible to 'fix' HTTPUrlConnection to support arbitrary HTTP verbs... thanks, Sergey Dan Sergey On 30/11/11 20:00, Benson Margulies wrote: Logging. The output logger on the web client shows Origin, but not the input logger on the JAX-RS endpoint it's talking to. INFO: Outbound Message --- ID: 1 Address: http://localhost:9000/simpleGet/HelloThere Http-Method: GET Content-Type: */* Headers: {Origin=[http://localhost:9000], Accept=[text/plain], Content-Type=[*/*]} -- Nov 30, 2011 2:58:48 PM org.apache.cxf.interceptor.LoggingInInterceptor INFO: Inbound Message ID: 2 Address: http://localhost:9000/simpleGet/HelloThere Http-Method: GET Content-Type: */* Headers: {Accept=[text/plain], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], Pragma=[no-cache], User-Agent=[Apache CXF ${project.version}]} On Wed, Nov 30, 2011 at 2:54 PM, Benson Marguliesbimargul...@gmail.com wrote: I dumped the exchange, and Origin isn't in there. I haven't turned on the logging interceptors yet. [null, null, null, null, null, null, null, null, null, org.apache.cxf.message.Message.PROTOCOL_HEADERS={Accept=[text/plain], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], Pragma=[no-cache], User-Agent=[Apache CXF ${project.version}]}, null, null, null, null, null, null, HTTP_CONTEXT_MATCH_STRATEGY=stem, org.apache.cxf.request.url=http://localhost:9000/simpleGet/HelloThere, null, null, null, null, org.apache.cxf.request.uri=/simpleGet/HelloThere, null, org.apache.cxf.resource.method=public java.lang.String org.apache.cxf.systest.jaxrs.cors.CorsServer.simpleGet(java.lang.Strin g), HTTP.REQUEST=(GET /simpleGet/HelloThere)@372285153 org.eclipse.jetty.server.Request@16309ee1, null, null, HTTP.CONFIG=org.eclipse.jetty.servlet.ServletHolder$Config@520ed128, Accept=text/plain, null, org.apache.cxf.message.Message.PATH_INFO=/simpleGet/HelloThere, null, null, null, null, null, null, null, null, org.apache.cxf.continuations.ContinuationProvider=org.apache.cxf.trans port.http.Servlet3ContinuationProvider@4ac5c32e, null, null, null, org.apache.cxf.message.Message.IN_INTERCEPTORS=[org.apache.cxf.transpo rt.https.CertConstraintsInterceptor@7d91275b], null, null, org.apache.cxf.message.Message.QUERY_STRING=null, HTTP.RESPONSE=HTTP/1.1 200 On Wed, Nov 30, 2011 at 2:47 PM, Benson Marguliesbimargul...@gmail.com wrote: I'm failing to set an Origin header with a WebClient. Here's the client side code, and the header does not make it to the other end. This makes it rather difficult to write tests for CORS. On the other hand, should WebClient have native support for the client side of CORS? That's complex and unpleasant in prospect. String origin = http://localhost:; + PORT; WebClient wc = WebClient.create(origin + /); // Since our WebClient doesn't know from Origin, we need to do this ourselves. wc.header(Origin, origin); Response r = wc.replacePath(/simpleGet/HelloThere).accept(text/plain).get(); assertEquals(Response.Status.OK.getStatusCode(), r.getStatus()); -- Sergey Beryozkin Talend Community Coders http://coders.talend.com/ Blog: http://sberyozkin.blogspot.com
Re: Failing to set an Origin header with a WebClient
I'd rather write the transport. On Thu, Dec 1, 2011 at 11:13 AM, Sergey Beryozkin sberyoz...@gmail.com wrote: Hi Dan On 01/12/11 16:09, Daniel Kulp wrote: On Thursday, December 01, 2011 10:04:27 AM Sergey Beryozkin wrote: Hi Benson so HTTPUrlConnection drops 'Origin' ? It's unfortunate. It seems we'd need to look into some sort of integration with Apache Http Client at some time, Started working on that a long time ago: http://svn.apache.org/repos/asf/cxf/branches/async- client/rt/transports/http/src/main/java/org/apache/cxf/transport/http/async/ Just never had time to really finish it. :-( The reflection trick you proposed may get us past this particular issue :-)...Making it OSGI can be a concern, but may be, as far as CORS is concerned, it's mainly targeted at browser consumers, not sure though Actually, just wondering if it is possible to 'fix' HTTPUrlConnection to support arbitrary HTTP verbs... thanks, Sergey Dan Sergey On 30/11/11 20:00, Benson Margulies wrote: Logging. The output logger on the web client shows Origin, but not the input logger on the JAX-RS endpoint it's talking to. INFO: Outbound Message --- ID: 1 Address: http://localhost:9000/simpleGet/HelloThere Http-Method: GET Content-Type: */* Headers: {Origin=[http://localhost:9000], Accept=[text/plain], Content-Type=[*/*]} -- Nov 30, 2011 2:58:48 PM org.apache.cxf.interceptor.LoggingInInterceptor INFO: Inbound Message ID: 2 Address: http://localhost:9000/simpleGet/HelloThere Http-Method: GET Content-Type: */* Headers: {Accept=[text/plain], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], Pragma=[no-cache], User-Agent=[Apache CXF ${project.version}]} On Wed, Nov 30, 2011 at 2:54 PM, Benson Marguliesbimargul...@gmail.com wrote: I dumped the exchange, and Origin isn't in there. I haven't turned on the logging interceptors yet. [null, null, null, null, null, null, null, null, null, org.apache.cxf.message.Message.PROTOCOL_HEADERS={Accept=[text/plain], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], Pragma=[no-cache], User-Agent=[Apache CXF ${project.version}]}, null, null, null, null, null, null, HTTP_CONTEXT_MATCH_STRATEGY=stem, org.apache.cxf.request.url=http://localhost:9000/simpleGet/HelloThere, null, null, null, null, org.apache.cxf.request.uri=/simpleGet/HelloThere, null, org.apache.cxf.resource.method=public java.lang.String org.apache.cxf.systest.jaxrs.cors.CorsServer.simpleGet(java.lang.Strin g), HTTP.REQUEST=(GET /simpleGet/HelloThere)@372285153 org.eclipse.jetty.server.Request@16309ee1, null, null, HTTP.CONFIG=org.eclipse.jetty.servlet.ServletHolder$Config@520ed128, Accept=text/plain, null, org.apache.cxf.message.Message.PATH_INFO=/simpleGet/HelloThere, null, null, null, null, null, null, null, null, org.apache.cxf.continuations.ContinuationProvider=org.apache.cxf.trans port.http.Servlet3ContinuationProvider@4ac5c32e, null, null, null, org.apache.cxf.message.Message.IN_INTERCEPTORS=[org.apache.cxf.transpo rt.https.CertConstraintsInterceptor@7d91275b], null, null, org.apache.cxf.message.Message.QUERY_STRING=null, HTTP.RESPONSE=HTTP/1.1 200 On Wed, Nov 30, 2011 at 2:47 PM, Benson Marguliesbimargul...@gmail.com wrote: I'm failing to set an Origin header with a WebClient. Here's the client side code, and the header does not make it to the other end. This makes it rather difficult to write tests for CORS. On the other hand, should WebClient have native support for the client side of CORS? That's complex and unpleasant in prospect. String origin = http://localhost:; + PORT; WebClient wc = WebClient.create(origin + /); // Since our WebClient doesn't know from Origin, we need to do this ourselves. wc.header(Origin, origin); Response r = wc.replacePath(/simpleGet/HelloThere).accept(text/plain).get(); assertEquals(Response.Status.OK.getStatusCode(), r.getStatus()); -- Sergey Beryozkin Talend Community Coders http://coders.talend.com/ Blog: http://sberyozkin.blogspot.com
Failing to set an Origin header with a WebClient
I'm failing to set an Origin header with a WebClient. Here's the client side code, and the header does not make it to the other end. This makes it rather difficult to write tests for CORS. On the other hand, should WebClient have native support for the client side of CORS? That's complex and unpleasant in prospect. String origin = http://localhost:; + PORT; WebClient wc = WebClient.create(origin + /); // Since our WebClient doesn't know from Origin, we need to do this ourselves. wc.header(Origin, origin); Response r = wc.replacePath(/simpleGet/HelloThere).accept(text/plain).get(); assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
Re: Failing to set an Origin header with a WebClient
I dumped the exchange, and Origin isn't in there. I haven't turned on the logging interceptors yet. [null, null, null, null, null, null, null, null, null, org.apache.cxf.message.Message.PROTOCOL_HEADERS={Accept=[text/plain], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], Pragma=[no-cache], User-Agent=[Apache CXF ${project.version}]}, null, null, null, null, null, null, HTTP_CONTEXT_MATCH_STRATEGY=stem, org.apache.cxf.request.url=http://localhost:9000/simpleGet/HelloThere, null, null, null, null, org.apache.cxf.request.uri=/simpleGet/HelloThere, null, org.apache.cxf.resource.method=public java.lang.String org.apache.cxf.systest.jaxrs.cors.CorsServer.simpleGet(java.lang.String), HTTP.REQUEST=(GET /simpleGet/HelloThere)@372285153 org.eclipse.jetty.server.Request@16309ee1, null, null, HTTP.CONFIG=org.eclipse.jetty.servlet.ServletHolder$Config@520ed128, Accept=text/plain, null, org.apache.cxf.message.Message.PATH_INFO=/simpleGet/HelloThere, null, null, null, null, null, null, null, null, org.apache.cxf.continuations.ContinuationProvider=org.apache.cxf.transport.http.Servlet3ContinuationProvider@4ac5c32e, null, null, null, org.apache.cxf.message.Message.IN_INTERCEPTORS=[org.apache.cxf.transport.https.CertConstraintsInterceptor@7d91275b], null, null, org.apache.cxf.message.Message.QUERY_STRING=null, HTTP.RESPONSE=HTTP/1.1 200 On Wed, Nov 30, 2011 at 2:47 PM, Benson Margulies bimargul...@gmail.com wrote: I'm failing to set an Origin header with a WebClient. Here's the client side code, and the header does not make it to the other end. This makes it rather difficult to write tests for CORS. On the other hand, should WebClient have native support for the client side of CORS? That's complex and unpleasant in prospect. String origin = http://localhost:; + PORT; WebClient wc = WebClient.create(origin + /); // Since our WebClient doesn't know from Origin, we need to do this ourselves. wc.header(Origin, origin); Response r = wc.replacePath(/simpleGet/HelloThere).accept(text/plain).get(); assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());
Re: Failing to set an Origin header with a WebClient
Logging. The output logger on the web client shows Origin, but not the input logger on the JAX-RS endpoint it's talking to. INFO: Outbound Message --- ID: 1 Address: http://localhost:9000/simpleGet/HelloThere Http-Method: GET Content-Type: */* Headers: {Origin=[http://localhost:9000], Accept=[text/plain], Content-Type=[*/*]} -- Nov 30, 2011 2:58:48 PM org.apache.cxf.interceptor.LoggingInInterceptor INFO: Inbound Message ID: 2 Address: http://localhost:9000/simpleGet/HelloThere Http-Method: GET Content-Type: */* Headers: {Accept=[text/plain], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], Pragma=[no-cache], User-Agent=[Apache CXF ${project.version}]} On Wed, Nov 30, 2011 at 2:54 PM, Benson Margulies bimargul...@gmail.com wrote: I dumped the exchange, and Origin isn't in there. I haven't turned on the logging interceptors yet. [null, null, null, null, null, null, null, null, null, org.apache.cxf.message.Message.PROTOCOL_HEADERS={Accept=[text/plain], Cache-Control=[no-cache], connection=[keep-alive], content-type=[*/*], Host=[localhost:9000], Pragma=[no-cache], User-Agent=[Apache CXF ${project.version}]}, null, null, null, null, null, null, HTTP_CONTEXT_MATCH_STRATEGY=stem, org.apache.cxf.request.url=http://localhost:9000/simpleGet/HelloThere, null, null, null, null, org.apache.cxf.request.uri=/simpleGet/HelloThere, null, org.apache.cxf.resource.method=public java.lang.String org.apache.cxf.systest.jaxrs.cors.CorsServer.simpleGet(java.lang.String), HTTP.REQUEST=(GET /simpleGet/HelloThere)@372285153 org.eclipse.jetty.server.Request@16309ee1, null, null, HTTP.CONFIG=org.eclipse.jetty.servlet.ServletHolder$Config@520ed128, Accept=text/plain, null, org.apache.cxf.message.Message.PATH_INFO=/simpleGet/HelloThere, null, null, null, null, null, null, null, null, org.apache.cxf.continuations.ContinuationProvider=org.apache.cxf.transport.http.Servlet3ContinuationProvider@4ac5c32e, null, null, null, org.apache.cxf.message.Message.IN_INTERCEPTORS=[org.apache.cxf.transport.https.CertConstraintsInterceptor@7d91275b], null, null, org.apache.cxf.message.Message.QUERY_STRING=null, HTTP.RESPONSE=HTTP/1.1 200 On Wed, Nov 30, 2011 at 2:47 PM, Benson Margulies bimargul...@gmail.com wrote: I'm failing to set an Origin header with a WebClient. Here's the client side code, and the header does not make it to the other end. This makes it rather difficult to write tests for CORS. On the other hand, should WebClient have native support for the client side of CORS? That's complex and unpleasant in prospect. String origin = http://localhost:; + PORT; WebClient wc = WebClient.create(origin + /); // Since our WebClient doesn't know from Origin, we need to do this ourselves. wc.header(Origin, origin); Response r = wc.replacePath(/simpleGet/HelloThere).accept(text/plain).get(); assertEquals(Response.Status.OK.getStatusCode(), r.getStatus());