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#...
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&a...