- 浏览: 50893 次
- 性别:
- 来自: 武汉
最新评论
-
zhangdong1986:
great article, the content cove ...
利用eclipse编写高质量的java代码
Setting up your build
Open up your favorite IDE and create a new project. The first thing we need to do is add the necessary CXF dependencies to the project. You can find these dependencies in the CXF distribution in the lib directory.
commons-logging-1.1.jar geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar) geronimo-annotation_1.0_spec-1.1.jar (JSR 250) geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar) geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun's Servlet jar) geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181) jaxb-api-2.0.jar jaxb-impl-2.0.5.jar jaxws-api-2.0.jar neethi-2.0.jar saaj-api-1.3.jar saaj-impl-1.3.jar stax-api-1.0.1.jar wsdl4j-1.6.1.jar wstx-asl-3.2.1.jar XmlSchema-1.2.jar xml-resolver-1.2.jar
The Spring jars:
aopalliance-1.0.jar spring-core-2.0.8.jar spring-beans-2.0.8.jar spring-context-2.0.8.jar spring-web-2.0.8.jar
And the CXF jar:
cxf-2.1.jar
Writing your Service
First we'll write our service interface. It will have one operation called "sayHello" which says "Hello" to whoever submits their name.
package demo.spring; import javax.jws.WebService; @WebService public interface HelloWorld { String sayHi(String text); }
Our implementation will then look like this:
package demo.spring; import javax.jws.WebService; @WebService(endpointInterface = "demo.spring.HelloWorld") public class HelloWorldImpl implements HelloWorld { public String sayHi(String text) { System.out.println("sayHi called"); return "Hello " + text; } }
The@WebServiceannotation on the implementation class lets CXF know which interface to use when creating WSDL. In this case its simply our HelloWorld interface.
Declaring your server beans
CXF contains support for "nice XML" within Spring 2.0. For the JAX-WS side of things, we have a <jaxws:endpoint> bean which sets up a server side endpoint.
Lets create a "beans.xml" file in our WEB-INF directory which declares an endpoint bean:
<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="demo.spring.HelloWorldImpl" address="/HelloWorld" /> </beans>
If you want to reference a spring managed-bean, you can write like this:
<bean id="hello" class="demo.spring.HelloWorldImpl" /> <jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" />
The bean uses the following properties:
- idspecifies the id of the bean in the Spring context.
- implementorspecifies the implementation class.
- addressspecifies the location the service will be hosted. This should just be a related path. This is because CXF can't know the war name and the servlet container's listening port, CXF will update the endpoint address with the request url at the runtime.
To provide a bean name instead of a classname as an implementor, simply supply the bean-name prepended with "#", e.g. implementor="#myBean".
You can also do more sophisticated things with the<jaxws:endpoint>element like add nested tags to attach JAX-WS Handlers or CXF Interceptors to the service. For more on this seeJAX-WS Configuration.
Setting up the Servlet
We'll need to add two things to our web.xml file:
- the SpringContextLoaderLister. This starts Spring and loads our beans.xml file. We can specify where our file is via acontext-paramelement.
- the CXF Servlet
<web-app> <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> <display-name>CXF Servlet</display-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-app>
It is important to note that the address that you chose for your endpoint bean must be one your servlet listens on. For instance, if my Servlet was register for "/some-services/*" but my address was "/more-services/HelloWorld", there is no way CXF could receive a request.
Create a Client (Easy Way)
Just like the<jaxws:endpoint>used on the server side, there is a<jaxws:client>that can be used on the client side. You'll give it a bean name, the service interface, and the service URL, and it will create a bean with the specified name, implementing the service interface, and invoking the remote SOAP service under the covers:
<?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"> <jaxws:client id="helloClient" serviceClass="demo.spring.HelloWorld" address="http://localhost:9002/HelloWorld" /> </beans>
You can now inject that "helloClient" bean into any other Spring bean, or look it up from the Spring application context manually with code like this:
ApplicationContext context = ...; // your Spring ApplicationContext HellWorld client = (HelloWorld) context.getBean("helloClient");
You can also do more sophisticated things with the<jaxws:client>element like add nested tags to attach JAX-WS Handlers or CXF Interceptors to the client. For more on this seeJAX-WS Configuration.
Create a Client (More Manual Way)
CXF includes a JaxWsProxyFactory bean which create a client for you from your service interface. You simply need to tell it what your service class is (the HelloWorld interface in this case) and the URL of your service. You can then create a client bean via the JaxWsProxyFactory bean by calling it's create() method.
Here's an example:
<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/schema/jaxws.xsd"> <bean id="client" class="demo.spring.HelloWorld" factory-bean="clientFactory" factory-method="create"/> <bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="demo.spring.HelloWorld"/> <property name="address" value="http://localhost:9002/HelloWorld"/> </bean> </beans>
If you were going to access your client you could now simply pull it out of the Spring context (or better yet, inject it into your application using Spring!):
ApplicationContext context = ...; // your Spring ApplicationContext HellWorld client = (HelloWorld) context.getBean("client");
Some usage scenarios will require more extensive configuration (and this is not the case with the<jaxws:client>syntax described above). For more information, seeJAX-WS Configuration. |
发表评论
-
JVM最大分配内存
2011-08-27 16:28 911分析了当前比较流行的 ... -
apache+tomcat 负载均衡
2011-07-15 17:10 769其实无论是分布式,数据缓存,还是负载均衡,无非就是改善网站的性 ... -
关于java文件编译后,同一个文件出现"$"的class
2011-06-08 15:00 1263在java中,如果在一个类中定义了内部类,刚会生成: supe ... -
jdbc操作测试类
2011-05-31 20:05 728package com.fs.test; import ... -
Spring中JdbcTemplate类query的使用例子
2011-05-12 21:01 1119/** 使用三种Callback接口 ... -
Properties操作例子类
2011-04-19 23:48 776import java.io.FileInputStream; ... -
Java中解决所有路径问题
2011-03-19 02:30 514Java中使用的路径,分为两种:绝对路径和相对路径。归 ... -
利用eclipse编写高质量的java代码
2011-03-19 01:51 808敏捷开发的理念已经 ... -
spring下连接池比较
2010-01-18 11:11 839最近遇到了一个奇怪的问题,使用了Apache的连接池,当数据库 ... -
java遍历文件夹
2010-07-16 17:05 604A.不使用递归:import java.io.File;imp ... -
jvm学习
2010-07-16 17:07 621由于最近时间充足, ... -
servlet页面跳转
2010-07-19 11:45 588一直对Servlet的几种页面 ... -
tomcat内存溢出
2010-08-05 15:17 666这几天,在服务器上增加了一个host,但自从增加了这个host ... -
tomcat定时重启
2010-08-20 09:06 1083保存以下脚本成tomcat.bat,计划任务指定每天4点执行该 ... -
struts2+json+jquery 级联查询
2010-12-09 15:47 1301js代码 $(document).ready( funct ...
相关推荐
CXF_In_eclipse.rar,cxf初学者教程
注意jar的兼容性,有可能会出现jar包冲突,慎重!慎重!慎重!!!
cxf-2.1.jar cxf-2.1.jar cxf-2.1.jar cxf-2.1.jar
cxf生成客户端 服务端代码
cxf服务端wsdl发布帮助.docxcxf服务端wsdl发布帮助.docx
CXF建立webservice服务端和客户端,发送格式为XML,服务端进行XML解析,并将收到请求报文解析入库,数据库为mysql。
cxf服务端开发jar包
具体再解释一下,服务端需要 接口类,实现类,cxf 服务端xml,和一个pojo 客户端也需要接口类文件和pojo,和cxf客户端xml 但是没有接口的实现类,就是为了去服务端来调用的。 具体有不懂可以问我 给我发消息, 劳烦...
CXF开发webservice服务端,希望对大家有所帮助
cxf开发webservice简单实例:包括服务端与客户端并所有需要的jar,不要分啦。
cxf客户端调用axis服务端流程
Webservice接口,Cxf写的服务端, 是web项目,必须tomcat部署. 开发环境:32位jdk1.7+Cxf3.1.4+tomcat7, 开发工具:myeclipse8.5. 浏览器、客户端均可访问,测试通过。
整理了一上午,测试通过,cxf服务端和客户端所需jar包
Apache-cxf-2.1
很简洁的一个Cxf+webservice(客服端和服务端)接口
CXF 一个完整的webService(整合客户端和服务端),自己开发,自己测试,完全有效,整合集成了客户端和服务端双向的工能。
NULL 博文链接:https://liuwuhen.iteye.com/blog/1666189
简单的webservice服务应用,以及配置文档说明,直接部署到服务器上就可以运行了
JAVA 用 Apache CXF 调用 .NET 服务端 WebService 代码 整个JAVA工程的压缩,导入到myeclipse可直接运行,如果只想浏览下,请访问:http://blog.csdn.net/wqmain/article/details/8216331
cxf 完整的服务端客户端