Недопустимая ошибка типа контента при использовании SAAJ API в Java

Я пытаюсь получить доступ к API SAOP, используя SAAJ. Я следовал тому же коду, который присутствовал в других ответах, при создании тела запроса SOAP и вызове API SOAP. Этот конкретный сервис не требует никакой аутентификации (как указано в документе API) и не принимает никаких входных параметров.

From WSDL: (copied only relevant content)

<xs:complexType name="getCustomerNames">
<xs:sequence/>
</xs:complexType> 
...
<wsdl:operation name="getCustomerNames">
<wsdl:input message="tns:getCustomerNames" name="getCustomerNames"/>
<wsdl:output message="tns:getCustomerNamesResponse" name="getCustomerNamesResponse"/>
<wsdl:fault message="tns:SOAPException" name="SOAPException"/>
</wsdl:operation>

Ниже приведен код Java, который создает тело мыла и вызывает API.

SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
SOAPConnection connection = scf.createConnection();
SOAPFactory sf = SOAPFactory.newInstance();
String serverURI = "com.webservices.services.authentication";
MessageFactory mf =  MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); // I tried without parameters as well
SOAPMessage message = mf.createMessage();
message.getSOAPHeader().detachNode();           
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("auth", serverURI);
Name bodyName = sf.createName("getCustomerNames", "auth", serverURI);
SOAPBodyElement bodyElement = body.addBodyElement(bodyName);
URL endpoint = new URL(urlendpoint); // urlendpoint is the one that I took from WSDL file service endpoint.
SOAPMessage response = connection.call(message, endpoint);
connection.close();

Я получаю сообщение об ошибке ниже всякий раз, когда я выполняю это. Я не мог понять, почему. Тот же URL-адрес возвращает правильный ответ, когда я выполняю команду curl из Unix и отправляю тот же XML-запрос запроса, который был создан вышеуказанным кодом Java.

Feb 14, 2017 3:21:54 PM com.sun.xml.internal.messaging.saaj.soap.MessageImpl identifyContentType
SEVERE: SAAJ0537: Invalid Content-Type. Could be an error message instead of a SOAP message
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Invalid Content-Type:text/html. Is this an error message instead of a SOAP response?

person Aandal    schedule 14.02.2017    source источник


Ответы (1)


Эта ошибка означает, что сервер отвечает HTML-страницей вместо ответа SOAP. Чтобы отладить это, вам нужно перехватить ответ и посмотреть содержимое HTML-страницы; он, вероятно, будет содержать больше информации о проблеме.

person Andreas Veithen    schedule 14.02.2017
comment
Спасибо за ваше предложение. Я новичок как в Java, так и в работе с API. Не могли бы вы сообщить мне, как мне получить сообщение в виде ответа HTML. В настоящее время я получаю вывод Connection.call() как тип объекта SOAPMessage. На что мне это изменить? - person Aandal; 15.02.2017
comment
Я получаю ответ ниже, когда использую команду curl с тем же запросом XML. Ответ ниже говорит, что это мыло, не так ли? ‹soap:Envelope xmlns:soap=schemas.xmlsoap.org/soap/envelope› ‹ soap:Body›‹ns2:getCustomerNamesResponse ›‹/soap:Body›‹/soap:Envelope› - person Aandal; 15.02.2017
comment
Вы можете использовать что-то вроде Wireshark для перехвата ответа. - person Andreas Veithen; 15.02.2017
comment
К сожалению, у меня нет доступа для установки wireshark в моей системе. Но я попытался опубликовать сообщения, используя расширение приложения chrome postman. Он вернул XML-ответ, как указано выше, и даже с помощью команды curl я могу взаимодействовать со всеми службами. Разве ответ xml, который я разместил в своем предыдущем комментарии, не является ответом SOAP? Пожалуйста, дай мне знать - person Aandal; 16.02.2017
comment
Если у вас нет разрешений на установку Wireshark, вы можете использовать другие инструменты: stackoverflow.com/questions/120022/. - person Andreas Veithen; 16.02.2017