Page 2 of 2 FirstFirst 12
Results 11 to 16 of 16

Thread: JSESSIONID and setting cookie for WebServiceTemplate

  1. #11
    Join Date
    Sep 2008
    Location
    London
    Posts
    20

    Default Code on the server side

    Hi Guys,

    I am too working with cookies for my Spring webservices. Please can you show me the code tha you use on the Server side to generate a cookie and store the data in the cookie and send it back to the client.

    Cheers,
    Sanjay Patil

  2. #12
    Join Date
    Sep 2007
    Posts
    14

    Default

    This is my servlet code:

    Code:
    package org.foo;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.springframework.ws.transport.http.MessageDispatcherServlet;
    
    public class MyMessageDispatcherServlet extends MessageDispatcherServlet {
        @Override
        protected void doService(HttpServletRequest httpServletRequest,
                HttpServletResponse httpServletResponse) throws Exception {
            HttpSession session = httpServletRequest.getSession();
            super.doService(httpServletRequest, httpServletResponse);
        }
    }
    You need to change web.xml for your server to configure web services:

    Code:
    <!-- Spring-WS Servlet -->
    <servlet>
         <servlet-name>WebServices</servlet-name>
         <servlet-class>org.foo.MyMessageDispatcherServlet</servlet-class>
         ...
    </servlet>

  3. #13
    Join Date
    Sep 2008
    Location
    London
    Posts
    20

    Question Accessing HttpServletRequest in POJO class

    Hi,

    Thanks for the response. I do have some more queries now.

    1. I want to call the webservices from a service class which is a POJO class, not from jsp or Servlet as shown above. So is there any Spring utility class I can use to get a handle to HttpServletRequest. I can see you guys have used below code for the same, which i guess is in a jsp file.

    HttpServletRequest srequest = (HttpServletRequest) ((this.getPageContext()).getRequest());

    I have not tried below code yet which I found on another forum log. I presume this will work only if I have server connection which is not the case for me.

    TransportContext context = TransportContextHolder.getTransportContext();
    HttpServletConnection connection = (HttpServletConnection) context.getConnection();
    HttpServletRequest request = connection.getHttpServletRequest();


    Cheers,
    Sanjay Patil

  4. #14
    Join Date
    Sep 2008
    Location
    London
    Posts
    20

    Question My Java code

    Hi,

    Sorry, I forgot to attach my code. Please find the same below.

    Code:
    package com.sample.webservice;
    
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.xml.transform.TransformerException;
    
    import org.apache.commons.httpclient.Cookie;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpState;
    import org.apache.commons.httpclient.methods.PostMethod;
    import org.springframework.ws.WebServiceMessage;
    import org.springframework.ws.client.core.WebServiceMessageCallback;
    import org.springframework.ws.client.core.WebServiceTemplate;
    import org.springframework.ws.pox.dom.DomPoxMessageFactory;
    import org.springframework.ws.transport.WebServiceConnection;
    import org.springframework.ws.transport.WebServiceMessageSender;
    import org.springframework.ws.transport.context.TransportContext;
    import org.springframework.ws.transport.context.TransportContextHolder;
    import org.springframework.ws.transport.http.CommonsHttpConnection;
    import org.springframework.ws.transport.http.CommonsHttpMessageSender;
    import org.springframework.xml.transform.StringResult;
    import org.springframework.xml.transform.StringSource;
    
    public class WebServiceAgent {
    
    	private WebServiceTemplate webServiceTemplate;
    	
    	private class MyCommonsHttpMessageSender extends org.springframework.ws.transport.http.CommonsHttpMessageSender {
    
    		public WebServiceConnection createConnection(URI uri) throws IOException {
    			CommonsHttpConnection connection = (CommonsHttpConnection) super.createConnection(uri);
    			PostMethod pm = connection.getPostMethod();
    
    			Cookie[] cookies = getHttpClient().getState().getCookies();
    			int numberOfCookies = cookies.length;
    			for (int i = 0; i < numberOfCookies; i++) {
    				pm.addRequestHeader("Cookie", cookies[i].toString());
    			}
    			return connection;
    		}
    
    		public boolean supports(URI arg0) {
    			// TODO Auto-generated method stub
    			return false;
    		}
    
    	}
    
    	
    	class MyWebServiceMessageCallback implements WebServiceMessageCallback {
    	    public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
    	        TransportContext transportContext = TransportContextHolder.getTransportContext();
    	        WebServiceConnection connection = transportContext.getConnection();
    	        
    	        /**/
    	        
    	    }
    	}
    	
    	public static void main(String[] args) {
    
    		WebServiceAgent webServiceTest = new WebServiceAgent();
    
    		webServiceTest.doSomething();
    	}
    
    	public void doSomething() {
    
    		StringSource stringSource = new StringSource("..... INPUT XML ......");
    		StringResult stringResult = new StringResult();
    
    		// initializing the webservicetemplate in place of using application context xml.
    		
    		webServiceTemplate = new MyWebServiceTemplate(new DomPoxMessageFactory());
    		MyCommonsHttpMessageSender messageSender = new MyCommonsHttpMessageSender();		
    		try {
    			messageSender.createConnection(new URI("http://localhost:9081/webserviceURL"));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (URISyntaxException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		webServiceTemplate.setMessageSender(messageSender);
    
    		webServiceTemplate.setDefaultUri("http://localhost:9081/webserviceURL");
    		
    		// end of webservice initialization
    		
    		WebServiceMessageSender[] senders = webServiceTemplate.getMessageSenders();
    		CommonsHttpMessageSender commons = (CommonsHttpMessageSender) senders[0];
    
    		HttpClient client = new HttpClient();
    
    		HttpState state = new HttpState();
    		
    //		 Build the JSESSIONID cookie I need to send to my web service
    		HttpServletRequest srequest = (HttpServletRequest) ((this.getPageContext()).getRequest());
    		javax.servlet.http.Cookie cookies[] = srequest.getCookies();
    		
    		
    		for (int i = 0; i < cookies.length; i++) {
    			javax.servlet.http.Cookie c = cookies[i];
    			if (c.getName().equals("JSESSIONID")) {
    				org.apache.commons.httpclient.Cookie newCookie = new org.apache.commons.httpclient.Cookie();
    				newCookie.setDomain(c.getDomain());
    				newCookie.setPath(c.getPath());
    				newCookie.setName(c.getName());
    				newCookie.setValue(c.getValue());
    				state.addCookie(newCookie);
    			}
    		}
    		
    
    		client.setState(state);
    		commons.setHttpClient(client);
    		
    		webServiceTemplate.sendSourceAndReceiveToResult(stringSource, new MyWebServiceMessageCallback(), stringResult);
    
    	}
    
    
    }

  5. #15
    Join Date
    Sep 2007
    Posts
    14

    Default

    So you need to obtain JSESSIONID from somewhere to identify yourself with the webservice.

    You need to store JSESSIONID which server generates at first HttpRequest, and then somehow pass it to the client code, so it can authenticate itself with same JSESSIONID as the code you posted shows. I don't know which technologies are you using, and what is the scenario of communication through WS. But when you have no previous Http communication with server, then you cant have any JSESSIONID. Dont know if i put this straight

  6. #16

    Default Spring Webservice with SOAP

    Hi ,
    i did some R&D in Spring webservices then after i got a idea to get the proper response from the service provide... in below i mentioned some code please try to follow...............




    public String clientRequestWebService(final String productName, String xigniteBody) throws WebServiceTemplateException {

    final StreamSource xigniteBodySource = new StreamSource(new StringReader(xigniteBody));
    StreamResult result = new StreamResult(System.out);
    log.debug("Resutl ::::: >>>>>>>> "+ result);

    if(webServiceTemplate == null) {
    throw new WebServiceTemplateException("Web Service Template Shouldn't be Null");
    }

    MyCommonsHttpMessageSender messageSender = new MyCommonsHttpMessageSender();

    try {
    messageSender.createConnection(new URI("http://www.xxxx.com/xCurrencies.asmx"));
    } catch (IOException e) {
    e.printStackTrace();
    } catch (URISyntaxException e) {
    e.printStackTrace();
    }

    webServiceTemplate.setMessageSender(messageSender) ;
    webServiceTemplate.setDefaultUri("http://www.xxxx.com/xCurrencies.asmx?op="+ productName);

    boolean flag = webServiceTemplate.sendSourceAndReceiveToResult( xigniteBodySource, new WebServiceMessageCallback() {
    @Override
    public void doWithMessage(WebServiceMessage arg0) throws IOException, TransformerException {

    SaajSoapMessage saajSoapMessage = ( SaajSoapMessage )arg0;
    saajSoapMessage.getSaajMessage();
    saajSoapMessage.setSoapAction( "http://www.xxxx.com/services/"+ productName);

    StringSource headerSource = new StringSource(getRequestHeader());
    SoapHeader soapHeader = ((SoapMessage) arg0).getSoapHeader();
    Transformer transformer = TransformerFactory.newInstance().newTransformer();
    transformer.transform(headerSource, soapHeader.getResult());
    }
    }, result );

    log.debug("webServiceTemplate.sendSourceAndReceive ToResult Flag : "+ flag);

    return null;
    }

    public String getRequestHeader() {

    StringBuffer sbHeader = new StringBuffer();
    sbHeader.append("<Header xmlns=\"http://www.xignite.com/services/\">");
    sbHeader.append("<Username>");
    sbHeader.append("xx");
    sbHeader.append("</Username>");
    sbHeader.append("<Password> ");
    sbHeader.append( "xxx" );
    sbHeader.append("</Password>");
    sbHeader.append("</Header>");

    log.debug("Header Content : "+ sbHeader.toString());
    return sbHeader.toString();
    }

    public class MyCommonsHttpMessageSender extends org.springframework.ws.transport.http.CommonsHttpM essageSender {
    @Override
    public WebServiceConnection createConnection(URI uri) throws IOException {
    CommonsHttpConnection connection = (CommonsHttpConnection) super.createConnection(uri);
    return connection;
    }
    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •