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 }