0

以下のコードから例外「java.lang.ClassCastException」が発生する理由を誰かが理解できるかどうか疑問に思っています。

RISService、RisPortType は、WSDL ファイルから取得したライブラリであり、wsimport を使用して .java ファイルを生成します。

例外の意味は知っていますが、それを追跡する方法がわかりません。

    // 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

スレッド「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)

ありがとうアレクシス

4

2 に答える 2

0

私の場合

Object port = service.getPort(qname, c);
WSBindingProvider bp = (WSBindingProvider) port;
// Manually set connection timeouts as we seem to hit them during IT testing
Map<String, Object> requestContext = bp.getRequestContext();

requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, env.getProperty("timeout"));

requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, env.getProperty("timeout"));

ご覧のとおり、requestContext.put() は文字列とオブジェクトを受け取ります。文字列のタイムアウトを入れるとうまくいくと思いましたが、いいえ、java ws は int を期待しています。これは大規模な問題です。

于 2015-03-25T10:08:41.007 に答える