blob: 8f13e5a1f62d81f248b3afaea493586fb06040a8 [file] [log] [blame]
/*
* Copyright 2004,2005 The Apache Software Foundation.
*
* Licensed 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.osgi.tx;
import org.apache.axis2.transport.TransportListener;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.SessionContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.TransportInDescription;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.osgi.framework.BundleContext;
/**
* Default HttpListener that synch with the underlying listerner frameworks.
* This implemenation uses org.osgi.service.http.port property to find the port.
* <p/>
* At the moment this will assume the underlying evn is Equinox. if the prior property is not set
* this will default to 80.
*/
public class HttpListener implements TransportListener {
private BundleContext context;
private ConfigurationContext configCtx;
public HttpListener(BundleContext context) {
this.context = context;
}
public void init(ConfigurationContext configCtx, TransportInDescription transprtIn)
throws AxisFault {
this.configCtx = configCtx;
}
public void start() throws AxisFault {
//ignore
}
public void stop() throws AxisFault {
//ignore
}
public EndpointReference getEPRForService(String serviceName, String ip) throws AxisFault {
return calculateEndpoint("http", serviceName, ip);
}
public EndpointReference[] getEPRsForService(String serviceName, String ip) throws AxisFault {
return new EndpointReference[]{calculateEndpoint("http", serviceName, ip)};
}
public SessionContext getSessionContext(MessageContext messageContext) {
//ignore for the moment. This should be able to take the HttpService and attached to it.
return null;
}
public void destroy() {
}
private EndpointReference calculateEndpoint(String protocol, String serviceName, String ip) {
String portS = context.getProperty("org.osgi.service.http.port");
int port = 80;
if (portS != null && portS.length() != 0) {
try {
port = Integer.parseInt(portS);
} catch (NumberFormatException e) {//ignore
}
}
String servicePath = configCtx.getServicePath();
if (servicePath.startsWith("/")) {
servicePath = servicePath.substring(1);
}
String contextRoot = configCtx.getContextRoot();
if (contextRoot.equals("/") || contextRoot == null) {
contextRoot = "";
}
return new EndpointReference(protocol + "://" + ip + ":" + port + contextRoot + "/" +
servicePath + "/" + serviceName + "/");
}
}