You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsif-dev@ws.apache.org by bu...@apache.org on 2003/11/04 15:08:25 UTC
DO NOT REPLY [Bug 24386] New: -
WSIF Axis provider does not correctly select registered custom serializers/deserializers
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24386>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24386
WSIF Axis provider does not correctly select registered custom serializers/deserializers
Summary: WSIF Axis provider does not correctly select registered
custom serializers/deserializers
Product: Axis-WSIF
Version: 2.0
Platform: All
OS/Version: Other
Status: NEW
Severity: Normal
Priority: Other
Component: Basic Architecture
AssignedTo: wsif-dev@ws.apache.org
ReportedBy: francis.vermeulen@ezgov.com
When selecting a type mapping, the current Java type and XML type are not
correctly compared with the registered typemaps. Here is the bug fix I had to
do to make the Axis provider work with my custom JAXB serializer/deserializer.
The fix is in the "findContextTypeSerialzer()" method of
the "WSIFOperation_ApacheAxis" class
>>
private static TypeSerializerInfo findContextTypeSerialzer(
WSIFMessage context,
Class clazz,
QName xmlType)
throws WSIFException {
Object value = null;
try {
value = context.getObjectPart
(WSIFAXISConstants.CONTEXT_SOAP_TYPE_SERIALIZERS);
} catch (WSIFException e) {
Trc.ignoredException(e);
}
if (value == null) {
return null;
}
if (!(value instanceof List)) {
throw new WSIFException(
"context part '"
+ WSIFAXISConstants.CONTEXT_SOAP_TYPE_SERIALIZERS
+ "' value is not an instance of java.util.List: "
+ value);
}
List typeSerializers = (List) value;
for (Iterator i = typeSerializers.iterator(); i.hasNext(); ) {
Object o = i.next();
if (!(o instanceof TypeSerializerInfo)) {
throw new WSIFException(
"context part '"
+ WSIFAXISConstants.CONTEXT_SOAP_TYPE_SERIALIZERS
+ "' value List contains an entry that is not an
instance "
+ "of org.apache.wsif.util.TypeSerializer: "
+ value);
}
TypeSerializerInfo tm = (TypeSerializerInfo) o;
Class javaType = tm.getJavaType();
QName elementType = tm.getElementType();
Object serializer = tm.getSerializer();
Object deserializer = tm.getDeserializer();
if ((javaType != null) && (elementType != null)) {
boolean isSuperclass = javaType.isAssignableFrom(clazz);
boolean isSame = elementType.equals(xmlType);
if (isSuperclass && isSame) {
if (serializer == null || serializer
instanceof SerializerFactory
&& deserializer == null ||
deserializer instanceof DeserializerFactory
&& serializer != null ||
deserializer != null) {
return tm;
}
}
}
/*
if ( (javaType != null) && (javaType.isAssignableFrom(clazz))
&& ( (elementType != null) && (elementType.equals(xmlType)) ) ){
if (serializer == null || serializer instanceof
SerializerFactory
&& deserializer == null || deserializer instanceof
DeserializerFactory
&& serializer != null || deserializer != null) {
return tm;
}
}
*/
}
return null; // couldn't find a TypeSerializer
}
<<
The original version always returns the first type mapping from the list,
indenpendent of the actual Java and XML type.