`

CXF3.0.2+Spring3.2.14 Web Service入门实例二

 
阅读更多

离上次学习CXF的时间比较长了,最近一直在忙别的项目,没有时间再继续学习CXF,也就没有再写博客了!马上就要2016年了,今天有点时间,再写一篇,把CXF3.0.7与spring3.2.14整合写出来。本来应该写apache-cxf-3.1.4与spring3整合的,把apache-cxf-3.1.4解压出来以后,发现lib文件夹内是spring4,怕与项目引起冲突,故又换成了apache-cxf-3.0.7,特此说明!还是重头做起,看demo,搜技术博客!可能有原创的,也可能是有用Maven的,也可能是开发环境不一样,也有好多是转载的,结果我了了个去,死活出不来,各种大坑,小坑,连环坑!反正就是不出来,没办法一点一点来吧!介绍一下开发环境,jdk1.6.0_43+Tomcat6.0.29+ MyEclipse10.5,没有使用Maven进行管理!为了不出现一些不必要的错误,将所有的jar都导入了,当然实际开发过程中不会这样做的,下面也会有介绍的。一、新建web工程,注意红色的选择,在下面的工程实际上是mywbs3,mywbs9只是为演示用!

 

二、导入jar包

三、新建HelloWorld.java

package com.firstws.test;

 

import javax.jws.WebService;

 

@WebService

public interface HelloWorld {

public String sayHi(String name);

}

四、新建实现类HelloWorldImpl.java

package com.firstws.test;

 

import javax.jws.WebService;

 

@WebService(endpointInterface ="com.firstws.test.HelloWorld")

public class HelloWorldImpl implements HelloWorld {

 

@Override

public String sayHi(String text) {

System.out.println("sayHi called");

return"Hello " + text;

}

 

}

 

 

五、在Web.xml中添加

<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>CXFService</servlet-name>

<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>CXFService</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

六、在src目录下新建applicationContext.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:jaxws="http://cxf.apache.org/jaxws"

xsi:schemaLocation="

http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsd

http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.2.xsd

http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-3.2.xsd

http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.2.xsd

http://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd">

 

<importresource="classpath:META-INF/cxf/cxf.xml"/>

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

 

<beanid="hello"class="com.firstws.test.HelloWorldImpl"/>

<jaxws:endpointid="helloWorld"implementor="#hello"address="/HelloWorld"/>

 

<beanid="myhw"class="com.firstws.test.HelloWorld"factory-bean="clientFactory"factory-method="create"/>

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

<propertyname="serviceClass"value="com.firstws.test.HelloWorld"/>

<propertyname="address"value="http://localhost:8080/mywbs3/HelloWorld"/>

</bean>

 

</beans>

 

七、在浏览器中输入http://localhost:8080/mywbs3,不出现错误的话将会显示:


 

八、如果将web.xml中紫色的部分改为<url-pattern>/aaa/*</url-pattern>,那么在浏览器则要输入http://localhost:8080/mywbs3/aaa

九、注意applicationContext.xml中红色部分,在浏览器中输入

http://localhost:8080/mywbs3/HelloWorld?wsdl,正确的话将会出现


 

如果将红色的HelloWorld改为HelloWorld1,则浏览器要改为相应的

http://localhost:8080/mywbs3/HelloWorld1?wsdl

十、编写调用类,网上有好多种方法,先写三种吧,新建Client.java没有使用spring.(第一种)

package com.firstws.client;

 

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

 

import com.firstws.test.HelloWorld;

 

public class Client{

/**

private static final QName SERVICE_NAME = newQName("http://test.firstws.com/", "HelloWorld");

private static final QName PORT_NAME = newQName("http://test.firstws.com/", "HelloWorldPort");

*/

 

public Client() {

 

}

 

 

public static void main(String[] args)throws Exception {

/**

Service service = Service.create(SERVICE_NAME);

String endpointAddress ="http://localhost:8080/mywbs3";

service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING,endpointAddress);

*/

 

/**没有用spring

URL url = newURL("http://localhost:8080/mywbs3?wsdl");

Service service =Service.create(url,SERVICE_NAME);

 

HelloWorld hw = service.getPort(HelloWorld.class);

System.out.println(hw.sayHi("张述飞"));*/

 

JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean();

svr.setServiceClass(HelloWorld.class);

svr.setAddress("http://localhost:8080/mywbs3/HelloWorld");

HelloWorld hw = svr.create(HelloWorld.class);

String result = hw.sayHi("abc");

System.out.println("haaha=="+result);

}

 

 

 

 

}

十一、 点击运行类Client,没有错误的话呢,控制台显示

haaha==Helloabc

 

在 tomcat控制台有可能报错,有时不报,图片没有了!

sayHi called

DefaultValidationEventHandler:[ERROR]: prefix dpp is not bound to a namespace

Location:node: [wsd:Types: null]

javax.xml.bind.UnmarshalException: prefix dpp is not bound to a namespace

- with linked exception:

[java.lang.IllegalArgumentException: prefix dpp is not bound to a namespace]

atcom.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:740)

~~~~~~~~~~~

此处好长,百度了一下说什么的都有,我也没有找到具体的解决方法,好像说是jar包引用冲突了,最后,我重新根据需要导入了jar包,具体在后面(十五)有介绍。

 

 

 

十二、 使用spring,写一个类ClientWithSpring.java(第二种)

packagecom.firstws.client;

 

importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;

 

importcom.firstws.test.HelloWorld;

 

publicclass ClientWithSpring {

 

 

public static void main(String[] args) {

System.out.println("aaaaa");

ApplicationContext context = newClassPathXmlApplicationContext("applicationContext.xml");

 

HelloWorldhw = context.getBean("myhw", HelloWorld.class);

System.out.println(hw.sayHi("张述飞 "));

 

}

 

}

十三、 点击运行类ClientWithSpring,控制台报错

aaaaa

Exception in thread"main" java.lang.NoSuchMethodError:org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V

atorg.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159)

atorg.springframework.context.support.AbstractApplicationContext.prepareRefresh(AbstractApplicationContext.java:512)

atorg.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:448)

atorg.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)

atorg.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)

atcom.firstws.client.ClientWithSpring.main(ClientWithSpring.java:13)

问度娘,各种解答,没办法一个个试吧,最后找到一个比较靠谱的,说是slf4j包冲突。删除jcl-over-slf4j-1.7.9.jar和slf4j-jdk14-1.7.9.jar,又报错了,aaaaa

Exception in thread"main" java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory

atorg.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:164)

atorg.springframework.context.support.AbstractApplicationContext.<init>(AbstractApplicationContext.java:228)...

这个比较明显,加个commons-logging-1.1.3.jar,OK了出结果了

aaaaa

Hello 张述飞

十四、 有的博客写的用wsdl2java自动生成类(第三种,有兴趣的朋友可以试试)

这里大体讲一下,设置环境变量

 

1、CXF_HOME= E:\soap\CXF\apache-cxf-3.0.7

2、在path后面加上 %CXF_HOME%/bin;

3、也要注意JAVA_HOME的配置,我装了三个版本的JDK,一开始指向了jdk1.5结果死活不编译,还报错,将JAVA_HOME的值改为C:\Program Files\Java\jdk1.6.0_43,就正常了。apache-cxf-3.0.7最小要对应JDK1.6的。

 

在dos窗口中输入,对了还要告诉一下小白怎么样打开dos窗口,点击开始-运行-输入cmd,就可以打开了,再不会拖出去,打死100遍,呵呵!

C:\Documentsand Settings\sjb_zhangshufei>wsdl2java -v

wsdl2java- Apache CXF 3.0.7

C:\Documentsand Settings\sjb_zhangshufei>wsdl2java -d E:\MyEclipse10Workspaces\

mywbs3\src -clienthttp://localhost:8080/mywbs3/HelloWorld?wsdl

 

稍等一会儿,在myeclipse中,点击工程,右键刷新,当当当,奇迹出现了,


,多了好多东西具体怎么用就不说了,自己百度研究吧。

 

 

十五、 这个工程最简化的jar包项目,也可能多一个少一个,没有都导入!


 

十六、 一个小异常

这里还有个小插曲: jaxb-api 的jar包,CXF3.0依赖的是jaxb-api-2.2.11.jar,如果是jdk1.6.20以下自带的版本比较低,在运行的时候报异常,不能正常加载class,这里两个解决方案,如果不升级JDK那么将:CXF3.0.2版本中自带的endorsed, integration考到使用的JDK或者jre的lib目录下:

例如我的目录是: C:\ProgramFiles\Java\jdk1.6.0_11\jre\lib

 

 

第二方法,那么就是升级JDK了,这没有什么可说。

十七、 在applicationContext.xml中有的写上导入

<importresource="classpath:META-INF/cxf/cxf.xml"/>

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

十八、 我们从哪里找这两个文件呢,不过好像不处理也没报错,解压cxf-core-3.0.7.jar,找到E:\soap\CXF\cxf-core-3.0.7\META-INF\cxf,将整个cxf包复制到工程中就行了。还有一些别的错误没有一一写出来,学东西吗,就要一点一点的积累!工程我也上传了,有需要的下!

 

 

下载文件

http://download.csdn.net/detail/zhangshufei8001/9384408

 

 

分享到:
评论

相关推荐

    CXF3.0.2+Spring3.2.14 WebService入门实例四

    【CXF3.0.2+Spring3.2.14 WebService入门实例四】的知识点解析 在本文中,我们将深入探讨如何使用Apache CXF 3.0.2版本和Spring 3.2.14框架来创建一个基于WebService的文件传输应用。Apache CXF是一个流行的开源...

    简单的webservice+Cxf+Spring数据对接实例以及jar.rar

    简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...

    CXF2.1.3+spring3.0+struts2.3.4

    【标签】"CXF+spring WebService CXF"强调了这些组件的集成,特别是CXF作为Web服务的主要提供者,以及与Spring的紧密配合。CXF不仅可以用作服务提供者,还可以作为客户端来消费其他服务,这在Spring的管理下变得更加...

    CXF3.0+Spring3.2 WSSecurity

    描述中提到的"利用CXF3.0.2+Spring3.2.14发布WSSecurity"意味着该压缩包可能包含了一个演示或者教程,展示了如何配置和使用这两个版本的软件来启用Web服务的安全特性。"需要源代码可以下载"则暗示这个压缩包里可能...

    CXF3.0+Spring3.2 传输文件

    本篇文章将深入探讨如何使用CXF3.0.2和Spring3.2.14这两个强大的开源框架来实现文件的传输。CXF是一个流行的Java Web服务框架,而Spring则为应用程序开发提供了全面的框架支持。 首先,让我们了解CXF3.0.2在文件...

    CXF2+Spring2.5开发WebService实例

    在本文中,我们将深入探讨如何使用Apache CXF 2与Spring 2.5框架来开发Web服务实例。Apache CXF是一个流行的开源项目,它提供了一种简单且强大的方式来实现和消费SOAP和RESTful Web服务。Spring框架则以其模块化、...

    cxf2.7+spring4

    总的来说,"cxf2.7+spring4"整合涉及到的主要知识点包括:Apache CXF的Web服务创建和发布、Spring的依赖注入、Spring与CXF的协同配置、以及注解驱动的开发模式。这样的整合有助于简化Web服务的开发和管理,使得在...

    CXF3.0+Spring3.2 RESTFul服务(下)

    搭建CXF+Spring环境 首先,我们需要在项目中添加CXF和Spring的相关依赖。在Maven项目中,可以在pom.xml文件中加入以下依赖: ```xml &lt;groupId&gt;org.apache.cxf &lt;artifactId&gt;cxf-rt-frontend-jaxrs &lt;version&gt;...

    cxf+spring+client

    总结来说,"cxf+spring+client"涉及的是使用CXF和Spring框架创建Web服务客户端的实践。结合Spring MVC,我们可以构建一个完整的端到端解决方案,从用户界面接收请求,通过CXF客户端调用远程服务,再到返回结果给用户...

    cxf+spring+web

    【标题】"cxf+spring+web"是一个基于Apache CXF和Spring框架构建的Web服务实现,用于创建和消费SOAP或RESTful服务。这个项目是一个基础的 HelloWorld 示例,展示了如何在Tomcat 6.0应用服务器上运行一个CXF Web服务...

    Apache CXF2+Spring2.5轻松实现WebService

    总结来说,Apache CXF 2与Spring 2.5的集成使得Web服务的开发变得更加便捷和灵活。通过Spring的配置,我们可以方便地管理服务的生命周期,同时利用CXF的强大功能来处理各种Web服务协议。这不仅提高了开发效率,也...

    CXF3.0+Spring3.2 HelloWorld实例

    在本教程中,我们将深入探讨如何使用Apache CXF 3.0与Spring 3.2框架构建一个简单的"Hello World" Web服务实例。这个过程涵盖了关键的技术组件、配置步骤以及可能遇到的问题解决策略。 首先,Apache CXF是一个开源...

    CXF2.6.4+Spring3.1.1+Jetty7.5.4

    标题 "CXF2.6.4+Spring3.1.1+Jetty7.5.4" 提到的是一个基于开源技术栈构建的Web服务解决方案。这个组合涉及到三个关键组件:Apache CXF 2.6.4、Spring Framework 3.1.1 和 Jetty 7.5.4。接下来,我们将深入探讨这三...

    cxfserver+spring+mybatis

    【标题】"cxfserver+spring+mybatis" 指的是一个基于Apache CXF服务端、Spring框架和MyBatis持久层技术构建的应用。这个组合常见于开发RESTful API或者SOAP Web服务,同时利用Spring进行依赖注入和管理,MyBatis作为...

    CXF Restful + Spring3 + Mybatis 后台开发环境搭建

    CXF Restful + Spring3 + Mybatis 后台开发环境搭建

    cxf+spring实现webservice

    以上是CXF+Spring实现Web Service的基本流程和关键知识点。实际应用中,还需要根据具体的需求和环境进行适当的调整和扩展。例如,如果涉及到大型分布式系统,可能还需要考虑服务治理、负载均衡等问题。通过熟练掌握...

    CXF3.1.16 +Spring4 +MyBatis + Maven自定义拦截器 WebService实例源码下载

    "CXF3.1.16 +Spring4 +MyBatis + Maven自定义拦截器 WebService实例源码下载" 这个标题揭示了该项目的核心技术栈,包括: 1. CXF 3.1.16:这是一个开源的服务框架,用于构建和开发服务,支持SOAP和RESTful Web服务...

    CXF3.0+Spring3.2 RESTFul服务

    本教程将重点介绍如何使用CXF 3.0.2版本与Spring 3.2.14版本结合,发布RESTFul服务,并提供源代码供下载,以帮助开发者更好地理解和实践这一技术。 首先,了解RESTFul服务的核心概念:资源、URI(统一资源标识符)...

    CXF+Spring+自定义拦截器 WebService实例源码下载

    这里少了一个类,是根据实体类生成xml的文件下载地址为:http://download.csdn.net/detail/qq_14996421/9495688

    cxf3 + spring4

    在IT行业中,CXF和Spring框架的整合是创建和消费Web服务的一种常见方式。本篇文章将深入探讨如何在CXF3和Spring4的环境中,通过配置文件发布Web服务。 首先,CXF(CXF - The Complete JAXWS/JAXRS Stack)是一个...

Global site tag (gtag.js) - Google Analytics