Bonjour,
j'ai un probleme avec Axis pour accéder à l'un de mes web services.
Il s'agit de AuthenticationManagerService d'Adobe LiveCycle meme si c'est pas le plus important.
Je tombe sur cette erreur, "org.xml.sax.SAXException: Unable to create JavaBean of type [Ljava.lang.Object;"
J'avais deja eu ce genre d'erreur où: dans la doc, on me demandait un byte[] et le service renvoyait une String. J'avais donc modifié mes classes en conséquences.
Ici, la doc me dit d'avoir une java.util.List mais les classes génerées par Axis contiennent des Object[].
Pour mon deserializer j'utilise cette methode
registerTypeMapping(java.lang.Class javaType, QName xmlType, SerializerFactory sf, DeserializerFactory df)
si je change le javaType, Axis ne reconnait pas le deserializer
mon sf est null.
Dans mon df, j'ai essayé d'utiliser d'autres deserializer (java.util.List, java.util.ArrayList, java.lang.String[]) mais en fonction de la classe que j'utilise pour le deserializer il me donne la meme erreur de construction du type.
Donc là, j'ai vraiment plus d'idée. Si vous pouvez m'aider ce serait vraiment très sympa.
Voici les morceaux de codes pertinents.
je voudrais faire appelle a cette methode (parties du WSDL)
J'ai créé un POJO pour tester l'appel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 - <wsdl:operation name="authenticate"> <wsdl:input message="impl:authenticateRequest" name="authenticateRequest" /> <wsdl:output message="impl:authenticateResponse" name="authenticateResponse" /> <wsdl:fault message="impl:UMException" name="UMException" /> </wsdl:operation> - <element name="authenticateResponse"> - <complexType> - <sequence> <element name="result" type="impl:AuthResult" /> </sequence> </complexType> </element> - <wsdl:message name="authenticateRequest"> <wsdl:part element="impl:authenticate" name="parameters"/> </wsdl:message> - <element name="authenticate"> - <complexType> - <sequence> <element maxOccurs="1" minOccurs="0" name="username" type="xsd:string"/> <element maxOccurs="1" minOccurs="0" name="password" type="xsd:base64Binary"/> </sequence> </complexType> </element> - <complexType name="MyArrayOf_xsd_anyType"> - <sequence> <element maxOccurs="unbounded" minOccurs="0" name="item" type="xsd:anyType" /> </sequence> </complexType>
je vous mets le stack trace complet pour info
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public void testUserManagement(username,password) { final Service service = new Service(); Call call; try { //Appel du web service call = (Call) service.createCall(); call.setTargetEndpointAddress(SERVEUR_ADRESS); call.setUsername(USER_NAME); call.setPassword(PWD); byte[] passwordbytes = password.getBytes(); /***************************************************/ //preparation de la fonction call.setOperationStyle(Style.WRAPPED); call.setOperationName("authenticate"); //description des parametres call.addParameter(new QName("http://adobe.com/idp/services", "username"), Constants.XSD_STRING, ParameterMode.IN); call.addParameter(new QName("http://adobe.com/idp/services", "password"), new QName("http://www.w3.org/2001/XMLSchema", "base64Binary"),ParameterMode.IN); //description du retour call.setReturnType(new QName("http://adobe.com/idp/services", "AuthResult")); //Deserializer qui plante call.registerTypeMapping(java.lang.Object[].class, new QName("http://adobe.com/idp/services", "MyArrayOf_xsd_anyType"), null, new BeanDeserializerFactory(java.lang.Object[].class, new QName("http://adobe.com/idp/services", "MyArrayOf_xsd_anyType"))); //Deserializer du retour call.registerTypeMapping(AuthResult.class, new QName("http://adobe.com/idp/services", "AuthResult"), null, new BeanDeserializerFactory(AuthResult.class, new QName("http://adobe.com/idp/services", "AuthResult"))); //Appel de la fonction, ca plante a ce moment la Object obj = call.invoke(new Object[] { username,passwordbytes }); } catch (Exception e) { e.printStackTrace(); } }
#####################################
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 Exception: org.xml.sax.SAXException: Unable to create JavaBean of type [Ljava.lang.Object;. Missing default constructor? Error was: java.lang.InstantiationException: [Ljava.lang.Object;. at org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.java:147) 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:2467) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at de.pcware.adobe.MainClass.main(MainClass.java:54) AxisFault faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException faultSubcode: faultString: org.xml.sax.SAXException: Unable to create JavaBean of type [Ljava.lang.Object;. Missing default constructor? Error was: java.lang.InstantiationException: [Ljava.lang.Object;. faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:org.xml.sax.SAXException: Unable to create JavaBean of type [Ljava.lang.Object;. Missing default constructor? Error was: java.lang.InstantiationException: [Ljava.lang.Object;. at org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.java:147) 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:2467) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at de.pcware.adobe.MainClass.main(MainClass.java:54) {http://xml.apache.org/axis/}hostname:DE003005ACC0B2 org.xml.sax.SAXException: Unable to create JavaBean of type [Ljava.lang.Object;. Missing default constructor? Error was: java.lang.InstantiationException: [Ljava.lang.Object;. at org.apache.axis.AxisFault.makeFault(AxisFault.java:101) at org.apache.axis.client.Call.invoke(Call.java:2470) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at de.pcware.adobe.MainClass.main(MainClass.java:54) Caused by: org.xml.sax.SAXException: Unable to create JavaBean of type [Ljava.lang.Object;. Missing default constructor? Error was: java.lang.InstantiationException: [Ljava.lang.Object;. at org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.java:147) 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:2467) ... 3 more
EDIT: je viens de trouver ca dans un des fichiers génerer par Axis:
Comme on le voit c'est un array mapping et pas un type mapping et il n'y a pas de deserializer de citer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 <typeMapping xmlns:ns="http://adobe.com/idp/services" qname="ns:>authenticate" type="java:com.adobe.idp.services.Authenticate" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" /> <arrayMapping xmlns:ns="http://adobe.com/idp/services" qname="ns:MyArrayOf_xsd_anyType" type="java:java.lang.Object[]" innerType="cmp-ns:anyType" xmlns:cmp-ns="http://www.w3.org/2001/XMLSchema" encodingStyle="" />
##########################
EDIT 2 : ce qui est bizarre c'est que rien dans les inputs ou l'output n'utilise de Object[]. Y a bien des Object[] dans les fichiers generes mais pas dans ceux utilisés par cette fonction
Partager