1 17 package org.apache.servicemix.http.tools; 18 19 import java.io.File ; 20 import java.io.FileOutputStream ; 21 import java.util.Iterator ; 22 import java.util.List ; 23 import java.util.Map ; 24 25 import javax.wsdl.Binding; 26 import javax.wsdl.BindingFault; 27 import javax.wsdl.BindingInput; 28 import javax.wsdl.BindingOperation; 29 import javax.wsdl.BindingOutput; 30 import javax.wsdl.Definition; 31 import javax.wsdl.Fault; 32 import javax.wsdl.Import; 33 import javax.wsdl.Operation; 34 import javax.wsdl.Port; 35 import javax.wsdl.PortType; 36 import javax.wsdl.Service; 37 import javax.wsdl.extensions.soap.SOAPAddress; 38 import javax.wsdl.extensions.soap.SOAPBinding; 39 import javax.wsdl.extensions.soap.SOAPBody; 40 import javax.wsdl.extensions.soap.SOAPFault; 41 import javax.wsdl.extensions.soap.SOAPOperation; 42 import javax.wsdl.factory.WSDLFactory; 43 import javax.xml.namespace.QName ; 44 45 import com.ibm.wsdl.extensions.soap.SOAPAddressImpl; 46 import com.ibm.wsdl.extensions.soap.SOAPBindingImpl; 47 import com.ibm.wsdl.extensions.soap.SOAPBodyImpl; 48 import com.ibm.wsdl.extensions.soap.SOAPFaultImpl; 49 import com.ibm.wsdl.extensions.soap.SOAPOperationImpl; 50 51 public class PortTypeDecorator { 52 53 public static Definition createImportDef(Definition definition, 54 String targetNamespace, 55 String importUri) throws Exception { 56 Definition def = WSDLFactory.newInstance().newDefinition(); 58 def.setTargetNamespace(targetNamespace); 59 60 Map namespaces = definition.getNamespaces(); 62 for (Iterator iter = namespaces.keySet().iterator(); iter.hasNext();) { 63 String prefix = (String ) iter.next(); 64 String uri = definition.getNamespace(prefix); 65 def.addNamespace(prefix, uri); 66 } 67 def.addNamespace("tns", targetNamespace); 68 def.addNamespace("tnspt", definition.getTargetNamespace()); 69 70 Import imp = def.createImport(); 72 imp.setNamespaceURI(definition.getTargetNamespace()); 73 imp.setLocationURI(importUri); 74 imp.setDefinition(definition); 75 def.addImport(imp); 76 77 return def; 78 } 79 80 public static void decorate(Definition def, 81 PortType portType, 82 String locationUri) throws Exception { 83 decorate(def, 84 portType, 85 locationUri, 86 portType.getQName().getLocalPart() + "Binding", 87 portType.getQName().getLocalPart() + "Service", 88 "JBI"); 89 } 90 91 public static void decorate(Definition def, 92 PortType portType, 93 String locationUri, 94 String bindingName, 95 String serviceName, 96 String portName) throws Exception { 97 def.addNamespace("wsdlsoap", "http://schemas.xmlsoap.org/wsdl/soap/"); 98 Binding binding = def.createBinding(); 100 binding.setQName(new QName (def.getTargetNamespace(), bindingName)); 101 binding.setPortType(portType); 102 binding.setUndefined(false); 103 SOAPBinding soap = new SOAPBindingImpl(); 105 soap.setTransportURI("http://schemas.xmlsoap.org/soap/http"); 106 soap.setStyle("document"); 107 binding.addExtensibilityElement(soap); 108 List operations = portType.getOperations(); 110 for (Iterator iter = operations.iterator(); iter.hasNext();) { 111 Operation operation = (Operation) iter.next(); 112 BindingOperation bindingOp = def.createBindingOperation(); 113 bindingOp.setName(operation.getName()); 114 SOAPOperation op = new SOAPOperationImpl(); 115 op.setSoapActionURI(""); 116 bindingOp.addExtensibilityElement(op); 117 if (operation.getInput() != null) { 118 BindingInput in = def.createBindingInput(); 119 in.setName(operation.getInput().getName()); 120 SOAPBody body = new SOAPBodyImpl(); 121 body.setUse("literal"); 122 in.addExtensibilityElement(body); 123 bindingOp.setBindingInput(in); 124 } 125 if (operation.getOutput() != null) { 126 BindingOutput out = def.createBindingOutput(); 127 out.setName(operation.getOutput().getName()); 128 SOAPBody body = new SOAPBodyImpl(); 129 body.setUse("literal"); 130 out.addExtensibilityElement(body); 131 bindingOp.setBindingOutput(out); 132 } 133 for (Iterator itf = operation.getFaults().values().iterator(); itf.hasNext();) { 134 Fault fault = (Fault) itf.next(); 135 BindingFault bindingFault = def.createBindingFault(); 136 bindingFault.setName(fault.getName()); 137 SOAPFault soapFault = new SOAPFaultImpl(); 138 soapFault.setUse("literal"); 139 soapFault.setName(fault.getName()); 140 bindingFault.addExtensibilityElement(soapFault); 141 bindingOp.addBindingFault(bindingFault); 142 } 143 binding.addBindingOperation(bindingOp); 144 } 145 def.addBinding(binding); 146 Service service = def.createService(); 148 service.setQName(new QName (def.getTargetNamespace(), serviceName)); 149 Port port = def.createPort(); 150 port.setName(portName); 151 port.setBinding(binding); 152 SOAPAddress address = new SOAPAddressImpl(); 153 address.setLocationURI(locationUri); 154 port.addExtensibilityElement(address); 155 service.addPort(port); 156 def.addService(service); 157 } 158 159 public static Definition decorate(Definition definition, 160 String importUri, 161 String targetNamespace, 162 String locationUri) throws Exception { 163 Definition def = createImportDef(definition, targetNamespace, importUri); 165 166 for (Iterator it = definition.getPortTypes().values().iterator(); it.hasNext();) { 168 PortType portType = (PortType) it.next(); 169 decorate(def, portType, locationUri); 170 } 171 return def; 172 } 173 174 } 175 | Popular Tags |