我正在尝试学习SOAP协议。所以在使用下面的命令借助wsimport生成net.webservicex
代码之后
C:\ Program Files \ Java \ jdk1.8.0_74 \ bin> wsimport -keep -s src http://www.webservicex.net/geoipservice.asmx?WSDL
我将生成的代码放在我的项目中(请查看下面的屏幕截图)。我在run configurations --> java application --> arguments --> programm arguments--> 216.58.213.238
但是当在main
类中执行IPLocationFinder
方法时,我收到以下错误:
IPLocationFinder类
import net.webservicex.GeoIP;
import net.webservicex.GeoIPService;
import net.webservicex.GeoIPServiceSoap;
public class IPLocationFinder {
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("You need to pass in one IP address");
} else {
String ipAddress = args[0];
GeoIPService ipService = new GeoIPService();
GeoIPServiceSoap geoIPServiceSoap = ipService.getGeoIPServiceSoap();
// Here is line 14.
GeoIP geoIP = geoIPServiceSoap.getGeoIP(ipAddress);
System.out.println(geoIP.getCountryName());
}
}
}
错误
Exception in thread "main" com.sun.xml.internal.ws.fault.ServerSOAPFaultException: Client received SOAP Fault from server: System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at WebserviceX.Service.Adapter.IPAdapter.CheckIP(String IP)
at WebserviceX.Service.GeoIPService.GetGeoIP(String IPAddress)
--- End of inner exception stack trace --- Please see the server log to find more detail regarding exact cause of the failure.
at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(Unknown Source)
at com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(Unknown Source)
at com.sun.xml.internal.ws.client.sei.StubHandler.readResponse(Unknown Source)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(Unknown Source)
at com.sun.xml.internal.ws.db.DatabindingImpl.deserializeResponse(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
at com.sun.proxy.$Proxy31.getGeoIP(Unknown Source)
at IPLocationFinder.main(IPLocationFinder.java:14)
答案 0 :(得分:2)
某些地址不会出现在数据库中,因此无法映射。这是IP地址位置(地理位置)的限制之一。
您应该尝试使用此IP地址 的 212.58.246.79 强>
它应显示"英国"
您可以在此处详细了解地理位置:https://www.lifewire.com/does-ip-address-geolocation-really-work-818154
希望这会对你有所帮助。
答案 1 :(得分:0)
这个问题很难分析;但是,这种异常简单意味着服务客户端Soap Web服务不再支持该请求。您可能正在使用客户端使用最旧版本的最新JDK版本。
例如:我使用的是JDK1.8,客户端使用jdk1.6,JavaBrains也使用JDK 1.6。
解决方案:检查计算机上的JDK版本
答案 2 :(得分:0)
这也可能是由于正在传递的soap请求中出现错误。例如:请求的用户名或密码值可能带有额外的“ \”或其他字符。您可以使用SOAPUI对其进行验证,并在代码中更正请求。