2013-06-01 23 views
12

Tôi có dịch vụ web "HelloWorld" đơn giản được triển khai trên jboss trong ubuntu. Tôi đã tạo khách hàng đơn giản, nhưng tôi không thể làm cho nó hoạt động. Tôi nhận được NullPointerException mỗi khi tôi chạy máy khách.JAVA JAX-WS NullPointerException tại javax.xml.ws.Service.getPort (Service.java:188)

Lưu ý rằng tôi đang chạy trên Oracle Java 7 trong Ubuntu.

Đây là mã: 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) 

Các excepti trên được ném vào dòng này:

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

Chỉ cần nhận xét nhanh và có thể hoàn toàn không liên quan đến vấn đề của bạn nhưng 'QName' của bạn có thêm'/'. Nó là một lỗi đánh máy? –

+1

@SamRad có thể có liên quan. Sẽ giải thích tại sao 'dịch vụ' có thể là rỗng – kolossus

+0

Không có thêm"/". Bạn viết url như "http: // something /". Trong trường hợp này, không có "cái gì". Dịch vụ cũng không phải là rỗng. Nhìn vào stacktrace – Bladositto

Trả lời

3

Tôi đã gặp vấn đề tương tự trong vài ngày, vì tệp WSDL (và dịch vụ) tôi đang sử dụng đã được chuyển sang URL mới. Cuối cùng tôi đã tìm thấy giải pháp ở đây:

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

Nói tóm lại, tất cả mọi thứ (nên có) bắt đầu làm việc sau khi tôi tái tạo tất cả các java và lớp các file tự động tạo ra với lệnh sau đây (trên Windows/Cygwin)

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

Tôi gặp thêm một số rắc rối vì một số tệp cũ bị bỏ qua và xung đột với những tệp mới được tạo ra, nhưng mọi thứ đều bắt đầu hoạt động sau khi tôi chuyển tất cả các tệp cũ vào thùng rác.

0

Điều này cũng có thể xảy ra nếu việc triển khai dịch vụ web của bạn khác với giao diện từ dự án của bạn.

Nếu trong dự án của bạn, bạn có HelloWorld.class khai báo một số phương thức không có mặt ở phía dịch vụ web, lệnh gọi getPort (HelloWorld.class) sẽ tăng ngoại lệ con trỏ null.

Bạn có thể kiểm tra kỹ giao diện HelloWorld.class trên ứng dụng của mình và giao diện trên chính dịch vụ web để đảm bảo chúng khớp nhau.

Các vấn đề liên quan