public void invoke(MessageContext clientContext) throws AxisFault {
if (log.isDebugEnabled()) {
log.debug("Enter: LocalSender::invoke");
}
AxisServer targetServer =
(AxisServer)clientContext.getProperty(LocalTransport.LOCAL_SERVER);
if (log.isDebugEnabled()) {
log.debug(JavaUtils.getMessage("usingServer00",
"LocalSender", "" + targetServer));
}
if (targetServer == null) {
// This should have already been done, but it doesn't appear to be
// something that can be relied on. Oh, well...
if (server == null) init();
targetServer = server;
}
// Define a new messageContext per request
MessageContext serverContext = new MessageContext(targetServer);
// copy the request, and force its format to String in order to
// exercise the serializers.
String msgStr = clientContext.getRequestMessage().getSOAPPartAsString();
if (log.isDebugEnabled()) {
log.debug(JavaUtils.getMessage("sendingXML00", "LocalSender"));
log.debug(msgStr);
}
serverContext.setRequestMessage(new Message(msgStr));
serverContext.setTransportName("local");
// Also copy authentication info if present
String user = clientContext.getUsername();
if (user != null) {
serverContext.setUsername(user);
String pass = clientContext.getPassword();
if (pass != null)
serverContext.setPassword(pass);
}
// set the realpath if possible
String transURL = clientContext.getStrProp(MessageContext.TRANS_URL);
if (transURL != null) {
try {
URL url = new URL(transURL);
String file = url.getFile();
if (file.length()>0 && file.charAt(0)=='/') file = file.substring(1);
serverContext.setProperty(Constants.MC_REALPATH, file);
// This enables "local:///AdminService" and the like to work.
serverContext.setTargetService(file);
} catch (Exception e) {
throw AxisFault.makeFault(e);
}
}
// If we've been given an explicit "remote" service to invoke,
// use it. (Note that right now this overrides the setting above;
// is this the correct precedence?)
String remoteService = clientContext.getStrProp(LocalTransport.REMOTE_SERVICE);
if (remoteService != null)
serverContext.setTargetService(remoteService);
// invoke the request
try {
targetServer.invoke(serverContext);
} catch (AxisFault fault) {
Message respMsg = serverContext.getResponseMessage();
if (respMsg == null) {
respMsg = new Message(fault);
serverContext.setResponseMessage(respMsg);