2013-06-01 6 views
12

Mam prosty serwis internetowy "HelloWorld" wdrożony na jboss pod ubuntu. Stworzyłem prostego klienta, ale nie mogę go uruchomić. Otrzymuję NullPointerException za każdym razem, gdy uruchamiam klienta.JAVA JAX-WS NullPointerException na javax.xml.ws.Service.getPort (Service.java:188)

Zauważ, że używam Oracle Java 7 w systemie Ubuntu.

tutaj kod: 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) 

wyjątkowych możliwości na jest wyrzucane na tej linii:

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

Tylko krótki komentarz i być może zupełnie niezwiązany z twoim problemem, ale twoje 'QName' ma dodatkowe'/'. Czy to literówka? –

+1

@SamRad może być odpowiedni. Wyjaśni, dlaczego "usługa" może być pusta – kolossus

+0

Nie ma dodatkowego "/". Piszesz URL jak "http: // coś /". W tym przypadku po prostu nie ma "czegoś". Również usługa nie ma wartości NULL. Spójrz na stacktrace – Bladositto

Odpowiedz

3

miałem ten sam problem się przez kilka dni teraz, ponieważ plik WSDL (i usługi) używałem został przeniesiony do nowego adresu URL. I w końcu znaleźć rozwiązanie tutaj:

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

Krótko mówiąc, wszystko (powinna mieć) rozpoczął pracę po tym, jak ponownie generowane wszystkie Java i klasa pliki generowane automatycznie za pomocą następującego polecenia (Windows/Cygwin)

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

miałem jakiś dodatkowy problem, ponieważ niektóre stare pliki zostały pozostawione wokół i starcia z nowo wytworzonych z nich, ale wszystko powoli zaczęło działać po przeniosłem wszystkie stare pliki do kosza.

0

Może się tak również zdarzyć, jeśli implementacja usługi sieciowej różni się od implementacji interfejsu w projekcie.

Jeśli w twoim projekcie masz HelloWorld.class deklarujący niektóre metody, które nie są obecne po stronie usługi sieciowej, wywołanie getPort (HelloWorld.class) spowoduje zgłoszenie wyjątku wskaźnika pustego.

Możesz dwukrotnie sprawdzić interfejs HelloWorld.class w swojej aplikacji i ten w samej usłudze sieciowej, aby upewnić się, że są zgodne.