我在将代码转换到SpringapplicationContext.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“中得到的确实是类WordprocessingMLPackage的一个实例,但是它似乎是空的,尽管我试图加载的文件不是(是的,路径是双倍的)。
当尝试
MainDocumentPart mdp = wordprocessingMLPackage.getMainDocumentPart();
List<Object> content = mdp.getContent();我得到一个NullPointerException,因为mdp是空的!
有谁能想到..。甚至是解决方案?
============================================================
我找到了一个解决方案,特别是针对我的问题。
以下是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的解决方案中。
谢谢!
发布于 2015-02-13 09:44:34
在这里,您需要使用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");如果你面临任何问题,请在评论中告知。
发布于 2015-02-13 11:50:54
正如邦德-爪哇邦德所指出的那样,这是可行的:
<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> 谢谢!
https://stackoverflow.com/questions/28495472
复制相似问题