【发布时间】:2015-04-11 15:40:49
【问题描述】:
我想做的事:使用带有 jQuery Soap 插件(由 Remy Blom 编写)的 jQuery 从 JavaScript 调用跨域 SOAP 服务。 (也就是我在JavaScript中调用$.soap();)
我做了什么:服务器端 (CXF) 上的 CORS 设置正在工作(使用 org.eclipse.jetty.servlets.CrossOriginFilter),因此答案中存在以下内容:
Access-Control-Allow-Head... X-Requested-With,Content-Type,Accept,Origin
Access-Control-Allow-Meth... GET,POST,OPTIONS,HEAD
Access-Control-Allow-Orig... http://localhost:8082
Content-Type application/soap+xml;charset=UTF-8
缺少什么:Firefox 和 Chrome 在 SOAP 调用的 POST 请求之前发送预检 OPTIONS 请求。显然 SOAP 不允许使用 OPTIONS 动词。
它不适用于 SoapUI (5.0) 和 CXF (2.7.7)。甚至在org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor line 130ff 的评论中说明了这一点:
/*
* Reject OPTIONS, and any other noise that is not allowed in SOAP.
*/
所以,我的问题是:如何修改我的 SOAP 服务实现(使用 CXF),以使 OPTIONS 请求成功返回?
【问题讨论】:
-
如果我理解正确的话;然后,您只需要使用 @OPTIONS 注释您的 WebService 类。见:cxf.apache.org/docs/jax-rs-cors.html
-
@YoriKusanagi 这描述了如何为 REST 服务而不是 SOAP 服务解决这个问题。
标签: javascript jquery soap cxf cors