KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > servicemix > http > tools > PortTypeDecorator


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements. See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17 package org.apache.servicemix.http.tools;
18
19 import java.io.File JavaDoc;
20 import java.io.FileOutputStream JavaDoc;
21 import java.util.Iterator JavaDoc;
22 import java.util.List JavaDoc;
23 import java.util.Map JavaDoc;
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 JavaDoc;
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 JavaDoc targetNamespace,
55                                              String JavaDoc importUri) throws Exception JavaDoc {
56         // Create definition
57
Definition def = WSDLFactory.newInstance().newDefinition();
58         def.setTargetNamespace(targetNamespace);
59         
60         // Add namespaces
61
Map JavaDoc namespaces = definition.getNamespaces();
62         for (Iterator JavaDoc iter = namespaces.keySet().iterator(); iter.hasNext();) {
63             String JavaDoc prefix = (String JavaDoc) iter.next();
64             String JavaDoc uri = definition.getNamespace(prefix);
65             def.addNamespace(prefix, uri);
66         }
67         def.addNamespace("tns", targetNamespace);
68         def.addNamespace("tnspt", definition.getTargetNamespace());
69         
70         // Create import
71
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 JavaDoc locationUri) throws Exception JavaDoc {
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 JavaDoc locationUri,
94                                 String JavaDoc bindingName,
95                                 String JavaDoc serviceName,
96                                 String JavaDoc portName) throws Exception JavaDoc {
97         def.addNamespace("wsdlsoap", "http://schemas.xmlsoap.org/wsdl/soap/");
98         // Create binding
99
Binding binding = def.createBinding();
100         binding.setQName(new QName JavaDoc(def.getTargetNamespace(), bindingName));
101         binding.setPortType(portType);
102         binding.setUndefined(false);
103         // Create soap extension
104
SOAPBinding soap = new SOAPBindingImpl();
105         soap.setTransportURI("http://schemas.xmlsoap.org/soap/http");
106         soap.setStyle("document");
107         binding.addExtensibilityElement(soap);
108         // Create operations
109
List JavaDoc operations = portType.getOperations();
110         for (Iterator JavaDoc 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 JavaDoc 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         // Create service
147
Service service = def.createService();
148         service.setQName(new QName JavaDoc(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 JavaDoc importUri,
161                                       String JavaDoc targetNamespace,
162                                       String JavaDoc locationUri) throws Exception JavaDoc {
163         // Create definition
164
Definition def = createImportDef(definition, targetNamespace, importUri);
165         
166         // Iterator through port types
167
for (Iterator JavaDoc 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