Я пытаюсь установить свой самый первый веб-сервис с клиентом.Я создал сервис через нашу систему ERP и развернул его там.Это простой сервис, который получает входные значения и возвращает их сумму (все в типе Long).Я проверил это с помощью SOAPUI, и он работает.
Теперь я хочу написать для него Java-клиент, вставить значения и отобразить результат.Я создал динамический веб-проект и создал новый клиент веб-службы.Для этого я использовал Apache CXF, и он дал мне 21 класс, что немного ошеломило меня.(Мне вообще нужен генератор для этого простого проекта?)
Это то, что я пробовал до сих пор:
public static void main(String[] args) {
TestWebServiceCalc ws = new TestWebServiceCalc();
ws.setVal1(1L);
ws.setVal2(2L); // so it should calculate 1+2
TestWebServiceCalcSoapPortImpl sc_impl = new TestWebServiceCalcSoapPortImpl();
Calc01RequestType c = new Calc01RequestType();
DataArea da = new DataArea();
da.getTestWebServiceCalc().add(ws);
c.setDataArea(da);
try {
Calc01ResponseType r = sc_impl.calc01(c);
System.out.println(r.getDataArea().getTestWebServiceCalc().get(0).getResult());
// gives the result -2174802356507956826
} catch (Result e) {
System.out.println(e);
e.printStackTrace();
}
}
Как я могу установить два входных параметра, выполнитьобработать и распечатать результат?
Из SOAPUI мой XML-код запроса / ответа будет выглядеть следующим образом:
запрос:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tes="http://www.infor.com/businessinterface/TestWebServiceCalc">
<soapenv:Header>
</soapenv:Header>
<soapenv:Body>
<tes:Calc01>
<Calc01Request>
<ControlArea>
<processingScope>request</processingScope>
</ControlArea>
<DataArea>
<TestWebServiceCalc>
<val1>1</val1>
<val2>2</val2>
</TestWebServiceCalc>
</DataArea>
</Calc01Request>
</tes:Calc01>
</soapenv:Body>
</soapenv:Envelope>
ответ:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<Calc01Response xmlns="http://www.infor.com/businessinterface/TestWebServiceCalc">
<Calc01Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="">
<DataArea>
<TestWebServiceCalc>
<result>3</result>
</TestWebServiceCalc>
</DataArea>
</Calc01Response>
</Calc01Response>
</S:Body>
</S:Envelope>
Редактировать : Я нашел, почему это дает мне странное значение.В сгенерированном TestWebServiceCalcSoapPortImpl.calc01()
он устанавливает:
_returnDataAreaTestWebServiceCalcVal1.setResult(Long.valueOf(-2174802356507956826l));
Кажется, что он даже не пытается использовать веб-сервис.Зачем?Как я могу отправить данные в веб-сервис и получить от него результат напрямую?