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 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  }