线程“main”中的异常com.sun.xml.internal.ws.fault.ServerSOAPFaultException:客户端从服务器收到SOAP Fault

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程“main”中的异常com.sun.xml.internal.ws.fault.ServerSOAPFaultException:客户端从服务器收到SOAP Fault相关的知识,希望对你有一定的参考价值。

我正在尝试学习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添加了一些谷歌的IP

但是当在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)

enter image description here

enter image description here

答案

某些地址不会出现在数据库中,因此无法映射。这是IP地址位置(地理位置)的限制之一。

您应该尝试使用此IP地址212.58.246.79

它应该显示“英国”

您可以在这里阅读更多关于地理定位的信息:https://www.lifewire.com/does-ip-address-geolocation-really-work-818154

希望这对你有所帮助。

另一答案

分析这个问题非常具有挑战性;但是,这种异常简单意味着服务客户端Soap Web服务不再支持该请求。您可能正在使用客户端使用最旧版本的最新JDK版本。

例如:我使用的是JDK1.8,客户端使用jdk1.6,JavaBrains也使用JDK 1.6。

解决方案:检查计算机上的JDK版本

另一答案

这也可能是由于SOAP请求中的错误导致的。例如:请求用户名或密码值可能具有额外的“”或其他一些字符。您可以使用SOAPUI对其进行验证,并在代码中更正请求。

以上是关于线程“main”中的异常com.sun.xml.internal.ws.fault.ServerSOAPFaultException:客户端从服务器收到SOAP Fault的主要内容,如果未能解决你的问题,请参考以下文章

我的代码上的线程“main”java.util.NoSuchElementException 中的异常?

如何修复运行时错误-线程“main”java.util.NoSuchElementException中的异常

HTTPClient 示例 - 线程“main”中的异常 java.lang.NoSuchFieldError: INSTANCE

为啥我在代码中的线程“main”java.lang.StringIndexOutOfBoundsException 错误中收到异常?

线程“main”中的 Java 异常 java.lang.StringIndexOutOfBoundsException 错误

线程“main”中的异常 java.lang.ExceptionInInitializerError (Clojure)