- 浏览: 701500 次
- 性别:
- 来自: 北京
博客专栏
-
读金庸故事,品程序人生
浏览量:47681
文章分类
最新评论
-
hty881008:
LZ,你的json返回是怎么出来的,我的怎么是No messa ...
使用CXF暴露您的REST服务 -
jxFY:
赞
Apache的对象池化工具commons-pool -
wangyudong:
新版本的Wisdom RESTClient地址https:// ...
使用CXF暴露您的REST服务 -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
使用CXF暴露您的REST服务 -
spring_springdata:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven3实战笔记01环境配置与使用入门
首先配置CXF环境,从apache下载cxf所需jar包。加入你的构建路径。
第二,建立一个DTO对象(用于参数是值对象类型),如下:
package bean;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
/**
*@author 刘岩
*/
@XmlRootElement(name = "Customer")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "name", "age" })
public class Customer {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
因为采用了注解形式,若不是JDK1.5,那你只能望CXF而兴叹了,还是用XFire吧。
接下来定义服务接口
package service;
import javax.jws.WebService;
import bean.Customer;
/**
*@author 刘岩
*/
@WebService(targetNamespace="iscpWebService/RemoveCooperater")
public interface CXFService {
public String sayHello(String inStr);
public void saveCust(Customer customer);
}
下面写接口实现类
package service.impl;
import javax.jws.WebService;
import bean.Customer;
import service.CXFService;
/**
*@author 刘岩
*/
@WebService(targetNamespace = "iscpWebService/RemoveCooperater", endpointInterface = "service.CXFService")
public class CXFServiceImpl implements CXFService {
public String sayHello(String inStr) {
System.out.println("服务端调用");
inStr = "<hello~~~~:>" + inStr;
return inStr;
}
public void saveCust(Customer customer) {
if (customer != null) {
customer.setName(customer.getName()+"@123");
System.out.println(customer.getName() + ":" + customer.getAge());
}
}
}
因为CXF依赖于Spring框架,所以
web.xml修改如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>
</web-app>
而Spring的bean.xml内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- START SNIPPET: beans -->
<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="sayHello"
implementor="service.impl.CXFServiceImpl" address="/CXFService"/>
</beans>
==================================================
好了,之后建立一个客户端项目(纯Java项目即可,无需Java Web支持),加入junit单元测试即可。
写客户端代码如下:
package test;
import junit.framework.TestCase;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class Client extends TestCase {
public void test01() {
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(CXFService.class);
factoryBean
.setAddress("http://127.0.0.1:8181/MyCXFDemo/webservice/CXFService");
CXFService client = (CXFService) factoryBean.create();
String response = client.sayHello("liuyan");
System.out.println("Response: " + response);
System.exit(0);
}
public void test02() {
JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
factoryBean.setServiceClass(CXFService.class);
factoryBean
.setAddress("http://127.0.0.1:8181/MyCXFDemo/webservice/CXFService");
CXFService client = (CXFService) factoryBean.create();
Customer customer = new Customer();
customer.setAge(25);
customer.setName("liuyan");
client.saveCust(customer);
System.out.println("Response: " + customer.getName());
System.exit(0);
}
}
运行test01、test02成功调用服务端代码。tomcat、weblogic都测试通过。注意:有些情况是在tomcat可以正常生成wsdl,但是移植到了weblogic下面会因为jar冲突导致wsdl不能生成。
wsdl如下,用它也可以生成客户端代码:::
<?xml version="1.0" encoding="UTF-8" ?>
- <wsdl:definitions name="CXFServiceImplService" targetNamespace="iscpWebService/RemoveCooperater" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="iscpWebService/RemoveCooperater" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <xs:schema elementFormDefault="unqualified" targetNamespace="iscpWebService/RemoveCooperater" version="1.0" xmlns:tns="iscpWebService/RemoveCooperater" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Customer" type="tns:customer" />
<xs:element name="saveCust" type="tns:saveCust" />
<xs:element name="saveCustResponse" type="tns:saveCustResponse" />
<xs:element name="sayHello" type="tns:sayHello" />
<xs:element name="sayHelloResponse" type="tns:sayHelloResponse" />
- <xs:complexType name="saveCust">
- <xs:sequence>
<xs:element minOccurs="0" name="arg0" type="tns:customer" />
</xs:sequence>
</xs:complexType>
- <xs:complexType name="customer">
- <xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element name="age" type="xs:int" />
</xs:sequence>
</xs:complexType>
- <xs:complexType name="saveCustResponse">
<xs:sequence />
</xs:complexType>
- <xs:complexType name="sayHello">
- <xs:sequence>
<xs:element minOccurs="0" name="arg0" type="xs:string" />
</xs:sequence>
</xs:complexType>
- <xs:complexType name="sayHelloResponse">
- <xs:sequence>
<xs:element minOccurs="0" name="return" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
- <wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters" />
</wsdl:message>
- <wsdl:message name="saveCustResponse">
<wsdl:part element="tns:saveCustResponse" name="parameters" />
</wsdl:message>
- <wsdl:message name="saveCust">
<wsdl:part element="tns:saveCust" name="parameters" />
</wsdl:message>
- <wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters" />
</wsdl:message>
- <wsdl:portType name="CXFService">
- <wsdl:operation name="saveCust">
<wsdl:input message="tns:saveCust" name="saveCust" />
<wsdl:output message="tns:saveCustResponse" name="saveCustResponse" />
</wsdl:operation>
- <wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello" name="sayHello" />
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse" />
</wsdl:operation>
</wsdl:portType>
- <wsdl:binding name="CXFServiceImplServiceSoapBinding" type="tns:CXFService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
- <wsdl:operation name="saveCust">
<soap:operation soapAction="" style="document" />
- <wsdl:input name="saveCust">
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output name="saveCustResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
- <wsdl:operation name="sayHello">
<soap:operation soapAction="" style="document" />
- <wsdl:input name="sayHello">
<soap:body use="literal" />
</wsdl:input>
- <wsdl:output name="sayHelloResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
- <wsdl:service name="CXFServiceImplService">
- <wsdl:port binding="tns:CXFServiceImplServiceSoapBinding" name="CXFServiceImplPort">
<soap:address location="http://127.0.0.1:8181/MyCXFDemo/webservice/CXFService" />
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
发表评论
-
JavaEE5实战笔记05RedHat搭建JBoss、Oracle10g环境
2011-06-01 10:50 1567JavaEE5实战笔记在RedHat上搭建JBoss、Orac ... -
JavaEE5实战笔记02JPA持久层的一些问题
2011-05-30 14:48 16001. JPA关联实体的级联操作问题 在此次联系中 ... -
JavaEE5实战笔记01EJB环境搭建及异常解决
2011-05-30 14:43 50131. 说明 此实战笔记是为了之前的学习笔记做一个 ... -
Spring集成ActiveMQ配置
2011-03-21 20:58 279451. 集成环境 Spring采用2.5.6版本, ... -
JAVA的Mina框架传递对象——一劳永逸(转载)
2011-03-09 11:31 2694接触java的Mina框架已经有很多时间了,在网上也读过了很多 ... -
JavaEE5学习笔记12-JSF验证器使用总结
2011-03-09 00:01 19661. JSF验证器 说完转换器就该说说验证器了, ... -
JavaEE5学习笔记11-JSF转换器使用总结
2011-03-08 23:53 27121. JSF的转换器是在JSF生命周期的第2个阶段 ... -
JSF组件生命周期的讨论
2011-03-08 23:38 17271. JSF生命周期 下面我们来看看JSF组件的 ... -
JavaEE5学习笔记10-JSF基本UI控件使用
2011-03-08 23:34 36621. JSF也是JavaEE5的标准,感觉上sun ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(2)
2011-02-28 09:21 1546以上例子只是简单调用了WebService,参数是简单的Str ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(1)
2011-02-28 09:19 41091. 将EJB发布成,或者说暴露成Web服务(也许 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(4)
2011-02-24 09:36 14881. 在JavaEE容器 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(3)
2011-02-24 09:35 12001. 测试代码 部署成功后,在另一个项目中建立测 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(2)
2011-02-24 09:33 1523下面来看针对此实体操作的sessionBean代码。 接口 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(1)
2011-02-24 09:28 1751JPA是JavaEE5提出的一套标准接口,不同的应用服务器对其 ... -
JavaEE5学习笔记06-EJB之消息驱动Bean(MDB)总结----2
2011-02-21 15:56 1423除了activationConfig之外,如果使用其他Java ... -
JavaEE5学习笔记06-EJB之消息驱动Bean(MDB)总结----1
2011-02-21 15:55 19601. 功能介绍 在EJB的分类中还有一个就是消息驱 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----7
2011-02-21 09:49 13341. EJB的容器式依 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----6
2011-02-21 09:48 1540BMT就是Bean自己管理事务,这种方式就是以硬编码的方式在B ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----5
2011-02-21 09:46 18971. 有状态的会话Bean的本地、远程调用 其实这 ...
相关推荐
本篇文章将深入探讨CXF与Spring的结合,以及如何创建一个基于CXF和Spring的Web服务程序。 ### 1. CXF简介 CXF,全称CXF CXF,是 Continued eXtension Framework 的缩写,它的前身是XFire和Celtix两个项目。CXF不仅...
本篇文章将深入探讨Apache CXF的核心特性、使用方法以及如何通过提供的源码来进一步理解其工作原理。 首先,Apache CXF的主要优势在于其对多种Web服务标准的支持,包括WSDL(Web Services Description Language)和...
CXF不仅允许你消费Web服务,还可以用来创建和发布自己的Web服务。 2. **Java 2 WSDL**:这个过程涉及到将Java接口或类转换成WSDL文档。WSDL是一种XML格式的规范,用于描述Web服务的接口,包括服务提供的操作、消息...
本示例代码将帮助你理解和实现一个完整的Web Service程序。 首先,我们来看"xfire-client"部分。XFire是早先的一个Java Web Service框架,它简化了客户端和服务端的开发。在Java中,创建Web Service客户端通常涉及...
当你有一个WSDL文件时,你可以使用CXF的`wsdl2java`命令行工具将其转换为Java代码,这样你就可以在Java环境中实现或调用这个Web服务。 以下是使用`wsdl2java`的基本步骤: 1. **安装CXF**: 首先,你需要在你的开发...
此外,CXF还支持WSDL(Web Service Description Language)第一类公民,这意味着你可以从WSDL文件生成服务代码,或者反之,从服务代码生成WSDL。 描述中的“axis连接webservice所用的jar包”提到了Apache Axis,这...
- **WSDL(Web Service Definition Language)**:在CXF中,你可以基于WSDL文件生成服务端代码,也可以先编写Java接口和服务实现,然后由CXF自动生成WSDL。WSDL定义了服务的接口、消息格式和绑定方式。 - **JAX-WS...
【标题】中的"Apache CXF Web Service Development"指的是使用Apache CXF框架进行Web服务开发的过程。这通常包括了创建服务接口、实现服务逻辑、配置服务端点、以及发布和调用服务等步骤。源码部分可能包含了示例...
你可以使用Maven的CXF插件或者命令行工具来执行此操作。 生成客户端代码后,你可以在Spring Boot客户端应用中引入这些生成的类,并使用它们来调用服务: ```java import org.apache.cxf.jaxws....
本实例将深入探讨如何使用CXF来开发Web Service。 首先,让我们了解CXF的核心功能。CXF支持两种主要的Web Service规范:SOAP(简单对象访问协议)和REST(代表性状态转移)。SOAP是基于WSDL(Web服务描述语言)的,...
对于RESTful服务,CXF支持JAX-RS(Java API for RESTful Web Services)标准,这是一个Java平台上的RESTful服务开发规范。JAX-RS 2.0是CXF 3.x系列支持的版本,它引入了许多新功能,如异步处理、统一异常处理和链接...
Spring MVC、CXF和Web Service是企业级Java应用开发中的三个关键组件,它们分别在不同的层面上服务于构建高效、可扩展的Web应用程序。 Spring MVC,全称Spring Model View Controller,是Spring框架的一部分,专为...
该例子详细展示了如何在Qt 4.5环境下利用C++和gSOAP库来访问由Java的CXF框架构建的Web服务。首先,我们要理解Qt是一个跨平台的应用程序开发框架,它提供了丰富的图形用户界面(GUI)功能。在这个例子中,Qt的多个...
本实例将深入探讨如何使用Spring、CXF和Mybatis这三大框架发布Web服务。Spring作为一个强大的应用框架,可以很好地整合其他组件,如CXF(用于创建Web服务)和Mybatis(持久层框架)。以下是对这些技术结合使用的详细...
即时发布是指在开发环境中直接将 Web Service 部署到服务器上的过程。即时发布使得开发者可以快速地部署和测试 Web Service。 2.2.2 定制发布(WSDD) 定制发布是指根据具体的需求和环境来定制 Web Service 的部署...
**实战Web Service —— 使用Apache CXF开发Web服务的教程** Apache CXF是一个开源的Java框架,用于构建和部署Web服务。本教程将带你深入理解如何利用CXF来开发高效、灵活的Web服务。我们将从基础概念开始,逐步...