You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fx-dev@ws.apache.org by di...@apache.org on 2004/03/08 23:06:10 UTC
cvs commit: ws-fx/addressing/src/org/apache/axis/message/addressing/handler AddressingHandler.java
dims 2004/03/08 14:06:10
Added: addressing/src/org/apache/axis/message/addressing/handler
AddressingHandler.java
Log:
Forgot to checkin the beginnings of a handler
Revision Changes Path
1.1 ws-fx/addressing/src/org/apache/axis/message/addressing/handler/AddressingHandler.java
Index: AddressingHandler.java
===================================================================
package org.apache.axis.message.addressing.handler;
import org.apache.axis.AxisFault;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.client.Call;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.components.uuid.UUIDGenFactory;
import org.apache.axis.handlers.BasicHandler;
import org.apache.axis.message.addressing.Action;
import org.apache.axis.message.addressing.AddressingHeaders;
import org.apache.axis.message.addressing.Constants;
import org.apache.axis.message.addressing.EndpointReference;
import org.apache.axis.message.addressing.MessageID;
import org.apache.axis.message.addressing.RelatesTo;
import org.apache.axis.message.addressing.To;
import org.apache.axis.types.URI;
import org.apache.commons.logging.Log;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.soap.SOAPException;
import java.net.MalformedURLException;
import java.util.Vector;
/**
* Class AddressingHandler
*
* @author Davanum Srinivas (dims@yahoo.com)
*/
public class AddressingHandler extends BasicHandler {
protected static Log log = LogFactory.getLog(AddressingHandler.class.getName());
/**
* Method invoke
*
* @param msgContext
* @throws AxisFault
*/
public void invoke(MessageContext msgContext) throws AxisFault {
try {
if (msgContext.getCurrentContext().isClient()) {
if (!msgContext.getCurrentContext().getPastPivot()) {
processClientRequest(msgContext);
} else {
processClientResponse(msgContext);
}
} else {
if (!msgContext.getCurrentContext().getPastPivot()) {
processServerRequest(msgContext);
} else {
processServerResponse(msgContext);
}
}
} catch (Exception e) {
log.error("Exception in AddressingHandler", e);
throw new AxisFault(e.getMessage());
}
}
/**
* Method processClientRequest
*
* @param msgContext
*/
void processClientRequest(MessageContext msgContext) throws AxisFault, ParserConfigurationException, SOAPException, URI.MalformedURIException {
AddressingHeaders headers = (AddressingHeaders) msgContext.getProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS);
if (headers == null) {
headers = new AddressingHeaders();
}
if (headers.getMessageID() == null) {
MessageID id = new MessageID(new URI("uuid:" + UUIDGenFactory.getUUIDGen().nextUUID()));
headers.setMessageID(id);
}
if (headers.getTo() == null) {
headers.setTo(new To(msgContext.getStrProp(msgContext.TRANS_URL)));
}
if (headers.getAction() == null) {
headers.setAction(new Action(new URI(msgContext.getSOAPActionURI())));
}
if (headers.getFrom() == null) {
headers.setFrom(new EndpointReference(Constants.NS_URI_ANONYMOUS));
}
Message msg = msgContext.getRequestMessage();
headers.toEnvelope(msg.getSOAPEnvelope());
msgContext.setProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS, headers);
}
/**
* Method processClientResponse
*
* @param msgContext
*/
void processClientResponse(MessageContext msgContext) throws Exception {
Message msg = msgContext.getResponseMessage();
if (msg != null) {
AddressingHeaders headers = new AddressingHeaders(msg.getSOAPEnvelope());
msgContext.setProperty(Constants.ENV_ADDRESSING_RESPONSE_HEADERS, headers);
}
}
/**
* Method processServerRequest
*
* @param msgContext
* @throws Exception
*/
void processServerRequest(MessageContext msgContext) throws Exception {
Message msg = msgContext.getRequestMessage();
AddressingHeaders headers = new AddressingHeaders(msg.getSOAPEnvelope());
msgContext.setProperty(Constants.ENV_ADDRESSING_REQUEST_HEADERS, headers);
String to = headers.getTo().getAddress().toString();
if (to != null) {
// set the target service
int i = to.lastIndexOf("/");
to = to.substring(i + 1);
msgContext.setTargetService(to);
}
String newURL = null;
if (headers.getReplyTo() != null) {
newURL = headers.getReplyTo().getAddress().toString();
}
if (newURL == null) {
newURL = Constants.NS_URI_ANONYMOUS;
}
// Setup the response headers
AddressingHeaders resheaders = new AddressingHeaders();
resheaders.setFrom(new EndpointReference(headers.getTo()));
resheaders.setTo(new To(newURL));
resheaders.setAction(new Action(new URI(headers.getAction().toString() + "Response")));
resheaders.setMessageID(new MessageID(new URI("uuid:" + UUIDGenFactory.getUUIDGen().nextUUID())));
resheaders.addRelatesTo(headers.getMessageID().toString(), "wsa:Response");
msgContext.setProperty(Constants.ENV_ADDRESSING_RESPONSE_HEADERS, headers);
}
/**
* Method processServerResponse
*
* @param msgContext
*/
void processServerResponse(MessageContext msgContext) throws AxisFault, ParserConfigurationException, SOAPException, MalformedURLException {
AddressingHeaders resheaders = (AddressingHeaders) msgContext.getProperty(Constants.ENV_ADDRESSING_RESPONSE_HEADERS);
if (resheaders == null) {
return;
}
Message msg = msgContext.getResponseMessage();
if (msg != null) {
resheaders.toEnvelope(msg.getSOAPEnvelope());
}
boolean isResponse = false;
Vector relates = (Vector) resheaders.getRelatesTo();
for (int i = 0; (relates != null) && (i < relates.size()); i++) {
RelatesTo rtp = (RelatesTo) relates.get(i);
if (rtp.getType().equals("wsa:Response")) {
isResponse = true;
}
}
// process replyTo by invoking a service
String to = resheaders.getTo().getAddress().toString();
if ((to != null) && !to.equals(Constants.NS_URI_ANONYMOUS) && isResponse) {
// ReplyTo has been specified. Special processing...
Call c = new Call(to);
c.setRequestMessage(msg);
c.invoke();
// Somehow make the response empty, or create a new empty response
msgContext.setResponseMessage(null);
}
}
}