Я получаю все возможное решение в сети, но не смог пропустить мою проблему. Эксперты, пожалуйста, помогите. Проблема: Создано приложение 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 Эксперты Я потратил целый день, чтобы добиться этого, но безуспешно. Пожалуйста, помогите
Благодарности
Любой интересно ответить на этот сложный вопрос .. Эксперты здесь? – user3112954