Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 1, когда я запускаю свой клиент веб-службы
Я создаю динамический веб-проект с именем 'testUpdate' (и, конечно, я не забываю изменить версию динамического веб-модуля на 2.5, и в конфигурации я выбираю веб-сервис Axis 2).
- Я добавляю в свой веб-проект Dynamic эти два класса:
SimpleService.java и PWCBHandler.java
Я щелкаю правой кнопкой мыши на SimpleService.java -> New ->Other -> Web Service, чтобы создать мой веб-сервис.
Я не забываю скопировать все файлы jar из дистрибутива rampart в testUpdate/ WebContent/WEB_INF/lib и все модули.mar в testUpdate/ WebContent/WEB_INF/modules
Я изменяю файл services.xml, чтобы он выглядел как
<service name="SimpleService" > <module ref="rampart" /> <Description> </Description> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messageReceivers> <parameter name="ServiceClass" locked="false">com.gismo.SimpleService</parameter> <parameter name="InflowSecurity"> <action> <items>UsernameToken</items> <passwordCallbackClass>com.gismo.PWCBHandler</passwordCallbackClass> </action> </parameter> </service>
Я щелкаю правой кнопкой мыши на testUpdate -> RUN AS _> Запуск на сервере (и мой веб-сервис успешно развернут)
Файл -> Создать -> Другое -> Клиент веб-службы
и в определении сервиса я вставляю URL файла wsdl SimpleService
(http://localhost:9091/testUpdate/services/SimpleService?wsdl
)
Я добавляю класс testcl.java в мой клиент веб-службы. Вот код
public class testCL { public static void main(String[] args) throws Exception { if (args.length != 2) { System.out.println(args.length); System.out .println("Usage: $java Client endpoint_address client_repo_path"); } ConfigurationContext ctx = ConfigurationContextFactory .createConfigurationContextFromFileSystem(args[1], args[1] + "/conf/axis2.xml"); ServiceClient client = new ServiceClient(ctx, null); Options options = new Options(); options.setAction("urn:echo"); options.setTo(new EndpointReference(args[0])); client.setOptions(options); OMElement response = client.sendReceive(getPayload("Hello world")); System.out.println(response); } private static OMElement getPayload(String value) { OMFactory factory = OMAbstractFactory.getOMFactory(); OMNamespace ns = factory.createOMNamespace("com.gismo/xsd", "ns1"); OMElement elem = factory.createOMElement("echo", ns); OMElement childElem = factory.createOMElement("param0", null); childElem.setText(value); elem.addChild(childElem); return elem; } }
Я не забываю изменить webSercice_client/WebContent/axis2-web/conf/axis2.xml и добавить
<module ref="rampart"/> <parameter name="OutflowSecurity"> <action> <items>UsernameToken</items> <user>bob</user> <passwordCallbackClass>com.gismo.PWCBHandler</passwordCallbackClass> </action> </parameter>
Но когда я запускаю testCl как Java-приложение, это дает мне исключение
Использование: $java Client endpoint_address client_repo_path Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 1 в com.gismo.testcl.main(testcl.java:24)
1 ответ
Мои психические отладочные способности говорят мне, что вы запустили его без предоставления двух аргументов командной строки. Вы можете увидеть сообщение об ошибке "Использование: $java Client endpoint_address client_repo_path" в выводе вашей программы, означающее, что вы не указали два аргумента командной строки, поэтому args[1]
может быть недействительным Ваша программа не завершает работу после проверки количества аргументов командной строки, поэтому она пытается получить доступ args[1]
после жалоб на то, что программа была запущена неправильно.
if (args.length != 2) {
System.out.println(args.length);
System.out
.println("Usage: $java Client endpoint_address client_repo_path");
}
ConfigurationContext ctx = ConfigurationContextFactory
.createConfigurationContextFromFileSystem(args[1], args[1]
+ "/conf/axis2.xml");