2010-09-15 10 views
6

Je suis en train d'écrire une application où je dois interagir avec la base de données MS SQL. Dans mon application, je crée des services Web (en utilisant javax.jws) pour accéder aux tables de la base de données. je crée une seule opération (méthode) en service Web avec le type de retour java.lang.Object [] [] comme suit:Une exception java.lang.ClassCastException lors de l'accès à la méthode de service Web écrite en Java. jaxb

@WebMethod (operationName = "get_HistoryInfoByUser")

public java.lang.Object[][] get_HistoryInfoByUser(@WebParam(name = "email_Id") 
String email_Id) throws Exception{ 
    java.lang.Object[][] historyInfo = null; 

    // some code here 

    return historyInfo; 
} 

et pour appeler web opération de service (méthode) dans ma demande, je vous écris ci-dessous code:

public Object[][] get_HistoryInfoByUser(String email_Id) { 

     java.util.List<net.java.dev.jaxb.array.AnyTypeArray> historyInfo = null; 

    try { 

     historyInfo = port.getHistoryInfoByUser(email_Id); 

    } catch (Exception_Exception ex) { 
     ex.printStackTrace(); 
    } 
     return (Object[][]) historyInfo.toArray(); 
} 

mais je reçois une exception

Exception dans le fil "Thread-8" java.lang.ClassCastException: [Ljava.lang.Object; ne peut pas être converti en [[Ljava.lang.Object;

opération service Web type de retour est java.util.List (net.java.dev.jaxb.array.AnyTypeArray) et j'ai besoin retourner le type java.lang.Object [] [].

S'il vous plaît pouvez-vous me donner une suggestion, ce qui m'aidera à surmonter ce problème.

+0

Si quelqu'un fournit une réponse qui vous aide, vous devez accepter la réponse. Vous n'avez pas accepté de réponse à l'une des questions que vous avez posées. – unholysampler

Répondre

1

Le moulage n'est pas utilisé pour transformer des objets, il est utilisé pour reclasser le type d'un objet. Il est là pour dire au compilateur qu'une variable doit être traitée comme une classe différente. Si vous essayez de convertir une variable en un type non compatible, vous obtenez le ClassCastException.

Object ojc = new ArrayList(); 
obj.add(new Object()); //Compiler error because Object does not have an add method 
ArrayList lst = (ArrayList)obj; 
lst.add(new Object()); //Works because now the compiler knows that the variable is an ArrayList 
MyClass myClass = (MyClass)obj; //ClassCastException because the object is not actually a MyClass object 
myClass.add(new Object()); //Assuming MyClass defines and add method that takes and object, this line compiles 

Dans votre cas, l'objet [] et Object [] [] sont des types complètement différents et pas quelque chose que vous pouvez jeter entre les deux. Au lieu de cela, vous devez d'abord créer le tableau 2D, puis définir votre tableau comme étant le premier membre du tableau 2D.

Object[][] result = new Object[1][]; 
result[0] = historyInfo.toArray();