View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2008 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.impl.wsdl.submit.filters;
14  
15  import com.eviware.soapui.impl.support.AbstractHttpRequest;
16  import com.eviware.soapui.impl.wsdl.WsdlOperation;
17  import com.eviware.soapui.impl.wsdl.WsdlRequest;
18  import com.eviware.soapui.impl.wsdl.submit.transports.http.BaseHttpRequestTransport;
19  import com.eviware.soapui.impl.wsdl.submit.transports.http.ExtendedHttpMethod;
20  import com.eviware.soapui.impl.wsdl.support.soap.SoapVersion;
21  import com.eviware.soapui.impl.wsdl.support.wsa.WsaUtils;
22  import com.eviware.soapui.model.iface.SubmitContext;
23  import org.apache.log4j.Logger;
24  
25  /***
26   * RequestFilter that expands properties in request content
27   * 
28   * @author Ole.Matzura
29   */
30  
31  public class WsaRequestFilter extends AbstractRequestFilter
32  {
33  	public final static Logger log = Logger.getLogger(WsaRequestFilter.class);
34  	
35  	public void filterAbstractHttpRequest(SubmitContext context, AbstractHttpRequest<?> wsdlRequest)
36  	{
37  		if( !(wsdlRequest instanceof WsdlRequest) || !((WsdlRequest)wsdlRequest).isWsAddressing())
38  			return;
39  		
40  		String content = (String) context.getProperty( BaseHttpRequestTransport.REQUEST_CONTENT );
41  		if( content == null )
42  		{
43  			log.warn( "Missing request content in context, skipping ws-addressing" );
44  		}
45  		else
46  		{
47  			ExtendedHttpMethod httpMethod = (ExtendedHttpMethod) context.getProperty( BaseHttpRequestTransport.HTTP_METHOD );
48  			WsdlOperation operation = ((WsdlRequest)wsdlRequest).getOperation();
49  //	TODO check UsingAddressing for particular endpoint when running a request
50  //			((WsdlRequest)wsdlRequest).getEndpoint();
51  			SoapVersion soapVersion = operation.getInterface().getSoapVersion();
52  			content = new WsaUtils(content, soapVersion, operation, context).addWSAddressingRequest((WsdlRequest) wsdlRequest, httpMethod);
53  			if( content != null )
54  				context.setProperty( BaseHttpRequestTransport.REQUEST_CONTENT, content );
55  		}
56  	}
57  	
58  }
59  
60