cmis:getHttpInvoker()方法返回DefaultHttpInvoker对象

时间:2017-03-03 09:37:52

标签: java cmis opencmis

我通过扩展DefaultHttpInvoker类来实现自定义Http invocker。之后,我使用自定义调用程序实现创建了会话。

sessionParams.put(SessionParameter.HTTP_INVOKER_CLASS, CustomInvokerImplementation.class.getName());

当我使用会话查询某些数据时,它正在调用DefaultHttpInvoker post方法。

ItemIterable queryResults = session.query(“MyQuery”,false,session.getDefaultContext());

我对此做了一些分析。最后,我的请求最终调用'org.apache.chemistry.opencmis.client.bindings.spi.browser.AbstractBrowserBindingService.java'的post方法

protected Response post(UrlBuilder url, String contentType, Output writer) {
        // make the call
        Response resp = getHttpInvoker().invokePOST(url, contentType, writer, session);

        // check response code
        if (resp.getResponseCode() != 200 && resp.getResponseCode() != 201) {
            throw convertStatusCode(resp.getResponseCode(), resp.getResponseMessage(), resp.getErrorContent(), null);
        }

        return resp;
    }



getHttpInvoker method imeplemented like below.
    protected HttpInvoker getHttpInvoker() {
        return CmisBindingsHelper.getHttpInvoker(session);
    }

从以下代码中我了解到,HttpInvocker是使用'HTTP_INVOKER_OBJECT'创建的,如果它无法使用'HTTP_INVOKER_OBJECT'获取HttpInvocker对象, 它正在试用'SessionParameter.HTTP_INVOKER_CLASS'。

   public static HttpInvoker getHttpInvoker(BindingSession session) {
        assert session != null;

        HttpInvoker invoker = (HttpInvoker) session.get(HTTP_INVOKER_OBJECT);

        if (invoker != null) {
            return invoker;
        }

        session.writeLock();
        try {
            // try again
            invoker = (HttpInvoker) session.get(HTTP_INVOKER_OBJECT);
            if (invoker != null) {
                return invoker;
            }

            // ok, we have to create it...
            try {
                String invokerName = (String) session.get(SessionParameter.HTTP_INVOKER_CLASS);
                invoker = (HttpInvoker) ClassLoaderUtil.loadClass(invokerName).newInstance();
            } catch (CmisBaseException e) {
                throw e;
            } catch (Exception e) {
                throw new CmisRuntimeException("HTTP invoker cannot be initialized: " + e.getMessage(), e);
            }

            // we have an Invoker object -> put it into the session
            session.put(HTTP_INVOKER_OBJECT, invoker, true);
        } finally {
            session.writeUnlock();
        }

        assert invoker != null;

        return invoker;
    }

有什么办法,我应该让它调用我的自定义HttpInvocker实现。

0 个答案:

没有答案