boone, fiz o deploy e veja a minha análise:
na classe SoapWriter tem a seguinte chamada:
Agora veja o ClassMap , método getInfo:
[code] public Object [] getInfo (Object type, Object instance) {
if (type == null) {
if (instance instanceof SoapObject
|| instance instanceof SoapPrimitive)
type = instance;
else
type = instance.getClass ();
}
...
if ((type instanceof Class)
&& type != ElementType.OBJECT_CLASS) {
Object [] tmp = (Object []) classToQName.get
(((Class) type).getName ());
if (tmp != null) return tmp;
}
return new Object [] {xsd, "anyType", null, null};
}
[/code]
Neste trecho, quando faço uma chamada webservice com um string de parâmetro, a chamada Object [] tmp = (Object []) classToQName.get (((Class) type).getName ()); retorna um vetor preenchido com algumas informações. Quando faço outra chamada com o byte[], o tmp volta null, portanto ele fica gravado como anyType.
Aí voltando ao SoapWriter método WriteProperty:
if (qName [3] != null)
((Marshal) qName [3]).writeInstance (this, obj);
else if (obj instanceof KvmSerializable)
writeObjectBody ((KvmSerializable) obj);
else if (obj instanceof Vector)
writeVectorBody ((Vector) obj, type.elementType);
else
throw new RuntimeException ("Cannot serialize: "+ obj);
Neste caso, quando é string cai no primeiro if, o qName[3] é do tipo DM… Quando é vetor de byte cai no throw.
Bom, eu não tenho ideia como solucionar este problema, e explicando dessa forma vejo que também fica muito difícil de entender. Mas de qualquer forma qualquer ajuda é super benvinda.
Há outra alternativa para a troca de objeto?