МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра Вычислительной техники
ОТЧЁТ
по лабораторной работе №5
по дисциплине «Распределённые системы»
Тема: ВЕБ-СЛУЖБЫ
Студенты гр. |
|
|
|
|
|
|
|
|
|
|
|
Преподаватель |
|
Бекенёва Я.А. |
Оглавление
1. Введение 3
1.1. Введение 3
1.2. Порядок выполнения работы 3
1.2.1. Основные понятия 3
1.2.2. Создание и тестирование веб службы в IDE NetBeans 5
2. Тексты программ 7
2.1. Bank.java 7
2.2. BankIncapsulation.java 9
2.3. BankService.java 11
2.4. BankServiceImplementation.java 12
2.5. BankServiceMain.java 15
2.6. pom.xml 16
2.7. dependency-reduced-pom.xml 20
2.8. bankrequests.wsdl 22
2.9. bankrequests.xsd 27
3. Ход работы 30
4. Вывод 35
5. Список использованных источников 36
1. Введение
1.1. Введение
Тема работы: Веб-службы.
Задание на лабораторную работу: Разработать веб-службу, осуществляющую конвертацию некоторой целой величины amount в величину amount*rate, целое amount и вещественное rate задаётся пользователем. Разработать сервлет-клиент для данной службы.
1.2. Порядок выполнения работы
1.2.1. Основные понятия
Веб-служба (веб-сервис, web service) - идентифицируемая веб-адресом (URI) программная система со стандартизированными интерфейсами.
Главные особенности веб-служб:
1. Веб-службы - самодостаточны, т.е. с клиентской стороны не требуется никакого дополнительного программного обеспечения кроме языка программирования, поддерживающего работу с XML и HTTP, а на серверной стороне требуются только HTTP-сервер, поддерживающий работу с посланиями.
2. Веб-службы являются самоописываемыми, поскольку метаданные, описывают сообщения передается вместе с сообщением и не требуется никаких внешних хранилищ метаданных.
Концепция веб-служб представлена на рисунке ниже.
Рисунок 1. Концепция веб-служб
Можно выделить три инстанции, взаимодействующие в рамках веб-службы:
• заказчик;
• исполнитель;
• каталог.
Когда служба разработана, исполнитель регистрирует её в каталоге, где её могут найти потенциальные заказчики. Заказчик, найдя в каталоге подходящую службу, импортирует оттуда её WSDL-спецификацию и разрабатывает в соответствии с ней свое программное обеспечение. WSDL описывает формат запросов и ответов, которыми обмениваются заказчик и исполнитель в процессе работы.
Для обеспечения взаимодействия используются следующие стандарты:
• XML: Расширяемый язык разметки, предназначенный для хранения и передачи структурированных данных;
• SOAP: Протокол обмена сообщениями на базе XML;
• WSDL: Язык описания внешних интерфейсов веб-службы на базе XML;
• UDDI: Универсальный интерфейс распознавания, описания и интеграции - каталог веб-служб и сведений о компаниях, предоставляющих веб-службы во всеобщее пользование или конкретным компаниям.
1.2.2. Создание и тестирование веб службы в ide NetBeans
Создать веб-службу в NetBeans можно путём создания нового веб-приложения и добавления к созданному проекту веб-службы. При создании проекта на сервере GlassFish следует выбрать «Реализовать веб-службу в качестве сеансового компонента сеанса без сохранения состояния».
Созданная веб-служба имеет вид:
import javax.ejb.Stateless;
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.WebParam;
@WebService(serviceName = "NewWebService") // (1)
@Stateless()
public class NewWebService {
@WebMethod(operationName = "hello") // (2)
public String hello(
@WebParam(name = "name") // (3)
String txt) {
return "Hello " + txt + " !";
}
}
Функционал веб-службы описывается в виде набора операций класса, перед описанием которого содержится строка, подобная строке (1). Перед методами, представляющими функционал веб-службы, записывается строка, подобная строке (2) листинга. Перед каждым аргументом метода записывается строка, подобная строке (3) листинга.
После того, как код веб-службы написан, её можно протестировать, если используемый сервер приложений поддерживает подобный функционал (GlassFish, идущий с NetBeans, поддерживает тестирование веб-служб). Для этого следует:
1. Кликнуть ПКМ по проекту, в котором находится тестируемая веб-служба и выполнить команду «развернуть».
2. Если разворачивание прошло успешно, то в дереве проекта найти нужную службу среди списка веб-служб, кликнуть ПКМ по ней и выполнить команду «Тестировать веб-службу».
3. После этого в браузере откроется окно, где можно осуществить непосредственное тестирование.
Клиент веб-службы представляет собой реализованный в отдельном проекте сервлет, в который требуемая веб-служба была добавлена как «клиент веб-службы».
При написании кода сервлета-клиента в редакторе следует перетащить требуемые методы веб-службы из узла «Ссылки на веб-службы» в любое место тела класса сервлета-клиента. Это добавит к классу сервлета путь к WSDL веб-службы, новое поле service и новый метод, заголовок которого совпадает с заголовком метода веб-службы. Именно через этот метод и осуществляется обращение к веб-службе.
2. Тексты программ
2.1. Bank.java
package com.github.gay.bank;
public class Bank
{
private String service;
private Integer amount; // as i understand, it's total number of the money, but integer
private Float rate; // as i understand, it's a course, persentage, but real number
private Float amountMultiplyRate;
public Bank() // all are zero by default
{
this.service = "Deposit";
this.amount = (int)0;
this.rate = (float)0;
this.amountMultiplyRate = (float)0;
}
public String getService()
{
return this.service;
}
public Integer getAmount()
{
return this.amount;
}
public Float getRate()
{
return this.rate;
}
public Float getAmountMultiplyRate()
{
amountMultiplyRate = amount * rate;
return this.amountMultiplyRate;
}
public void setService(String localService)
{
this.service = localService;
}
public void setAmount(Integer localAmount)
{
this.amount = localAmount;
}
public void setRate(Float localRate)
{
this.rate = localRate;
}
}
2.2. BankIncapsulation.java
package com.github.gay.bank;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
public class BankIncapsulation
{
private static Bank bank = new Bank(); // all are zero by default
public String getService()
{
return bank.getService();
}
public Integer getAmount()
{
return bank.getAmount();
}
public Float getRate()
{
return bank.getRate();
}
public Float getAmountMultiplyRate()
{
return bank.getAmountMultiplyRate();
}
public void setService(String localService)
{
bank.setService(localService);
//return bank;
}
public void setAmount(Integer localAmount)
{
bank.setAmount(localAmount);
//return bank;
}
public void setRate(Float localRate)
{
bank.setRate(localRate);
//return bank;
}
}
2.3. BankService.java
package com.github.gay.soapwebservices;
import javax.jws.WebMethod;
import javax.jws.WebService;
import com.github.gay.bank.Bank;
import java.util.List;
@WebService
public interface BankService
{
@WebMethod
public String getService();
@WebMethod
public Integer getAmount();
@WebMethod
public Float getRate();
@WebMethod
public Float getAmountMultiplyRate();
@WebMethod
public String setService(String localService);
@WebMethod
public String setAmount(Integer localAmount);
@WebMethod
public String setRate(Float localRate);
}
2.4. BankServiceImplementation.java
package com.github.gay.soapwebservices;
import com.github.gay.bank.Bank;
import com.github.gay.bank.BankIncapsulation;
import javax.jws.WebMethod;
import javax.jws.WebService;
import java.util.List;
@WebService(endpointInterface = "com.github.gay.soapwebservices.BankService")
public class BankServiceImplementation implements BankService{
private static BankIncapsulation bankIncapsulation = bankIncapsulation = new BankIncapsulation();
@WebMethod
public String getService()
{
return bankIncapsulation.getService();
}
@WebMethod
public Integer getAmount()
{
return bankIncapsulation.getAmount();
}
@WebMethod
public Float getRate()
{
return bankIncapsulation.getRate();
}
@WebMethod
public Float getAmountMultiplyRate()
{
return bankIncapsulation.getAmountMultiplyRate();
}
@WebMethod
public String setService(String localService)
{
String returnValue;
if (localService instanceof String)
{
if (localService.equals("Currency") || localService.equals("Loan") || localService.equals("Debt") || localService.equals("Deposit") || localService.equals("Benefit"))
{
bankIncapsulation.setService(localService);
returnValue = "Value you've sent to the server \"" + localService.toString() + "\" has been set to variable service successfully!";
}
else
{
returnValue = "Value you've sent to the server \"" + localService.toString() + "\" is not the correct type!";
}
}
else
{
returnValue = "Value you've sent to the server \"" + localService.toString() + "\" is not the instance of type/class String!";
}
return returnValue;
//return currencyDao.setAmount(localAmount);
}
@WebMethod
public String setAmount(Integer localAmount)
{
String returnValue;
if (localAmount instanceof Integer)
{
bankIncapsulation.setAmount((int)localAmount);
returnValue = "Value you've sent to the server \"" + localAmount.toString() + "\" has been set to variable amount successfully!";
}
else
{
returnValue = "Value you've sent to the server is not the instance of type/class Integer!";
}
return returnValue;
//return bankIncapsulation.setAmount(localAmount);
}
@WebMethod
public String setRate(Float localRate)
{
String returnValue;
if (localRate instanceof Float)
{
bankIncapsulation.setRate((float)localRate);
returnValue = "Value you've sent to the server \"" + localRate.toString() + "\" has been set to variable rate successfully!";
}
else
{
returnValue = "Value you've sent to the server is not the instance of type/class Float";
}
return returnValue;
//return bankIncapsulation.setRate(localRate);
}
}
2.5. BankServiceMain.java
package com.github.gay.soapwebservices;
import javax.xml.ws.Endpoint;
public class BankServiceMain
{
public static void main(String[] args)
{
Endpoint.publish("http://localhost:8080/bankrequests", new BankServiceImplementation());
}
}
2.6. pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.matmambj</groupId>
<artifactId>javaWebServices</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- <build>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build> -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ComponentsXmlResourceTransformer"/>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<properties>
<tomcat.version>8.0.53</tomcat.version>
<jersey.version>2.26</jersey.version>
<maven.compiler.source>1.15</maven.compiler.source>
<maven.compiler.target>1.15</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<!-- Jersey for REST web service -->
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.4.0-b180830.0438</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>${jersey.version}</version>
</dependency>
<!-- Tomcat to test REST web service -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<!-- JAXWS for SOAP web service -->
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.5</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>rt</artifactId>
<version>2.3.5</version>
</dependency>
<dependency>
<groupId>javax.jws</groupId>
<artifactId>javax.jws-api</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
2.7. dependency-reduced-pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.matmambj</groupId>
<artifactId>javaWebServices</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer />
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.5</version>
<type>pom</type>
<scope>compile</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.target>1.15</maven.compiler.target>
<jersey.version>2.26</jersey.version>
<maven.compiler.source>1.15</maven.compiler.source>
<tomcat.version>8.0.53</tomcat.version>
</properties>
</project>
2.8. bankrequests.wsdl
<!--
Published by JAX-WS RI (https://github.com/eclipse-ee4j/metro-jax-ws). RI's version is JAX-WS RI 2.3.5 git-revision#7ddc91f.
-->
<!--
Generated by JAX-WS RI (https://github.com/eclipse-ee4j/metro-jax-ws). RI's version is JAX-WS RI 2.3.5 git-revision#7ddc91f.
-->
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://soapwebservices.gay.github.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://soapwebservices.gay.github.com/" name="BankServiceImplementationService">
<types>
<xsd:schema>
<xsd:import namespace="http://soapwebservices.gay.github.com/" schemaLocation="http://localhost:8080/bankrequests?xsd=1"/>
</xsd:schema>
</types>
<message name="getService">
<part name="parameters" element="tns:getService"/>
</message>
<message name="getServiceResponse">
<part name="parameters" element="tns:getServiceResponse"/>
</message>
<message name="getAmount">
<part name="parameters" element="tns:getAmount"/>
</message>
<message name="getAmountResponse">
<part name="parameters" element="tns:getAmountResponse"/>
</message>
<message name="getRate">
<part name="parameters" element="tns:getRate"/>
</message>
<message name="getRateResponse">
<part name="parameters" element="tns:getRateResponse"/>
</message>
<message name="getAmountMultiplyRate">
<part name="parameters" element="tns:getAmountMultiplyRate"/>
</message>
<message name="getAmountMultiplyRateResponse">
<part name="parameters" element="tns:getAmountMultiplyRateResponse"/>
</message>
<message name="setService">
<part name="parameters" element="tns:setService"/>
</message>
<message name="setServiceResponse">
<part name="parameters" element="tns:setServiceResponse"/>
</message>
<message name="setAmount">
<part name="parameters" element="tns:setAmount"/>
</message>
<message name="setAmountResponse">
<part name="parameters" element="tns:setAmountResponse"/>
</message>
<message name="setRate">
<part name="parameters" element="tns:setRate"/>
</message>
<message name="setRateResponse">
<part name="parameters" element="tns:setRateResponse"/>
</message>
<portType name="BankService">
<operation name="getService">
<input wsam:Action="http://soapwebservices.gay.github.com/BankService/getServiceRequest" message="tns:getService"/>
<output wsam:Action="http://soapwebservices.gay.github.com/BankService/getServiceResponse" message="tns:getServiceResponse"/>
</operation>
<operation name="getAmount">
<input wsam:Action="http://soapwebservices.gay.github.com/BankService/getAmountRequest" message="tns:getAmount"/>
<output wsam:Action="http://soapwebservices.gay.github.com/BankService/getAmountResponse" message="tns:getAmountResponse"/>
</operation>
<operation name="getRate">
<input wsam:Action="http://soapwebservices.gay.github.com/BankService/getRateRequest" message="tns:getRate"/>
<output wsam:Action="http://soapwebservices.gay.github.com/BankService/getRateResponse" message="tns:getRateResponse"/>
</operation>
<operation name="getAmountMultiplyRate">
<input wsam:Action="http://soapwebservices.gay.github.com/BankService/getAmountMultiplyRateRequest" message="tns:getAmountMultiplyRate"/>
<output wsam:Action="http://soapwebservices.gay.github.com/BankService/getAmountMultiplyRateResponse" message="tns:getAmountMultiplyRateResponse"/>
</operation>
<operation name="setService">
<input wsam:Action="http://soapwebservices.gay.github.com/BankService/setServiceRequest" message="tns:setService"/>
<output wsam:Action="http://soapwebservices.gay.github.com/BankService/setServiceResponse" message="tns:setServiceResponse"/>
</operation>
<operation name="setAmount">
<input wsam:Action="http://soapwebservices.gay.github.com/BankService/setAmountRequest" message="tns:setAmount"/>
<output wsam:Action="http://soapwebservices.gay.github.com/BankService/setAmountResponse" message="tns:setAmountResponse"/>
</operation>
<operation name="setRate">
<input wsam:Action="http://soapwebservices.gay.github.com/BankService/setRateRequest" message="tns:setRate"/>
<output wsam:Action="http://soapwebservices.gay.github.com/BankService/setRateResponse" message="tns:setRateResponse"/>
</operation>
</portType>
<binding name="BankServiceImplementationPortBinding" type="tns:BankService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="getService">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getAmount">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getRate">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getAmountMultiplyRate">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="setService">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="setAmount">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="setRate">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="BankServiceImplementationService">
<port name="BankServiceImplementationPort" binding="tns:BankServiceImplementationPortBinding">
<soap:address location="http://localhost:8080/bankrequests"/>
</port>
</service>
</definitions>
2.9. bankrequests.xsd
<!--
Published by JAX-WS RI (https://github.com/eclipse-ee4j/metro-jax-ws). RI's version is JAX-WS RI 2.3.5 git-revision#7ddc91f.
-->
<xs:schema xmlns:tns="http://soapwebservices.gay.github.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://soapwebservices.gay.github.com/">
<xs:element name="getAmount" type="tns:getAmount"/>
<xs:element name="getAmountMultiplyRate" type="tns:getAmountMultiplyRate"/>
<xs:element name="getAmountMultiplyRateResponse" type="tns:getAmountMultiplyRateResponse"/>
<xs:element name="getAmountResponse" type="tns:getAmountResponse"/>
<xs:element name="getRate" type="tns:getRate"/>
<xs:element name="getRateResponse" type="tns:getRateResponse"/>
<xs:element name="getService" type="tns:getService"/>
<xs:element name="getServiceResponse" type="tns:getServiceResponse"/>
<xs:element name="setAmount" type="tns:setAmount"/>
<xs:element name="setAmountResponse" type="tns:setAmountResponse"/>
<xs:element name="setRate" type="tns:setRate"/>
<xs:element name="setRateResponse" type="tns:setRateResponse"/>
<xs:element name="setService" type="tns:setService"/>
<xs:element name="setServiceResponse" type="tns:setServiceResponse"/>
<xs:complexType name="getService">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getServiceResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getAmount">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getAmountResponse">
<xs:sequence>
<xs:element name="return" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="setAmount">
<xs:sequence>
<xs:element name="arg0" type="xs:int" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="setAmountResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="setRate">
<xs:sequence>
<xs:element name="arg0" type="xs:float" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="setRateResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getAmountMultiplyRate">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getAmountMultiplyRateResponse">
<xs:sequence>
<xs:element name="return" type="xs:float" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="getRate">
<xs:sequence/>
</xs:complexType>
<xs:complexType name="getRateResponse">
<xs:sequence>
<xs:element name="return" type="xs:float" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="setService">
<xs:sequence>
<xs:element name="arg0" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="setServiceResponse">
<xs:sequence>
<xs:element name="return" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>