All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.axis2.description.AxisEndpoint Maven / Gradle / Ivy

Go to download

Core Parts of Axis2. This includes Axis2 engine, Client API, Addressing support, etc.,

There is a newer version: 1.7.9
Show newest version
/*
 * 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.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.transport.TransportListener;
import org.apache.axis2.transport.http.server.HttpUtils;
import org.apache.axis2.util.WSDLSerializationUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.net.SocketException;
import java.util.HashMap;
import java.util.Map;

public class AxisEndpoint extends AxisDescription {

	private static final Log logger = LogFactory.getLog(AxisEndpoint.class);

	// The name of the endpoint
	private String name;

	// The binding reffered to by the endpoint
	private AxisBinding binding;

	// The address of the endpoint
	private String endpointURL;

	// The alias used for the endpoint
	private String alias;

	private Map options;

	private String transportInDescName;

	public String getEndpointURL() {
		if (endpointURL == null) {
			endpointURL = calculateEndpointURL();
		}
		return endpointURL;
	}

	public void setEndpointURL(String endpointURL) {
		this.endpointURL = endpointURL;
	}

	public AxisEndpoint() {
		options = new HashMap();
	}

	public void setProperty(String name, Object value) {
		options.put(name, value);
	}

	/**
	 * @param name
	 *            name of the property to search for
	 * @return the value of the property, or null if the property is not found
	 */
	public Object getProperty(String name) {
		Object obj = options.get(name);
		if (obj != null) {
			return obj;
		}

		return null;
	}

	public String getAlias() {
		return alias;
	}

	public void setAlias(String alias) {
		this.alias = alias;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public AxisBinding getBinding() {
		return binding;
	}

	public void setBinding(AxisBinding binding) {
		this.binding = binding;
	}

	public Object getKey() {
		// ToDO
		return null; // To change body of implemented methods use File |
		// Settings | File Templates.
	}

	public void engageModule(AxisModule axisModule) throws AxisFault {
		throw new UnsupportedOperationException("Sorry we do not support this");
	}

	public boolean isEngaged(String moduleName) {
		throw new UnsupportedOperationException(
				"axisMessage.isEngaged() is not supported");
	}

    public OMElement toWSDL20(OMNamespace wsdl, OMNamespace tns, OMNamespace whttp) {
		String property;
		OMFactory omFactory = OMAbstractFactory.getOMFactory();
		OMElement endpointElement = omFactory.createOMElement(
				WSDL2Constants.ENDPOINT_LOCAL_NAME, wsdl);
		endpointElement.addAttribute(omFactory.createOMAttribute(
				WSDL2Constants.ATTRIBUTE_NAME, null, name));
		endpointElement.addAttribute(omFactory.createOMAttribute(
				WSDL2Constants.BINDING_LOCAL_NAME, null, tns.getPrefix() + ":"
						+ getBinding().getName().getLocalPart()));
		endpointElement.addAttribute(omFactory.createOMAttribute(
				WSDL2Constants.ATTRIBUTE_ADDRESS, null, getEndpointURL()));
		Object authenticationScheme = this.options
				.get(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_TYPE);
		if (authenticationScheme != null) {
			endpointElement.addAttribute(omFactory.createOMAttribute(
					WSDL2Constants.ATTRIBUTE_AUTHENTICATION_TYPE, whttp,
					authenticationScheme.toString()));
		}
		property = (String) options
				.get(WSDL2Constants.ATTR_WHTTP_AUTHENTICATION_REALM);
		if (property != null) {
			endpointElement.addAttribute(omFactory.createOMAttribute(
					WSDL2Constants.ATTRIBUTE_AUTHENTICATION_REALM, whttp,
					property));
		}
		WSDLSerializationUtil.addWSDLDocumentationElement(this,
				endpointElement, omFactory, wsdl);
		WSDLSerializationUtil.addPoliciesAsExtensibleElement(this,
				endpointElement);
		return endpointElement;
	}

	public AxisService getAxisService() {
		return (AxisService) parent;
	}

	public void setParent(AxisService service) {
		parent = service;
	}

	public void setTransportInDescription(String transportInDescName) {
		this.transportInDescName = transportInDescName;
	}
	
	public String getTransportInDescription() {
	    return transportInDescName;
	}

	private String calculateEndpointURL() {
		if (transportInDescName != null && parent != null) {
			AxisConfiguration axisConfiguration = getAxisConfiguration();
			if (axisConfiguration != null) {
				try {
					String serviceName = ((AxisService) parent).getName();
					TransportInDescription in = axisConfiguration
							.getTransportIn(transportInDescName);
					TransportListener listener = in.getReceiver();
					String ip = HttpUtils.getIpAddress(axisConfiguration);
					// we should pass [serviceName].[endpointName] instead of
					// [endpointName]
					String sDOTe = serviceName + "." + name;
					EndpointReference[] eprsForService = listener
							.getEPRsForService(sDOTe, ip);
					// we consider only the first address return by the listener
					if (eprsForService != null && eprsForService.length > 0) {
						return eprsForService[0].getAddress();
					}
				} catch (SocketException e) {
					logger.warn(e.getMessage(), e);
				} catch (AxisFault e) {
					logger.warn(e.getMessage(), e);
				}
			}
		}

		return null;
	}

	public boolean isActive() {
		if (transportInDescName != null && parent != null) {
			AxisConfiguration axisConfiguration = getAxisConfiguration();
			if (axisConfiguration != null) {
				AxisService service = (AxisService) parent;
				if (service.isEnableAllTransports()) {
					return axisConfiguration.getTransportsIn().containsKey(
							transportInDescName);
				} else {
					return service.getExposedTransports().contains(
							transportInDescName);
				}
			}
		}
		return false;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy