Разница между этим примером и справочной статьей заключается в следующем:
1) более подробно определен Deploy.wsdd (для серверной стороны определен интерфейс: ICalculate):
Скопируйте код кода следующим образом:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="Calculate"Provider="java:RPC" style="rpc" use="literal">
<parameter name="wsdlTargetNamespace" value="http://web.webservice.CalculateService.org" />
<parameter name="wsdlServiceElement" value="Calculate" />
<parameter name="wsdlServicePort" value="CalculateService" />
<parameter name="wsdlPortType" value="ICalculate" />
<parameter name="className" value="org.calculateservice.service.CalculateImp" />
<parameter name="typeMappingVersion" value="1.2" />
<parameter name="allowedMethods" value="add sub" />
<имя параметра="область" значение="Запрос" />
<operation name="add" qname="operNS:add"
xmlns:operNS="http://web.webservice.CalculateService.org"
returnQName="addReturn" returnType="rtns:int" xmlns:rtns="http://www.w3.org/2001/XMLSchema"
мылоAction="">
<параметр qname="x" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
<параметр qname="y" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</операция>
<operation name="sub" qname="operNS:sub"
xmlns:operNS="http://web.webservice.CalculateService.org"
returnQName="subReturn" returnType="rtns:int" xmlns:rtns="http://www.w3.org/2001/XMLSchema"
мылоAction="">
<параметр qname="x" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
<параметр qname="y" type="tns:int"
xmlns:tns="http://www.w3.org/2001/XMLSchema" />
</операция>
</сервис>
</развертывание>
2) Индивидуальный AxisServlet: org.calculateservice.core.AxisServlet (совместимый с .NET и удаляющий проверку SOAPACTION);
Подробный код здесь не опубликован. Если вам интересно, вы можете скачать полный пример кода самостоятельно;
3) Метод вызова заключается в использовании локального класса для вызова (кажется, в Java существует три способа вызова WS. Лично я считаю, что использование локального прокси-класса для вызова является наиболее разумным и удобочитаемым):
Скопируйте код кода следующим образом:
public static void main(String[] args) выдает ServiceException, RemoteException {
Вычислить расчет = новый CalculateLocator();
int result = Calculate.getCalculateService().add(1, 2);
System.out.println("[%1 + 2 = " + результат + "%]");
}
Основные шаги для публикации/вызова WS: 1) Скопируйте каталог оси веб-приложения в установочном пакете axis1.4 из загруженного ресурса в каталог веб-приложения в Tomcat;
2) Написать код реализации WS-сервера;
3) Запишите файл развертывания Deploy.wsdd в каталоге WEB-INF;
4) Напишите: скриптgenerate-server-config.bat, затем сгенерируйте: server-config.wsdd, а затем опубликуйте веб-сервис;
5) Напишите: сценарий wsdl2java.bat для генерации кода локального вызывающего клиента;
6) Написать тестовый код для вызова WS;
Схема структуры кода:
клиент: используйте WSDL2Java для создания локального клиентского кода на основе wsdl;
ядро: Custom AxisServlet, совместимый с .NET и удаляющий проверку SOAPACTION;
сервис: код реализации WS-сервера (здесь в качестве примера используется простое вычисление сложения и вычитания);
тест: вызов сервера на основе сгенерированного клиентского класса (адрес сервера сгенерированного кода — localhost. Если вам нужно изменить этот адрес в конфигурации, просто измените назначение переменной CalculateService_address в классе CalculateLocator);
Нажмите, чтобы загрузить полный пример
Ресурс содержит образец полного кода и установочные файлы axis1.4.