2010-08-20 5 views
0

Je déploie un StatelessSessionBean annoté avec @WebService dans JBoss. Je prends le WSDL généré par JBoss pour générer des stubs de client. Mon problème est en appelant une méthode qui retourne une liste d'objets. Si la liste est vide, l'appel réussit si la liste n'est pas vide, je suis l'exception suivante:InstantiationException dans le service Web d'appel du client de service Web déployé sur JBoss

com.sun.xml.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException 
- with linked exception:   
[javax.xml.bind.UnmarshalException: Unable to create an instance of com.companyname.api.ws.DataItemType              
- with linked exception: 
[java.lang.InstantiationException]] 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:124) 
    at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89) 
    at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118) 
    at $Proxy34.getWorkflows(Unknown Source) 
    at com.companyname.api.SimpleClient.go(SimpleClient.java:48) 

la recherche sur le web m'a conduit à cette discussion ici: http://forums.java.net/jive/message.jspa?messageID=281780

Cependant, j'ai mis le @ XmlSeeAlso trucs correctement et il est présent sur les classes de stub générées. Je peux confirmer que la classe DataItemType est abstraite, donc il n'est pas surprenant qu'une tentative d'instanciation provoque un problème. Je ne suis pas du tout clair sur pourquoi la classe DataItemType est instanciée du tout (comme c'est abstrait). Ceci est le code XML qui est renvoyé par le serveur (il semble à peu près juste pour moi):

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'> 
    <env:Header></env:Header> 
    <env:Body> 
     <ns2:getWorkflowsResponse xmlns:ns2="http://ws.api.companyname.com/"> 
      <return> 
       <id> 
        <identifier>1</identifier> 
        <version>0</version> 
       </id> 
       <goal>ENROLL</goal> 
       <dataItemType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="DataItemTypeText"> 
        <attributeName>email</attributeName> 
        <displayName>Email Address</displayName> 
       </dataItemType> 
       ... 
      </return> 
     </ns2:getWorkflowsResponse> 
    </env:Body> 
</env:Envelope> 

Est-ce que quelqu'un sait ce que je fais mal?

Répondre

0

Il y avait un certain nombre de problèmes avec le WSDL généré (notez qu'il n'était pas fait à la main). Il n'y avait rien de spécifique que j'ai changé qui indiquait pourquoi cette exception particulière avait été lancée (ou pourquoi, par exemple, il n'y avait pas eu d'échec lors de la génération du WSDL incorrect).

Une fois que j'ai ajusté les annotations pour qu'un WSDL valide soit créé, j'ai eu d'autres problèmes que les versions de JAX-WS que j'utilisais. J'ai fini par mettre à jour la version utilisée par JBoss qui, à son tour, m'a amené à mettre les nouveaux JAX-WS dans mon répertoire approuvé par JRE.

Je ne vais pas détailler ce que j'ai fait plus en détail car il n'y avait aucune chose spécifique que j'ai faite qui a résolu ce problème. Si quelqu'un d'autre le voit, je suggérerais d'être très précis dans les annotations que vous utilisez pour générer votre WSDL et regarder attentivement votre WSDL.

+0

J'ai le même problème et je ne sais pas comment le réparer. – Krishna

+0

Krishna pouvez-vous me donner plus de détails? Je ne sais pas si cela est spécifiquement lié, mais essayer différentes versions de JAX-WS pourrait en valoir la peine. Etre aussi très prudent avec les annotations (et être conscient que les différentes versions les manipuleront différemment) pourrait aider. – macbutch

+0

Ya j'utilise JAX-WS seulement et je fais une classe de Pojo et en mettant cette classe en tant que type de retour dans une autre classe. et quand j'essaye de faire le webservice de cette classe qui montre cette erreur. c'est comme quand je donne le type de retour de cette classe, puis son erreur indiquant comme "Type de retour non pris en charge qui peut provoquer une erreur ou entraîner la perte de données." c'est quelque chose comme cette erreur que je reçois. – Krishna