You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by an...@apache.org on 2002/10/15 14:10:12 UTC
cvs commit: xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap WSIFOperation_ApacheSOAP.java SOAPJMSConnection.java
antelder 2002/10/15 05:10:12
Modified: java/src/org/apache/wsif/providers/soap/apacheaxis
WSIFOperation_ApacheAxis.java WSIFJmsSender.java
WSIFJmsTransport.java
java/src/org/apache/wsif/providers/soap/apachesoap
WSIFOperation_ApacheSOAP.java
SOAPJMSConnection.java
Log:
Enhance SOAP JMS operations to allow timouts to be specified for each operation request
Revision Changes Path
1.26 +65 -15 xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFOperation_ApacheAxis.java
Index: WSIFOperation_ApacheAxis.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFOperation_ApacheAxis.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- WSIFOperation_ApacheAxis.java 15 Oct 2002 08:13:15 -0000 1.25
+++ WSIFOperation_ApacheAxis.java 15 Oct 2002 12:10:12 -0000 1.26
@@ -600,16 +600,21 @@
if (axistransport != null) {
call.setTransport(axistransport);
if (axistransport instanceof WSIFJmsTransport) {
- dest = ((WSIFJmsTransport) axistransport).getDestination();
+ WSIFJmsTransport jmst = (WSIFJmsTransport) axistransport;
+ dest = jmst.getDestination();
dest.setAsyncMode(isAsyncOperation());
+ jmst.setSyncTimeout(null); // reset timeouts to defaults
+ jmst.setAsyncTimeout(null);
}
}
if (names == null)
prepare(call);
- if (inJmsPropVals != null && !inJmsPropVals.isEmpty())
+ if (inJmsPropVals != null && !inJmsPropVals.isEmpty()) {
+ checkForTimeoutProperties(inJmsPropVals, dest);
dest.setProperties(inJmsPropVals);
+ }
setDestinationContext(dest); // TODO WSDL props override context???
@@ -638,10 +643,14 @@
}
}
- if (inJmsProps.containsKey(names[i]) && dest != null)
- dest.setProperty((String) (inJmsProps.get(names[i])), obj);
- else
+ if (inJmsProps.containsKey(names[i]) && dest != null) {
+ String name = (String) (inJmsProps.get(names[i]));
+ if (!timeoutProperty(dest, name, obj)) {
+ dest.setProperty(name, obj);
+ }
+ } else {
objects.add(obj);
+ }
}
setCallContext(call);
@@ -1014,19 +1023,22 @@
if (context == null || dest == null) {
return;
}
- String partName;
HashMap jmsProps = new HashMap();
for (Iterator i = context.getPartNames(); i.hasNext();) {
- partName = (String) i.next();
- if (partName.startsWith(WSIFConstants.CONTEXT_JMS_PREFIX)) {
- try {
- jmsProps.put(
- partName.substring(
- WSIFConstants.CONTEXT_JMS_PREFIX.length()),
- context.getObjectPart(partName));
- } catch (WSIFException ex) {
- Trc.ignoredException(ex);
+ String partName = (String) i.next();
+ try {
+ Object value = context.getObjectPart(partName);
+ if (!timeoutProperty(dest, partName, value)) {
+ if (partName
+ .startsWith(WSIFConstants.CONTEXT_JMS_PREFIX)) {
+ String propertyName =
+ partName.substring(
+ WSIFConstants.CONTEXT_JMS_PREFIX.length());
+ jmsProps.put(propertyName, value);
+ }
}
+ } catch (WSIFException ex) {
+ Trc.ignoredException(ex);
}
}
if (jmsProps.size() > 0) {
@@ -1100,6 +1112,44 @@
} else if (name.equals(WSIFConstants.CONTEXT_HTTP_PSWD)) {
call.setProperty(Call.PASSWORD_PROPERTY, value);
}
+ }
+
+ private void checkForTimeoutProperties(
+ HashMap inJmsPropVals,
+ WSIFJMSDestination dest) {
+ for (Iterator i = inJmsPropVals.keySet().iterator(); i.hasNext();) {
+ String name = (String) i.next();
+ Object value = inJmsPropVals.get(name);
+ if (timeoutProperty(dest, name, value)) {
+ i.remove();
+ }
+ }
+ }
+
+ private boolean timeoutProperty(
+ WSIFJMSDestination dest,
+ String propertyName,
+ Object value) {
+ boolean isTimeoutProperty = false;
+ try {
+ if (WSIFConstants.WSIF_PROP_SYNC_TIMEOUT.equals(propertyName)) {
+ isTimeoutProperty = true;
+ Long syncTimeout = new Long(value.toString());
+ WSIFJmsTransport transport = (WSIFJmsTransport) getTransport();
+ transport.setSyncTimeout(syncTimeout);
+ Trc.event(this, "overridding syncTimeout to " + syncTimeout);
+ } else if (
+ WSIFConstants.WSIF_PROP_ASYNC_TIMEOUT.equals(propertyName)) {
+ isTimeoutProperty = true;
+ Long asyncTimeout = new Long(value.toString());
+ WSIFJmsTransport transport = (WSIFJmsTransport) getTransport();
+ transport.setAsyncTimeout(asyncTimeout);
+ Trc.event(this, "overridding asyncTimeout to " + asyncTimeout);
+ }
+ } catch (NumberFormatException ex) {
+ Trc.ignoredException(ex);
+ }
+ return isTimeoutProperty;
}
/**
1.7 +16 -2 xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFJmsSender.java
Index: WSIFJmsSender.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFJmsSender.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- WSIFJmsSender.java 7 Aug 2002 15:10:25 -0000 1.6
+++ WSIFJmsSender.java 15 Oct 2002 12:10:12 -0000 1.7
@@ -76,6 +76,7 @@
* @author Mark Whitlock <wh...@apache.org>
*/
public class WSIFJmsSender extends BasicHandler {
+ private static final long SYNC_TIMEOUT = WSIFProperties.getSyncTimeout();
private static final long ASYNC_TIMEOUT = WSIFProperties.getAsyncTimeout();
private static final String DUMMY_RESPONSE =
"<?xml version='1.0' encoding='UTF-8'?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">\n<SOAP-ENV:Body>\n<ns1:addEntryResponse xmlns:ns1=\"http://wsifservice.addressbook/\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n</ns1:addEntryResponse>\n\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>";
@@ -89,6 +90,13 @@
WSIFJMSDestination dest =
(WSIFJMSDestination) messageContext.getProperty(WSIFJmsTransport.DESTINATION);
+ Long transportSyncTimeoutValue =
+ (Long)messageContext.getProperty(WSIFJmsTransport.SYNC_TIMEOUT);
+ long syncTimeout =
+ transportSyncTimeoutValue==null
+ ? SYNC_TIMEOUT
+ : transportSyncTimeoutValue.longValue();
+
Message message = messageContext.getRequestMessage();
String contents = message.getSOAPPartAsString();
@@ -96,7 +104,7 @@
performAsyncSend(messageContext, dest, contents);
} else {
String id = dest.send(contents, null);
- String response = dest.receiveString(id);
+ String response = dest.receiveString(id, syncTimeout);
Message responseMessage = new Message(response);
messageContext.setResponseMessage(responseMessage);
}
@@ -139,13 +147,19 @@
msgID = dest.send( data );
cid = new WSIFJMSCorrelationId( msgID );
} else {
+ Long transportAsyncTimeoutValue =
+ (Long)messageContext.getProperty(WSIFJmsTransport.ASYNC_TIMEOUT);
+ long asyncTimeout =
+ transportAsyncTimeoutValue==null
+ ? ASYNC_TIMEOUT
+ : transportAsyncTimeoutValue.longValue();
WSIFCorrelationService correlator =
WSIFCorrelationServiceLocator.getCorrelationService();
synchronized( correlator ) {
msgID = dest.send( data );
cid = new WSIFJMSCorrelationId( msgID );
if ( correlator != null ) {
- correlator.put( cid, (Serializable)wsifOp, ASYNC_TIMEOUT );
+ correlator.put( cid, (Serializable)wsifOp, asyncTimeout );
}
}
}
1.3 +37 -0 xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFJmsTransport.java
Index: WSIFJmsTransport.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFJmsTransport.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- WSIFJmsTransport.java 19 Jul 2002 15:46:31 -0000 1.2
+++ WSIFJmsTransport.java 15 Oct 2002 12:10:12 -0000 1.3
@@ -68,15 +68,20 @@
/**
* @author Mark Whitlock <wh...@apache.org>
+ * @author Ant Elder <an...@uk.ibm.com>
*/
public class WSIFJmsTransport extends Transport {
private WSIFJMSDestination destination = null;
private String asyncOperation = "false";
private WSIFOperation wsifOperation = null;
+ private Long syncTimeout = null;
+ private Long asyncTimeout = null;
public static final String DESTINATION = "destination";
public static final String ASYNCOPERATION = "asyncOperation";
public static final String WSIFOPERATION = "wsifOperation";
+ public static final String SYNC_TIMEOUT = "syncTimeout";
+ public static final String ASYNC_TIMEOUT = "asyncTimeout";
public void setDestination(WSIFJMSDestination destination) {
Trc.entry(this, destination);
@@ -96,6 +101,18 @@
Trc.exit();
}
+ public void setSyncTimeout(Long syncTimeout) {
+ Trc.entry(this, syncTimeout);
+ this.syncTimeout = syncTimeout;
+ Trc.exit();
+ }
+
+ public void setAsyncTimeout(Long asyncTimeout) {
+ Trc.entry(this, asyncTimeout);
+ this.asyncTimeout = asyncTimeout;
+ Trc.exit();
+ }
+
public WSIFJMSDestination getDestination() {
Trc.entry(this);
Trc.exit(this.destination);
@@ -114,6 +131,18 @@
return this.wsifOperation;
}
+ public Long getSyncTimeout() {
+ Trc.entry(this);
+ Trc.exit(this.syncTimeout);
+ return this.syncTimeout;
+ }
+
+ public Long getAsyncTimeout() {
+ Trc.entry(this);
+ Trc.exit(this.asyncTimeout);
+ return this.asyncTimeout;
+ }
+
public void setupMessageContextImpl(
MessageContext context,
Call call,
@@ -126,6 +155,10 @@
context.setProperty(ASYNCOPERATION, new Boolean(asyncOperation));
if (wsifOperation != null)
context.setProperty(WSIFOPERATION, wsifOperation);
+ if (syncTimeout != null)
+ context.setProperty(SYNC_TIMEOUT, syncTimeout);
+ if (asyncTimeout != null)
+ context.setProperty(ASYNC_TIMEOUT, asyncTimeout);
Trc.exit();
}
@@ -135,6 +168,8 @@
t.setDestination(destination);
t.setAsyncOperation(asyncOperation);
t.setWsifOperation(wsifOperation);
+ t.setSyncTimeout(syncTimeout);
+ t.setAsyncTimeout(asyncTimeout);
if (Trc.ON)
Trc.exit(t.deep());
return t;
@@ -148,6 +183,8 @@
buff += "destination:" + destination;
buff += "asyncOperation:" + asyncOperation;
buff += "wsifOperation:" + wsifOperation;
+ buff += "syncTimeout:" + syncTimeout;
+ buff += "asyncTimeout:" + asyncTimeout;
} catch (Exception e) {
Trc.exceptionInTrace(e);
}
1.29 +83 -19 xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/WSIFOperation_ApacheSOAP.java
Index: WSIFOperation_ApacheSOAP.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/WSIFOperation_ApacheSOAP.java,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- WSIFOperation_ApacheSOAP.java 20 Sep 2002 15:29:56 -0000 1.28
+++ WSIFOperation_ApacheSOAP.java 15 Oct 2002 12:10:12 -0000 1.29
@@ -110,6 +110,7 @@
import org.apache.wsif.logging.MessageLogger;
import org.apache.wsif.logging.Trc;
import org.apache.wsif.providers.WSIFDynamicTypeMap;
+import org.apache.wsif.util.WSIFProperties;
import org.apache.wsif.util.WSIFUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -580,14 +581,22 @@
call.setEncodingStyleURI(getInputEncodingStyle());
SOAPTransport st = getTransport();
- if (st != null)
+ if (st != null) {
call.setSOAPTransport(st);
+ if (st instanceof SOAPJMSConnection) {
+ SOAPJMSConnection sjt = (SOAPJMSConnection) st;
+ sjt.setSyncTimeout(WSIFProperties.getSyncTimeout());
+ sjt.setAsyncTimeout(WSIFProperties.getAsyncTimeout());
+ }
+ }
call.setTargetObjectURI(getInputNamespace());
call.setMethodName(getName());
- if (inJmsPropVals != null && !inJmsPropVals.isEmpty())
- ((SOAPJMSConnection) st).setJmsProperties(inJmsPropVals);
+ if (inJmsPropVals != null && !inJmsPropVals.isEmpty()) {
+ checkForTimeoutProperties(st, inJmsPropVals);
+ ((SOAPJMSConnection) st).setJmsProperties(inJmsPropVals);
+ }
setTransportContext(st); // TODO WSDL props override context???
@@ -615,11 +624,14 @@
+ types[i]);
}
- if (inJmsProps.containsKey(names[i]))
- ((SOAPJMSConnection) st).setJmsProperty(
- (String) (inJmsProps.get(names[i])),
- value);
- else {
+ if (inJmsProps.containsKey(names[i]) && st != null) {
+ String name = (String) (inJmsProps.get(names[i]));
+ if (!timeoutProperty(st, name, value)) {
+ ((SOAPJMSConnection) st).setJmsProperty(
+ name,
+ value);
+ }
+ } else {
Parameter param =
new Parameter(
names[i],
@@ -747,8 +759,16 @@
SOAPTransport st = getTransport();
- if (inJmsPropVals != null && !inJmsPropVals.isEmpty())
- ((SOAPJMSConnection) st).setJmsProperties(inJmsPropVals);
+ if (st instanceof SOAPJMSConnection) {
+ SOAPJMSConnection sjt = (SOAPJMSConnection) st;
+ sjt.setSyncTimeout(WSIFProperties.getSyncTimeout());
+ sjt.setAsyncTimeout(WSIFProperties.getAsyncTimeout());
+ }
+
+ if (inJmsPropVals != null && !inJmsPropVals.isEmpty()) {
+ checkForTimeoutProperties(st, inJmsPropVals);
+ ((SOAPJMSConnection) st).setJmsProperties(inJmsPropVals);
+ }
//TODO docstyle headers
//setCallContext( call );
@@ -1435,20 +1455,22 @@
if (context == null || !(t instanceof SOAPJMSConnection)) {
return;
}
- String partName;
HashMap jmsProps = new HashMap();
for (Iterator i = context.getPartNames(); i.hasNext();) {
- partName = (String) i.next();
- if (partName.startsWith(WSIFConstants.CONTEXT_JMS_PREFIX)) {
- try {
+ try {
+ String partName = (String) i.next();
+ Object value = context.getObjectPart(partName);
+ if (!timeoutProperty(t, partName, value)) {
+ if (partName.startsWith(WSIFConstants.CONTEXT_JMS_PREFIX)) {
jmsProps.put(
partName.substring(
WSIFConstants.CONTEXT_JMS_PREFIX.length()),
- context.getObjectPart(partName));
- } catch (WSIFException ex) {
- Trc.ignoredException(ex);
- }
- }
+ value);
+ }
+ }
+ } catch (WSIFException ex) {
+ Trc.ignoredException(ex);
+ }
}
if (jmsProps.size() > 0) {
((SOAPJMSConnection) t).setJmsProperties(jmsProps);
@@ -1585,6 +1607,48 @@
}
}
}
+
+ private void checkForTimeoutProperties(SOAPTransport st, HashMap inJmsPropVals) {
+ if (inJmsPropVals != null) {
+ for (Iterator i = inJmsPropVals.keySet().iterator(); i.hasNext();) {
+ String name = (String) i.next();
+ Object value = inJmsPropVals.get(name);
+ if (timeoutProperty(st, name, value)) {
+ i.remove();
+ }
+ }
+ }
+ }
+
+ private boolean timeoutProperty(
+ SOAPTransport t,
+ String propertyName,
+ Object value) {
+ Trc.entry(this, t, propertyName, value);
+ boolean isTimeoutProperty = false;
+ if (t != null
+ && t instanceof SOAPJMSConnection) {
+ SOAPJMSConnection st = (SOAPJMSConnection) t;
+ try {
+ if (WSIFConstants.WSIF_PROP_SYNC_TIMEOUT.equals(propertyName)) {
+ isTimeoutProperty = true;
+ long syncTimeout = Long.parseLong(value.toString());
+ st.setSyncTimeout(syncTimeout);
+ Trc.event(this, "overridding syncTimeout to " + syncTimeout);
+ } else if (
+ WSIFConstants.WSIF_PROP_ASYNC_TIMEOUT.equals(propertyName)) {
+ isTimeoutProperty = true;
+ long asyncTimeout = Long.parseLong(value.toString());
+ st.setAsyncTimeout(asyncTimeout);
+ Trc.event(this, "overridding asyncTimeout to " + asyncTimeout);
+ }
+ } catch (NumberFormatException ex) {
+ Trc.ignoredException(ex);
+ }
+ }
+ Trc.exit(isTimeoutProperty);
+ return isTimeoutProperty;
+ }
public String deep() {
String buff = "";
1.9 +28 -3 xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/SOAPJMSConnection.java
Index: SOAPJMSConnection.java
===================================================================
RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/SOAPJMSConnection.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SOAPJMSConnection.java 27 Aug 2002 10:24:07 -0000 1.8
+++ SOAPJMSConnection.java 15 Oct 2002 12:10:12 -0000 1.9
@@ -96,7 +96,8 @@
// folowing are for async operation
private boolean asyncOperation = false;
private WSIFOperation_ApacheSOAP wsifOperation = null;
- private static final long ASYNC_TIMEOUT = WSIFProperties.getAsyncTimeout();
+ private long syncTimeout;
+ private long asyncTimeout;
private static final String DUMMY_RESPONSE =
"<?xml version='1.0' encoding='UTF-8'?>\n<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\">\n<SOAP-ENV:Body>\n<ns1:addEntryResponse xmlns:ns1=\"http://wsifservice.addressbook/\" SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n</ns1:addEntryResponse>\n\n</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>";
@@ -123,6 +124,18 @@
return responseSOAPContext;
}
+ public long getSyncTimeout() {
+ Trc.entry(this);
+ Trc.exit(new Long(syncTimeout));
+ return syncTimeout;
+ }
+
+ public long getAsyncTimeout() {
+ Trc.entry(this);
+ Trc.exit(new Long(asyncTimeout));
+ return asyncTimeout;
+ }
+
public BufferedReader receive() {
Trc.entry(this);
Trc.exit();
@@ -151,7 +164,7 @@
StringWriter payloadSW = new StringWriter();
env.marshall(payloadSW, smr, ctx);
String id = destination.send(payloadSW.toString(), null);
- String response = destination.receiveString(id);
+ String response = destination.receiveString(id, syncTimeout);
responseSOAPContext = new SOAPContext();
responseSOAPContext.setRootPart(response, "text/xml");
responseReader = new BufferedReader(new StringReader(response));
@@ -204,7 +217,7 @@
correlator.put(
cid,
(Serializable)getWsifOperation(),
- ASYNC_TIMEOUT );
+ asyncTimeout );
}
}
}
@@ -265,6 +278,18 @@
void close() throws WSIFException {
Trc.entry(this);
destination.close();
+ Trc.exit();
+ }
+
+ public void setSyncTimeout(long timeout) {
+ Trc.entry(this, new Long(timeout));
+ syncTimeout = timeout;
+ Trc.exit();
+ }
+
+ public void setAsyncTimeout(long timeout) {
+ Trc.entry(this, new Long(timeout));
+ asyncTimeout = timeout;
Trc.exit();
}
}