JAVA SPRING CXF集成创建WebService服务

来源:互联网 发布:算法设计与分析的认识 编辑:程序博客网 时间:2024/05/22 03:33

因之前的项目使用了mule,mule使用了CXF的架构,因我们会对wsdl进行解析后,组装引擎(C++)需要的参数,我以前用AXIS开发的webservice服务解析的wsdl的出参名称与CXF的不一样,导致重新改造,在改告中发现问题。后面会提到。


1、CXF需要的包这里我就不一一说了。大家去下载就好了。

2、SpringMVC的配置,创建一个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:p="http://www.springframework.org/schema/p"
    xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:cxf="http://cxf.apache.org/core"
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans-2.5.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" />
    //这个是你写的接口实现类
    <bean id="requestImpl" class="com.sunsharing.cobweb.service.impl.RequestImpl" />
    //第一种方法
    <!-- <jaxws:server id="request" serviceClass="com.sunsharing.cobweb.service.Request"
        address="/request">
        <jaxws:serviceBean>
            要暴露的 bean 的引用
            <ref bean="requestImpl" />
        </jaxws:serviceBean>
    </jaxws:server> -->
    
    //第二种方法
    <jaxws:endpoint
          id="request"
          implementor="#requestImpl"
          address="/request" />
</beans> 

4、接口与实现类的配置




3、WEB.XML的配置

<!-- ======================CXF Web Service配置======================== -->
     <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>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>/*</url-pattern>
      </servlet-mapping>

4、这样就可以启动,访问你的wsdl大功告成。但是请大家看看下面两个wsdl有什么区别




这时你会发现两个elementFormDefault的值不一样。这个问题大家想了解请查询WSDL的官网,这里我简单的说一下,这个主要是说参数的类型是否存在命名空间下。我在度娘中找了很久没有找到。最后找到了文章,说要加个类,类如下

这个类大家是不是觉的很奇怪呢,在java中是没办法创建这个类的,我当时也想好很久,后是创建一个文件后缀为java就可以了。这个很有意思吧。这个类加上后就会就化elementFormDefault="qualified",文章我也找不到,下次找到再分享给大家!


0 0
原创粉丝点击