package br.ufms.dct.simplerep.handlers; import java.util.ArrayList; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.soap.SOAPFactory; import org.apache.axiom.soap.SOAPHeader; import org.apache.axiom.soap.SOAPHeaderBlock; import br.ufms.dct.simplerep.Host; import br.ufms.dct.simplerep.SimpleRepConfiguration; import br.ufms.dct.simplerep.ar.MessageContext; import br.ufms.dct.simplerep.ar.ProcessingStatus; import br.ufms.dct.simplerep.enums.AddressingConstants; public class AddressingReplicasOutHandler implements AbstractHandler { public ProcessingStatus invoke(MessageContext context) { SOAPHeader header = context.getEnvelope().getHeader(); OMNamespace addressingNamespaceObject = header.declareNamespace(AddressingConstants.ADDRESSING_NAMESPACE, AddressingConstants.WSA_DEFAULT_PREFIX); SOAPHeaderBlock soapHeaderBlock = header.addHeaderBlock("Replicas", addressingNamespaceObject); ArrayList<Host> proxies = null; SOAPFactory factory = (SOAPFactory) context.getEnvelope().getOMFactory(); Host firstHost = null; proxies = SimpleRepConfiguration.getConfiguration().getProxies(); for (Host h : proxies) { if (firstHost == null) { firstHost = h; } OMElement replica = factory.createOMElement("Replica", addressingNamespaceObject); OMElement EPRAddress = factory.createOMElement("Address", addressingNamespaceObject); EPRAddress.addChild(factory.createOMText(h.getHost() + ":" + h.getPort())); replica.addChild(EPRAddress); soapHeaderBlock.addChild(replica); } // @TODO check if it's not already present soapHeaderBlock = header.addHeaderBlock("From", addressingNamespaceObject); OMElement EPRAddress = factory.createOMElement("Address", addressingNamespaceObject); EPRAddress.addChild(factory.createOMText(firstHost.getHost() + ":" + firstHost.getPort())); soapHeaderBlock.addChild(EPRAddress); return ProcessingStatus.CONTINUE; } }