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)
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>
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
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();
		}
	}
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
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