View Javadoc

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  }