今天用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的新手有点用。
分享到:
相关推荐
"SOA CXF_SOA JAVA_cxf_cxf helloworld_helloworld"这部分描述了这个项目的核心内容,即通过CXF来理解和实践SOA,并且使用了“Hello World”作为基本的演示案例。 Apache CXF是一个开源的Java框架,主要用于构建和...
本示例将引导你了解如何使用Apache CXF创建一个简单的“Hello World”应用程序,涉及客户端和服务端的实现。 首先,让我们从服务端(WS_Server)开始。在CXF中,服务端通常被称为服务提供者。为了创建一个服务,你...
本示例只是一个cxf的简单的一个helloWorld程序,运行时先运行webServiceApp.java,再在地址栏中输入http://localhost:8080/helloWorld,如果在浏览器中有一串xml输出则成功,然后再运行HelloWorldClient.java文件...
【标题】"CXF的第一个例子helloWorld"是一个基础教程,主要介绍了如何使用Apache CXF框架创建一个简单的Web服务。Apache CXF是一个开源的Java框架,它用于构建和开发Web服务,支持SOAP、RESTful等多种通信协议。这个...
【CXF的helloworld实现】 Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和Web服务。它提供了一个全面的工具集,支持WS-*标准,使得开发人员能够轻松地创建和部署SOAP和RESTful服务。在...
【标题】:“CXF入门(Hello World)” 【描述】:这篇文章主要介绍如何使用Apache CXF框架进行Web服务开发,通过一个简单的“Hello World”示例来帮助初学者理解CXF的基本用法。 Apache CXF是一个开源的Java框架...
这个"Apache CXF之helloworld"示例旨在帮助初学者理解如何使用CXF来创建和消费简单的Web服务。CXF允许开发者通过Java API(如JAX-WS和JAX-RS)来定义服务接口,并自动将其转换为HTTP服务。 首先,我们来了解一下CXF...
**WebService (一) CXF 入门 HelloWorld** 在IT行业中,WebService是一种基于开放标准(如XML、WSDL和SOAP)的互联网通信协议,允许不同系统之间的应用程序进行互操作。本篇将详细介绍如何使用Apache CXF框架来创建...
使用CXF实现简单HelloWorld.swf 主要是让初学者学习cxf使用
本篇将深入讲解如何利用Apache CXF实现一个简单的"Hello World" Web服务DEMO。 首先,我们需要了解Web服务的基本概念。Web服务是通过SOAP(Simple Object Access Protocol)消息交换协议进行通信的,这些消息通常以...
【CXF实用案例:HelloWorld详解】 Apache CXF是一个开源的Java框架,它主要用于构建和服务导向架构(SOA)的应用程序。CXF使得开发者能够轻松地创建和部署Web服务,同时也支持SOAP、RESTful API等多种通信协议。在...
【标题】"CXF视频:1、使用CXF实现简单的HelloWorld",这是一段关于Apache CXF框架的初级教程,旨在引导初学者通过实际操作理解如何利用CXF创建一个基本的“HelloWorld”服务。Apache CXF是一个开源的Java框架,它...
标题 "01_CXF之HelloWorld" 暗示了我们即将探讨的是使用Apache CXF框架实现的一个基础的“Hello, World”示例。Apache CXF是一个开源的Java框架,主要用于构建和开发服务导向架构(SOA)和 Representational State ...
### Apache CXF HelloWorld 示例详解 #### 一、Apache CXF简介与特点 Apache CXF(以下简称为CXF)是一款非常流行的开源项目,用于构建和服务Web Services。它整合了两个著名的开源项目:Apache Celtix 和 XFire。...
webservice-helloworld 视频 两台机器访问,一个是虚拟机。
webservice-helloworld 视频 两台机器访问,一个是虚拟机。 高清
在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...
在本文中,我们将深入探讨如何将Apache CXF与Spring框架集成,以便同时支持JSON和XML的Web...这个“CXF整合spring同时支持JSON和XML配置的HelloWorld”示例为开发者提供了一个基础,从中可以扩展出复杂的企业级服务。
CXF视频教程1 使用CXF实现简单的HelloWorld
标题 "CXF 2.3 集成Spring3.0入门 HelloWorld" 指向的是一个关于如何在Java项目中使用Apache CXF 2.3版本与Spring 3.0框架进行集成的教程,特别是通过一个简单的"Hello World"应用来演示这个过程。Apache CXF是一个...