* @exception SOAPFaultException if decoded MAPs are invalid
*/
public AddressingProperties unmarshalMAPs(SOAPMessage message) {
// REVISIT generate MessageAddressingHeaderRequired fault if an
// expected header is missing
AddressingPropertiesImpl maps = null;
try {
SOAPEnvelope env = message.getSOAPPart().getEnvelope();
SOAPHeader header = env.getHeader();
if (header != null) {
Unmarshaller unmarshaller = null;
Iterator headerElements = header.examineAllHeaderElements();
while (headerElements.hasNext()) {
SOAPHeaderElement headerElement =
(SOAPHeaderElement)headerElements.next();
Name headerName = headerElement.getElementName();
String headerURI = headerName.getURI();
if (unmarshaller == null) {
JAXBContext jaxbContext =
VersionTransformer.getExposedJAXBContext(headerURI);
unmarshaller =
jaxbContext.createUnmarshaller();
}
if (transformer.isSupported(headerURI)) {
if (maps == null) {
maps = new AddressingPropertiesImpl();
maps.exposeAs(headerURI);
}
String localName = headerName.getLocalName();
LOG.log(Level.INFO, "decoding WSA header {0}", localName);
if (Names.WSA_MESSAGEID_NAME.equals(localName)) {
maps.setMessageID(transformer.decodeAsNative(
headerURI,
AttributedURIType.class,
headerElement,
unmarshaller));
} else if (Names.WSA_TO_NAME.equals(localName)) {
maps.setTo(transformer.decodeAsNative(
headerURI,
AttributedURIType.class,
headerElement,
unmarshaller));
} else if (Names.WSA_REPLYTO_NAME.equals(localName)) {
maps.setReplyTo(transformer.decodeAsNative(
headerURI,
EndpointReferenceType.class,
headerElement,
unmarshaller));
} else if (Names.WSA_FAULTTO_NAME.equals(localName)) {
maps.setFaultTo(transformer.decodeAsNative(
headerURI,
EndpointReferenceType.class,
headerElement,
unmarshaller));
} else if (Names.WSA_RELATESTO_NAME.equals(localName)) {
maps.setRelatesTo(transformer.decodeAsNative(
headerURI,
RelatesToType.class,
headerElement,
unmarshaller));
} else if (Names.WSA_ACTION_NAME.equals(localName)) {
maps.setAction(transformer.decodeAsNative(
headerURI,
AttributedURIType.class,
headerElement,
unmarshaller));
}