我在将代码传输到Spring applicationContext.xml
时遇到问题来源是:
File inFile = new File ("path/to/file/", "fileName.docx")
WordprocessingMLPackage wordMLPackage = Docx4J.load(inFile);
我的工作解决方案是:
<bean id="inFile" class="java.io.File">
<constructor-arg value="path/to/file/" />
<constructor-arg value="fileName.docx" />
</bean>
<bean id="docx4j" class="org.docx4j.Docx4J" factory-method="load">
<constructor-arg ref="inFile" />
</bean>
<bean id="wordprocessingMLPackage" class="org.docx4j.openpackaging.packages.WordprocessingMLPackage" factory-bean="docx4j" />
我从bean中获取“wordprocessingMLPackage”确实是Class WordprocessingMLPackage的一个实例,但它似乎是空的虽然我试图加载的文件不是(并且是的,路径是双重检查)。
尝试时
MainDocumentPart mdp = wordprocessingMLPackage.getMainDocumentPart();
List<Object> content = mdp.getContent();
我收到NullPointerException,因为mdp为null!
有人有想法......甚至是解决方案?
=============================================== =============
我找到了一个特别针对我的问题的解决方案。
以下是Docx4j.load()的来源:
public static WordprocessingMLPackage load(File inFile) throws Docx4JException {
return WordprocessingMLPackage.load(inFile);
}
这意味着我可以通过静态自我创建一个WordprocessingMLPackage实例!
正在运作的代码:
<bean id="wordprocessingMLPackage" class="org.docx4j.openpackaging.packages.WordprocessingMLPackage" factory-method="load">
<constructor-arg ref="baseDocument" />
</bean>
所以我找到了原始问题的幸运“解决方法”。
由于这个问题不再紧迫,我仍然对正确的解决方案感兴趣,特别是在允许在其他bean中注入WordprocessingMLPackage的解决方案中。
谢谢!
答案 0 :(得分:0)
您需要在此处使用MethodInvokingFactoryBean
,详情如下。
<bean id="beanId"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.docx4j.Docx4J" />
<property name="targetMethod" value="load"/>
<property name="arguments">
<list>
<ref bean="inFile" />
</list>
</property>
</bean>
在您的代码中获取applicationContext
实例并调用以下LOC
WordprocessingMLPackage ml = (WordprocessingMLPackage) applicationContext.getBean("beanId");
如果您遇到任何问题,请在评论中说明。
答案 1 :(得分:0)
作为邦德 - 爪哇邦德表示这有效:
<bean id="inFile" class="java.io.File">
<constructor-arg value="path/to/file/" />
<constructor-arg value="fileName.docx" />
</bean>
<bean id="beanId" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="org.docx4j.Docx4J" />
<property name="targetMethod" value="load"/>
<property name="arguments">
<list>
<ref bean="inFile" />
</list>
</property>
</bean>
您现在可以将bean用作
WordprocessingMLPackage ml = (WordprocessingMLPackage) applicationContext.getBean("beanId");
或者您可以直接注入bean
<bean id="service" class="app.service.Service">
<property name="wordprocessingMLPackage" ref="beanId" />
</bean>
谢谢!!!