#axis2
Вопрос:
Я развертываю POJO в качестве службы в axis 2 1.7.8 . Ниже приведена сигнатура метода :
public String authenticate(String username, String password, String dName, String sName)
{
return authenticateWithRole(username, password, "", dName, sName);
}
Я пропускаю часть, сгенерированную wsdl. Ниже приведен запрос SOAP, созданный в SOAPUI :
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:lab="test_authenticate">
<soap:Header/>
<soap:Body>
<lab:authenticate>
<!--Optional:-->
<lab:username>a</lab:username>
<!--Optional:-->
<lab:password>b</lab:password>
<!--Optional:-->
<lab:dName>c</lab:dName>
<!--Optional:-->
<lab:sName>d</lab:sName>
</lab:authenticate>
</soap:Body>
</soap:Envelope>
Вышеупомянутое МЫЛО работает. Если последовательность параметров будет изменена, то ничего не получится. Например, если я отправлю параметр ‘sName’ в качестве первых параметров, предыдущие значения параметров будут равны нулю :
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:lab="test_authenticate">
<soap:Header/>
<soap:Body>
<lab:authenticate>
<!--Optional:-->
<lab:sName>d</lab:sName>
<!--Optional:-->
<lab:username>a</lab:username>
<!--Optional:-->
<lab:password>b</lab:password>
<!--Optional:-->
<lab:dName>c</lab:dName>
</lab:authenticate>
</soap:Body>
</soap>
Это означает, что последовательность параметров имеет значение на оси 2.
Как мне изменить это, чтобы второе МЫЛО также работало, и клиент не был обязан отправлять параметры в фиксированной последовательности.
Спасибо
Ответ №1:
Проблема заключалась в методе BeanUtils.deserialize библиотеки apache-adb. Поэтому, если параметры в не отправляются в том порядке, в котором они определены на уровне метода, параметры, которые возвращаются в порядке, устанавливаются равными нулю.
Нужно исправить код.