blob: 7a111299b911336d742fa52e7b6ab27b9237694c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.axis2.description;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.engine.ListenerManager;
import org.apache.axis2.i18n.Messages;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.net.URI;
import java.net.URISyntaxException;
/**
* Utility methods for various clients to use.
*/
public class ClientUtils {
private static final Log log = LogFactory.getLog(ClientUtils.class);
public static synchronized TransportOutDescription inferOutTransport(AxisConfiguration ac,
EndpointReference epr,
MessageContext msgctx)
throws AxisFault {
String transportURI = (String) msgctx.getProperty(Constants.Configuration.TRANSPORT_URL);
if (transportURI != null && !"".equals(transportURI)) {
int index = transportURI.indexOf(':');
String transport = (index > 0) ? transportURI.substring(0, index) : null;
if (transport != null) {
TransportOutDescription transportOut = ac.getTransportOut(transport);
if (transportOut == null) {
log.error("No Tranport Sender found for : " + transport);
throw new AxisFault("No Tranport Sender found for : " + transport);
} else {
return ac.getTransportOut(transport);
}
} else {
log.error(Messages.getMessage("cannotInferTransport", transportURI));
throw new AxisFault(Messages.getMessage("cannotInferTransport", transportURI));
}
} else {
if (msgctx.getOptions().getTransportOut() != null) {
if (msgctx.getOptions().getTransportOut().getSender() == null) {
log.error(Messages.getMessage("Incomplete transport sender: missing sender!"));
throw new AxisFault("Incomplete transport sender: missing sender!");
}
return msgctx.getOptions().getTransportOut();
}
if (epr == null || (epr.getAddress() == null)) {
log.error(Messages.getMessage("cannotInferTransportNoAddr"));
throw new AxisFault(Messages.getMessage("cannotInferTransportNoAddr"));
}
String uri = epr.getAddress();
int index = uri.indexOf(':');
String transport = (index > 0) ? uri.substring(0, index) : null;
if (transport != null && ac.getTransportOut(transport) != null) {
return ac.getTransportOut(transport);
} else {
log.error(Messages.getMessage("cannotInferTransport", uri));
throw new AxisFault(Messages.getMessage("cannotInferTransport", uri));
}
}
}
public static synchronized TransportInDescription inferInTransport(AxisConfiguration ac,
Options options,
MessageContext msgCtxt)
throws AxisFault {
String listenerTransportProtocol = options.getTransportInProtocol();
if (listenerTransportProtocol == null) {
EndpointReference replyTo = msgCtxt.getReplyTo();
if (replyTo != null) {
try {
URI uri = new URI(replyTo.getAddress());
listenerTransportProtocol = uri.getScheme();
} catch (URISyntaxException e) {
//need to ignore
}
} else {
//assume listener transport as sender transport
if (msgCtxt.getTransportOut() != null) {
listenerTransportProtocol = msgCtxt.getTransportOut().getName();
}
}
}
TransportInDescription transportIn = null;
if (options.isUseSeparateListener() || msgCtxt.getOptions().isUseSeparateListener()) {
if ((listenerTransportProtocol != null) && !"".equals(listenerTransportProtocol)) {
transportIn = ac.getTransportIn(listenerTransportProtocol);
ListenerManager listenerManager =
msgCtxt.getConfigurationContext().getListenerManager();
if (transportIn == null) {
// TODO : User should not be mandated to give an IN transport. If it is not given, we should
// ask from the ListenerManager to give any available transport for this client.
log.error(Messages.getMessage("unknownTransport",
listenerTransportProtocol));
throw new AxisFault(Messages.getMessage("unknownTransport",
listenerTransportProtocol));
}
if (!listenerManager.isListenerRunning(transportIn.getName())) {
listenerManager.addListener(transportIn, false);
}
}
if (msgCtxt.getAxisService() != null) {
if (!msgCtxt.isEngaged(Constants.MODULE_ADDRESSING)) {
log.error(Messages.getMessage("2channelNeedAddressing"));
throw new AxisFault(Messages.getMessage("2channelNeedAddressing"));
}
} else {
if (!ac.isEngaged(Constants.MODULE_ADDRESSING)) {
log.error(Messages.getMessage("2channelNeedAddressing"));
throw new AxisFault(Messages.getMessage("2channelNeedAddressing"));
}
}
}
return transportIn;
}
}