2009-12-01 39 views
23

Không biết gì về dịch vụ web, tôi chỉ đang cố gắng gọi một số dịch vụ "isAlive" được mô tả bởi một wsdl.Cách gọi một dịch vụ web (được mô tả bằng wsdl) từ java

Điều này có vẻ với tôi như một cái gì đó nên không quá 2-5 dòng mã nhưng tôi dường như không thể tìm thấy bất cứ điều gì nhưng ví dụ dài khổng lồ liên quan đến gói bên thứ 3, vv

Bất cứ ai có bất kỳ ý tưởng? Nếu nó luôn luôn giả sử là dài có thể là một lời giải thích tốt là tại sao nó phải phức tạp như vậy cũng sẽ được đánh giá cao. Tôi đang sử dụng Eclipse và wsdl là SOAP.

+0

Bạn có thể vui lòng cung cấp IDE bạn dùng? – JCasso

+0

Bạn có thể xem wsdl, cho dù đó là SOAP hay bất kỳ giao thức nào khác không? Tôi đoán đó là SOAP nhưng chỉ để đảm bảo. –

+0

Đó là xà phòng: xmlns: ns2 = "http://schemas.xmlsoap.org/soap/encoding và tôi đang sử dụng eclipse IDE – codekitty

Trả lời

4

Có các plugin cho IDE tạo mã cần thiết để sử dụng dịch vụ web cho bạn.

Sau plugin tạo ra cho bạn những phương pháp cơ bản bạn chỉ cần gọi một dịch vụ web như thế:

TransportServiceSoap service = new TransportServiceLocator().getTransportServiceSoap(); 
service.getCities(); 

Có một cái nhìn tại http://urbas.tk/index.php/2009/02/20/eclipse-plug-in-as-a-web-service-client/

+0

lớn liên kết giải quyết vấn đề của tôi ngay lập tức –

5

JDK 6 đi kèm với JAX-WS, tất cả mọi thứ bạn cần để phát triển một khách hàng cho một dịch vụ web.

Tôi không thể tìm thấy một số ví dụ đơn giản, đủ để thông báo, nhưng bắt đầu từ https://jax-ws.dev.java.net/

Edit: đây là một ví dụ rất đơn giản - một khách hàng cho dịch vụ web này: http://xmethods.com/ve2/ViewListing.po?key=427565

C:\temp> md generated 
C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\wsimport -keep -d generated http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl 

Tạo PrimeClient. java mà trông giống như:

import javax.xml.ws.WebServiceRef; 
import com.microsoft.webservices.*; 
//the above namespace is from the generated code from the wsdl. 

public class PrimeClient { 
//Cant get this to work.. @WebServiceRef(wsdlLocation="http://www50.brinkster.com/vbfacileinpt/np.asmx?wsdl") 
    static PrimeNumbers service; 

    public static void main(String[] args) { 
    try { 
    service = new PrimeNumbers(); 
     PrimeClient client = new PrimeClient(); 
     client.doTest(args); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    } 

    public void doTest(String[] args) { 
    try { 
     System.out.println("Retrieving the port from the following service: " + service); 
     PrimeNumbersSoap pm = service.getPrimeNumbersSoap(); 
     System.out.println("Invoking the getPrimeNumbersSoap operation "); 
     System.out.println(pm.getPrimeNumbers(100)); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 

Biên dịch và chạy:

C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\javac -cp generated PrimeClient.java 
C:\temp>"c:\Program Files\Java\jdk1.6.0_17"\bin\java -cp .;generated PrimeClient 
Retrieving the port from the following service: com.microsoft.webservices.PrimeN 
[email protected] 
Invoking the getPrimeNumbersSoap operation 
1,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 
+0

Bạn có chắc chắn rằng bạn không.. đơn giản chỉ cần gọi chính lớp đó? Tôi có thể thấy không có mạng gọi trong mã của bạn không? Nó có hoạt động khi bạn đang ngoại tuyến không? –

+1

@AngeloNeuschitzer wdsl chứa địa chỉ mạng và mã được tạo sẽ đảm nhiệm việc thiết lập kết nối với dịch vụ đó.Điều này rõ ràng không hoạt động nếu bạn đang ngoại tuyến vì máy chủ sẽ không thể truy cập được – nos

+2

Cả hai liên kết trong câu trả lời đều đã chết. – tdgtyugdyugdrugdr

1

There are three ways to write a web service client

  1. động Proxy
  2. động giao diện gọi (DII)
  3. ứng dụng client

Ví dụ cho động Proxy Client

import java.net.URL; 

import javax.xml.rpc.Service; 

import javax.xml.rpc.JAXRPCException; 

import javax.xml.namespace.QName; 

import javax.xml.rpc.ServiceFactory; 

import dynamicproxy.HelloIF; 

public class HelloClient { 

    public static void main(String[] args) { 
     try { 

      String UrlString = "Your WSDL URL"; // 
      String nameSpaceUri = "urn:Foo"; 
      String serviceName = "MyHelloService"; 
      String portName = "HelloIFPort"; 

      System.out.println("UrlString = " + UrlString); 
      URL helloWsdlUrl = new URL(UrlString); 

      ServiceFactory serviceFactory = 
       ServiceFactory.newInstance(); 

      Service helloService = 
       serviceFactory.createService(helloWsdlUrl, 
       new QName(nameSpaceUri, serviceName)); 

      dynamicproxy.HelloIF myProxy = 
       (dynamicproxy.HelloIF) 
       helloService.getPort(
       new QName(nameSpaceUri, portName), 
       dynamicproxy.HelloIF.class); 

      System.out.println(myProxy.sayHello("Buzz")); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

I hope , this would solve your question.

+0

Điều này có vẻ đơn giản, tôi sẽ cố gắng này ngay bây giờ. – codekitty

+0

nhật thực không thể tìm thấy các mục nhập này. Tôi cần thêm gói nào vào đường dẫn xây dựng của mình? – codekitty

+0

Tất cả các gói đều đi kèm với JDK ngoại trừ "import dynamicproxy.HelloIF;", bạn có thể xóa gói này. – Tony

-2

Các dễ nhất tôi đã tìm thấy cho đến nay để sử dụng là Idea IntelliJ thuật sĩ đó - sử dụng thư viện Metro - tạo ra một đoạn mã rất nhỏ mà làm việc tốt với Java 6.

+0

downvote? Đúng của nó :) Hoạt động tốt với Java 6 mà không có bất kỳ thư viện bổ sung, đó là. –

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