Я использую Axis 1.4 для создания клиента веб-сервиса, потому что сервис использует кодировку RPC. Я автоматически сгенерировал код клиента с помощью wsdl2java на основе предоставленного файла wsdl. Я не могу получить wsdl от самой службы, используя? Wsdl, добавленный к URL службы, потому что он не принимает запросы GET.
Когда я пытаюсь получить доступ к сервису через клиента, он сначала регистрирует это исключение:
DEBUG org.apache.axis.ConfigurationException - Exception:
org.apache.axis.ConfigurationException: No service named GetSettings is available
Я читал в других постах, что не о чем беспокоиться. Однако, если бы я мог избавиться от этого, было бы неплохо. Мой класс клиента выглядит следующим образом (try / catches удален):
private String endpoint = "http://<IP>/ToolsServlet/";
private ToolsServiceLocator locator;
private ToolsPort service;
public ToolsClient()
{
locator = new ToolsServiceLocator();
URL url = new URL(endpoint);
service = locator.getToolsService(url);
}
public SwitchSettingsType getProvisionedSettings(String value)
{
SettingsType settings = service.getSettings(value);
return settings;
}
Моя настоящая проблема заключается в том, что я получаю исключения, пытающиеся разобрать ответ. Например:
INFO: 13:59:17,361 [http-thread-pool-8080-(2)] ERROR org.apache.axis.client.Call - Exception:
java.lang.NumberFormatException: Invalid boolean
at org.apache.axis.encoding.ser.SimpleDeserializer.onEndElement(SimpleDeserializer.java:180)
at org.apache.axis.encoding.DeserializerImpl.endElement(DeserializerImpl.java:502)
...
Caused by: java.lang.NumberFormatException: Invalid boolean
at org.apache.axis.encoding.ser.SimpleDeserializer.makeBasicValue(SimpleDeserializer.java:270)
at org.apache.axis.encoding.ser.SimpleDeserializer.makeValue(SimpleDeserializer.java:209)
at org.apache.axis.encoding.ser.SimpleDeserializer.onEndElement(SimpleDeserializer.java:172)
... 40 more
При входе в систему на уровне отладки этому исключению предшествует регистрация запроса и следующих строк:
DEBUG org.apache.axis.transport.http.HTTPSender - POST /ToolsServlet/ HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.4
Host: <IP>
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: "GetSettings"
Content-Length: 479
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><ns1:GetSettings soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="urn:tools"><value xsi:type="xsd:string">value</value></ns1:GetSettings></soapenv:Body></soapenv:Envelope>
DEBUG org.apache.axis.transport.http.HTTPSender - HTTP/1.1 200 OK
DEBUG org.apache.axis.transport.http.HTTPSender - Date Mon, 08 Nov 2010 20:59:12 GMT
DEBUG org.apache.axis.transport.http.HTTPSender - Server Apache/2.0.53 (Unix) DAV/2
DEBUG org.apache.axis.transport.http.HTTPSender - Connection close
DEBUG org.apache.axis.transport.http.HTTPSender - Content-Type text/xml
DEBUG org.apache.axis.SOAPPart - Enter: SOAPPart ctor(FORM_INPUTSTREAM)
DEBUG org.apache.axis.i18n.ProjectResourceBundle - org.apache.axis.i18n.resource::handleGetObject(setMsgForm)
DEBUG org.apache.axis.SOAPPart - Setting current message form to: FORM_INPUTSTREAM (currentMessage is now org.apache.axis.transport.http.SocketInputStream)
DEBUG org.apache.axis.SOAPPart - Exit: SOAPPart ctor()
DEBUG org.apache.axis.i18n.ProjectResourceBundle - org.apache.axis.i18n.resource::handleGetObject(no00)
DEBUG org.apache.axis.transport.http.HTTPSender -
no Content-Length
DEBUG org.apache.axis.i18n.ProjectResourceBundle - org.apache.axis.i18n.resource::handleGetObject(xmlRecd00)
DEBUG org.apache.axis.transport.http.HTTPSender -
XML received:
Мне кажется, я не получаю должного ответа. Я протестировал прямую публикацию с веб-сервисом, используя Firefox и аддон Poster. Я использовал SOAP-сообщение / запрос, сгенерированный моим клиентом, и получил верный ответ.
Правильно ли я читаю логи в том, что Ось думает, что есть пустой ответ? Если да, есть ли у кого-нибудь предложения по поводу того, почему Axis не получает ответ или неправильно его читает? Я не вижу в журналах ничего другого, что дает какую-либо подсказку.
Запустить обновление один
Похоже, что я получаю ответ, даже если он не зарегистрирован в этом месте, но дальнейшие операторы журнала показывают попытки разобрать ответ через DeserializationContext. Axis создает исключение NumberFormatException, поскольку ожидает '0', 'f' or 'F'
для false и '1', 't' or 'T'
для true. Он не любит 'true' или 'false', которые действительно деформированы, поскольку wsdl определяет элементы как xsd: boolean, а допустимые значения: 'true'
и 'false'
.
Кроме обновления исходного кода для правильной обработки 'true' и 'false', есть ли какие-либо предложения по обеспечению работы Axis?
ТИА
Окончание первого обновления
Начать обновление два
Свежие глаза помогут на следующий день. Код Axis обрабатывает true
и false
, потому что он получает первый символ строки. Проблема в том, что я получаю неверные данные.
Окончание обновления два