Java java.lang.ClassCastException with selectCmDevice

Version 1
    This document was generated from CDN thread

    Created by: john katsavras on 31-05-2013 05:23:33 AM
    Hi there,
    Just wondering if anyone can see why i am getting the exception "java.lang.ClassCastException" from the code below:          
            // Instantiate the wsimport generated SXML API Service client --
            RISService risportService = new RISService();
            RisPortType risportPort = risportService.getRisPort();
     
            // Set the URL, user, and password on the JAX-WS client
            String hostUrl = "https://10.1.1.1:8443/realtimeservice2/services/RISService";
            ((BindingProvider) risportPort).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, hostUrl);
            ((BindingProvider) risportPort).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, cucmDetails.getAxlUsername());
            ((BindingProvider) risportPort).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, cucmDetails.getAxlPassword());
     
            // create and populate the selectCmDevice request
            SelectCmDevice sxmlParams = new SelectCmDevice();
            CmSelectionCriteria criteria = new CmSelectionCriteria();
            long maxNum = 200;
            long modelNum = 255;
            ArrayOfSelectItem items = new ArrayOfSelectItem();
           
            //create a select item criteria to retrieve devices with names matching "SEP123412341234"
            SelectItem item = new SelectItem();
            item.setItem("SEP123412341234");
            items.getItem().add(item);
     
            //Search on all nodes
            criteria.setNodeName("Any");
            //get back max 200 phones. 9+ can get upto 1000
            criteria.setMaxReturnedDevices(maxNum);
            //get back phones only
            criteria.setDeviceClass("Phone");
            //255 means get back ALL phone models
            criteria.setModel(modelNum);
            //get back only Registered phones
            criteria.setStatus("Registered");
            //return results in order of name
            criteria.setSelectBy("Name");
            //array of phones to get results back for
            criteria.setSelectItems(items);
            sxmlParams.setCmSelectionCriteria(criteria);
           
            //make selectCmDevice request
            SelectCmDeviceReturn selectResponse = risportPort.selectCmDevice("",criteria); << This is where i get the exception outline below
    Exception in thread "AWT-EventQueue-0" javax.xml.ws.WebServiceException: java.lang.ClassCastException: [C cannot be cast to java.lang.String
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)
        at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Unknown Source)
        at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Unknown Source)
        at com.sun.xml.internal.ws.client.Stub.process(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(Unknown Source)
        at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(Unknown Source)
        at com.sun.proxy.$Proxy40.selectCmDevice(Unknown Source)
        at utils._9.APIRIS9.getPhoneIPadd(APIRIS9.java:66)
     
    Thanks
    Alexis

    Subject: RE: Java java.lang.ClassCastException with selectCmDevice
    Replied by: David Staudt on 31-05-2013 05:57:36 PM
    I'm thinking that perhaps the service URL being specified here should be:
    https://<server name>/realtimeservice/services/RisPort70
    vs.
    https://<ServerName>:8443/realtimeservice2/services/RISService70
    The latter is the URL for the newer version of the service which provides the SelectCmDeviceExt request.
    Probably when the response is returned, the XML does not match up with the schema-generated code from the SelectCmDevice request and there is a cast exception.

    Subject: RE: Java java.lang.ClassCastException with selectCmDevice
    Replied by: john katsavras on 03-06-2013 05:44:35 AM
    Hi David,

    Thanks for the reply. it turns out the issue was with line:
    ((BindingProvider) risportPort).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, cucmDetails.getAxlPassword());

    Password are stored as char arrays in java. The solution was:
    ((BindingProvider) risportPort).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, String.valueOf(cucmDetails.getAxlPassword()));

    works now.

    Thanks
    Alexis