IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Java Discussion :

Probleme Axis - Web Service: type renvoyé


Sujet :

Services Web Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Probleme Axis - Web Service: type renvoyé
    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

  2. #2
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    FYI: probleme resolu


    call.registerTypeMapping(java.lang.Object[].class, new javax.xml.namespace.QName("http://adobe.com/idp/services", "MyArrayOf_xsd_anyType"),
    new org.apache.axis.encoding.ser.ArraySerializerFactory(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "anyType"), new javax.xml.namespace.QName("http://adobe.com/idp/services", "item"))),
    new org.apache.axis.encoding.ser.ArrayDeserializerFactory());

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Web service (type de retour:objet)
    Par roronnoa dans le forum Services Web
    Réponses: 5
    Dernier message: 08/09/2008, 09h33
  2. probleme deploiment web service
    Par tntneo dans le forum Services Web
    Réponses: 0
    Dernier message: 27/08/2008, 00h23
  3. Probleme avec Web Service et TomCat
    Par lordpixel dans le forum NetBeans
    Réponses: 1
    Dernier message: 14/03/2008, 09h10
  4. [AXIS][WEB SERVICES] .xsd
    Par cosmos38240 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 16/07/2004, 15h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo