我已经创建了一个带有axis2的web服务,并且我已经使用eclipse部署在apache tomcat 7中。
这是我在Web服务中转换的类。这只是一个回声:
package test.org;
public class TestWS {
public String echo(String s){
return ("You typed: " + s);
}
}
如果我从Eclipse尝试这个Web服务,在Web Services Explorer中添加wsdl它可以很好地工作,但是当我尝试从jquery中使用这个ws时会出现问题。
我可以毫无问题地访问wsdl,它位于:http://localhost:8080/SimpleWS/services/TestWS?wsdl
但是,当我尝试此代码时,会发生以下错误:XMLHttpRequest无法加载http://localhost:8080/SimpleWS/services/TestWS
。 Access-Control-Allow-Origin不允许使用null。
我一直在阅读关于CORS以及在服务器端包含这样的代码:Access-Control-Allow-Origin:*,但是因为我直接用eclipse部署了我的ws我不知道如何这样做,我不确定这是不是我的问题。
提前谢谢!!
这是我的代码:
<h3>Web service example</h3>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script type="text/javascript">
function callWS() {
var soapmessage = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' " +
"xmlns:q0='http://org.test' xmlns:xsd='http://www.w3.org/2001/XMLSchema'" +
"xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>";
soapmessage += "<soapenv:Body>";
soapmessage += "<q0:echo>";
soapmessage += "<q0:s>HELLO</q0:s>";
soapmessage += "</q0:echo>";
soapmessage += "</soapenv:Body>";
soapmessage += "</soapenv:Envelope>";
alert(soapmessage);
$.ajax({
type: 'POST',
url: 'http://localhost:8080/SimpleWS/services/TestWS',
data: soapmessage,
contentType: "application/xml; charset=utf-8",
dataType: "xml",
success: function (data) {
alert(data);
},
error: function (data) {
alert("error" + data.d);
}
});
alert("Form Submitted");
}
</script>
<form method="post" action="">
<input type="button" onclick="callWS()" value="execute" />
</form>
</body>
</html>
答案 0 :(得分:0)
我建议采用更简单的方法来做同样的事情。
该功能可能是:
function callWS() {
$.ajax({
url: "http://localhost:8080/SimpleWS/services/TestWS/echo",
type: "POST",
data: { s : "HELLO" },
success: function(data, textStatus, jqXHR) {
alert($(data).find("return").text());
},
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.status + " " + jqXHR.statusText);
}
});
}
在URL中添加要调用的操作名称。数据是一个带有每个参数的键值对的映射。
操作名称和键名必须与WSDL文档匹配,包括响应中每个元素的名称。您可以使用以下命令查看架构文件:
http://localhost:8080/SimpleWS/services/TestWS?xsd
这就是:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ... >
<xs:element name="echo">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="s" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="echoResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
此文件列出了两种主要类型(对于此示例),带有s
元素的请求和带有return
元素的响应。
WSDL显示操作的名称。
<wsdl:binding name="TestWSHttpBinding" type="ns:TestWSPortType">
<http:binding verb="POST"/>
<wsdl:operation name="echo">
<http:operation location="echo"/>
<wsdl:input>
<mime:content type="application/xml" part="parameters"/>
</wsdl:input>
<wsdl:output>
<mime:content type="application/xml" part="parameters"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
另见:
{h1>null
不允许关于原点Access-Control-Allow-Origin
很可能是您使用本地文件使用XMLHttpRequest
发出请求。例如从:
file:///C:/Users/Paul/Desktop/index.html
域,协议和端口与WebService的URL不同。维基百科在Same origin policy中说明了这一点:
术语“origin”是使用域名,应用程序层协议和(在大多数浏览器中)运行脚本的HTML文档的端口号定义的。当且仅当所有这些值完全相同时,才认为两个资源具有相同的来源。
尝试使用相同来源中的文件,例如:
http://localhost:8080/SimpleWS/index.jsp