2013-06-01 11 views
12

Ho un semplice servizio Web "HelloWorld" distribuito su jboss sotto ubuntu. Ho creato un client semplice, ma non riesco a farlo funzionare. Ricevo NullPointerException ogni volta che eseguo il client.JAVA JAX-WS NullPointerException su javax.xml.ws.Service.getPort (Service.java:188)

Nota che sono in esecuzione su Oracle Java 7 su Ubuntu.

Ecco il codice: 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) 

L'excepti on è gettato in questa linea:

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

Solo un breve commento e forse completamente irrilevante per il tuo problema, ma il tuo 'QName' ha un extra'/'. È un errore di battitura? –

+1

@SamRad potrebbe essere rilevante. Spiegherei perché 'service' potrebbe essere nullo – kolossus

+0

Non c'è nessun"/"extra. Scrivi url come "http: // something /". In questo caso non c'è "qualcosa". Anche il servizio non è nullo. Guarda lo stacktrace – Bladositto

risposta

3

ho avuto lo stesso problema me stesso per qualche giorno, perché il WSDL file (e servizio) usavo è stato spostato ad un nuovo URL. Ho finalmente trovato la soluzione qui:

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

In breve, tutto (dovrebbe avere) iniziato a lavorare dopo ho ri-generato tutti i file Java e di classe auto-generate il seguente comando (su Windows/Cygwin)

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

ho avuto qualche problema in più perché alcuni vecchi file sono stati lasciati in giro e scontrandosi con quelle appena generato, ma tutto lentamente hanno iniziato a lavorare dopo mi sono trasferito tutti i vecchi file nel cestino.

0

Può anche accadere se l'implementazione del servizio Web è diversa dall'interfaccia del progetto.

Se nel tuo progetto hai HelloWorld.class che dichiara alcuni metodi che non sono presenti sul lato del servizio web, la chiamata getPort (HelloWorld.class) genererà un'eccezione di puntatore nullo.

È possibile ricontrollare l'interfaccia HelloWorld.class sull'applicazione e quella sul servizio Web stesso per accertarsi che corrispondano.