JAVA JAX-WS NullPointerException в javax.xml.ws.Service.getPort(Service.java:188)

У меня есть простой веб-сервис "HelloWorld", развернутый на jboss под ubuntu. Я создал простой клиент, но я не могу заставить его работать. Я получаю NullPointerException каждый раз, когда я запускаю клиент.

Обратите внимание, что я работаю на Oracle Java 7 под Ubuntu.

Вот код: 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);

}

StackTrace:

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);

Ответ 1

У меня была одна и та же проблема в течение нескольких дней, потому что используемый WSDL файл (и служба) был перенесен на новый URL-адрес. Я, наконец, нашел решение здесь:

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

Короче говоря, все (должно быть) начало работать после того, как я сгенерировал все автоматически сгенерированные файлы java и class со следующей командой (в Windows/CygWin)

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

У меня были некоторые дополнительные проблемы, потому что некоторые старые файлы были оставлены и столкнулись с недавно созданными, но все медленно начало работать после того, как я переместил все старые файлы в корзину.

Ответ 2

Это также может произойти, если ваша реализация веб-сервиса отличается от интерфейса вашего проекта.

Если в вашем проекте у вас есть HelloWorld.class, объявляющий некоторые методы, отсутствующие на стороне веб-службы, вызов getPort (HelloWorld.class) вызывает исключение нулевого указателя.

Вы можете дважды проверить интерфейс HelloWorld.class на своем приложении и тот, который находится в самом веб-сервисе, чтобы убедиться, что они соответствуют.