我开发了一个基本的CXF JAX-WS Web服务。 Web服务的一些细节,界面:
import javax.jws.WebService;
@WebService(name = "MesseSEI", targetNamespace = "http://default_package/")
public interface MesseSEI {
public String ResponseMesse(String input);
}
服务实施:
import javax.jws.WebService;
@WebService(targetNamespace = "http://default_package/", endpointInterface = "MesseSEI", portName = "MessePort", serviceName = "MesseService")
public class Messe implements MesseSEI {
public String ResponseMesse(String input){
return input + " is a good input!";
}
}
为了在HTML页面中调用Web服务,我使用Jquery。
Jquery部分是这样的:
var URL = 'http://localhost:8080/Messe/services/MessePort?wsdl';
var soapMessage='<?xml version="1.0" encoding="utf-8"?>';
soapMessage +='<soapenv:Envelope xmlns:q0="http://default_package/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org /2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">';
soapMessage +='<soapenv:Body>';
soapMessage +='<q0:ResponseMesse>';
soapMessage +='<arg0>Dolar</arg0>';
soapMessage +='</q0:ResponseMesse>';
soapMessage +='</soapenv:Body>';
soapMessage +='</soapenv:Envelope>';
function CallService()
{
$.ajax({
url: URL,
type: "POST",
dataType: "xml",
data: soapMessage,
dataProcess: false,
cache: false,
success: function(data) {
alert("Success: " + data);
},
complete: function(msg){
alert(msg.status +" " + msg.statusText + " " +msg.readyState + " " + msg.redirect);
}
});
return false;
}
使用时首先使用Ajax调用:
contentType: "application/xml; charset=utf-8",
服务器端的请求类型显示为OPTIONS而不是POST。通过从ajax调用中删除contentType,Web服务正在正常接收请求。它只是给出响应状态200 OK并且正确发送SoapEnv。但是,在jquery部分中无法接收响应,说错误回调函数被调用并且在那里,我只看到消息的状态为0.
在搜索类似问题时,我遇到了它可能与CORS问题有关,但我补充说:
jQuery.support.cors = true;
在我的代码中。
要清楚我现在的问题是,Web服务接收请求并使用正确的SOAPenv发回响应但我猜在客户端部分(即ajax jquery调用)响应从未收到,因此它只是将状态设置为0 ,和statusText为UNDEFINED。
我希望我清楚地提到我的问题,任何建议都表示赞赏。提前致谢。
编辑:以下是Web服务中显示的入站和出站邮件:
INBOUND MESSAGE
ID: 16
Address: http://localhost:8080/Deneme/services/DeepThoughtPort?wsdl
Encoding: UTF-8
Http-Method: POST
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Headers: {Accept=[application/xml, text/xml, */*; q=0.01], accept-charset=[ISO-8859-1,utf-8;q=0.7,*;q=0.7], accept-encoding=[gzip, deflate], accept-language=[en-us,en;q=0.5], cache-control=[no-cache], connection=[keep-alive], Content-Length=[299], content-type=[application/x-www-form-urlencoded; charset=UTF-8], host=[localhost:8080], origin=[null], pragma=[no-cache], user-agent=[Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1]}
Payload: <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://ws.skispike.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><q0:messe><arg0>Dolar</arg0></q0:messe></soapenv:Body></soapenv:Envelope>
OUTBOUND MESSAGE
ID: 16
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:messeResponse xmlns:ns2="http://ws.skispike.com/"><return>Dolar is a good input!</return></ns2:messeResponse></soap:Body></soap:Envelope>
答案 0 :(得分:2)
在经历了许多痛苦的日子之后,我解决了我的问题,我想在这里发布会很有帮助。问题确实是跨域问题。添加:
jQuery.support.cors = true;
只是没有解决问题。为了处理CORS问题,您需要执行以下操作:
在我的情况下,我在Tomcat下发布我的web服务。在tomcat中按照:http://software.dzhuvinov.com/cors-filter-installation.html中的说明解决问题。不要忘记将.jar添加到tomcat的/ lib目录和服务项目类路径中。