org.apache.cxf.service.factory.SimpleMethodDispatcher Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of cxf-bundle-minimal Show documentation
Show all versions of cxf-bundle-minimal Show documentation
Apache CXF Minimal Bundle Jar
The 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.cxf.service.factory;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.service.model.OperationInfo;
public class SimpleMethodDispatcher
implements org.apache.cxf.service.invoker.MethodDispatcher {
private Map> infoMap =
new ConcurrentHashMap>(16, 0.75f, 2);
private Map opToMethod =
new ConcurrentHashMap(16, 0.75f, 2);
private Map methodToOp =
new ConcurrentHashMap(16, 0.75f, 2);
public SimpleMethodDispatcher() {
//complete
}
public void bind(OperationInfo o, Method... methods) {
Method primary = methods[0];
for (Method m : methods) {
methodToOp.put(m, o);
Map biToBop
= new ConcurrentHashMap(4, 0.75f, 2);
infoMap.put(m, biToBop);
}
opToMethod.put(o, primary);
if (o.isUnwrappedCapable()) {
opToMethod.put(o.getUnwrappedOperation(), primary);
}
}
public BindingOperationInfo getBindingOperation(Method method, Endpoint endpoint) {
Map bops = infoMap.get(method);
if (bops == null) {
return null;
}
BindingOperationInfo bop = bops.get(endpoint.getEndpointInfo().getBinding());
if (bop == null) {
OperationInfo o = methodToOp.get(method);
if (o == null) {
return null;
}
BindingInfo b = endpoint.getEndpointInfo().getBinding();
for (BindingOperationInfo bop2 : b.getOperations()) {
if (bop2.getOperationInfo().equals(o)) {
bop2 = getRealOperation(o, bop2);
bops.put(b, bop2);
return bop2;
}
}
}
return bop;
}
private BindingOperationInfo getRealOperation(OperationInfo o, BindingOperationInfo bop) {
BindingOperationInfo unwrappedOp = bop.getUnwrappedOperation();
if (unwrappedOp != null
&& unwrappedOp.getOperationInfo().equals(o.getUnwrappedOperation())) {
bop = unwrappedOp;
}
return bop;
}
public Method getMethod(BindingOperationInfo op) {
return opToMethod.get(op.getOperationInfo());
}
public Method getPrimaryMethod(OperationInfo op) {
return opToMethod.get(op);
}
}