使用cxf实现webService服务

本人第一次写文章,各种工具使用还不熟悉,在编写过程中也出现不少问题。这里,不会深入到为什么,只是将用代码加文字描述把一个webService的创建到使用以及与spring的整合叙述一下,也希望大神们多多指教。

1.首先看下webService的目录结构。

1)HelloWorldClient这个是用于前期测试使用。后面会从新创建一个项目作为客户端调用service。

2)pojo,实体类,这个相信有一点基础的人都知道是干嘛的,不再叙述。

3)webServiceApp用于前期未引入spring进行测试。

4)service层的接口与实现。

5)applicationContext.xml 未引入spring 前不使用。

2.下面开始具体描述。

1)新建java web工程 之后,下载cxf工具包。解压CXF之后,把cxf工具包lib下的jar包全部放到工程的lib下。可以去官方下载,下载地址:http://cxf.apache.org/download.html。

2)创建User.java

------------------------------------------------------------------------------------------

package com.jian.pojo;

import java.io.Serializable;

@SuppressWarnings("serial")

public class User implements Serializable {

private String id;

private String name;

private String age;

private String description;

//此处省略get,set ,toString方法

}

-------------------------------------------------------------------------------------------

3)创建接口HelloWorld.java

-------------------------------------------------------------------------------------------

package com.jian.service;

import java.util.List;

import javax.jws.WebParam;

import javax.jws.WebService;

import com.jian.pojo.User;

@WebService

public interface HelloWorld {

String sayHi(@WebParam(name="text")String text);

String sayHiToUser(User user);

String[] SayHiToUserList(List<User> userList);

}

-----------------------------------------------------------------------------------------

4)service接口实现 HelloWorldImpl.java

-----------------------------------------------------------------------------------------

package com.jian.service.impl;

import java.util.List;

import javax.jws.WebService;

import com.jian.pojo.User;

import com.jian.service.HelloWorld;

@WebService(endpointInterface = "com.jian.service.HelloWorld", serviceName = "helloWorld")   //这里注意com.jian.service.HelloWorld不少情况下容易弄错

public class HelloWorldImpl implements HelloWorld {

public String sayHi(String text) {

return "hello" + text;

}

public String sayHiToUser(User user) {

return "hello " + user.getName() + user.getDescription();

}

public String[] SayHiToUserList(List<User> userList) {

String[] result = new String[userList.size()];

int i = 0;

for (User u : userList) {

result[i] = "Hello " + u.getName();

i++;

}

return result;

}

}

---------------------------------------------------------------------------------------------------------------------------

5)接下来可以编写服务端启动代码了webServiceApp.java

---------------------------------------------------------------------------------------------------------------------------

package com.jian.server;

import javax.xml.ws.Endpoint;

import com.jian.service.impl.HelloWorldImpl;

public class webServiceApp {

public static void main(String[] args) {

System.out.println("web service start");

HelloWorldImpl implementor = new HelloWorldImpl();

String address = "http://localhost:8080/cxfWebService";

Endpoint.publish(address, implementor);

System.out.println("web service started");

}

}

-----------------------------------------------------------------------------------------------------

6)在编写客户端代码  HelloWorldClient .java

-----------------------------------------------------------------------------------------------------

package com.jian.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.jian.pojo.User;

import com.jian.service.HelloWorld;

public class HelloWorldClient {

public static void main(String[] args) {

//首先右键run as 运行com.jian.server.webServiceApp类,然后再运行这段客户端代码

JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean();

jwpfb.setServiceClass(HelloWorld.class);

jwpfb.setAddress("http://localhost:8080/cxfWebService");

HelloWorld hw = (HelloWorld) jwpfb.create();

User user = new User();

user.setName("马克思");

user.setDescription("怀念马克思");

System.out.println(hw.sayHiToUser(user));

}

}

--------------------------------------------------------------------------------------------------------

7)到这里,一个未整合spring的webService已经完成了。先启动webServiceApp,启动后可以看到如下图,说明启动正常

然后再启动 HelloWorldClient ,如果未报错,可以看到结果:

8)接下来,整合spring。

n1:配置web.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  3. <display-name>cxf</display-name>
  4. <welcome-file-list>
  5. <welcome-file>index.html</welcome-file>
  6. <welcome-file>index.htm</welcome-file>
  7. <welcome-file>index.jsp</welcome-file>
  8. <welcome-file>default.html</welcome-file>
  9. <welcome-file>default.htm</welcome-file>
  10. <welcome-file>default.jsp</welcome-file>
  11. </welcome-file-list>
  12. <context-param>
  13. <param-name>contextConfigLocation</param-name>
  14. <param-value>WEB-INF/classes/applicationContext.xml</param-value>
  15. </context-param>
  16. <listener>
  17. <listener-class>
  18. org.springframework.web.context.ContextLoaderListener
  19. </listener-class>
  20. </listener>
  21. <servlet>
  22. <servlet-name>CXFServlet</servlet-name>
  23. <servlet-class>
  24. org.apache.cxf.transport.servlet.CXFServlet
  25. </servlet-class>
  26. <load-on-startup>1</load-on-startup>
  27. </servlet>
  28. <servlet-mapping>
  29. <servlet-name>CXFServlet</servlet-name>
  30. <url-pattern>/*</url-pattern>
  31. </servlet-mapping>
  32. <!-- 字符过滤器 -->
  33. <filter>
  34. <filter-name>encoding</filter-name>
  35. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  36. <init-param>
  37. <param-name>encoding</param-name>
  38. <param-value>UTF-8</param-value>
  39. </init-param>
  40. <init-param>
  41. <param-name>forceEncoding</param-name>
  42. <param-value>true</param-value>
  43. </init-param>
  44. </filter>
  45. <filter-mapping>
  46. <filter-name>encoding</filter-name>
  47. <url-pattern>*.jsp</url-pattern>
  48. </filter-mapping>
  49. <filter-mapping>
  50. <filter-name>encoding</filter-name>
  51. <url-pattern>*.html</url-pattern>
  52. </filter-mapping>
  53. <filter-mapping>
  54. <filter-name>encoding</filter-name>
  55. <url-pattern>*.do</url-pattern>
  56. </filter-mapping>
  57. <filter-mapping>
  58. <filter-name>encoding</filter-name>
  59. <url-pattern>*.action</url-pattern>
  60. </filter-mapping>
  61. <filter-mapping>
  62. <filter-name>encoding</filter-name>
  63. <url-pattern>*.jsp</url-pattern>
  64. </filter-mapping>
  65. <filter-mapping>
  66. <filter-name>encoding</filter-name>
  67. <url-pattern>*.html</url-pattern>
  68. </filter-mapping>
  69. <filter-mapping>
  70. <filter-name>encoding</filter-name>
  71. <url-pattern>*.do</url-pattern>
  72. </filter-mapping>
  73. <filter-mapping>
  74. <filter-name>encoding</filter-name>
  75. <url-pattern>*.3g</url-pattern>
  76. </filter-mapping>
  77. </web-app>

n2: 配置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-extension-soap.xml" />

<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

-->

<jaxws:endpoint id="helloWorld" implementor="com.jian.service.impl.HelloWorldImpl" address="/helloWorld" />

<bean id="client" class="com.jian.service.HelloWorld" factory-bean="clientFactory" factory-method="create" />

<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">

<property name="serviceClass" value="com.jian.service.HelloWorld" />

<property name="address" value="http://localhost:8080/cxfWebService" />

</bean>

</beans>

-------------------------------------------------------------------------------------------------------------------

n3:修改测试  HelloWorldClient

-------------------------------------------------------------------------------------------------------------------

package com.jian.client;

import java.util.ArrayList;

import java.util.List;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.jian.pojo.User;

import com.jian.service.HelloWorld;

public class HelloWorldClient {

public static void main(String[] args) {

ApplicationContext factory = new ClassPathXmlApplicationContext("/applicationContext.xml");

HelloWorld client = (HelloWorld)factory.getBean("client");

User user1 = new User();

user1.setName("马克思");

user1.setDescription("怀念马克思");

User user2 = new User();

user2.setName("恩格斯");

user2.setDescription("怀念恩格斯");

List<User> userList= new ArrayList<User>();

userList.add(user1);

userList.add(user2);

System.out.println( client.sayHiToUser(user1));

-------------------------------------------------------------------------------------------------------------------------------------------

运行后发现报错。但是今天运行了下又没有报错,不知道问题出在哪里了。

如果报错的话可以执行一下操作。

个人寻找到的原因是该项目不是webservice的客户端要无法接下xml格式文件,这时,可以重新创建一个新的项目作为客户端。如下:

new-->other --webServiceClient

然后点击create a new web service project

创建完成后会出先如下图:

填写wsdl url

然后next。。。就OK了,客户端会获取到service端的相关内容。

在这里可以做测试了

测试小例子:test.java

-------------------------------------------------------------------------------------------------------------------------

import com.jian.service.SayHiToUser;

import com.jian.service.User;

public class test {

public static void main(String[] args) {

User u = new User();

u.setDescription("helloworld");

u.setName("马克思");

SayHiToUser he = new SayHiToUser();

he.setArg0(u);

System.out.println(he.getArg0().getName() + he.getArg0().getDescription())  ;

}

}

------------------------------------------------------------------------------------------------------------------------------------

输出结果

这样,一个cxf 与spring的服务器端与客户端的程序就结束了。

参考的文档:http://blog.csdn.net/hu_shengyang/article/details/38384597

时间: 2024-08-06 13:06:59

使用cxf实现webService服务的相关文章

构建基于CXF的WebService服务(3)-- 利用拦截器实现权限验证

CXF中的拦截器分为in拦截器和out拦截器,又有客户端拦截器和服务端拦截器. 拦截器使用流程:客户端(out)-> 服务端(in)->处理业务->服务端(out)->客户端(in),并不是每一步都需要拦截器.在这里我们用到的是客户端Out拦截器和服务端in拦截器.服务端in拦截器检查用户级权限,客户端out浏览器发送用户信息给服务端. 1.创建服务端验证 JaxWsServerFactoryBean或Endpoint都可以通过getInInterceptors方法,向WebSer

构建基于CXF的WebService服务(2)-- 利用CXF提供的wsdl2java工具创建客户端

1.环境配置 将CXF_HOME/bin加入到环境变量path中,如我的是D:\Java\Jar\apache-cxf-2.7.7\bin 打开cmd输入 wsdl2java -v 出现如下信息表示配置成功 2.wsdl2java的使用 (1)创建一个"Java Project"项目,暂且命名为client,将CXF用到的jar包引入进来,去掉jetty相关包,加入geronimo-jaxws_2.2_spec-1.1.jar包 (2)打开命令行工具,将目录切换到client项目中的s

cxf发布 webservice服务

导包 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar commons-collections-3.2.1.jar commons-lang-2.6.jar commons-logging-1.1.1.jar cxf-2.4.2.jar cxf-manifest.jar cxf-xjc-boolean-2.4.0.jar cxf-xjc-bug671-2.4.0.jar cxf-xjc-dv-2.4.0.jar cxf-xjc-ts-2.4.0.ja

构建基于CXF的WebService服务(1)--创建HelloWorld服务

1.Apache CXF简介 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和XFire 两大开源项目的精华,提供了对 JAX-WS全面的支持,并且提供了多种Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)

【转】构建基于CXF的WebService服务

构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和XFire 两大开源项目的精华,提供了对 JAX-WS全面的支持,并且提供了多种Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL

搭建web项目结合spring+cxf的webservice服务

服务端: 服务端和客户端都需要引入包 1 antlr-2.7.7.jar 2 aopalliance-1.0.jar 3 asm-3.3.jar 4 commons-collections-3.2.1.jar 5 commons-lang-2.6.jar 6 commons-logging-1.1.1.jar 7 cxf-2.4.2.jar 8 cxf-manifest.jar 9 cxf-xjc-boolean-2.4.0.jar 10 cxf-xjc-bug671-2.4.0.jar 11

spring + cxf 的webservice服务端和客户端功能

原文:spring + cxf 的webservice服务端和客户端功能 源代码下载地址:http://www.zuidaima.com/share/1550463730928640.htm spring + cxf 的webservice服务端和客户端功能. 提供页面调用ws和java代码调用两种方式. 引用jar包请下载:http://pan.baidu.com/s/1jGog2WI

使用CXF发布webservice服务及注意要点

一.概念 1.什么是webservice Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. 2.wsdl 网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言.为用户提供详细的接口说明书. 3.soap 简单对象访问协议是交换数据的一种协议规范,是一种轻量的.简单的.基于XML(标准通用标记语言下的一个子

CXF 3.* WebService服务端

CXF3.*发布WebService服务的方法 spring+cxf的搭建方式 一.在pom.xml添加cxf3.1.14的依赖,JDK1.7 <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.1.14</version> </dependency> &

SpringBoot | 第三十四章:CXF构建WebService服务

前言 上一章节,讲解了如何使用Spring-WS构建WebService服务.其实,创建WebService的方式有很多的,今天来看看如何使用apache cxf来构建及调用WebService服务. 前言 一点知识 何为Apache-CXF 关于JAX-WS规范 常用注解介绍 SpringBoot整合CXF实例 服务端构建 客户端调用 异常捕获 自定义拦截器 服务端拦截器 客户端拦截器 参考资料 总结 最后 老生常谈 一点知识 何为Apache-CXF Apache CXF是一个开源的Serv