2016-01-31 2 views
0

Я получаю все возможное решение в сети, но не смог пропустить мою проблему. Эксперты, пожалуйста, помогите. Проблема: Создано приложение struts2 и размещено на эластичном бобовом стебле, в котором один класс отображается как служба Rest. Класс выглядит следующим образомДоступ к сервису отдыха, размещенному на aws ec2 из другого домена (jquery ajax), но получающему ошибку CORS

package com.xeon.adworld.restws; 


import java.util.List; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.GET; 
import javax.ws.rs.OPTIONS; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import org.apache.log4j.Logger; 

import com.xeon.adworld.hibernatepojos.Admaster; 
import com.xeon.adworld.hibernatepojos.AdmasterDAO; 
import com.xeon.adworld.hibernatepojos.Businessacc; 
import com.xeon.adworld.hibernatepojos.BusinessaccDAO; 
import com.xeon.adworld.hibernatepojos.Restservicehitinfo; 
import com.xeon.adworld.hibernatepojos.RestservicehitinfoDAO; 

@Path("FetchBusSer") 
public class FetchBusAds { 
static Logger log = Logger.getLogger(FetchBusAds.class); 
@Context 
    private HttpServletRequest request; 

@Context 
    private HttpServletResponse response; 


//@GET 
@OPTIONS 
@Path("/fetchbusads") 
@Produces(MediaType.APPLICATION_XML) 
public Response fetchBusinessAds() { 

    try{ 
     String partnerId=(null!=request.getParameter("pid")?request.getParameter("pid").toLowerCase():""); 
     String ip=(null!=request.getParameter("ip")?request.getParameter("ip").toLowerCase():""); 

    BusinessaccDAO businessaccDAO=new BusinessaccDAO(); 
    List<Businessacc> busList=businessaccDAO.findByBusuuid(partnerId); 
    if(busList.size()>0){ 

    AdmasterDAO admasterDAO=new AdmasterDAO(); 
    //PersonaladsDAO personaladsDAO = new PersonaladsDAO(); 
    List<Admaster> adsList= admasterDAO.getLatestAds(); 
    StringBuffer allAdsString = new StringBuffer(
    "<?xml version=\"1.0\" encoding=\"UTF-8\"?><main>"); 

    for (Admaster result : adsList) { 
     allAdsString.append("<data>"); 
     allAdsString.append("<imgpath>"+result.getImagepath()+"</imgpath>"); 
     allAdsString.append("</data>"); 
    } 

    allAdsString.append("</main>"); 
    System.out.println("allAds : string 7ndst: " + allAdsString.toString()); 

    return Response.ok(allAdsString.toString()).header("Access-Control-Allow-Origin", "*").header("Access-Control-Allow-Methods", "GET, POST, PUT, UPDATE, OPTIONS").header("Access-Control-Allow-Headers", "Content-Type, Accept").build(); 
    }else{ 
     RestservicehitinfoDAO restservicehitinfoDAO=new RestservicehitinfoDAO(); 
     Restservicehitinfo restservicehitinfo = new Restservicehitinfo(); 
     restservicehitinfo.setIpaddress(ip); 
     restservicehitinfo.setAdpartnerid(partnerId); 
     restservicehitinfo.setVisitingdate(new java.util.Date()); 
     restservicehitinfo.setDescription("Bot or False hit"); 
     restservicehitinfoDAO.save(restservicehitinfo); 
     String result="<?xml version=\"1.0\" encoding=\"UTF-8\"?><main></main>"; 

     return Response.ok(result).header("Access-Control-Allow-Origin", "*").header("Access-Control-Allow-Methods", "GET, POST, PUT, UPDATE, OPTIONS").header("Access-Control-Allow-Headers", "Content-Type, Accept").build(); 

    } 
}catch(Exception e){ 
    e.printStackTrace(); 
    log.error("error in fetchbusads rest service : " + e); 
    return null; 
} 
} 

}

================================== === Клиентский код используется для вызова этого класса, как показано ниже

url="http://<<domainname.com>>/rest/FetchBusSer/fetchbusads?pid="+partnerId+"&ip="+ipadd; 
$.ajax({ 
type: 'GET', 
crossOrigin: true, 
url: url, 
contentType: "application/xml", 
success: function(data){ 
alert('insuccess : ' + data); 
if(data){ 
//alert(xml); 
    var main = data; 
    var image; 
    var method=eval(main.getElementsByTagName("main")); 
    for(var i=0;i<method.length;i++){ 
    var tmp=main.getElementsByTagName("data"); 
    var infoDiv=''; 

     for(var j=0;j<tmp.length;j++){ 
     if(tmp[j].getElementsByTagName('imgpath')[0].firstChild!=null){ 

     if(j==0) 
     infoDiv+='<li style="display:block;">'; 
     else 
     infoDiv+='<li style="display:none;">'; 
     infoDiv+='<div class="adcontentDynList">'; 
     image=tmp[j].getElementsByTagName('imgpath')[0].firstChild.data; 
     var url='http://servveradd/hitFromRsServiceLink.action?pid='+partnerId; 
     infoDiv+='<a href='+url+' target="_blank">'; 
     infoDiv+='<img src="http://serveradd'+image+'" class="imageset"/>'; 
     infoDiv+='</a>'; 
     infoDiv+='</div>'; 
     infoDiv+='</li>'; 
     // alert(infoDiv); 
     } 
     } 
     document.getElementById("ticker_"+partnerId).innerHTML=infoDiv; 
    } 
}else{ 
} 
}, 
error: function(jqXHR, textStatus, errorThrown) { alert('something bad happened : ' + errorThrown+'-- '+textStatus+'--'+jqXHR); } 
}); 

============================= =====================================

Успех до сих пор - когда я смотрю вкладку NET Firebug, я получаю вместо этого два вызова одного. Первый звонок совершенен с ответом и его заголовком и источником установлен. Но неявный второй вызов не содержит никакого ответа. Пожалуйста, смотрите снимок экрана я получаю ответ в браузере в то время как я вижу через вкладку поджигатель NET ..

Check the two calls instead of 1, First is correct and 2nd is error

====== другой ПИК имеет Firebug консоли ======= ==

second image is for console of firebug Эксперты Я потратил целый день, чтобы добиться этого, но безуспешно. Пожалуйста, помогите

Благодарности

+0

Любой интересно ответить на этот сложный вопрос .. Эксперты здесь? – user3112954

ответ

0

Просто для справки, я нашел ответ. Причиной ошибки было то, что строковый объект не смог правильно преобразовать объект Response. Решение, как показано ниже вместо возвращения этого

return Response.ok(allAdsString.toString()).header("Access-Control-Allow-Origin", "*").header("Access-Control-Allow-Methods", "GET, POST, PUT, UPDATE, OPTIONS").header("Access-Control-Allow-Headers", "Content-Type, Accept").build(); 

изменить заявление как

return Response.ok().entity(new GenericEntity<String>(allAdsString.toString()) {}).header("Access-Control-Allow-Origin", "*").header("Access-Control-Allow-Methods", "GET").build(); 

И получил его решить