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