KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > tools > processors > wsdl2 > internal > FaultProcessor


1 package org.objectweb.celtix.tools.processors.wsdl2.internal;
2
3 import java.util.Collection JavaDoc;
4 import java.util.Map JavaDoc;
5
6 import javax.wsdl.Fault;
7 import javax.wsdl.Message;
8 import javax.wsdl.Part;
9
10 import com.sun.tools.xjc.api.S2JJAXBModel;
11
12 import org.objectweb.celtix.tools.common.ProcessorEnvironment;
13 import org.objectweb.celtix.tools.common.ToolConstants;
14 import org.objectweb.celtix.tools.common.ToolException;
15 import org.objectweb.celtix.tools.common.model.JavaException;
16 import org.objectweb.celtix.tools.common.model.JavaExceptionClass;
17 import org.objectweb.celtix.tools.common.model.JavaField;
18 import org.objectweb.celtix.tools.common.model.JavaMethod;
19 import org.objectweb.celtix.tools.common.model.JavaModel;
20 import org.objectweb.celtix.tools.utils.ProcessorUtil;
21
22 public class FaultProcessor extends AbstractProcessor {
23
24    
25     public FaultProcessor(ProcessorEnvironment penv) {
26       super(penv);
27     }
28
29     public void process(JavaMethod method, Map JavaDoc<String JavaDoc, Fault> faults) throws ToolException {
30         if (faults == null) {
31             return;
32         }
33
34         Collection JavaDoc<Fault> faultsValue = faults.values();
35         for (Fault fault : faultsValue) {
36             processFault(method, fault);
37         }
38     }
39
40     private boolean isNameCollision(String JavaDoc packageName, String JavaDoc className) {
41         boolean collision = collector.containTypesClass(packageName, className)
42             || collector.containSeiClass(packageName, className);
43         return collision;
44     }
45
46     @SuppressWarnings JavaDoc("unchecked")
47     private void processFault(JavaMethod method, Fault fault) throws ToolException {
48         JavaModel model = method.getInterface().getJavaModel();
49         Message faultMessage = fault.getMessage();
50         String JavaDoc name = ProcessorUtil.mangleNameToClassName(faultMessage.getQName().getLocalPart());
51         String JavaDoc namespace = faultMessage.getQName().getNamespaceURI();
52         String JavaDoc packageName = ProcessorUtil.parsePackageName(namespace, env.mapPackageName(namespace));
53
54         while (isNameCollision(packageName, name)) {
55             name = name + "_Exception";
56         }
57
58         collector.addExceptionClassName(packageName, name, packageName + "." + name);
59
60         method.addException(new JavaException(name, name, namespace));
61
62         Map JavaDoc<String JavaDoc, Part> faultParts = faultMessage.getParts();
63         Collection JavaDoc<Part> faultValues = faultParts.values();
64         
65         JavaExceptionClass expClass = new JavaExceptionClass(model);
66         expClass.setName(name);
67         expClass.setNamespace(namespace);
68         expClass.setPackageName(packageName);
69         S2JJAXBModel jaxbModel = (S2JJAXBModel)env.get(ToolConstants.RAW_JAXB_MODEL);
70         for (Part part : faultValues) {
71
72             String JavaDoc fName = part.getName();
73             String JavaDoc fType = ProcessorUtil.resolvePartType(part, jaxbModel);
74             String JavaDoc fNamespace = ProcessorUtil.resolvePartNamespace(part);
75             String JavaDoc fPackageName = ProcessorUtil.parsePackageName(fNamespace, env.mapPackageName(fNamespace));
76
77             JavaField fField = new JavaField(fName, fType, fNamespace);
78             fField.setQName(ProcessorUtil.getElementName(part));
79             
80             if (!method.getInterface().getPackageName().equals(fPackageName)) {
81                 fField.setClassName(fPackageName + "." + fType);
82             }
83             if (!fType.equals(ProcessorUtil.resolvePartType(part))) {
84                 fField.setClassName(ProcessorUtil.resolvePartType(part, jaxbModel, true));
85             }
86
87             expClass.addField(fField);
88         }
89         model.addExceptionClass(name, expClass);
90     }
91 }
92
Popular Tags