CXF HelloWorld on Glassfish
关键字: cxf glassfish tomcat今天用CXF写了个HelloWorld,放在glassfish上一运行,竟然出错!反编译CXF的代码跟踪了半天,原来是抽象类javax.xml.stream.XMLOutputFactory的实现冲突。该类在glassfish/lib/javaee.jar和CXF自带的包geronimo-stax-api_1.0_spec-1.0.1.jar中都有实现。glassfish启动时会先装载javaee.jar包中的class;但CXF需要的是geronimo-stax-api_1.0_spec-1.0.1.jar里面的com.ctc.wstx.stax.WstxOutputFactory实现类。执行时异常信息如下:
Caused by: javax.xml.stream.XMLStreamException: NamespaceURI cannot be null
at com.sun.xml.stream.writers.XMLStreamWriterImpl.writeAttribute(XMLStreamWriterImpl.java:632)
at org.apache.cxf.staxutils.StaxUtils.writeElement(StaxUtils.java:520)
at org.apache.cxf.staxutils.StaxUtils.writeElement(StaxUtils.java:440)
at org.apache.cxf.staxutils.StaxUtils.writeDocument(StaxUtils.java:421)
at org.apache.cxf.staxutils.StaxUtils.writeDocument(StaxUtils.java:411)
at org.apache.cxf.staxutils.StaxUtils.writeNode(StaxUtils.java:560)
at org.apache.cxf.transport.http.WSDLQueryHandler.writeResponse(WSDLQueryHandler.java:226)
解决办法:
在glassfish系统属性中加入javax.xml.stream.XMLOutputFactory=com.ctc.wstx.stax.WstxOutputFactory,这样就让glassfish将WstxOutputFactory作为XMLOutputFactory的实现。
可以通过glassfish的控制台菜单加入,从Configuration --> System Properties进入;或直接修改domain中config目录下的配置文件domain.xml:
<domain ...
<configs>
<config ..
...
<system-property name="javax.xml.stream.XMLOutputFactory" value="com.ctc.wstx.stax.WstxOutputFactory"/>
</config>
</configs>
...
</domain>
修改后需要重启glassfish。这个CXF的HelloWorld在tomcat上是没有问题的,希望对glassfish的新手有点用。
评论
发表评论
- 浏览: 2586 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
一个比较好玩的Flex特效
回xiejiangbo: 使用的外部组件可以在这里下载:http://webl ...
-- by mingliangfeng -
一个比较好玩的Flex特效
我也想发布些东西和大家分享一下 你的那个登陆界面实际效果是怎么往上面发布的???
-- by xiejiangbo -
一个比较好玩的Flex特效
代码只有一部分吧 css和几个类找不到,也一起放上来吧 还想请教一个问题 我现 ...
-- by xiejiangbo -
一个比较好玩的Flex特效
哥们 这个效果有意思!
-- by xiejiangbo -
一个比较好玩的Flex特效
当然,无任何版权限制
-- by mingliangfeng






评论排行榜