因之前的项目使用了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",文章我也找不到,下次找到再分享给大家!