我正在尝试向此web service发送请求以获取响应: 这是我的java代码
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import javax.xml.namespace.QName;
public class TestClient {
public static void main(String[] args) {
try {
String endpoint ="http://www.webservicex.net/geoipservice.asmx";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName("http://www.webservicex.net/","GetGeoIP"));
String response = (String) call.invoke(new Object[] { "192.168.1.8" });
System.out.println("The response is : " + response);
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
当我运行此代码时,我得到了soapException:
Server did not recognize the value of HTTP Header SOAPAction:
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
查看Web服务wsdl,您必须更改“GetGeoIP”
"http://www.webservicex.net/GetGeoIP"
。
最后你有
call.setOperationName(new QName("http://www.webservicex.net/","http://www.webservicex.net/GetGeoIP"));
试试吧。
答案 1 :(得分:0)
当ws主机值与命名空间值不同时,可能会发生这种情况,如下所示:
<wsdl:definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.hostname.com/example" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.namespace.com/example" slick-uniqueid="3">
因此,如果您正在尝试发送请求的Web服务,有时它们只会更改主机而不是命名空间。
为了在Axis中使用“example”,您必须更新主机值而不是更新名称空间值。它应该在
中看起来像这样ExampleLocator.java
class(因为Locator类是你在轴上设置主机的地方):
ExampleSoap_address =“http://www.hostname.com/xxx/example.asmx”
名称空间值应保持与以下相同:
的targetNamespace = “http://www.namespace.com/example”
但保证这样做的方法是从头开始再次创建存根,检查代码中新主机名值的用法并更新这些用法的旧代码。