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 to...@apache.org on 2005/06/02 00:36:57 UTC
cvs commit: ws-axis/java/src/org/apache/axis/encoding TypeMappingRegistryImpl.java
tomj 2005/06/01 15:36:57
Modified: java/src/org/apache/axis/encoding
TypeMappingRegistryImpl.java
Log:
Fix a problem in the type mapping registry: We were unconditionally setting
the type mapping for the SOAP encoding. This would overwrite any type
mappings for that encoding defined in the WSDD files, which wasn't very nice
Check for the existance of a type mapping, and if we find one, make sure
its default TM points to the one we want - specifically the JAXRPC 1.1 default
type mapping.
Revision Changes Path
1.36 +37 -2 ws-axis/java/src/org/apache/axis/encoding/TypeMappingRegistryImpl.java
Index: TypeMappingRegistryImpl.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/encoding/TypeMappingRegistryImpl.java,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -r1.35 -r1.36
--- TypeMappingRegistryImpl.java 26 Feb 2005 21:37:33 -0000 1.35
+++ TypeMappingRegistryImpl.java 1 Jun 2005 22:36:57 -0000 1.36
@@ -317,8 +317,43 @@
* @param mapping
*/
private void registerSOAPENCDefault(TypeMappingDelegate mapping) {
- mapTM.put(Constants.URI_SOAP11_ENC, mapping);
- mapTM.put(Constants.URI_SOAP12_ENC, mapping);
+ // This get a bit ugly as we do not want to just overwrite
+ // an existing type mapping for SOAP encodings. This happens
+ // when {client,server}-config.wsdd defines a type mapping for
+ // instance.
+ if (!mapTM.containsKey(Constants.URI_SOAP11_ENC)) {
+ mapTM.put(Constants.URI_SOAP11_ENC, mapping);
+ } else {
+ // We have to make sure the default type mapping is
+ // at the end of the chain.
+ // This is important if the default is switched to
+ // the JAX_RPC 1.1 default type mapping!
+ TypeMappingDelegate del =
+ (TypeMappingDelegate) mapTM.get(Constants.URI_SOAP11_ENC);
+ while (del.getNext() != null && ! (del.delegate instanceof DefaultTypeMappingImpl)) {
+ del = del.getNext();
+ }
+ del.setNext(defaultDelTM);
+ }
+
+ if (!mapTM.containsKey(Constants.URI_SOAP12_ENC)) {
+ mapTM.put(Constants.URI_SOAP12_ENC, mapping);
+ } else {
+ // We have to make sure the default type mapping is
+ // at the end of the chain.
+ // This is important if the default is switched to
+ // the JAX_RPC 1.1 default type mapping!
+ TypeMappingDelegate del =
+ (TypeMappingDelegate) mapTM.get(Constants.URI_SOAP12_ENC);
+ while (del.getNext() != null && ! (del.delegate instanceof DefaultTypeMappingImpl)) {
+ del = del.getNext();
+ }
+ del.setNext(defaultDelTM);
+ }
+
+ // Just do this unconditionally in case we used mapping.
+ // This is important if the default is switched to
+ // the JAX_RPC 1.1 default type mapping!
mapping.setNext(defaultDelTM);
}