谁能告诉我Java实用程序从Filenet中的Content Engine将文档下载到本地PC上吗?

时间:2018-07-26 06:23:05

标签: filenet-p8

大家好,我正在尝试编写Java实用程序,以便从Filenet的内容引擎将文档下载到本地PC上。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您应该阅读有关FileNet P8 CE API的信息,可以启动here

您必须知道FileNet Content Engine具有两种可用于连接到它的接口:RMI和SOAP。您打算编写的cmd line应用程序只能通过SOAP进行连接(我不确定最新版本是否适用,但可以肯定的是,与EJB相比,设置SOAP连接要容易得多),因此您必须阅读文档的该部分,以及如何以这种方式建立与内容引擎的连接。

在上面的链接上,您首先看到必须收集用于SOAP连接的必需jar:请检查“ Content Engine Java API CEWS传输客户端的必需”部分以获取文件名。

收集它们之后,您将需要一个SOAP WSDL URL和一个正确的用户名和密码,该用户必须具有读取属性,并且有权读取要下载的文档的内容。您还需要知道ObjectStore名称,标识符或文档的位置。

现在我们必须继续使用此Setting Up a Thick Client Development Environment链接(我从上面的页面中打开了它。)

在这里,您必须向下滚动到“ CEWS传输协议(不依赖于应用程序服务器)”部分。

您会在这里看到必须创建一个具有以下内容的jaas.conf文件:

FileNetP8WSI  {
   com.filenet.api.util.WSILoginModule  required;
};

运行我们将创建的类时,必须将该文件作为以下JVM参数添加: java -cp%CREATE_PROPER_CLASSPATH%-Djava.security.auth.login.config = jaas.conf DownloadClient

现在,在页面的右上角,您可以看到描述如何获得连接的链接,例如“获得连接”,“检索整个EntireNetwork对象”等。为您创建以下课程。

    public class DownloadClient {

    public static void main(String[] args) throws Exception{
        String uri = "http://filenetcehost:9080/wsi/FNCEWS40MTOM";
        String userId = "ceadmin";
        String password = "password";
        String osName = "Test";
        UserContext uc = UserContext.get();

        try {

            //Get the connection and default domain
            Connection conn = Factory.Connection.getConnection(uri); 
            Domain domain = Factory.Domain.getInstance(conn, null);
            ObjectStore os = Factory.ObjectStore.fetchInstance(domain, osName, null);
            // the last value (jaas samza name) must match with the name of the login module in jaas.conf
            Subject subject =UserContext.createSubject(connection, userId, password, "FileNetP8WSI");
            // set the subject to the local thread via threadlocal
            uc.pushSubject(subject);

            // from now, we are connected to FileNet CE, and objectStore "Test"
            //https://www.ibm.com/support/knowledgecenter/en/SSNW2F_5.2.0/com.ibm.p8.ce.dev.ce.doc/document_procedures.htm
            Document doc = Factory.Document.getInstance(os, ClassNames.DOCUMENT, new Id("{F4DD983C-B845-4255-AC7A-257202B557EC}") );
            // because in FileNet a document can have more that one associated content element
            // (e.g. stores single page tifs and handle it as a multipaged document), we have to
            // get the content elements and iterate list.
            ContentElementList docContentList = doc.get_ContentElements();
            Iterator iter = docContentList.iterator();
            while (iter.hasNext() )
            {   
                ContentTransfer ct = (ContentTransfer) iter.next();
                // Print element sequence number and content type of the element.
                // Get and print the content of the element.
                InputStream stream = ct.accessContentStream();
                // now you have an inputstream to the document content, you can save it local file,
                // or you can do what you want with it, just do not forget to close the stream at the end.
                stream.close();
            }
        } finally {
            uc.popSubject(); 
        }
    }
}

此代码仅显示了如何实现这样的胖客户端,我现在是使用文档而不是生产代码创建的。但是,在指定要导入的软件包之后,并可能处理异常,它可能会起作用。

您当然必须指定正确的URL,用户,密码和docId,并且必须实现从TransferInputStream到FileOutputStream的副本,例如通过使用commons.io或Java NIO等。