ClientProtocolException при попытке отправить запрос в SOAP WsdlRequest, установив имя пользователя и пароль через Java

Моя цель - создать проект пользовательского интерфейса Soap с заданным URL-адресом wsdl, сохранить его и отправить запросы с помощью методов Java. Я получаю ошибку org.apache.http.client.ClientProtocolException..... Caused by: org.apache.http.ProtocolException: Content-Length header already present, когда пытаюсь отправить запрос, установив имя пользователя и пароль для операции. Найдите мой метод Java для отправки запросов.

public void runSoap() throws Exception
{
        String projectFile = "SoapUIProjects/TestProjectA-soapui-project.xml";
    SoapUI.setSoapUICore(new StandaloneSoapUICore(true));
    WsdlProject project = new WsdlProject(projectFile);

    int c = project.getInterfaceCount();
    System.out.println("The interface count   ="+c);

    for(int i=0;i<c;i++)
    {
        WsdlInterface wsdl = (WsdlInterface) project.getInterfaceAt(i);
        String soapVersion = wsdl.getSoapVersion().toString();
        int opc = wsdl.getOperationCount();
        String result="";

        for(int j=0;j<opc;j++)
        {
            WsdlOperation op = wsdl.getOperationAt(j);
                String opName = op.getName();
                System.out.println("OPERATION:"+opName);

                WsdlRequest req = op.getRequestByName("Req_"+soapVersion+"_"+opName);

                //Assigning correct u/p to an operation: Generate
                if(opName.equals("Generate"))
                {
                    System.out.println("The operation is Generate.");
                    req.setUsername("u1");//Setting username
                    req.setPassword("u1");//Setting password
               }

               WsdlSubmitContext wsdlSubmitContext = new WsdlSubmitContext(req);
               WsdlSubmit<?> submit = (WsdlSubmit<?>) req.submit(wsdlSubmitContext, false);
               Response response = submit.getResponse();
               result = response.getContentAsString();
               System.out.println("The result ="+result);
        }
    }
}

Окно SoapUI

Также обратитесь к приложенному изображению. Может ли кто-нибудь предложить мне, где я ошибаюсь и как решить эту проблему?


person priti    schedule 12.06.2013    source источник
comment
Рад узнать, что вы смогли решить эту проблему. Не могли бы вы опубликовать свой полный код здесь, чтобы он мог принести пользу другим? Кроме того, параметризовали ли вы свой запрос и ответ. Было бы очень полезно, если бы вы могли предоставить подробную информацию о том, как вы это сделали. Кроме того, не могли бы вы сообщить нам, где/как указать конечную точку. Спасибо, Майк.   -  person Mike    schedule 15.06.2013
comment
Привет, Майк, полный код см. на странице эта ссылка. Вы можете указать конечную точку для запросов, используя следующие req.setEndpoint(“your_end_Point”); Спасибо.   -  person priti    schedule 16.06.2013


Ответы (3)


Я получил ответ на свой вопрос. Мне пришлось установить «Тип авторизации» явно и программно, и код для этого таков: req.setAuthType("Preemptive");

Давая это, запрос отправляется, и я не получаю никаких исключений.

person priti    schedule 12.06.2013
comment
Большое спасибо! Это была и моя проблема. - person atom88; 23.01.2019

В своем поиске, чтобы исправить эту же ошибку, я обнаружил, что решение состояло в том, чтобы включить опцию «Аутентифицировать упреждающе» (перейдите в настройки-> настройки http и установите флажок «Упреждающая аутентификация»).

person Adriano    schedule 03.04.2014

1) В моем случае в свойствах настроен http вместо https. Я заменил http на https, после чего все заработало.

https://localhost:8102/WebService/test

2) Проверьте имя пользователя и пароль авторизации

3) Выберите Pre-emptive auth: Превентивно аутентифицировать

введите здесь описание изображения

person Narayan Yerrabachu    schedule 16.05.2018