[jboss-user] [JBossWS] - sending Soap message with timeout

sbutt do-not-reply at jboss.com
Thu Jul 2 08:55:52 EDT 2009


Hi Folks,
            I have implemented a basic soap client (javax.xml.soap.*). 


  | 
  | public Message processSOAPRequest(Message message) {
  |     try {
  |       MessageFactory msgFactory = MessageFactory.newInstance();
  |       SOAPMessage soap = msgFactory.createMessage();
  |       SOAPPart soapPart = soap.getSOAPPart();
  | 
  |       byte[] buffer = ((String) message.getBody().get()).getBytes();
  |       ByteArrayInputStream stream = new ByteArrayInputStream(buffer);
  |       StreamSource source = new StreamSource(stream);
  |       soapPart.setContent(source);
  |       String action = config.getAttribute(SOAP_ACTION);
  |       if (action != null) {
  |         MimeHeaders headers = soap.getMimeHeaders();
  |         headers.addHeader("SOAPAction", action);
  |       }
  |     
  |       /////////////////////////////////////////////////////////
  | 
  |       SOAPMessage reply = sendSOAPMessage(soap);
  | 
  |       /////////////////////////////////////////////////////////    
  | 
  |       ByteArrayOutputStream out = new ByteArrayOutputStream();
  |       reply.writeTo(out);
  |       String soapMessage = new String(out.toByteArray());
  |       message.getBody().add(soapMessage);
  | 
  |     } catch (SOAPException e) {
  |       logger.error("SOAPException : " + e);
  | 
  |     } catch (IOException e) {
  |       logger.error("IOException : " + e);
  |     }
  | 
  |     return message;
  | 
  |   }
  | 
  | 
  |  private SOAPMessage sendSOAPMessage(SOAPMessage soap) {
  |     SOAPConnection connection = null;
  |     SOAPMessage reply = null;
  |     try {
  |       SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory
  |           .newInstance();
  |       connection = soapConnFactory.createConnection();
  |       String destination = config.getAttribute(URL_ENDPOINT);
  |             
  |       reply = connection.call(soap, destination);
  |   
  |       
  |       
  |     } catch (Exception e) {
  |       logger.error(e);
  |     } finally {
  |       try {
  |         if (connection != null) {
  |           connection.close();
  |         }
  |       } catch (SOAPException e) {
  |         logger.error(e);
  |       }
  |     }
  | 
  |     return reply;
  |   }
  | 
  | 

The input message is JBossEsb message, which I convert to soap message and then send it using SOAPConnection, which works fine. 

The problem with SOAPConnection class is that it does not provide setTimeout(..) method. I read some where that there is another class SOAPConnectionImpl (by axis), which extends SOAPConnection and has this setTimeout method.

I have tried to convert my existing implementation to SOAPConnectionImpl but i always get a classcast exceptions.

Could somebody help me in suggesting a solution to this problem? My main concern is to include timeout feature that is my WS consumer/client should timeout after a certain period if the server does not reply. 

Any other soap message sending implementation with timeout feature are also good.

I have included 
    	
  | <dependency>
  |     <groupId>axis</groupId>
  |     <artifactId>axis</artifactId>
  |     <version>1.4</version>
  | </dependency>
  | 

maven dependencies for axis.

Awaiting replies.

Thanks.

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4241472#4241472

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4241472



More information about the jboss-user mailing list