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 du...@apache.org on 2007/03/01 14:52:24 UTC
svn commit: r513320 - in /webservices/axis/trunk/java/src/org/apache/axis:
persistence/JVMPersistence.java persistence/Persistence.java
wsa/EndpointReference.java wsa/MIHeader.java wsa/WSAHandler.java
Author: dug
Date: Thu Mar 1 05:52:22 2007
New Revision: 513320
URL: http://svn.apache.org/viewvc?view=rev&rev=513320
Log:
Fix a bug when using different WSA levels - new EPRs had the wrong namespace
Make the persistence support multiple items per queue instead of just one
Modified:
webservices/axis/trunk/java/src/org/apache/axis/persistence/JVMPersistence.java
webservices/axis/trunk/java/src/org/apache/axis/persistence/Persistence.java
webservices/axis/trunk/java/src/org/apache/axis/wsa/EndpointReference.java
webservices/axis/trunk/java/src/org/apache/axis/wsa/MIHeader.java
webservices/axis/trunk/java/src/org/apache/axis/wsa/WSAHandler.java
Modified: webservices/axis/trunk/java/src/org/apache/axis/persistence/JVMPersistence.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/persistence/JVMPersistence.java?view=diff&rev=513320&r1=513319&r2=513320
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/persistence/JVMPersistence.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/persistence/JVMPersistence.java Thu Mar 1 05:52:22 2007
@@ -1,27 +1,106 @@
package org.apache.axis.persistence ;
+import java.util.Enumeration ;
import java.util.Hashtable ;
+import java.util.Vector ;
public class JVMPersistence implements Persistence {
- private Hashtable queues = new Hashtable();
+ class Entry {
+ String entryID = null ;
+ Hashtable keys = null ;
+ Object obj = null ;
- public Object get(String queue, String id) throws Exception {
- Hashtable q = (Hashtable) queues.get( queue );
+ void remove() {
+ Enumeration Qs = keys.keys();
+ while ( Qs.hasMoreElements() ) {
+ String qName = (String) Qs.nextElement();
+ String qId = (String) keys.get( qName );
+
+ Hashtable q = (Hashtable) queues.get( qName );
+ if ( q == null ) continue ;
+ Vector entryIDs = (Vector) q.get( qId );
+ if ( entryIDs == null ) continue ;
+ entryIDs.remove( entryID );
+ if ( entryIDs.size() == 0 ) q.remove( qId );
+ }
+ }
+ };
+
+ private long count = 0 ;
+ private Hashtable entries = new Hashtable();
+ private Hashtable queues = new Hashtable();
+
+ public Object get(String qName, String id) throws Exception {
+ Hashtable q = (Hashtable) queues.get( qName );
if ( q == null ) return null ;
- return q.get( id );
+ Vector entryIDs = (Vector) q.get( id );
+ if ( entryIDs == null ) return null ;
+ String entryID = (String) entryIDs.get( 0 );
+
+ Entry entry = (Entry) entries.get( entryID );
+ return entry.obj ;
}
- public Object remove(String queue, String id) throws Exception {
- Hashtable q = (Hashtable) queues.get( queue );
+ public Object remove(String qName, String id) throws Exception {
+ Hashtable q = (Hashtable) queues.get( qName );
if ( q == null ) return null ;
- Object obj = q.remove( id );
- return obj ;
+ Vector entryIDs = (Vector) q.get( id );
+ if ( entryIDs == null ) return null ;
+
+ String entryID = (String) entryIDs.get( 0 );
+
+ Entry entry = (Entry) entries.get( entryID );
+ entry.remove();
+ return entry.obj ;
}
- public void put(String queue, String id, Object obj) throws Exception {
- Hashtable q = (Hashtable) queues.get( queue );
- if ( q == null ) queues.put( queue, q = new Hashtable());
- q.put( id, obj );
+ public long size(String qName, String qKey) throws Exception {
+ Hashtable q = (Hashtable) queues.get( qName );
+ if ( q == null ) return 0 ;
+ Vector entryIDs = (Vector) q.get( qKey );
+ if ( entryIDs == null ) return 0 ;
+ return entryIDs.size();
+ }
+
+ static String lock = "" ;
+
+ public void put(String qName, String id, Object obj) throws Exception {
+ synchronized(lock) {
+ Hashtable q = (Hashtable) queues.get( qName );
+ if ( q == null ) queues.put( qName, q = new Hashtable());
+ Entry entry = new Entry();
+ entry.entryID = "" + (++count) ;
+ entry.keys = new Hashtable();
+ entry.keys.put( qName, id );
+ entry.obj = obj ;
+ entries.put( entry.entryID, entry );
+ Vector entryIDs = (Vector) q.get( id );
+ if ( entryIDs == null ) q.put( id, entryIDs = new Vector() );
+ entryIDs.add( entry.entryID );
+ }
+ }
+
+ public void put(Hashtable keys, Object obj) throws Exception {
+ synchronized(lock) {
+ Entry entry = new Entry();
+ entry.entryID = "" + (++count);
+ entry.keys = new Hashtable();
+ entry.obj = obj ;
+ entries.put( entry.entryID, entry );
+
+ Enumeration ee = keys.keys();
+ while ( ee.hasMoreElements() ) {
+ String qName = (String) ee.nextElement();
+ Hashtable q = (Hashtable) queues.get( qName );
+ if ( q == null ) queues.put( qName, q = new Hashtable() );
+
+ String qVal = (String) keys.get(qName);
+ Vector entryIDs = (Vector) q.get( qVal );
+ if ( entryIDs == null ) q.put( qVal, entryIDs = new Vector() );
+ entryIDs.add( entry.entryID );
+ entry.keys.put( qName, qVal );
+ }
+ }
}
}
Modified: webservices/axis/trunk/java/src/org/apache/axis/persistence/Persistence.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/persistence/Persistence.java?view=diff&rev=513320&r1=513319&r2=513320
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/persistence/Persistence.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/persistence/Persistence.java Thu Mar 1 05:52:22 2007
@@ -1,7 +1,11 @@
package org.apache.axis.persistence ;
+import java.util.Hashtable ;
+
public interface Persistence {
- public Object get(String queue, String id) throws Exception;
- public Object remove(String queue, String id) throws Exception;
- public void put(String queue, String id, Object obj) throws Exception;
+ public Object get(String qName, String qKey) throws Exception;
+ public Object remove(String qName, String qKey) throws Exception;
+ public void put(String qName, String qKey, Object obj) throws Exception;
+ public void put(Hashtable keys, Object obj) throws Exception;
+ public long size(String qName, String qKey) throws Exception ;
}
Modified: webservices/axis/trunk/java/src/org/apache/axis/wsa/EndpointReference.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/wsa/EndpointReference.java?view=diff&rev=513320&r1=513319&r2=513320
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/wsa/EndpointReference.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/wsa/EndpointReference.java Thu Mar 1 05:52:22 2007
@@ -80,7 +80,8 @@
}
public String toString() {
- return "" + getClass() +"@"+ hashCode() + " address: '" +address +
+ return "" + getClass() +"@"+ hashCode() + "ns: " + namespace +
+ " address: '" +address +
"' refProps: '" + referenceProperties + "' refParams: '" +
referenceParameters + "'";
}
@@ -99,15 +100,17 @@
}
public static EndpointReference Anonymous() {
- if ( staticNS.equals(WSAConstants.NS_WSA1) )
- return EndpointReference.fromLocation( staticNS + "/role/anonymous" );
- return EndpointReference.fromLocation( staticNS + "/anonymous" );
+ return Anonymous( staticNS );
}
public static EndpointReference Anonymous(String ns) {
+ EndpointReference newEPR = newInstance( ns );
+
if ( ns.equals(WSAConstants.NS_WSA1) )
- return EndpointReference.fromLocation( ns + "/role/anonymous" );
- return EndpointReference.fromLocation( ns + "/anonymous" );
+ newEPR.setAddress( ns + "/role/anonymous" );
+ else
+ newEPR.setAddress( ns + "/anonymous" );
+ return newEPR ;
}
public boolean isAnonymous() {
@@ -117,15 +120,17 @@
}
public static EndpointReference None() {
- if ( staticNS.equals(WSAConstants.NS_WSA1) ) // should fault or something
- return EndpointReference.fromLocation( staticNS + "/role/none" );
- return EndpointReference.fromLocation( staticNS + "/none" );
+ return None( staticNS );
}
public static EndpointReference None(String ns) {
+ EndpointReference newEPR = newInstance( ns );
+
if ( ns.equals(WSAConstants.NS_WSA1) ) // should fault or something
- return EndpointReference.fromLocation( ns + "/role/none" );
- return EndpointReference.fromLocation( ns + "/none" );
+ newEPR.setAddress( ns + "/role/none" );
+ else
+ newEPR.setAddress( ns + "/none" );
+ return newEPR ;
}
public boolean isNone() {
Modified: webservices/axis/trunk/java/src/org/apache/axis/wsa/MIHeader.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/wsa/MIHeader.java?view=diff&rev=513320&r1=513319&r2=513320
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/wsa/MIHeader.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/wsa/MIHeader.java Thu Mar 1 05:52:22 2007
@@ -61,10 +61,10 @@
// but it works.
public String toString() {
- return "{ns: " + getWSAVersion() + " id:" + getMessageID()+
- " to:" + getTo() + " from:" + getFrom() +
- " replyTo:" + getReplyTo() + " faultTo:" + getFaultTo() +
- " action:" + getAction() + " toFault:" + getToFault() + "}" ;
+ return "{ns: " + namespace + " id:" + messageID +
+ " to:" + to + " from:" + from +
+ " replyTo:" + replyTo + " faultTo:" + faultTo +
+ " action:" + action + " toFault:" + toFault + "}" ;
}
// Potentially problem causing. Would rather remove this constructor
@@ -74,6 +74,13 @@
setMessageID( "uuid:" + UUIDGenerator.getInstance().getUUID());
}
+ public MIHeader(String ns) {
+ namespace = ns ;
+ processedOnGet = true ;
+ removeOnGet = false ;
+ setMessageID( "uuid:" + UUIDGenerator.getInstance().getUUID());
+ }
+
/**
* Constructor intended for client use to create an
* MIHeader instance that will interact with a Call
@@ -158,7 +165,7 @@
}
public MIHeader generateReplyMI() throws Exception {
- MIHeader newMIH = new MIHeader();
+ MIHeader newMIH = new MIHeader( this.getWSAVersion() );
EndpointReference toEPR = getEffectiveReplyTo();
newMIH.setWSAVersion( namespace );
@@ -371,6 +378,13 @@
}
public EndpointReference getTo() {
+ /*
+ if ( to == null )
+ to = EndpointReference.Anonymous( namespace );
+ */
+ return to ;
+ }
+ public EndpointReference getEffectiveTo() {
if ( to == null )
to = EndpointReference.Anonymous( namespace );
return to ;
Modified: webservices/axis/trunk/java/src/org/apache/axis/wsa/WSAHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis/trunk/java/src/org/apache/axis/wsa/WSAHandler.java?view=diff&rev=513320&r1=513319&r2=513320
==============================================================================
--- webservices/axis/trunk/java/src/org/apache/axis/wsa/WSAHandler.java (original)
+++ webservices/axis/trunk/java/src/org/apache/axis/wsa/WSAHandler.java Thu Mar 1 05:52:22 2007
@@ -53,11 +53,18 @@
Message msg = msgContext.getRequestMessage();
if ( mih == null ) {
- if ( msgContext.getAxisEngine().getOption("useWSA") == null &&
- msgContext.getProperty("useWSA") == null )
- return ;
-
+ String wsaVersion = (String) msgContext.getProperty( "useWSA" );
+ if ( wsaVersion == null )
+ wsaVersion = (String) msgContext.getAxisEngine().getOption("useWSA");
+ if ( wsaVersion == null ) return ;
+ if ( wsaVersion.equals("false") ) return ;
+
+ if ( !WSAConstants.NS_WSA1.equals(wsaVersion) &&
+ !WSAConstants.NS_WSA2.equals(wsaVersion) )
+ wsaVersion = WSAConstants.NS_WSA ;
+
msgContext.setProperty(WSAConstants.REQ_MIH, mih = new MIHeader());
+ mih.setWSAVersion( wsaVersion );
mih.setRemoveOnGet(true);
mih.fromEnvelope( msg.getSOAPEnvelope() );
}
@@ -157,17 +164,16 @@
MIHeader resMIH = null ;
Message msg = null ;
- String to = null ;
+ EndpointReference to = null ;
resMIH = MIHeader.fromResponse();
if ( resMIH == null ) return ;
- if ( resMIH.getTo() != null )
- to = resMIH.getTo().getAddress();
+ to = resMIH.getTo();
msg = msgContext.getResponseMessage();
- if ( msg==null || to==null || resMIH.getTo().isAnonymous() )
+ if ( msg==null || to==null || to.isAnonymous() )
return ;
Vector relates = (Vector) resMIH.getRelatesTo();
@@ -186,7 +192,7 @@
}
call.setSOAPVersion( msgContext.getSOAPConstants() );
- call.setTargetEndpointAddress(resMIH.getTo().getAddress() );
+ call.setTargetEndpointAddress(to.getAddress() );
call.setRequestMessage(msg);
call.setSOAPActionURI( msgContext.getSOAPActionURI() );
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org