2009-12-01 4 views
23

Не зная о веб-сервисах, я просто пытаюсь вызвать службу «isAlive», которая описывается wsdl.Как вызвать веб-сервис (описанный wsdl) из java

Это кажется мне как-то, что должно занимать не более 2-5 строк кода, но я не могу найти ничего, кроме огромных длинных примеров, связанных с третьей стороной пакеты и т.д.

Каждый имеет какие-либо идеи? Если всегда полагать, что быть длинным, возможно, хорошее объяснение того, почему оно должно быть настолько сложным, также будет оценено. Я использую Eclipse, а wsdl - SOAP.

+0

Можете ли вы предоставить IDE ты используешь? – JCasso

+0

Можете ли вы посмотреть на wsdl, будь то SOAP или какой-либо другой протокол? Я думаю, это SOAP, но просто чтобы убедиться. –

+0

Это мыло: xmlns: ns2 = "http://schemas.xmlsoap.org/soap/encoding и я использую eclipse IDE – codekitty

ответ

4

Есть плагины для IDE, которые генерируют необходимый код для использования веб-службы для вас.

После того, как плагин генерирует вам базовые методы, которые вы просто вызываете веб-службы, как, что:

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

взглянуть на http://urbas.tk/index.php/2009/02/20/eclipse-plug-in-as-a-web-service-client/

+0

Отличная ссылка. Решила мою проблему мгновенно. –

5

JDK 6 поставляется с JAX-WS, все, что вам нужно разработать клиент для веб-службы.

Я не могу найти некоторые достаточно простые примеры пост, но начинаются в https://jax-ws.dev.java.net/

Edit: Вот простой пример - клиент для данного веб-сервиса: 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 

Создать PrimeClient. Java, который выглядит следующим образом:

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(); 
    } 
    } 
} 

компилировать и запускать:

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

Вы уверены, что не знаете, просто вызовите сам класс? Я не вижу никакого сетевого вызова в вашем коде? Он работает, когда вы тоже офлайн? –

+1

@AngeloNeuschitzer wdsl содержит сетевой адрес, и сгенерированный код заботится о настройке подключения к этой службе.Это явно не работает, если вы в автономном режиме, так как сервер будет недоступен – nos

+2

Обе ссылки в ответе мертвы. – tdgtyugdyugdrugdr

1

There are three ways to write a web service client

  1. Динамический прокси
  2. Динамический интерфейс вызова (DII)
  3. клиент Применение

Пример для динамического прокси Клиент

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

Это выглядит достаточно просто, я собираюсь попробовать это прямо сейчас. – codekitty

+0

eclipse не может найти их. какие пакеты мне нужно добавить в мой путь сборки? – codekitty

+0

Все пакеты поставляются с JDK, кроме «import dynamicproxy.HelloIF;», вы можете удалить этот пакет. – Tony

-2

Самый простой я нашел до сих пор использовать это идея мастер IntelliJ, который - с помощью библиотеки Metro - генерировать очень небольшой фрагмент кода, который прекрасно работает с Java 6.

+0

downvote? Его правда :) Хорошо работает с Java 6 без каких-либо дополнительных библиотек, то есть. –

Смежные вопросы