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 }