View Javadoc

1   package org.codehaus.xfire.java.wsdl;
2   
3   import java.util.Iterator;
4   import java.util.Set;
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.java.JavaService;
12  import org.codehaus.xfire.java.Operation;
13  import org.codehaus.xfire.java.type.Type;
14  import org.dom4j.Element;
15  import org.dom4j.Namespace;
16  
17  
18  /***
19   * Creates Document style WSDL documents for JavaServices.
20   * 
21   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
22   */
23  public class DocumentWSDL
24      extends AbstractWSDL
25  {    
26      public DocumentWSDL( JavaService service, Set transports ) throws WSDLException
27      {
28          super( service, transports );
29      }
30  
31      protected void createOutputParts( Message res, Operation op )
32      {
33          JavaService service = (JavaService) getService();
34          
35          String opName = op.getName() + "Response";
36          
37          Class clazz = op.getOutParameterClass();
38          
39          // response message part
40          Part part = getDefinition().createPart();
41          part.setName( op.getOutParameterName() );
42          part.setElementName( new QName( getService().getDefaultNamespace(), 
43                                          op.getOutParameterName() ) );
44  
45          Type type = service.getTypeMapping().getType( clazz );
46          addDependency( type );
47          
48          Element schemaType = createSchemaType( service.getDefaultNamespace() );
49          Element element = schemaType.addElement( elementQ );
50          element.addAttribute( "name", op.getOutParameterName() );
51              
52          Class paramClass = op.getOutParameterClass();
53          Type paramType = service.getTypeMapping().getType( paramClass );
54          Namespace typeNS = getNamespace( paramType.getSchemaType().getNamespaceURI() );
55          
56          element.addAttribute("type", typeNS.getPrefix() + ":" + type.getSchemaType().getName() );
57          
58          res.addPart( part );
59      }
60  
61      protected void createInputParts( Message req, Operation op )
62      {
63          JavaService service = (JavaService) getService();
64          
65          String opName = op.getName() + "Request";
66  
67          for ( Iterator itr = op.getParameters().iterator(); itr.hasNext(); )
68          {
69              String paramName = (String) itr.next();
70              
71              Part part = getDefinition().createPart();
72              part.setName( paramName );
73              part.setElementName( new QName( service.getDefaultNamespace(), paramName ) );
74             
75              Element schemaType = createSchemaType( service.getDefaultNamespace() );
76              Element element = schemaType.addElement( elementQ );
77              element.addAttribute( "name", paramName );
78              
79              Class paramClass = op.getParameterClass( paramName );
80              Type paramType = service.getTypeMapping().getType( paramClass );
81              Namespace typeNS = getNamespace( paramType.getSchemaType().getNamespaceURI() );
82              
83              element.addAttribute("type", typeNS.getPrefix() + ":" + paramType.getSchemaType().getName() );
84  
85              req.addPart( part );
86          }
87      }
88  }