?? 整这个玩意,整了好久,原因:策略文件必须放在远程服务器的根目录下。像网上说的在flex的主应用中写入 Security.loadPolicyFile("http:// localhost:8080/direc/crossdomain.xml");来设置访问的路径,,?? 我勒个去,,完全是忽悠人的,,? 整了咱一早上,,好吧,下午在官网上硬着头皮看着英文发现了一句话,原话就不写了,大概意思 :flex始终会在对方服务器上的根目录来查找主策略文件,用Security.loadPolicyFile只是用来找到从策略文件。
? 好吧那就把策略文件丢在服务器的根目录上呗,,结果在强大的ESB/MULE中, 端口号又是一个大问题,,有待研究,,,结果没办法,只能折中一下,用java了·······
?? 废话说了一大堆,上代码:
java端:
?
- package?com.zjht.call;?
- ?
- import?java.io.BufferedInputStream;?
- import?java.io.PrintWriter;?
- import?java.net.HttpURLConnection;?
- import?java.net.SocketTimeoutException;?
- import?java.net.URL;?
- ?
- import?javax.servlet.http.HttpServletRequest;?
- import?javax.servlet.http.HttpServletResponse;?
- ?
- import?org.apache.log4j.Logger;?
- import?org.springframework.stereotype.Controller;?
- import?org.springframework.web.bind.annotation.RequestMapping;?
- import?org.springframework.web.bind.annotation.RequestMethod;?
- ?
- import?com.zjht.hrm.action.AttachmentDownloadAction;?
- ?
- @Controller?
- public?class?CrossdomainAction?{?
- ????private?static?Logger?log?=?Logger.getLogger(AttachmentDownloadAction.class.getClass());?
- ?????
- ????@RequestMapping(value?=?"crossdomain",?method?=?{?RequestMethod.POST,?RequestMethod.GET?})?
- ????public?void?crossdomain(String?url,?final?HttpServletRequest?request,?final?HttpServletResponse?response)?throws?Exception?{?
- ????????response.setCharacterEncoding("UTF-8");?
- ????????response.setContentType("text/xml");?
- ? PrintWriter?out?=?response.getWriter();?
- ????????try?{?
- ????????????out.println(details);?
- ????????}?catch?(Exception?e)?{?
- ????????????log.error("response.sendError?Exception:",e);?
- ????????????throw?new?Exception("数据加载失败请联系研发部:"?+?e.getMessage());?
- ????????}finally{?
- ????????????out.flush();?
- ????????????out.close();?
- ????????}?
- ?
- ????}?
- ?
- ????public?String?GetRemoteDetails(String?urlStr)?throws?Exception?{?
- ????????String?s?=?"";?
- ????????StringBuffer?sb=new?StringBuffer();?
- ????????try?{?
- ????????????URL?url?=?new?URL(urlStr);?
- ????????????HttpURLConnection?connection?=?(HttpURLConnection)?url.openConnection();?
- ????????????connection.setConnectTimeout(30000);?
- ????????????connection.setReadTimeout(30000);?
- ????????????connection.connect();?
- ????????????BufferedInputStream?bis?=?new?BufferedInputStream(connection.getInputStream());?
- ????????????int?c;?
- ????????????while?((c?=?bis.read())?!=?-1)?{?
- ????????????????sb.append((char)c);?
- ????????????}?
- ????????????s=?new?String(sb.toString().getBytes("iso8859-1"),?"utf-8");?
- ????????}catch?(SocketTimeoutException?e)??
- ????????{?
- ????????????log.error("连接超时:",e);?
- ????????????throw?new?Exception("连接超时请联系研发部:"?+?e.getMessage());?
- ????????}catch?(Exception?e)?{?
- ????????????log.error("数据加载失败:",e);?
- ????????????throw?new?Exception("数据加载失败请联系研发部:"?+?e.getMessage());?
- ????????}?
- ????????return?s;?
- ????}?
- ?????
- }?
Flex端:
?
- <s:HTTPService?id="loader"?url="/ChinaExpress/crossdomain.do"??resultFormat="e4x"??method="GET"?useProxy="false"/>?
- ?
- ????loader.addEventListener(ResultEvent.RESULT,ticketInfoList);?
- ????????????????params?=?new?URLVariables();?
- ?
- params.url="URL"?
- loader.send(params);?