Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JAX-WS клиент: век живи - век учись / 1 сообщений из 1, страница 1 из 1
16.08.2016, 15:21
    #39292662
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAX-WS клиент: век живи - век учись
Оказывается, параметры могут передаваться/возвращаться не только в методе, но и в хедере. Пример - вызов методов в SSRS:
SetExecutionParameters: 3 доп.параметра, один из них - возвращаемый
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
  <wsdl:types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices">
      <s:element name="SetExecutionParameters">
        <s:complexType>
          <s:sequence>
            <s:element minOccurs="0" maxOccurs="1" name="Parameters" type="tns:ArrayOfParameterValue"/>
            <s:element minOccurs="0" maxOccurs="1" name="ParameterLanguage" type="s:string"/>
          </s:sequence>
        </s:complexType>
      </s:element>
...
    </s:schema>
  </wsdl:types>
...
    <wsdl:operation name="SetExecutionParameters">
      <soap:operation soapAction="http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices/SetExecutionParameters" style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
        <soap:header message="tns:SetExecutionParametersExecutionHeader" part="ExecutionHeader" use="literal"/>
        <soap:header message="tns:SetExecutionParametersTrustedUserHeader" part="TrustedUserHeader" use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
        <soap:header message="tns:SetExecutionParametersServerInfoHeader" part="ServerInfoHeader" use="literal"/>
      </wsdl:output>
    </wsdl:operation>


wsimport по умолчанию игнорирует такие параметры. Ну, а видя необходимость помещать информацию в soap:header, сразу хочется городить хендлер для сервиса, или еще какие хаки.
Оказывается, ничего этого не надо, у wsimport есть параметр -XadditionalHeaders, который в эклипсе игнорируется.
по умолчанию у метода было только 2 параметра, впрочем, для конкретного сервиса один оказался лишним
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    @WebMethod(operationName = "SetExecutionParameters", action = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices/SetExecutionParameters")
    @WebResult(name = "executionInfo", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices")
    @RequestWrapper(localName = "SetExecutionParameters", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices", className = "com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.SetExecutionParameters")
    @ResponseWrapper(localName = "SetExecutionParametersResponse", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices", className = "com.microsoft.schemas.sqlserver._2005._06._30.reporting.reportingservices.SetExecutionParametersResponse")
    public ExecutionInfo setExecutionParameters(
        @WebParam(name = "Parameters", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices")
        ArrayOfParameterValue parameters,
        @WebParam(name = "ParameterLanguage", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices")
        String parameterLanguage,
        @WebParam(name = "ExecutionHeader", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices", header = true, partName = "ExecutionHeader")
        ExecutionHeader executionHeader,
//        @WebParam(name = "TrustedUserHeader", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices", header = true, partName = "TrustedUserHeader")
//        TrustedUserHeader trustedUserHeader,
        @WebParam(name = "ServerInfoHeader", targetNamespace = "http://schemas.microsoft.com/sqlserver/2005/06/30/reporting/reportingservices", header = true, mode = WebParam.Mode.OUT, partName = "ServerInfoHeader")
        Holder<ServerInfoHeader> serverInfoHeader);
// Теперь для передачи заголовка ExecutionHeader достаточно передать его в метод в виде параметра, никаких хендлеров городить не надо.


Вот так вот. Не следует безоговорочно доверять визуальным средствам разработки.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JAX-WS клиент: век живи - век учись / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]