Как вызвать веб-сервис (описанный wsdl) из java
Не зная о веб-сервисах, я просто пытаюсь вызвать некоторую услугу "isAlive", которая описывается wsdl.
Мне кажется что-то, что должно занимать не более 2-5 строк кода, но я не могу найти ничего, кроме огромных длинных примеров с участием сторонних пакетов и т.д.
У кого-нибудь есть идеи? Если всегда полагать, что быть длинным, возможно, хорошее объяснение того, почему оно должно быть настолько сложным, также будет оценено.
Я использую Eclipse, а wsdl - SOAP.
Ответы
Ответ 1
JDK 6 поставляется с jax-ws, все, что вам нужно для разработки клиента для веб-службы.
Я не могу найти несколько простых примеров для публикации, но начинаю с https://jax-ws.dev.java.net/
Изменить: здесь простой пример - клиент для этой веб-службы: 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
Ответ 2
Существуют плагины для IDE, которые генерируют необходимый код для использования веб-службы для вас.
После того, как плагин генерирует вам базовые методы, вы просто вызываете веб-службу:
TransportServiceSoap service = new TransportServiceLocator().getTransportServiceSoap();
service.getCities();
Посмотрите http://urbas.tk/index.php/2009/02/20/eclipse-plug-in-as-a-web-service-client/
Ответ 3
Существует три способа записи клиента веб-службы
- Динамический прокси
- Интерфейс динамического вызова (DII)
- Клиент приложений
Пример для клиента динамического прокси-сервера
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();
}
}
}
Надеюсь, это решит ваш вопрос.
Ответ 4
Самый легкий, который я нашел до сих пор, - это мастер Idea IntelliJ, который, используя библиотеки Metro, генерирует очень маленький фрагмент кода, который отлично работает с Java 6.