У меня есть запрос SOAP, который я тестировал в SoapUI. Я успешно получаю желаемый ответ.Невозможно создать конверт из данного источника, потому что корневой элемент не назван Envelope
Проблема в моем коде происходит, когда я проверяю, был ли ответ успешным в if (isSuccessResponse(soapResponse)) {
ниже:
public static void main(String[] args) throws Exception {
// Establish SOAP connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Generate SOAP request
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), namespaceURI);
// Test to see if SOAP response is available
System.out.print("SOAP Response:");
System.out.println();
soapResponse.writeTo(System.out);
// Close connection
soapConnection.close();
if (isSuccessResponse(soapResponse)) {
System.out.println("Success!");
} else {
System.out.println("Fault!");
}
}
успеха?
private static boolean isSuccessResponse(SOAPMessage soapResponse) throws Exception {
NodeList responseNodes = soapResponse.getSOAPBody().getElementsByTagNameNS("*", "HelpDesk_QueryList_Service");
if (responseNodes.getLength() == 1)
return true;
else
return false;
}
Запрос: Этот код делает фактически распечатать правильной просьбе, как она идентична рабочей запрос в SoapUI. Так почему я не могу получить соответствующую релевантную информацию от фактического ответа? Напечатанный ответ является пустым ответом по умолчанию со всеми неизбежных заголовками, но ни один из требуемой информации из моего запроса:
private static SOAPMessage createSOAPRequest() throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
// Create SOAP Message
SOAPMessage soapMessage = messageFactory.createMessage();
// Add request envelope, headers, and nodes from SOAP request
SOAPPart soapPart = soapMessage.getSOAPPart();
// I used ? here for privacy reasons
String xmlns = "?";
String username = "?";
String password = "?";
String qualification = "'?";
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("urn", xmlns);
SOAPHeader soapHeader = envelope.getHeader();
SOAPElement authInfoElem = soapHeader.addChildElement("AuthenticationInfo", "urn");
createElementAndSetText(authInfoElem, "userName", username);
createElementAndSetText(authInfoElem, "password", password);
SOAPBody soapBody = envelope.getBody();
SOAPElement bodyElem = soapBody.addChildElement("HelpDesk_QueryList_Service", "urn");
createElementAndSetText(bodyElem, "Qualification", qualification);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", xmlns + "/HelpDesk_QueryList_Service");
// Save request
soapMessage.saveChanges();
// Print the request message
System.out.print("SOAP Request:");
System.out.println();
soapMessage.writeTo(System.out);
System.out.println();
System.out.println();
return soapMessage;
}
Ошибка: я получаю следующее сообщение об ошибке, но я не знаю, почему.
Lis 07, 2016 6:10:34 ODP. com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl lookForEnvelope
SEVERE: SAAJ0514: Unable to create envelope from given source because the root element is not named Envelope
Lis 07, 2016 6:10:34 ODP. com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory createEnvelope
SEVERE: SAAJ0511: Unable to create envelope from given source
Exception in thread "main" com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source:
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:117)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:69)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:128)
at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.getSOAPBody(MessageImpl.java:1351)
at com.xxxx.automation.remedy.RemedySOAPService.isSuccessResponse(RemedySOAPService.java:135)
at com.xxxx.automation.remedy.RemedySOAPService.main(RemedySOAPService.java:52)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source because the root element is not named "Envelope"
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.lookForEnvelope(SOAPPartImpl.java:154)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:121)
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:110)
... 5 more
CAUSE:
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Unable to create envelope from given source because the root element is not named "Envelope"
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.lookForEnvelope(SOAPPartImpl.java:154)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:121)
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(EnvelopeFactory.java:110)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(SOAPPart1_1Impl.java:69)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:128)
at com.sun.xml.internal.messaging.saaj.soap.MessageImpl.getSOAPBody(MessageImpl.java:1351)
at com.xxxx.automation.remedy.RemedySOAPService.isSuccessResponse(RemedySOAPService.java:135)
at com.xxxx.automation.remedy.RemedySOAPService.main(RemedySOAPService.java
:52)
SOAP Ответ:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns0:HelpDesk_QueryList_ServiceResponse xmlns:ns0="urn:XX:XXXX:HPD_IncidentInterface_WS">
<ns0:getListValues>
<ns0:Assigned_Group>XXXX</ns0:Assigned_Group>
<ns0:Assigned_Group_Shift_Name/>
<ns0:Assigned_Support_Company>XXXX</ns0:Assigned_Support_Company>
<ns0:Assigned_Support_Organization>XXXX</ns0:Assigned_Support_Organization>
<ns0:Assignee/>
<ns0:Categorization_Tier_1/>
<ns0:Categorization_Tier_2/>
<ns0:Categorization_Tier_3/>
<ns0:City/>
<ns0:Closure_Manufacturer/>
<ns0:Closure_Product_Category_Tier1>XXXX</ns0:Closure_Product_Category_Tier1>
<ns0:Closure_Product_Category_Tier2>XXXX</ns0:Closure_Product_Category_Tier2>
<ns0:Closure_Product_Category_Tier3/>
<ns0:Closure_Product_Model_Version/>
<ns0:Closure_Product_Name/>
<ns0:Company>XXXX</ns0:Company>
<ns0:Contact_Company>XXXX</ns0:Contact_Company>
<ns0:Contact_Sensitivity>Standard</ns0:Contact_Sensitivity>
<ns0:Country/>
<ns0:Department>XXXX</ns0:Department>
<ns0:Summary>XXXX</ns0:Summary>
<ns0:Notes/>
<ns0:First_Name>XXXX</ns0:First_Name>
<ns0:Impact>4-Minor/Localized</ns0:Impact>
<ns0:Incident_Number>XXXX</ns0:Incident_Number>
<ns0:Internet_E-mail>XXXX</ns0:Internet_E-mail>
<ns0:Last_Name>XXXX</ns0:Last_Name>
<ns0:Manufacturer/>
<ns0:Organization>XXXX</ns0:Organization>
<ns0:Phone_Number>XXXX</ns0:Phone_Number>
<ns0:Priority>Low</ns0:Priority>
<ns0:Priority_Weight>0</ns0:Priority_Weight>
<ns0:Product_Categorization_Tier_1>XXXX</ns0:Product_Categorization_Tier_1>
<ns0:Product_Categorization_Tier_2>XXXX</ns0:Product_Categorization_Tier_2>
<ns0:Product_Categorization_Tier_3/>
<ns0:Product_Model_Version/>
<ns0:Product_Name/>
<ns0:Region/>
<ns0:Reported_Source xsi:nil="true"/>
<ns0:Resolution/>
<ns0:Resolution_Category/>
<ns0:Resolution_Category_Tier_2/>
<ns0:Resolution_Category_Tier_3/>
<ns0:Service_Type>User Service Restoration</ns0:Service_Type>
<ns0:Site>XXXX</ns0:Site>
<ns0:Site_Group>XXXX</ns0:Site_Group>
<ns0:Status>Cancelled</ns0:Status>
<ns0:Status_Reason xsi:nil="true"/>
<ns0:Urgency>4-Low</ns0:Urgency>
<ns0:VIP>No</ns0:VIP>
<ns0:ServiceCI/>
<ns0:ServiceCI_ReconID/>
<ns0:HPD_CI/>
<ns0:HPD_CI_ReconID/>
<ns0:HPD_CI_FormName/>
<ns0:z1D_CI_FormName/>
<ns0:Vendor_Ticket_Number xsi:nil="true"/>
<ns0:Corporate_ID>XXXX</ns0:Corporate_ID>
<ns0:Submitter>XXXX</ns0:Submitter>
<ns0:Pending_Date xsi:nil="true"/>
</ns0:getListValues>
</ns0:HelpDesk_QueryList_ServiceResponse>
</soapenv:Body>
</soapenv:Envelope>
От чтения: Стек не находится в подделке запроса, а в обработке ответа. Является ли ответ действительным SOAP? – GPI
Я действительно думаю, что проблема здесь: '' private static boolean isSuccessResponse (SOAPMessage soapResponse) throws Exception {'', но я не уверен, что еще не так. – santafebound
Я включил образец успешного ответа выше. Во-первых, имя моего ответа было неправильным, поэтому я изменил HelpDesk_QueryList_Service на HelpDesk_QueryList_ServiceResponse ... – santafebound