Как я могу прочитать SOAP-заголовки и добавить FaultHeaders в ответ, отправленный веб-службой AXIS 2 - PullRequest
0 голосов
/ 26 января 2012

У меня есть WSDL, который определяет пользовательский SOAP-заголовок, который клиент должен отправить, и заголовок SOAP-Fault, который сервер может отправить в ответ.

Теперь у меня проблема. Я не могу понять, как установить SOAP-Fault-заголовки для ответа, сгенерированного с помощью AXIS 2 (версия 1.6.1), или прочитать SOAP-заголовки, которые приходят с запросом.

Кто-нибудь может указать мне правильное направление?

Большое спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 03 августа 2017

Добавить пользовательскую ошибку в ответ мыла.Это можно сделать одним из двух способов.1) Простое создание исключения Java с сообщением приведет к простой ошибке Axis2

Пример:

throw new java.lang.UnsupportedOperationException("Please implement " +
        this.getClass().getName() + "#SomeOperationName");

Также обратите внимание: если вы сгенерировали свой сервис с помощью утилиты Axis2 WSDL2JAVA, строкавыше будет добавлено в источник MyServiceName_Skeleton для каждой определенной операции WSDL.

После развертывания .aar подключение к каждой операции можно проверить с помощью веб-браузера, например, https://server:port/axis2/services/MyServiceName?SomeOperationName.2) Убедитесь, что WSDL определяет необязательную (происходит: 0) пользовательскую структуру Fault.Это может быть отправлено клиенту с другими необходимыми (и пустыми) элементами.

Пример:

        com.some.service.operation.SomeOperationNameResponse_Type OPRT = new com.some.service.operation.SomeOperationNameResponse_Type();
        com.some.service.SomeOperationNameResponse OPR = new com.some.service.SomeOperationNameResponse();
        .
        .
        .           
        if ((rcStatusString.equals("Succeeded")) || (rcStatusString.equals("Warning"))) {

            <build happy path response>

        } else if (rcStatusString.equals("Failed")) {

            final MYFault fault = new MYFault();
            final MYFault_Type faultType = new MYFault_Type();
            final MYFaultList faultList = new MYFaultList();
            final MYFaultList_Type faultListType = new MYFaultList_Type();

            faultType.setFaultCode("10100");
            faultType.setFaultSubcode("9999");
            faultType.setFaultType(FaultType_Enum.SYSTEM);
            faultType.setFaultReasonText("Some Operation Failed");
            faultType.setSeverity(FaultSeverity_Enum.CRITICAL_ERROR);

            //fault.setMYFault(faultType);
            faultListType.addMYFault(faultType);

            OTHRTYPE.setAValue("");
            OPRT.setAValueType(OTHRTYPE);
            OPRT.setMYFaultList(faultListType);

        } else {
            throw new java.lang.UnsupportedOperationException(
                 "MYSERVICE: [Some Operation] Session: "+sessVal+" Request ID: "+rcRequestId+" Unrecognized Completion Status ["+rcStatusString+"]");
        }

        OPR.setSomeOperationResponse(OPRT);
        return OPR;
}
0 голосов
/ 26 января 2012

Если это связано с безопасностью, вам следует обратиться к Rampart.

Если нет, попробуйте заглянуть в

клиентской: Из вашей заглушки получите ServiceClient через _getServiceClient (). введите описание ссылки здесь

ServerSide: Если я правильно помню, это делается через MessageContext, поэтому из axiscontext opbtain текущий контекст сообщения.

...