最近研究了一下cxf的使用,主要的步骤如下:
一, 下载最新的cxf包apache-cxf-2.6.2.tar.zip,并解压,有一个lib文件,里面的jar包,就是webservice需要的(不完全需要,看你的应用,但是懒的分),加载进你的webservice的工程即可。
二, 配置两个配置文件,为beans.xml和web.xml,内容如下:
beans.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-extension-soap.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
<jaxws:endpoint id="HelloWorld" address="/HelloWorld" implementor="com.demo.HelloWorldImpl"/>
</beans>
需要注意的是,上面红色的部分,其中,id不用管,主要是和spring集成需要的吧,address就是你的服务名,这里配置为HelloWorld。Implementor配置的是服务的实现类,这里是com.demo包里的类HelloWorldImpl。
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.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>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
上面红色部分是在weblogic配置需要主要的(在上一篇文章中提过)。
下面是服务端的代码:
HelloWorld.java:
package com.demo;
import java.util.ArrayList;
import java.util.List;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
//@WebParam(name="text",targetNamespace="http://demo.com/")
String sayHi(@WebParam(targetNamespace="http://demo.com/")String text);
String sayHiToUser(@WebParam(targetNamespace="http://demo.com/")User user);
ArrayList<String> SayHiToUserList(@WebParam(targetNamespace="http://demo.com/")List<User> userList);
}
HelloWorldImpl.java
package com.demo;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
//注解
//@WebService(endpointInterface="com.demo.HelloWorld",serviceName="HelloWorld")
public class HelloWorldImpl implements HelloWorld {
Map<Integer, User> users = new LinkedHashMap<Integer, User>();
public String sayHi(String text) {
return "Hello " + text;
}
public String sayHiToUser(User user) {
users.put(users.size()+1, user);
return "Hello "+ user.getName();
}
public ArrayList<String> SayHiToUserList(List<User> userList) {
String[] result = new String[userList.size()];
ArrayList<String> list = new ArrayList<String>();
int i=0;
for(User u:userList)
{
result[i] = "Hello " + u.getName();
list.add(result[i]);
i++;
}
return list;
}
}
注意在HellWorld.java中@WebService是表明如下的接口是webservice接口,不能删除。如果不加@WebParam(targetNamespace)以指定参数的命名空间,用xfire根据wsdl生成客户端时,会出现错误。原因为:
查看soap信息,发现在soap信息中多加入了namespace:ns2。如下:<ns2:operation xmlns:ns4="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="url2" xsi:type="ns4:url4">
原因是服务器端的operation是没有定义targetNamespace,而xfire生成客户端时,如果也没有定义targetNamespace,它会默认的取Service的targetNamespace。
部署在Weblogic时,可能会出现jar包冲突:
解决办法是:
在startWebLogic.cmd。配置:
set CLASSPATH_CXF=E:\JavaWorkSpace\CXFServer2\WebRoot\WEB-INF\lib\geronimo-ws-metadata_2.0_spec-1.1.3.jar
set CLASSPATH=%CLASSPATH_CXF%;%CLASSPATH%;%MEDREC_WEBLOGIC_CLASSPATH%
大概就是这些了,很容易吧。
PS:使用xfire调用cxf的服务时,如果传递List类型时,可能会出现问题,不知道什么原因,麻烦哪位大哥知道,告诉我,我们一起学习吧。
分享到:
相关推荐
**WebService技术概述** WebService是一种基于...通过以上内容,你可以全面了解并掌握WebService的基础知识,以及CXF和XFire这两个关键框架的使用。学习并熟练运用这些技术,将有助于你构建高效、可靠的分布式系统。
Spring框架提供了灵活的依赖注入和AOP(面向切面编程)特性,可以方便地集成各种服务组件。CXF作为Web服务提供商,它支持SOAP和RESTful两种风格的服务,能够与Spring无缝对接。通过Spring的ApplicationContext配置...
本篇将深入探讨如何利用CXF和Spring来部署WebService服务。 首先,CXF全称是CXF Commons eXtensible Framework,它是一个Java Web服务框架,支持多种Web服务标准,如SOAP、RESTful(Representational State ...
Spring是一个全面的Java企业级应用开发框架,提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等核心功能。Spring还支持多种数据访问技术,如JDBC、ORM(对象关系...
1. 服务端开发:CXF允许开发者使用Java编程模型(如JAX-WS或JAX-RS)来定义服务接口,然后自动生成服务实现和WSDL(Web Services Description Language)。 2. 客户端调用:CXF也支持生成客户端代理代码,使得Java...
2. Frontends:CXF支持多种“Frontend”编程模型,CXF实现了JAX-WS API(遵循JAX-WS 2.0TCK版本),它也包含一个“simple frontend”允许客户端和EndPoint的创建,而不需要Annotation注解。 3. 容易使用:CXF设计得...
【标题】"webservice demo springboot cxf" 涉及到的是一个使用Spring Boot框架和Apache CXF库创建Web服务的示例项目。在Java世界中,Spring Boot以其简化微服务开发的特性广受欢迎,而CXF是用于构建和消费Web服务的...
总的来说,这份“webservice+cxf基础笔记和视频”资源将引导你进入Web服务的世界,通过学习和实践,你可以掌握使用CXF和Spring进行Web服务开发的基本技能。无论你是初学者还是有一定经验的开发者,这都将是一份有...
3. **定义Web服务接口**:使用Java编程语言定义Web服务的接口,这些接口通常继承自JAX-WS或JAX-RS的接口,如`javax.jws.WebService`或`javax.ws.rs.GET`。 4. **实现Web服务**:创建接口的实现类,实现服务的具体...
【标题】:Webservice CXF 整合Spring的实例源码解析 在Web服务开发中,Apache CXF是一个广泛使用的开源框架,它提供了创建、部署和管理Web服务的强大功能。CXF不仅支持SOAP,还支持RESTful API,使得开发者能够...
Spring框架的核心特性包括依赖注入、面向切面编程(AOP)、事务管理等,这使得开发者可以更专注于业务逻辑,而不是基础设施代码。 Apache CXF,另一方面,是一个开源的服务框架,主要用于构建和部署SOAP和RESTful ...
它负责构建并管理Web服务的生命周期,同时也是其他CXF模块的基础。 2. `xmlbeans-2.6.0.jar`: XMLBeans是一个用于Java的XML处理库,它可以将XML文档映射为Java对象,反之亦然。在CXF中,XMLBeans用于解析和生成XML...
【标题】:“WebService+CXF+Spring”是一个关于在Java环境中使用Apache CXF框架与Spring框架集成实现Web服务的专题。Apache CXF是一个开源的Web服务框架,它允许开发人员创建和部署SOAP和RESTful Web服务。Spring...
1. **CXF**:CXF允许开发者使用Java编程模型来创建和使用Web服务。它可以处理SOAP消息,同时也支持RESTful服务。CXF集成了Spring框架,使得配置和服务的生命周期管理变得更加容易。 2. **Spring MVC**:Spring MVC...
### WebService与CXF基础知识详解 #### 一、WebService简介 **WebService** 是一种通过网络提供的服务,允许不同系统之间进行交互。它采用标准的Internet协议(如HTTP、XML、SOAP等),使得不同语言编写的程序能够...
【Cxf+WebService:构建服务与客户端的详解】 在IT行业中,Web Service是一种通过互联网交换业务数据的应用程序接口(API)。它允许不同系统之间的互操作性,即使这些系统使用不同的编程语言、操作系统或硬件平台。...
当我们需要在CXF和Spring整合的基础上发布Web服务,并对权限进行控制时,可以利用拦截器来实现这一目标。本文将详细介绍如何为CXF与Spring整合发布WebService添加拦截器进行权限控制。 首先,我们需要理解CXF拦截器...
总结来说,"webservice cxf+spring maven项目"是一个适合初学者的示例,它展示了如何利用CXF、Spring和Maven构建、部署和测试Web服务。这个项目涵盖了Web服务的基本概念,以及CXF和Spring在Web服务中的实际应用,为...
通过Spring,我们可以利用其依赖注入(DI)和面向切面编程(AOP)特性,更方便地管理CXF组件。下面将详细阐述如何构建一个基于CXF和Spring的Web服务客户端。 1. **配置Spring XML**: 在项目中,首先需要创建一个...