*
* @param message the SOAP message
* @return the RM properties
*/
public RMProperties unmarshalRMProperties(SoapMessage message) {
RMProperties rmps = new RMProperties();
try {
Collection<SequenceAcknowledgement> acks = new ArrayList<SequenceAcknowledgement>();
Collection<AckRequestedType> requested = new ArrayList<AckRequestedType>();
List<Header> header = message.getHeaders();
if (header != null) {
Unmarshaller unmarshaller =
getJAXBContext().createUnmarshaller();
Iterator<Header> iter = header.iterator();
while (iter.hasNext()) {
Object node = iter.next().getObject();
if (node instanceof Element) {
Element elem = (Element) node;
if (Node.ELEMENT_NODE != elem.getNodeType()) {
continue;
}
String headerURI = elem.getNamespaceURI();
String localName = elem.getLocalName();
if (RMConstants.getNamespace().equals(headerURI)) {
LOG.log(Level.FINE, "decoding RM header {0}", localName);
if (RMConstants.getSequenceName().equals(localName)) {
SequenceType s = decodeProperty(SequenceType.class,
elem,
unmarshaller);
rmps.setSequence(s);
} else if (RMConstants.getSequenceAckName().equals(localName)) {
SequenceAcknowledgement ack = decodeProperty(SequenceAcknowledgement.class,
elem,
unmarshaller);
acks.add(ack);
} else if (RMConstants.getAckRequestedName().equals(localName)) {
AckRequestedType ar = decodeProperty(AckRequestedType.class,
elem,
unmarshaller);
requested.add(ar);
}
}
}
}
if (acks.size() > 0) {
rmps.setAcks(acks);
}
if (requested.size() > 0) {
rmps.setAcksRequested(requested);
}
}
} catch (JAXBException ex) {
LOG.log(Level.WARNING, "SOAP_HEADER_DECODE_FAILURE_MSG", ex);
}