设为首页 收藏本站
查看: 1907|回复: 0

[经验分享] Web Service:Apache CXF简单例子

[复制链接]

尚未签到

发表于 2017-1-5 10:49:54 | 显示全部楼层 |阅读模式
  service框架用apache CXF,服务器tomcat ,还有spring框架
  OpenSource中关于CXF的简介:Apache CXF一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息格式(或binding)和网络协议(transports)包括SOAP、XML(通过HTTP或JMS)进行访问。CXF同样支持多种model 如:JAX-WS,JBI,SCA和CORBA service。CXF设计成可灵活部署到各种容器中包括Spring-based,JBI,SCA, Servlet和J2EE容器。
  用CXF构建webservice程序的大致流程如下:
  1 配置web.xml文件,加载CXF
  2 编写java接口,和接口的实现
  3 在spring的applicationContext.xml中配置java文件
  4 创建beans.xml文件,里面配置接口的实现类
  5 运行tomca服务器即可生成wsdl文件
  6 编写测试代码:编写java测试文件和client-beans.xml文件
  7编写运行客户端文件所需的服务器,可以单独编写,也可以在随tomcat启动
  示例代码。首先下载cxf,然后解压,将lib下的所有jar包拷到工程下面
  一 最简单的helloword
  1  web.xml

DSC0000.gif <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd"
>


<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>

  2  接口HelloWord.java和接口的实现HelloWordImpl.java

package com.demo;

import javax.jws.WebService;

DSC0001.gif DSC0002.gif
/** *//**
DSC0003.gif  * service interface
 * 
 * 
@author
 * 
DSC0004.gif  
*/
@WebService
public interface HelloWord ...{
    String sayHi(String text);
}



package com.demo;

import javax.jws.WebService;

/** *//**
 * implementation
 * 
 * 
@author 
 * 
 
*/
@WebService
public class HelloWordImpl implements HelloWord ...{

DSC0005.gif DSC0006.gif     
public String sayHi(String text) ...{
        
return "Hi" + text;
DSC0007.gif     }

}


  3 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="helloWord"
        implementor
="com.demo.HelloWordImpl" address="/HelloWord" />

</beans>

  4  启动tomcat服务器,在浏览器里面输入http://localhost:8888/helloword后页面上会出现
  {http://demo.com/}HelloWordImplPort ,点击会看到生成的wsdl文件http://localhost:8888/helloword/HelloWord?wsdl
  5 客户端Client.java和client-beans.xml

package com.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public final class Client ...{

    
private Client() ...{

    }


    
public static void main(String args[]) throws Exception ...{
        
// START SNIPPET: client
        ApplicationContext  context = new ClassPathXmlApplicationContext(
                
new String[] ..."com/demo/client-beans.xml" });

        HelloWord client 
= (HelloWord) context.getBean("client");

        String response 
= client.sayHi("+what????");
        System.out.println(
"Response: " + response);
        System.exit(
0);
        
// END SNIPPET: client
    }
}


<?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-2.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schema/jaxws.xsd">

    
<bean id="client" class="com.demo.HelloWord"
        factory
-bean="clientFactory" factory-method="create" />

    
<bean id="clientFactory"
        
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
        
<property name="serviceClass" value="com.demo.HelloWord" />
        
<property name="address"
            value
="http://localhost:9002/HelloWord" />
    
</bean>

</beans>

  6 客户端运行时所需的服务器Server.java

package com.demo;

import org.mortbay.jetty.Connector;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.handler.DefaultHandler;
import org.mortbay.jetty.handler.HandlerCollection;
import org.mortbay.jetty.nio.SelectChannelConnector;
import org.mortbay.jetty.webapp.WebAppContext;

public class Server ...{

    
protected Server() throws Exception ...{
        System.out.println(
"Starting Server");

        org.mortbay.jetty.Server server 
= new org.mortbay.jetty.Server();

        SelectChannelConnector connector 
= new SelectChannelConnector();
        connector.setPort(
9002);
        server.setConnectors(
new Connector[] ...{connector});

        WebAppContext webappcontext 
= new WebAppContext();
        webappcontext.setContextPath(
"/");

        webappcontext.setWar(
"WebRoot");

        HandlerCollection handlers 
= new HandlerCollection();
        handlers.setHandlers(
new Handler[] ...{webappcontext, new DefaultHandler()});

        server.setHandler(handlers);
        server.start();
        System.out.println(
"Server ready...");
        server.join();
    }


    
public static void main(String args[]) throws Exception ...{
        
new Server();
    }


}


  7 运行客户端Client.java的顺序,先启动tomcat,然后运行Server.java,最后运行Client.java
  二 不单独编写Server.java文件,让其和tomcat一同启动.需要改动的地方
  1 web.xml

<context-param>
        
<param-name>contextConfigLocation</param-name>
         
<param-value

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324189-1-1.html 上篇帖子: Django Apache Windows安装配置文档 下篇帖子: Apache URL重写实现伪静态
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表