转载:http://www.myexception.cn/web/840087.html
当我访问WSDL文件
http://localhost:7001/services/BpmEventService?wsdl
时报错如下:
Root cause of ServletException.
java.lang.ExceptionInInitializerError
at org.codehaus.xfire.util.jdom.StaxBuilder.<init>(StaxBuilder.java:150)
at org.codehaus.xfire.wsdl.AbstractWSDL.<clinit>(AbstractWSDL.java:43)
at org.codehaus.xfire.wsdl11.builder.DefaultWSDLBuilderFactory.createWSDLBuilder(DefaultWSDLBuilderFactory.java:25)
at org.codehaus.xfire.wsdl11.builder.WSDLBuilderAdapter.write(WSDLBuilderAdapter.java:40)
at org.codehaus.xfire.DefaultXFire.generateWSDL(DefaultXFire.java:104)
Truncated. see log file for complete stacktrace
java.lang.ClassCastException: weblogic.xml.stax.XMLStreamInputFactory cannot be cast to javax.xml.stream.XMLInputFactory
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:136)
at org.codehaus.xfire.util.STAXUtils.<clinit>(STAXUtils.java:48)
at org.codehaus.xfire.util.jdom.StaxBuilder.<init>(StaxBuilder.java:150)
at org.codehaus.xfire.wsdl.AbstractWSDL.<clinit>(AbstractWSDL.java:43)
at org.codehaus.xfire.wsdl11.builder.DefaultWSDLBuilderFactory.createWSDLBuilder(DefaultWSDLBuilderFactory.java:25)
四处搜索半天,还是对比了一下以前发布的xfire原始demo,发现差异在于少了一个jar包,加在ivy配置中
<dependency org="org/codehaus/woodstox" name="wstx-asl" rev="3.2.9"/>
一切恢复正常了。
对了,还忘记了记录,我的WEB-INF下,很早就由同事放了一个weblogic.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90"
xmlns:j2ee="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/90 http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">
<context-root>/</context-root>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
奇怪了,服务器这样修改就OK了。
但是我本机的weblogic10.3用目录方式发布或者用war方式发布都要报如下错误:
<2009-12-7 下午07时31分19秒 CST> <Error> <Deployer> <BEA-149265> <Failure occurr
ed in the execution of deployment request with ID '1260185449734' for task '0'.
Error is: 'weblogic.application.ModuleException: 'weblogic.application.ModuleException:
at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:387)
at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:176)
at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:387)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:37)
Truncated. see log file for complete stacktrace
java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.xml.stream.XMLInputFactory
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:137)
at weblogic.servlet.internal.TldCacheHelper$TldIOHelper.parseXML(TldCacheHelper.java:124)
at weblogic.descriptor.DescriptorCache.parseXML(DescriptorCache.java:380)
at weblogic.servlet.internal.TldCacheHelper.parseTagLibraries(TldCacheHelper.java:65)
at weblogic.servlet.internal.War.getTagInfo(War.java:891)
Truncated. see log file for complete stacktrace
删除下面的
<dependency org="org/codehaus/woodstox" name="wstx-asl" rev="3.2.9"/>
这个包,然后再加上,就对了。。。。诡异啊。
这个有点前后矛盾,以后再仔细检查吧。
我删除了我机器上weblogic的domain测试了一下。整个流程如下:
新建domain,发布不含有wstx-asl的jar包,发布成功,但是WSDL文件无法访问,要报错;
然后添加上wstx-asl的jar包,再在这个domain上发布,发布成功,访问WSDL文件也没有问题。呵呵。诡异了。以后再仔细检查吧。我在windows上weblogic10.3和redhat上weblogic10.3都测试了一次,都是这样的。
然后添加上wstx-asl的jar包,再在这个domain上发布,发布成功,访问WSDL文件也没有问题。