1 package org.codehaus.xfire.wsdl11.builder; 2 3 import java.util.Collection; 4 import java.util.Iterator; 5 6 import javax.wsdl.Message; 7 import javax.wsdl.Part; 8 import javax.wsdl.WSDLException; 9 import javax.xml.namespace.QName; 10 11 import org.codehaus.xfire.service.object.ObjectService; 12 import org.codehaus.xfire.service.object.Operation; 13 import org.codehaus.xfire.service.object.Parameter; 14 import org.codehaus.xfire.type.Type; 15 import org.dom4j.Element; 16 import org.dom4j.Namespace; 17 18 19 /*** 20 * Creates Document style WSDL documents for JavaServices. 21 * 22 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a> 23 */ 24 public class RPCEncodedWSDL 25 extends AbstractJavaWSDL 26 { 27 public RPCEncodedWSDL( ObjectService service, Collection transports ) throws WSDLException 28 { 29 super( service, transports ); 30 } 31 32 protected void createOutputParts( Message res, Operation op ) 33 { 34 writeParametersSchema(res, op.getOutParameters()); 35 } 36 37 protected void createInputParts( Message req, Operation op ) 38 { 39 writeParametersSchema(req, op.getInParameters()); 40 } 41 42 protected void writeParametersSchema( Message message, Collection params ) 43 { 44 ObjectService service = (ObjectService) getService(); 45 46 for ( Iterator itr = params.iterator(); itr.hasNext(); ) 47 { 48 Parameter param = (Parameter) itr.next(); 49 Class clazz = param.getTypeClass(); 50 QName pName = param.getName(); 51 52 Type type = service.getTypeMapping().getType( clazz ); 53 addDependency(type); 54 QName schemaType = type.getSchemaType(); 55 56 Part part = getDefinition().createPart(); 57 part.setName( pName.getLocalPart() ); 58 59 if ( type.isComplex() ) 60 { 61 part.setElementName( pName ); 62 63 Element schemaEl = createSchemaType( service.getDefaultNamespace() ); 64 Element element = schemaEl.addElement( elementQ ); 65 element.addAttribute( "name", pName.getLocalPart() ); 66 67 Namespace typeNS = getNamespace( schemaType.getNamespaceURI() ); 68 addNamespace( typeNS.getPrefix(), typeNS.getURI() ); 69 70 element.addAttribute("type", typeNS.getPrefix() + ":" + schemaType.getLocalPart() ); 71 } 72 else 73 { 74 part.setElementName(type.getSchemaType()); 75 } 76 77 message.addPart( part ); 78 } 79 } 80 }