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 DocumentWSDL 25 extends AbstractJavaWSDL 26 { 27 public DocumentWSDL(ObjectService service, Collection transports) throws WSDLException 28 { 29 super(service, transports); 30 } 31 32 protected void createOutputParts(Message res, Operation op) 33 { 34 writeParameters(res, op.getOutParameters()); 35 } 36 37 protected void createInputParts( Message req, Operation op ) 38 { 39 writeParameters(req, op.getInParameters()); 40 } 41 42 /*** 43 * @param message 44 * @param op 45 * @param service 46 */ 47 private void writeParameters(Message message, Collection params) 48 { 49 ObjectService service = (ObjectService) getService(); 50 51 for ( Iterator itr = params.iterator(); itr.hasNext(); ) 52 { 53 Parameter param = (Parameter) itr.next(); 54 Class clazz = param.getTypeClass(); 55 QName pName = param.getName(); 56 57 Type type = service.getTypeMapping().getType( clazz ); 58 addDependency(type); 59 60 QName schemaType = type.getSchemaType(); 61 62 Part part = getDefinition().createPart(); 63 part.setName( pName.getLocalPart() ); 64 65 if ( type.isComplex() ) 66 { 67 part.setElementName( pName ); 68 69 Element schemaEl = createSchemaType( service.getDefaultNamespace() ); 70 Element element = schemaEl.addElement( elementQ ); 71 element.addAttribute( "name", pName.getLocalPart() ); 72 73 Namespace typeNS = getNamespace( schemaType.getNamespaceURI() ); 74 addNamespace( typeNS.getPrefix(), typeNS.getURI() ); 75 76 element.addAttribute("type", typeNS.getPrefix() + ":" + schemaType.getLocalPart() ); 77 } 78 else 79 { 80 part.setElementName(type.getSchemaType()); 81 } 82 83 message.addPart( part ); 84 } 85 } 86 }