- 浏览: 48246 次
- 性别:
- 来自: 重庆
文章分类
最新评论
使用CXF,spring部署Web Service服务
server 实现
步骤一 新建Web工程
步骤二 下载cxf包(地址:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.6.2/apache-cxf-2.6.2.tar.gz)
步骤三 解压cxf包,将apache-cxf-*.*.*/lib目录下的jar包复制到Web工程->WebRoot->WEB-INF->lib文件夹下(cxf已经整合了spring所以不需要在导入spring的包了)。不必导入全部jar包 具体见附件图片
步骤四 在Web工程下创建一个接口并定义一个方法
例:
package com.cxf;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface ISayHello
{
public String sayHello(@WebParam(name="name")String name);
}
步骤五 新建一个类继承接口
例:
package com.cxf;
import javax.jws.WebService;
@WebService(endpointInterface = "com.cxf.ISayHello")
public class SayHelloImpl implements ISayHello
{
@Override
public String sayHello(String name)
{
return "my name is " + name;
}
}
步骤六 在工程src目录下创建spring配置文件applicationContext.xml
applicationContext.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="sayHelloImpl" class="com.cxf.SayHelloImpl" />
<jaxws:endpoint id="sayHello" implementor="#sayHelloImpl" address="/sayHello" />
</beans>
步骤七 修改Web工程->WebRoot->WEB-INF->web.xml
在web.xml文件<web-app></web-app>中加上:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
发布我们新建的Web工程
打开浏览器访问:http://localhost:8080/WebService/
client 实现
步骤一 在工程中新建一个类(可以重新建一个工程但需要导入cxf的相关包)
例:
package com.cxf.client;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.cxf.ISayHello;
public class CxfClient
{
public static void main(String[] args)
{
ClassPathXmlApplicationContext context
= new ClassPathXmlApplicationContext(new String[] {"com/cxf/client/applicationContext_client.xml"});
ISayHello client = (ISayHello)context.getBean("sayHello2");
String response = client.sayHello("Joe");
System.out.println("Response: " + response);
System.exit(0);
}
}
步骤二 在client同级目录新建client spring配置文件applicationContext_client.xml
applicationContext_client.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!--
该方式访问ws服务也是利用spring的依赖注入法
id是spring IOC容器唯一标识符
serviceClass是webservices服务接口
address是服务wsdl地址
-->
<jaxws:client id="sayHello2" serviceClass="com.cxf.ISayHello" address="http://localhost:8080/WebService/sayHello?wsdl" />
</beans>
执行CxfClient的main方法
控制台打印
Response: my name is Joe
在完成实例中所遇问题
启动tomcat抛:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sayHello': Invocation of init method failed; nested exception is java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/apache-tomcat-6.0.29/webapps/WebService/WEB-INF/lib/jaxb-impl-2.2.4-1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
Caused by: java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/apache-tomcat-6.0.29/webapps/WebServiceCXF/WEB-INF/lib/jaxb-impl-2.2.4-1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
问题原因:cxf与jdk jar包冲突
解决方法:
1.升级JDK到jdk1.6.0_25(据说jdk1.6.0_25后就支持了),然后修改tomcat的执行jdk版本(还有另一种方法,可以google下)
问题二:
执行客服端类main方法时抛:
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [demo/spring/client/client-beans.xml]; nested exception is javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
问题原因:
是我使用MyEclipse创建项目时引用了J2EE 1.4 Library Container库
解决方法:
1.删掉J2EE 1.4 Library 。
2.换为JAVA EE 5/6 Library
server 实现
步骤一 新建Web工程
步骤二 下载cxf包(地址:http://www.apache.org/dyn/closer.cgi?path=/cxf/2.6.2/apache-cxf-2.6.2.tar.gz)
步骤三 解压cxf包,将apache-cxf-*.*.*/lib目录下的jar包复制到Web工程->WebRoot->WEB-INF->lib文件夹下(cxf已经整合了spring所以不需要在导入spring的包了)。不必导入全部jar包 具体见附件图片
步骤四 在Web工程下创建一个接口并定义一个方法
例:
package com.cxf;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface ISayHello
{
public String sayHello(@WebParam(name="name")String name);
}
步骤五 新建一个类继承接口
例:
package com.cxf;
import javax.jws.WebService;
@WebService(endpointInterface = "com.cxf.ISayHello")
public class SayHelloImpl implements ISayHello
{
@Override
public String sayHello(String name)
{
return "my name is " + name;
}
}
步骤六 在工程src目录下创建spring配置文件applicationContext.xml
applicationContext.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<bean id="sayHelloImpl" class="com.cxf.SayHelloImpl" />
<jaxws:endpoint id="sayHello" implementor="#sayHelloImpl" address="/sayHello" />
</beans>
步骤七 修改Web工程->WebRoot->WEB-INF->web.xml
在web.xml文件<web-app></web-app>中加上:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
发布我们新建的Web工程
打开浏览器访问:http://localhost:8080/WebService/
client 实现
步骤一 在工程中新建一个类(可以重新建一个工程但需要导入cxf的相关包)
例:
package com.cxf.client;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.cxf.ISayHello;
public class CxfClient
{
public static void main(String[] args)
{
ClassPathXmlApplicationContext context
= new ClassPathXmlApplicationContext(new String[] {"com/cxf/client/applicationContext_client.xml"});
ISayHello client = (ISayHello)context.getBean("sayHello2");
String response = client.sayHello("Joe");
System.out.println("Response: " + response);
System.exit(0);
}
}
步骤二 在client同级目录新建client spring配置文件applicationContext_client.xml
applicationContext_client.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!--
该方式访问ws服务也是利用spring的依赖注入法
id是spring IOC容器唯一标识符
serviceClass是webservices服务接口
address是服务wsdl地址
-->
<jaxws:client id="sayHello2" serviceClass="com.cxf.ISayHello" address="http://localhost:8080/WebService/sayHello?wsdl" />
</beans>
执行CxfClient的main方法
控制台打印
Response: my name is Joe
在完成实例中所遇问题
启动tomcat抛:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sayHello': Invocation of init method failed; nested exception is java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/apache-tomcat-6.0.29/webapps/WebService/WEB-INF/lib/jaxb-impl-2.2.4-1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
Caused by: java.lang.LinkageError: JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/D:/apache-tomcat-6.0.29/webapps/WebServiceCXF/WEB-INF/lib/jaxb-impl-2.2.4-1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader. (See http://java.sun.com/j2se/1.6.0/docs/guide/standards/)
问题原因:cxf与jdk jar包冲突
解决方法:
1.升级JDK到jdk1.6.0_25(据说jdk1.6.0_25后就支持了),然后修改tomcat的执行jdk版本(还有另一种方法,可以google下)
问题二:
执行客服端类main方法时抛:
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [demo/spring/client/client-beans.xml]; nested exception is javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
问题原因:
是我使用MyEclipse创建项目时引用了J2EE 1.4 Library Container库
解决方法:
1.删掉J2EE 1.4 Library 。
2.换为JAVA EE 5/6 Library
发表评论
-
jxl操作execl
2014-06-12 16:18 634jxl操作execljxl操作execljxl操作execlj ... -
jFreechart
2013-03-08 16:15 0jFreechart -
需要学习内容
2013-03-05 22:15 0技术问题: 1、spring框架的实现原理(ioc、aop ... -
JAVA NIO
2012-10-27 09:51 0JAVA NIO -
JAVA类加载
2012-10-26 16:06 0JAVA类加载 -
理解JVM
2012-10-26 16:06 0理解JVM -
理解HashMap,HashTable
2012-10-26 16:05 0理解HashMap,HashTable -
JMS ActiveMQ
2012-10-26 16:04 0JMS和WebService的区别? 1.WebService ... -
JAVA垃圾收集机制
2012-10-26 16:01 0... -
JAVA并发编程学习
2012-10-26 16:00 0java并发编程 -
ssh的优缺点整理
2012-09-22 16:13 0以前开发web应用程序的 ... -
java 复习
2012-09-12 14:31 0java的堆与栈 堆: 1、堆是一个运行时数据区,有new.. ... -
javascript实现图片预览
2012-07-31 15:22 0使用两种不同的方法实现图片预览功能 Java代码 &l ... -
使用JSONP完成HTTPS跨域请求
2012-04-02 21:26 26377使用JSONP完成HTTPS跨域请 ... -
部署WebService服务(cxf,spring)2
2012-03-29 18:30 0client 实现 步骤一 在工程中新建一个类(可以重新 ... -
部署WebService服务(Axis2,spring)2
2012-03-27 11:06 0步骤七 在Web工程->WebRoot目录下新建axis ... -
部署WebService服务(Axis2,spring)
2012-03-28 20:55 7113部署WebService(Axis2和spring集成) s ... -
部署WebService服务(Axis)
2012-03-24 16:44 1412Axis实现Axis server实现步骤一 创建Web工程 ...
相关推荐
5. **部署和测试**:将Spring配置文件加载到Spring应用上下文中,然后通过Spring的ContextLoaderListener或Servlet容器(如Tomcat)启动CXF服务。可以使用CXF提供的测试工具或HTTP客户端进行服务调用和验证。 6. **...
【标题】"webservice-cxf-spring-jar.zip" 是一个包含了使用Apache CXF与Spring框架集成开发Web服务的Java库集合。这个压缩包提供了一整套必要的JAR文件,以便于开发者在他们的项目中快速搭建和运行基于CXF的Web服务...
标题"webservice(cxf)与spring整合源码+文档"表明这是一个关于如何将CXF Web服务与Spring框架集成的学习资源。文档和源代码一起提供,使得学习者能够通过实践来理解这一过程。 描述中提到"webservice与spring整合...
例如,使用`@WebService`注解标记服务类,使用`@WebMethod`标记服务方法,然后通过CXF的Servlet或Spring的ApplicationContext来发布服务。 4. **返回List类型数据**:在Web服务中,你可以返回一个List类型的集合,...
在Web服务开发中,Apache CXF是一个广泛使用的开源框架,它提供了创建、部署和管理Web服务的强大功能。CXF不仅支持SOAP,还支持RESTful API,使得开发者能够灵活地选择适合项目需求的服务模型。同时,Spring框架作为...
本教程将深入探讨如何利用Apache CXF 2与Spring 2.5来构建和使用WebService。 首先,让我们理解这两个组件的基本概念。Apache CXF是一个全面的服务框架,它支持多种Web服务规范,如SOAP、RESTful、WS-*等。它提供了...
4. **CXF服务部署**:CXF提供多种部署方式,包括独立服务器、Tomcat等应用服务器,以及Spring容器。通过修改CXF的配置文件,可以控制服务的行为,如端口号、绑定地址等。 5. **测试Web服务**:在提供的...
【标题】"webservice-CXF-spring+maven" 指的是使用Apache CXF框架,结合Spring和Maven构建Web服务。Apache CXF是一个开源的Java框架,它允许开发人员创建和消费各种Web服务,包括SOAP和RESTful类型。Spring框架则...
本篇将深入探讨如何利用CXF和Spring来创建、部署和消费Web Service。 CXF,全称CXF Commons eXtensible Framework,是一个开源的Java Web服务框架,它支持多种Web服务标准,如SOAP、RESTful等。CXF允许开发者以Java...
总结来说,"webservice CXF结合Spring所需jar包"是构建基于CXF和Spring的Web服务的关键组成部分,它们提供了开发、运行和管理Web服务所必需的功能。了解并正确使用这些jar包,能帮助开发者更高效地实现服务的创建、...
总结来说,"webservice cxf+spring maven项目"是一个适合初学者的示例,它展示了如何利用CXF、Spring和Maven构建、部署和测试Web服务。这个项目涵盖了Web服务的基本概念,以及CXF和Spring在Web服务中的实际应用,为...
【标题】:“WebService+CXF+Spring”是一个关于在Java环境中使用Apache CXF框架与Spring框架集成实现Web服务的专题。Apache CXF是一个开源的Web服务框架,它允许开发人员创建和部署SOAP和RESTful Web服务。Spring...
CXF支持SOAP、RESTful API、WS-*规范,并且易于与Spring框架集成,提供了一种声明式的方式创建和部署Web服务。 ### Spring框架 `Spring`是Java领域最流行的轻量级应用程序框架,它提供了依赖注入(DI)、面向切面...
Spring框架是Java企业级应用开发的首选,而CXF是一个强大的开源服务框架,支持创建和消费Web服务。本教程将深入探讨如何利用Spring和CXF来实现基于HTTP和HTTPS的Web服务,并且将涉及到HTTPS的证书配置。 1. **...
而Apache CXF是一个开源的Java框架,专门用于构建和部署Web服务。CXF集成了Spring框架,使得开发、配置和管理Web服务变得更加简便。下面将详细阐述基于CXF的Web Service以及与Spring的整合。 **一、CXF Web Service...
总的来说,"webservice使用cxf的实例"这个主题涵盖了从基础理论到实际操作的各个环节,包括CXF框架的使用、Web服务的创建与部署、客户端调用、数据绑定、安全性和Spring集成等多个方面。通过学习和实践,开发者可以...
- 在CXF环境中,可以使用Spring配置文件或Java代码来部署服务。例如,使用Spring配置文件: ```xml address="/myService"> ``` 7. **客户端调用** CXF也提供了生成客户端代理类的工具,便于调用远程Web...
本文将深入探讨如何使用Spring和CXF来发布WebService服务。 首先,Spring是一个开源的Java平台,它提供了全面的编程和配置模型,用于简化企业级应用的开发。Spring框架的核心特性包括依赖注入、面向切面编程(AOP)...
你也可以使用Spring-WS或Apache CXF等库来创建WSDL并部署服务。 4. **测试和调试**:确保编写了单元测试来验证Web Service接口的功能。你还可以使用工具(如SoapUI)进行功能测试和性能测试。 5. **注意兼容性**:...