If I send request from chrome advance rest client app, it works. So it
looks like some headers have to be set.
If I have following header
var headers = {
'Access-Control-Allow-Origin': '*',
//'Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS,
PUT',
'Content-Type': 'text/plain',
'Accept': 'text/plain'
//'Accept': 'application/json, text/javascript'
};
//var headers = {
// 'Accept': 'application/json, text/javascript',
// 'Content-Type': 'application/json; charset=utf-8'
//};
var response = $http({
method: "GET",
headers: headers,
url: 'http://localhost:9001/office/offices/123',
'X-Requested-With': 'XMLHttpRequest'
It works for java rest client as well chrome rest app. But not for browser/
web app.
If I comment out anything, it doesn't works out for java rest client.
On Sat, Dec 5, 2015 at 4:35 PM, Shashank Dutt Jha <[email protected]>
wrote:
> Changed the code to:
> (allowOrigins with * or with http://localhost:56696
>
> @Path("/office/")
> public class OfficeOffice {
>
>
> @GET
> @CrossOriginResourceSharing(allowAllOrigins = true, allowOrigins = "*",
> allowCredentials = true)
> @Path("/offices/{id}/")
> @Produces("text/plain")
> public String getCustomer(@PathParam("id") String id) {
> return "Systems";
> }
>
> }
>
> Tested for Chrome and IE.
>
> In IE it works. In Chrome request is reaching service. and response is
> returned but in browser shows same error message
>
> XMLHttpRequest cannot load http://localhost:9001/office/offices/123.
> Response to preflight request doesn't pass access control check: No
> 'Access-Control-Allow-Origin' header is present on the requested resource.
> Origin 'http://localhost:56696' is therefore not allowed access.
>
> On Fri, Dec 4, 2015 at 4:48 PM, Sergey Beryozkin <[email protected]>
> wrote:
>
>> Perhaps allowOrigins should be set to a wildcard ?
>>
>>
>> On 04/12/15 11:09, Shashank Dutt Jha wrote:
>>
>>> still same error
>>> Error:
>>> XMLHttpRequest cannot load http://localhost:9001/office/offices/123. No
>>> 'Access-Control-Allow-Origin' header is present on the requested
>>> resource.
>>> Origin 'http://localhost:56696' is therefore not allowed access.
>>>
>>>
>>>
>>> Service code:
>>>
>>> @Path("/office/")
>>> public class OfficeOffice {
>>>
>>>
>>> @GET
>>> @CrossOriginResourceSharing(allowAllOrigins = true, allowOrigins = "
>>> http://localhost:56696" ,allowCredentials = true)
>>> @Path("/offices/{id}/")
>>> @Produces("text/plain")
>>> public String getCustomer(@PathParam("id") String id) {
>>> System.out.println("Serving request to customer id\t"+id);
>>> return "Systems";
>>> }
>>> }
>>>
>>> On Fri, Dec 4, 2015 at 4:21 PM, Shashank Dutt Jha <[email protected]
>>> >
>>> wrote:
>>>
>>>
>>>> @CrossOriginResourceSharing(
>>>> allowOrigins = {
>>>> "http://localhost:56696", "*"
>>>> },
>>>> allowCredentials = true,
>>>> maxAge = 1,
>>>> allowHeaders = {
>>>> "X-custom-1", "X-custom-2"
>>>> },
>>>> exposeHeaders = {
>>>> "X-custom-3", "X-custom-4"
>>>> }
>>>> )
>>>>
>>>> @Path("/office/")
>>>> public class OfficeOffice {
>>>>
>>>>
>>>> @GET
>>>> @Path("/offices/{id}/")
>>>> @Produces("text/plain")
>>>> public String getCustomer(@PathParam("id") String id) {
>>>> System.out.println("Serving request to customer id\t"+id);
>>>> return "Systems";
>>>> }
>>>> }
>>>>
>>>> On Fri, Dec 4, 2015 at 10:00 AM, Shashank Dutt Jha <
>>>> [email protected]>
>>>> wrote:
>>>>
>>>> I added following code: Still facing issue
>>>>>
>>>>> @CrossOriginResourceSharing(
>>>>> allowOrigins = {
>>>>> "http://localhost:56696"
>>>>> },
>>>>> allowCredentials = true,
>>>>> maxAge = 1,
>>>>> allowHeaders = {
>>>>> "X-custom-1", "X-custom-2"
>>>>> },
>>>>> exposeHeaders = {
>>>>> "X-custom-3", "X-custom-4"
>>>>> }
>>>>> )
>>>>>
>>>>> @Path("/office/")
>>>>> public class OfficeOffice {
>>>>> int count = 0;
>>>>> Object obj = new Object();
>>>>> @Context
>>>>> private HttpHeaders headers;
>>>>>
>>>>> @GET
>>>>> @CrossOriginResourceSharing(allowOrigins = { "http://localhost:56696"
>>>>> },
>>>>> allowCredentials = false, exposeHeaders = {
>>>>> "X-custom-3", "X-custom-4" })
>>>>> @Path("/offices/{id}/")
>>>>> @Produces("text/plain")
>>>>> public String getCustomer(@PathParam("id") String id) {
>>>>> synchronized (obj) {
>>>>> ++count;
>>>>> System.out.println("----invoking getCustomer, Customer id is: " +
>>>>> count);
>>>>> }
>>>>> return "Systems";
>>>>> // return Response.status(Status.OK).entity("works").build();
>>>>> }
>>>>>
>>>>> // This method will do a preflight check itself
>>>>> @OPTIONS
>>>>> @Path("/")
>>>>> @LocalPreflight
>>>>> public Response options() {
>>>>> String origin = headers.getRequestHeader("Origin").get(0);
>>>>> if ("http://localhost:56696".equals(origin)) {
>>>>> return Response.ok()
>>>>>
>>>>> .header(CorsHeaderConstants.HEADER_AC_ALLOW_METHODS, "DELETE PUT")
>>>>>
>>>>> .header(CorsHeaderConstants.HEADER_AC_ALLOW_CREDENTIALS, "false")
>>>>>
>>>>> .header(CorsHeaderConstants.HEADER_AC_ALLOW_ORIGIN, "
>>>>> http://localhost:56696")
>>>>> .build();
>>>>> } else {
>>>>> return Response.ok().build();
>>>>> }
>>>>> }
>>>>>
>>>>> @GET
>>>>> @CrossOriginResourceSharing(
>>>>> allowOrigins = { "http://localhost:56696" },
>>>>> allowCredentials = true,
>>>>> exposeHeaders = { "X-custom-3", "X-custom-4" }
>>>>> )
>>>>> @Produces("text/plain")
>>>>> @Path("/annotatedGet/{echo}")
>>>>> public String annotatedGet(@PathParam("echo") String echo) {
>>>>> return echo;
>>>>> }
>>>>>
>>>>> On Thu, Dec 3, 2015 at 4:51 PM, Sergey Beryozkin <[email protected]
>>>>> >
>>>>> wrote:
>>>>>
>>>>> Please do not copy exception traces into Subject :-)
>>>>>>
>>>>>> Have a look at
>>>>>> http://cxf.apache.org/docs/jax-rs-cors.html
>>>>>>
>>>>>> Register that filter as a provider
>>>>>>
>>>>>> Sergey
>>>>>> On 03/12/15 11:04, Shashank Dutt Jha wrote:
>>>>>>
>>>>>> I want the REST server to be accessible to web/ browser app. Which is
>>>>>>> correct example to refer to.
>>>>>>>
>>>>>>> On Wed, Dec 2, 2015 at 11:15 AM, Shashank Dutt Jha <
>>>>>>> [email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Server side code:
>>>>>>>
>>>>>>>>
>>>>>>>> protected Server() throws Exception {
>>>>>>>> JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
>>>>>>>> sf.setResourceClasses(CustomerService.class);
>>>>>>>> sf.setResourceProvider(CustomerService.class,
>>>>>>>> new SingletonResourceProvider(new CustomerService()));
>>>>>>>> sf.setAddress("http://161.85.91.7:9000/");
>>>>>>>> sf.create();
>>>>>>>>
>>>>>>>>
>>>>>>>> -------
>>>>>>>> When I try to connect to server from chrome browser I get following
>>>>>>>> error
>>>>>>>>
>>>>>>>> MLHttpRequest cannot load
>>>>>>>> http://161.85.91.7:9001/office/offices/123.
>>>>>>>> Response to preflight request doesn't pass access control check: No
>>>>>>>> 'Access-Control-Allow-Origin' header is present on the requested
>>>>>>>> resource.
>>>>>>>> Origin 'http://localhost:56696' is therefore not allowed access.
>>>>>>>>
>>>>>>>>
>>>>>>>> How to resolve this issue?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> Sergey Beryozkin
>>>>>>
>>>>>> Talend Community Coders
>>>>>> http://coders.talend.com/
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>
>>
>> --
>> Sergey Beryozkin
>>
>> Talend Community Coders
>> http://coders.talend.com/
>>
>
>