Имеется клиент для веб службы на axis 1.2. Клиент получает от службы сложные типы, которые сервис сериализует через BeanSerializer. Иерархия такова, что есть бинсы, содержащие массивы с бинсами.
Данный клиент гарантированно работает на jvm 1.5 и 1.4, но не работает на jvm 1.3, при том, что библиотеки использовались одни и те же. Axis 1.2 как раз и был взят для того, чтоб работало на jvm 1.3.
ошибка
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
org.xml.sax.SAXException: No deserializer for {urn:ScoreService}ResultExplanationValueS
at org.apache.axis.encoding.DeserializerImpl.onStartElement(DeserializerImpl.java:453)
at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:393)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:369)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:369)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:369)
at org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.java:154)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
at org.apache.axis.client.Call.invoke(Call.java:2448)
at org.apache.axis.client.Call.invoke(Call.java:2347)
at org.apache.axis.client.Call.invoke(Call.java:1804)
Так регистрируется type mapping
1.
2.
3.
4.
QName resultValueQName =
new QName("typeNS", "ResultValueS");
call.registerTypeMapping(ResultValueS. class , resultValueQName,
new org.apache.axis.encoding.ser.BeanSerializerFactory(ResultValueS. class , resultValueQName),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(ResultValueS. class , resultValueQName));
Почему возможность нахождения зарегистрированного десериализатора зависит от версии jvm мне непонятно.
Может кто сталкивался с таким? Необходимо, чтоб клиент заработал именно под jvm 1.3.
java version "1.3.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01)
Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode)