01: package org.objectweb.celtix.tools.processors.wsdl2.internal;
02:
03: import java.io.IOException;
04: import java.util.ArrayList;
05: import java.util.Iterator;
06: import java.util.List;
07: import java.util.logging.Level;
08:
09: import javax.wsdl.Operation;
10: import javax.wsdl.PortType;
11:
12: import org.objectweb.celtix.common.i18n.Message;
13: import org.objectweb.celtix.tools.common.ProcessorEnvironment;
14: import org.objectweb.celtix.tools.common.ToolConstants;
15: import org.objectweb.celtix.tools.common.ToolException;
16: import org.objectweb.celtix.tools.common.model.JavaInterface;
17: import org.objectweb.celtix.tools.common.model.JavaModel;
18: import org.objectweb.celtix.tools.extensions.jaxws.CustomizationParser;
19: import org.objectweb.celtix.tools.extensions.jaxws.JAXWSBinding;
20: import org.objectweb.celtix.tools.utils.ProcessorUtil;
21:
22: public class PortTypeProcessor extends AbstractProcessor {
23: private List<String> operationMap = new ArrayList<String>();
24:
25: public PortTypeProcessor(ProcessorEnvironment penv) {
26: super (penv);
27: }
28:
29: public void process(JavaModel jmodel, PortType portType)
30: throws ToolException {
31: operationMap.clear();
32: JavaInterface intf = new JavaInterface(jmodel);
33: intf.setJAXWSBinding(customizing(jmodel, portType));
34: intf.setHandlerChains(CustomizationParser.getInstance()
35: .getHandlerChains());
36:
37: String namespace = portType.getQName().getNamespaceURI();
38: String packageName = ProcessorUtil.parsePackageName(namespace,
39: env.mapPackageName(namespace));
40:
41: String location = (String) env.get(ToolConstants.CFG_WSDLURL);
42: try {
43: location = ProcessorUtil.getAbsolutePath(location);
44: } catch (IOException ioe) {
45: Message msg = new Message("CANNOT_FIND_WSDL", LOG, env
46: .get(ToolConstants.CFG_WSDLURL));
47: throw new ToolException(msg, ioe);
48: }
49: String serviceName = portType.getQName().getLocalPart();
50: intf.setWebServiceName(serviceName);
51: intf.setName(ProcessorUtil.mangleNameToClassName(serviceName));
52: intf.setNamespace(namespace);
53: intf.setPackageName(packageName);
54: intf.setLocation(location);
55:
56: List operations = portType.getOperations();
57:
58: for (Iterator iter = operations.iterator(); iter.hasNext();) {
59:
60: Operation operation = (Operation) iter.next();
61: if (isOverloading(operation.getName())) {
62: LOG.log(Level.WARNING, "SKIP_OVERLOADED_OPERATION",
63: operation.getName());
64: continue;
65: }
66: OperationProcessor operationProcessor = new OperationProcessor(
67: env);
68: operationProcessor.process(intf, operation);
69: }
70: jmodel.setLocation(location);
71: jmodel.addInterface(intf.getName(), intf);
72:
73: }
74:
75: private boolean isOverloading(String operationName) {
76: if (operationMap.contains(operationName)) {
77: return true;
78: } else {
79: operationMap.add(operationName);
80: }
81: return false;
82: }
83:
84: private JAXWSBinding customizing(JavaModel jmodel, PortType portType) {
85: String portTypeName = portType.getQName().getLocalPart();
86: JAXWSBinding bindings = CustomizationParser.getInstance()
87: .getPortTypeExtension(portTypeName);
88: if (bindings != null) {
89: return bindings;
90: } else if (jmodel.getJAXWSBinding() != null) {
91: return jmodel.getJAXWSBinding();
92: } else {
93: // TBD: There is no extensibilityelement in port type
94: return new JAXWSBinding();
95: }
96: }
97: }
|