I am trying to parse an xml file but it continuously goes into exception. I have looked here in for some solution as many had almost same problem as me but it was in vain. The request and response seems to be correct and I have checked my xml and I am not able to find anything wrong in it.
Here is my Java code:
public static void main(String args[])
{
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
String url = "https://sync-test.severa.com/webservice/S3/API.svc";
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);
XMLTransform(soapResponse.toString());
}
private static SOAPMessage createSOAPRequest()
{
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
String serverURI = "http://soap.severa.com/";
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
//SOAP Header content
SOAPFactory soapFactory = SOAPFactory.newInstance();
SOAPHeader header = soapMessage.getSOAPHeader();
Name headerName = soapFactory.createName("WebServicePassword", "ns1", serverURI);
SOAPHeaderElement headerElement = header.addHeaderElement(headerName);
headerElement.addTextNode("uheyhd80984023984209380");
// SOAP Body
SOAPBody soapBody = envelope.getBody();
//Create GetAllInvoiceStatuses
Name name = envelope.createName("GetAllInvoiceStatuses", "ns1", serverURI);
SOAPElement child = soapBody.addBodyElement(name);
child.addNamespaceDeclaration("ns1", serverURI);
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", "http://soap.severa.com/IInvoiceStatus/GetAllInvoiceStatuses");
}
private static void XMLTransform (String xml) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
InputSource is = new InputSource(new StringReader(xml.toString()));
Document document = builder.parse(is); // here is the exception!!
}
Here is the xml response I am getting from the server:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<GetAllInvoiceStatusesResponse xmlns="http://soap.severa.com/">
<GetAllInvoiceStatusesResult
xmlns:a="http://schemas.datacontract.org/2004/07/Severa.Entities.API"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:InvoiceStatus>
<a:Description i:nil="true"/>
<a:HasInvoiceNumber>false</a:HasInvoiceNumber>
<a:IsActive>true</a:IsActive>
<a:IsDefault>true</a:IsDefault>
<a:IsPaid>false</a:IsPaid>
<a:IsReadOnly>false</a:IsReadOnly>
<a:IsSent>false</a:IsSent>
<a:IsWaitingPayment>false</a:IsWaitingPayment>
<a:Name>Utkast</a:Name>
<a:SortOrder>1</a:SortOrder>
</a:InvoiceStatus>
<a:InvoiceStatus>
<a:Description i:nil="true"/>
<a:HasInvoiceNumber>true</a:HasInvoiceNumber>
<a:IsActive>true</a:IsActive>
<a:IsDefault>false</a:IsDefault>
<a:IsPaid>false</a:IsPaid>
<a:IsReadOnly>true</a:IsReadOnly>
<a:IsSent>true</a:IsSent>
<a:IsWaitingPayment>true</a:IsWaitingPayment>
<a:Name>Skickad</a:Name>
<a:SortOrder>2</a:SortOrder>
</a:InvoiceStatus>
<a:InvoiceStatus>
<a:Description i:nil="true"/>
<a:HasInvoiceNumber>true</a:HasInvoiceNumber>
<a:IsActive>true</a:IsActive>
<a:IsDefault>false</a:IsDefault>
<a:IsPaid>true</a:IsPaid>
<a:IsReadOnly>true</a:IsReadOnly>
<a:IsSent>true</a:IsSent>
<a:IsWaitingPayment>false</a:IsWaitingPayment>
<a:Name>Betalad</a:Name><a:SortOrder>3</a:SortOrder>
</a:InvoiceStatus>
</GetAllInvoiceStatusesResult>
</GetAllInvoiceStatusesResponse>
</s:Body>
看起来XML标记未正确关闭,即<s:envelope>
SOAPMessage.toString() returns the object id like "SOAPMessage@123456".
You want to use SOAPMessage.writeTo(OutputStream). Or better yet, directly transform the SOAPMessage as its SOAPParts already implement org.w3c.dom.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.