1 package org.objectweb.celtix.tools.processors.wsdl2.internal; 2 3 import java.util.Collection ; 4 import java.util.Map ; 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 <String , Fault> faults) throws ToolException { 30 if (faults == null) { 31 return; 32 } 33 34 Collection <Fault> faultsValue = faults.values(); 35 for (Fault fault : faultsValue) { 36 processFault(method, fault); 37 } 38 } 39 40 private boolean isNameCollision(String packageName, String className) { 41 boolean collision = collector.containTypesClass(packageName, className) 42 || collector.containSeiClass(packageName, className); 43 return collision; 44 } 45 46 @SuppressWarnings ("unchecked") 47 private void processFault(JavaMethod method, Fault fault) throws ToolException { 48 JavaModel model = method.getInterface().getJavaModel(); 49 Message faultMessage = fault.getMessage(); 50 String name = ProcessorUtil.mangleNameToClassName(faultMessage.getQName().getLocalPart()); 51 String namespace = faultMessage.getQName().getNamespaceURI(); 52 String 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 <String , Part> faultParts = faultMessage.getParts(); 63 Collection <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 fName = part.getName(); 73 String fType = ProcessorUtil.resolvePartType(part, jaxbModel); 74 String fNamespace = ProcessorUtil.resolvePartNamespace(part); 75 String 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 |