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 на своем приложении и тот, который находится в самом веб-сервисе, чтобы убедиться, что они соответствуют.