View Javadoc

1   package org.codehaus.xfire.transport;
2   
3   import java.util.ArrayList;
4   import java.util.List;
5   
6   import javax.wsdl.Binding;
7   import javax.wsdl.BindingInput;
8   import javax.wsdl.BindingOperation;
9   import javax.wsdl.BindingOutput;
10  import javax.wsdl.Operation;
11  import javax.wsdl.Port;
12  import javax.wsdl.PortType;
13  import javax.wsdl.extensions.soap.SOAPBinding;
14  import javax.wsdl.extensions.soap.SOAPBody;
15  import javax.xml.namespace.QName;
16  
17  import org.codehaus.xfire.fault.FaultHandlerPipeline;
18  import org.codehaus.xfire.handler.HandlerPipeline;
19  import org.codehaus.xfire.service.Service;
20  import org.codehaus.xfire.soap.SoapConstants;
21  import org.codehaus.xfire.wsdl11.WSDL11Transport;
22  
23  import com.ibm.wsdl.BindingImpl;
24  import com.ibm.wsdl.BindingInputImpl;
25  import com.ibm.wsdl.BindingOperationImpl;
26  import com.ibm.wsdl.BindingOutputImpl;
27  import com.ibm.wsdl.PortImpl;
28  import com.ibm.wsdl.extensions.soap.SOAPAddressImpl;
29  import com.ibm.wsdl.extensions.soap.SOAPBindingImpl;
30  import com.ibm.wsdl.extensions.soap.SOAPBodyImpl;
31  import com.ibm.wsdl.extensions.soap.SOAPOperationImpl;
32  
33  /***
34   * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
35   * @since Dec 21, 2004
36   */
37  public abstract class AbstractTransport
38      implements Transport, WSDL11Transport
39  {
40      private HandlerPipeline requestPipeline;
41      private HandlerPipeline responsePipeline;
42      private FaultHandlerPipeline faultPipeline;
43  
44      public abstract String getServiceURL(Service service);
45  
46      public abstract String getTransportURI(Service service);
47  
48       /***
49       * @see org.codehaus.xfire.transport.Transport#createBinding(javax.wsdl.PortType)
50       */
51      public Binding createBinding(PortType portType, Service service)
52      {
53          Binding binding = new BindingImpl();
54          binding.setQName( new QName( service.getDefaultNamespace(), 
55                                       service.getName() + getName() + "Binding" ) );
56          binding.setPortType( portType );
57          binding.setUndefined(false);
58          
59          binding.addExtensibilityElement( createSoapBinding(service) );
60  
61          return binding;
62      }
63  
64      protected SOAPBinding createSoapBinding(Service service)
65      {
66          SOAPBinding soapBind = new SOAPBindingImpl();
67          
68          String style = service.getStyle();
69          if ( style.equals( SoapConstants.STYLE_WRAPPED ) )
70              style = SoapConstants.STYLE_DOCUMENT;
71          
72          soapBind.setStyle( style );
73          soapBind.setTransportURI( getTransportURI(service) );
74  
75          return soapBind;
76      }
77  
78      /***
79       * @see org.codehaus.xfire.transport.Transport#createPort(javax.wsdl.Binding)
80       */
81      public Port createPort(Binding transportBinding, Service service)
82      {
83          SOAPAddressImpl add = new SOAPAddressImpl();
84          add.setLocationURI( getServiceURL( service ) );
85          
86          Port port = new PortImpl();
87          port.setBinding( transportBinding );
88          port.setName( service.getName() + getName() + "Port" );
89          port.addExtensibilityElement( add );
90         
91          return port;
92      }
93     
94      /***
95       * @see org.codehaus.xfire.transport.Transport#createBindingOperation(javax.wsdl.Message, javax.wsdl.Message, org.codehaus.xfire.java.JavaService)
96       */
97      public BindingOperation createBindingOperation(PortType portType, Operation wsdlOp, Service service)
98      {
99          BindingOperation bindOp = new BindingOperationImpl();
100         
101         // Create bindings
102         SOAPBody body = createSoapBody( service );
103 
104         SOAPOperationImpl soapOp = new SOAPOperationImpl();
105         soapOp.setSoapActionURI("");
106         
107         BindingInput bindIn = new BindingInputImpl();
108         bindIn.setName( wsdlOp.getInput().getName() );
109         bindIn.addExtensibilityElement( body );
110         
111         BindingOutput bindOut = new BindingOutputImpl();
112         bindOut.setName( wsdlOp.getOutput().getName() );
113         bindOut.addExtensibilityElement( body );
114         bindOp.setBindingOutput( bindOut );
115 
116         bindOp.setName( wsdlOp.getName() );
117         bindOp.setOperation( wsdlOp );
118         bindOp.setBindingInput( bindIn );
119         bindOp.addExtensibilityElement( soapOp );
120         
121         return bindOp;
122     }
123     
124     public SOAPBody createSoapBody( Service service )
125     {
126         SOAPBody body = new SOAPBodyImpl();
127         body.setUse( service.getUse() ); 
128 
129         if ( service.getStyle().equals( SoapConstants.STYLE_RPC ) )
130         {
131             body.setNamespaceURI( service.getDefaultNamespace() );
132         }
133         
134         if ( service.getUse().equals( SoapConstants.USE_ENCODED ) )
135         {
136             List encodingStyles = new ArrayList();
137             encodingStyles.add( service.getSoapVersion().getSoapEncodingStyle() );
138             
139             body.setEncodingStyles(encodingStyles);
140         }
141         
142         return body;
143     }
144     
145     /***
146      * @return Returns the faultPipeline.
147      */
148     public FaultHandlerPipeline getFaultPipeline()
149     {
150         return faultPipeline;
151     }
152     
153     /***
154      * @param faultPipeline The faultPipeline to set.
155      */
156     public void setFaultPipeline(FaultHandlerPipeline faultPipeline)
157     {
158         this.faultPipeline = faultPipeline;
159     }
160     
161     /***
162      * @return Returns the requestPipeline.
163      */
164     public HandlerPipeline getRequestPipeline()
165     {
166         return requestPipeline;
167     }
168     
169     /***
170      * @param requestPipeline The requestPipeline to set.
171      */
172     public void setRequestPipeline(HandlerPipeline requestPipeline)
173     {
174         this.requestPipeline = requestPipeline;
175     }
176     
177     /***
178      * @return Returns the responsePipeline.
179      */
180     public HandlerPipeline getResponsePipeline()
181     {
182         return responsePipeline;
183     }
184     
185     /***
186      * @param responsePipeline The responsePipeline to set.
187      */
188     public void setResponsePipeline(HandlerPipeline responsePipeline)
189     {
190         this.responsePipeline = responsePipeline;
191     }
192 }