Позже я понял, что эта операция имеет неявные заголовки SOAP, и мне пришлось использовать «-exsh true» при создании библиотеки wsdl2java.
Теперь я могу видеть класс Porttype в библиотеке, принимающей заголовки в качестве параметров.
public abstract void getReport(
@WebParam(name="reportID", targetNamespace="https://api.eventcore.com/") Integer paramInteger1,
@WebParam(name="reportName", targetNamespace="https://api.eventcore.com/") String paramString1,
@WebParam(name="sortColumn", targetNamespace="https://api.eventcore.com/") String paramString2,
@WebParam(name="sortAscending", targetNamespace="https://api.eventcore.com/") boolean paramBoolean,
@WebParam(name="startRow", targetNamespace="https://api.eventcore.com/") Integer paramInteger2,
@WebParam(name="endRow", targetNamespace="https://api.eventcore.com/") Integer paramInteger3,
@WebParam(name="filter", targetNamespace="https://api.eventcore.com/") ReportFilter paramReportFilter,
@WebParam(mode=WebParam.Mode.INOUT, name="AuthTokenHeader", targetNamespace="https://api.eventcore.com/", header=true) Holder<AuthTokenHeader> paramHolder,
@WebParam(name="CredentialsHeader", targetNamespace="https://api.eventcore.com/", header=true) CredentialsHeader paramCredentialsHeader,
@WebParam(mode=WebParam.Mode.OUT, name="GetReportResult", targetNamespace="https://api.eventcore.com/") Holder<GetReportResponse.GetReportResult> paramHolder1,
@WebParam(mode=WebParam.Mode.OUT, name="recordCount", targetNamespace="https://api.eventcore.com/") Holder<Integer> paramHolder2);
Я устанавливаю список параметров, как показано ниже.
List<Object> params = new ArrayList<Object>();
params.add(1037); //reportID
params.add(null); //reportName
params.add("LastModified"); //sortColumn
params.add(true); //sortAscending
params.add(1); //startRow
params.add(2); //endRow
params.add(filter); //filter
params.add(new javax.xml.ws.Holder<AuthTokenHeader>()); // INOUT soap header
params.add(credentials); // IN Soap Header
params.add(new javax.xml.ws.Holder<GetReportResponse.GetReportResult>()); // Out Body
params.add(new javax.xml.ws.Holder<Integer>()); // Out parameter
Но, я все еще получаю сообщение об ошибке
Get the wrong parameter size to invoke the out service, Expect size 10, Parameter size 11. Please check if the message body matches the CXFEndpoint POJO Dataformat request.
Когда я посмотрел код CxfProducer (метод checkParameterSize), похоже, что он получает soapHeadersSize как 0, даже думал, что там2 SOAP-заголовка ввода.
есть какие-либо подсказки, как решить эту проблему?