В процессе работы нам приходится сталкиваться с различными вариантами реализации клиентов веб сервисов. Сравнивая их по производительности и сложности разработки, мы старались найти оптимальный вариант для различных ситуаций. Мы убедились что нельзя замыкаться на каком-то одном варианте. Окончательный выбор во многом зависит от конкретных условий.
В этом примере мы покажем как сделать простой тестовый веб сервис и сравним скорость работы 4 различных клиентов.
Для теста мы не станем придумывать ничего сложного. Клиент будет посылать строку, сервер поменяет слова местами и вернет обратно.
Начнем проектирование веб сервиса с написания WSDL файла. В нем опишем интерфейс сервиса и объекты таким образом:
Интерфейс сервиса:
<message name="jokerRequest"> <part name="rq" element="tws:methodRequest"/> </message> <message name="jokerResponse"> <part name="rs" element="tws:methodResponse"/> </message>
Объекты запроса и ответа:
<xsd:element name="methodRequest"> <xsd:annotation> <xsd:documentation xml:lang="en">Joker request.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:attribute name="reqString" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element> <xsd:element name="methodResponse"> <xsd:annotation> <xsd:documentation xml:lang="en">Joker response.</xsd:documentation> </xsd:annotation> <xsd:complexType> <xsd:attribute name="resString" type="xsd:string" use="required" /> </xsd:complexType> </xsd:element>
Описание сервиса. Пусть будет на 80 порту:
<service name="Joker"> <port name="Joker" binding="tws:jokerSOAPBinding"> <soap:address location="http://localhost"/> </port> </service>
Полный WSDL можно скачать ниже.
Теперь, точно так же, как написано в предыдущей статье, сгенерируем объекты и интерфейс сервиса:
%JAVA_HOME%\bin\wsimport.exe test.wsdl -s src -d classes
Готово. Вот такой список файлов получился:
localhost
Joker_Service.java
Joker.java
MethodRequest.java
MethodResponse.java
ObjectFactory.java
package-info.java
Самое страшное позади. Осталось написать имплементацию сервиса и выложить все на сервер.
Делаем файл JokerImpl.java реализующий интерфейс Joker:
package localhost;
import java.util.StringTokenizer;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import org.jboss.wsf.spi.annotation.WebContext;
@WebService(serviceName = "Joker", name = "Joker", targetNamespace = "http://localhost")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@WebContext( contextRoot = "/joker" , urlPattern="/wsbase" )
public class JokerImpl implements Joker {
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
@WebMethod
@WebResult(name = "methodResponse", targetNamespace = "http://localhost", partName = "rs")
public MethodResponse shift(@WebParam(name = "methodRequest", targetNamespace = "http://localhost", partName = "rq") MethodRequest rq) {
String ret = "";
StringTokenizer tokenizer = new StringTokenizer(rq.getReqString(), "+");
while (tokenizer.hasMoreTokens()) {
ret = tokenizer.nextToken() + "+" + ret;
}
MethodResponse res = new MethodResponse();
res.setResString(ret);
return res;
}
}
Добавление нескольких аннотаций потребует подключения к проекту пары библиотек из набора сервера JBoss. Это jboss-ejb3x.jar и jbossws-spi.jar.
Как видно из кода, после публикации мы сможем найти WSDL нашего сервиса по следующему адресу: http://localhost/joker/wsbase?wsdl
Теперь создаем пакет для публикации вот в таком виде:
joker.ear
joker.jar
localhost
Joker_Service.class
Joker.class
JokerImpl.class
MethodRequest.class
MethodResponse.class
ObjectFactory.class
package-info.class
META-INF
MANIFEST.MF
META-INF
application.xml
Содержание application.xml:
<application> <display-name>joker</display-name> <module> <java>joker.jar</java> </module> </application>
Совсем не обязательно паковать joker.ear. Во всяком случае, нам намного удобнее вносить изменения в проект в таком виде. А серверу все равно.
Поместим папку joker.ear сюда: jboss/server/default/deploy/. При запуске необходимо убедиться, что все порты, необходимые серверу JBoss свободны. Если все прошло успешно, то, как и планировали, WSDL появиться тут: http://localhost/joker/wsbase?wsdl
Microgames.ru v.2 - Новости, примеры, статьи о программировании.
Сделано в 2006 году. Перевыпущен в 2008 году.
Сайт содержит оригинальные материалы и переводы.
Сообщения об ошибках просьба присылать по адресу: contact@microgames.ru
Новое сообщение