package br.ufms.dct.simplerep.xml;
import java.util.Iterator;
import javax.xml.stream.XMLStreamException;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
import org.apache.axiom.om.impl.llom.util.AXIOMUtil;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.soap.SOAPHeader;
import org.apache.axiom.soap.SOAPHeaderBlock;
import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
import br.ufms.dct.simplerep.ar.ProcessingStatus;
public class SoapHelper {
public static SOAPEnvelope str2Envelope(String xmlString) {
try {
// TODO: verify the SOAP version in the string
SOAPFactory soapFactory = OMAbstractFactory.getSOAP12Factory();
OMElement documentElement = AXIOMUtil.stringToOM(xmlString);
StAXSOAPModelBuilder builder = OMXMLBuilderFactory.createStAXSOAPModelBuilder(soapFactory, documentElement.getXMLStreamReader());
return builder.getSOAPEnvelope();
} catch (XMLStreamException e) {
return null;
}
}
public static int getLastSequenceID(SOAPHeader soapHeader) {
Iterator headers = soapHeader.getHeadersToProcess(null, "http://www.w3.org/2005/08/addressing");
int seqId = -1;
int lastSeqId = -1;
boolean isReset = false;
SOAPHeaderBlock referenceParametersHeaderBlock = null;
while (headers.hasNext()) {
SOAPHeaderBlock soapHeaderBlock = (SOAPHeaderBlock)headers.next();
String localName = soapHeaderBlock.getLocalName();
if (localName.equals("SequenceID")) {
try {
seqId = Integer.parseInt(soapHeaderBlock.getText());
}
catch (NumberFormatException e) {
// if the client didn't send a SeqID, then there's nothing we can do
return -1;
}
return seqId;
}
}
return -1;
}
}