【问题标题】:JAVA JAX-WS NullPointerException at javax.xml.ws.Service.getPort(Service.java:188)javax.xml.ws.Service.getPort(Service.java:188) 处的 JAVA JAX-WS NullPointerException
【发布时间】:2023-03-04 20:56:01
【问题描述】:

我在 ubuntu 下的 jboss 上部署了简单的“HelloWorld”网络服务。 我创建了简单的客户端,但我无法让它工作。每次运行客户端时都会收到 NullPointerException。

请注意,我在 Ubuntu 下的 Oracle Java 7 上运行。

代码如下: HelloWorldClient.java

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;


public class HelloWorldClient {

public static void main(String[] args){
    URL url;
    try {
        url = new URL("http://localhost:8080/WebServiceProject/helloWorld?wsdl");
        QName qname = new QName("http:///", "HelloWorldImplService");

        Service service = Service.create(url, qname);

        HelloWorld hello = service.getPort(HelloWorld.class);

         System.out.println(hello.sayHello("mkyong"));
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

}

HelloWorld.java

import javax.jws.WebMethod;
import javax.jws.WebService;


@WebService
public interface HelloWorld {

    @WebMethod
    public String sayHello(String name);

}

堆栈跟踪:

Exception in thread "main" java.lang.NullPointerException
at com.sun.xml.internal.ws.model.RuntimeModeler.getPortTypeName(RuntimeModeler.java:1407)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:334)
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:354)
at javax.xml.ws.Service.getPort(Service.java:188)
at HelloWorldClient.main(HelloWorldClient.java:18)

在这一行抛出异常:

HelloWorld hello = service.getPort(HelloWorld.class);

【问题讨论】:

  • 只是一个简短的评论,可能与您的问题完全无关,但您的QName 有一个额外的/。是不是笔误?
  • @SamRad 可能是相关的。将解释为什么 service 可能为空
  • 没有多余的“/”。你写像“something”这样的网址。在这种情况下,没有“东西”。服务也不为空。查看堆栈跟踪
  • 您是从 ide 运行客户端吗?例如日食?如果是这样,请确保 jboss 使用的 jdk 与 eclipse 使用的 jdk 相同。也许一个正在运行 oracle jdk 7(正如你提到的)但 eclipse 正在运行 openjdk。
  • 你使用哪个 JDK?我在 getPort 也遇到了空指针异常,我通过将我的 JDK 从 1.6 版本升级到 1.7 来解决它。希望它会有所帮助。

标签: web-services nullpointerexception jax-ws port


【解决方案1】:

这几天我自己也遇到了同样的问题,因为我使用的 WSDL 文件(和服务)被移到了一个新的 URL。我终于在这里找到了解决方案:

http://techtracer.com/2007/08/15/jax-ws-jaxp-tutorial-building-a-stockquote-web-service-client/

简而言之,在我使用以下命令(在 Windows/CygWin 上)重新生成所有自动生成的 java 和类文件后,一切(应该)都开始工作了

"C:/Program Files/Java/jdk1.8.0_31/bin/wsimport.exe" -keep  https://domain.com/path_to_wsdl

我遇到了一些额外的麻烦,因为一些旧文件被遗留下来并与新生成的文件发生冲突,但是在我将所有旧文件移到回收站后,一切都慢慢开始工作了。

【讨论】:

    【解决方案2】:

    如果您的 Web 服务的实现与您项目的接口不同,也会发生这种情况。

    如果您的项目中有 HelloWorld.class 声明了一些 Web 服务端不存在的方法,则 getPort(HelloWorld.class) 调用将引发空指针异常。

    您可以仔细检查应用程序上的 HelloWorld.class 接口和网络服务本身的接口,以确保它们匹配。

    【讨论】:

    • 嗨,我想我遇到了同样的问题。我也得到一个NPE。打印的堆栈跟踪包括“javax.xml.ws.Service.getPort(Service.java:119)”。我怎样才能“您可以仔细检查应用程序上的 HelloWorld.class 接口和 Web 服务本身的接口以确保它们匹配”?谢谢!
    • @user3441604 我遇到了和你一样的问题。至少从异常的行号来看是一样的。下面给出的链接中提供的解决方案对我有用:jcraftsmen.com/…
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多