大家好,我正在尝试编写Java实用程序,以便从Filenet的内容引擎将文档下载到本地PC上。有人可以帮我吗?
答案 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等。