2017-02-14 10 views
0

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

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? 

ответ

0

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

+0

Спасибо за ваше предложение. Я новичок в Java и работает с API. Не могли бы вы сообщить мне, как получить сообщение в виде ответа HTML. В настоящее время я получаю вывод Connection.call() как тип объекта SOAPMessage. Что я должен изменить? – Aandal

+0

Я получаю ответ ниже, когда я использую команду curl с тем же запросом XML. Ответ ниже говорит о его мыле, не так ли? <Мыло: Конверт XMLNS: мыло = "http://schemas.xmlsoap.org/soap/envelope/"> Пример Aandal

+0

Вы можете использовать что-то вроде Wireshark для перехвата ответа. –