CXF3.1.8開發與spring集成的webService

CXF開發webService,和spring集成

工具:eclipse+tomcat8+jdk8

所需jar包

commons-codec-1.10.jar
commons-collections-3.2.2.jar
commons-lang-2.6.jar
commons-logging-1.1.jar
commons-pool-1.5.4.jar
cxf-core-3.1.8.jar
cxf-rt-bindings-soap-3.1.8.jar
cxf-rt-databinding-jaxb-3.1.8.jar
cxf-rt-frontend-jaxws-3.1.8.jar
cxf-rt-frontend-simple-3.1.8.jar
cxf-rt-transports-http-3.1.8.jar
cxf-rt-transports-udp-3.1.8.jar
cxf-rt-ws-addr-3.1.8.jar
cxf-rt-ws-policy-3.1.8.jar
cxf-rt-wsdl-3.1.8.jar
neethi-3.0.3.jar
slf4j-api-1.7.21.jar
spring-aop-4.1.9.RELEASE.jar
spring-beans-4.1.9.RELEASE.jar
spring-context-4.1.9.RELEASE.jar
spring-core-4.1.9.RELEASE.jar
spring-expression-4.1.9.RELEASE.jar
spring-web-4.1.9.RELEASE.jar
stax2-api-3.1.4.jar
woodstox-core-asl-4.4.1.jar
wsdl4j-1.6.3.jar
xmlschema-core-2.2.1.jar

CXF所需jar包,點擊下載

這裏寫圖片描述

這是我精選過的,並且經過demo測試的,從Apache官網下的cxf3.1.8中有一百多個,很多都是用不上的,雖然有文檔說明哪些是必須的,但是對於非大牛,看英文文檔也算很喫力的,所以我就貼出來大家共同學習

目錄結構

這裏寫圖片描述

ps.爲了方便,就不連數據庫了

配置文件

1.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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd 
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd 
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://cxf.apache.org/jaxws
        http://cxf.apache.org/schemas/jaxws.xsd">

       <import resource="classpath:META-INF/cxf/cxf.xml" />
       <jaxws:endpoint id="userService"
            implementor="com.XXXXX.webservice.impl.UserWSImpl"
            address="/userWS">
       </jaxws:endpoint>

</beans>

2.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">


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


    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <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>/webservice/*</url-pattern>
    </servlet-mapping>


    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

</web-app>

異常處理

1

嚴重: Context initialization failed
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 23 in XML document from class path resource [applicationContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 23; columnNumber: 22; 元素 "jaxws:endpoint" 的前綴 "jaxws" 未綁定。
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:399)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)

這是因爲applicationContext.xml中沒有引入cxf的緣故,可以直接複製我的xml文件頭
這裏寫圖片描述

2

嚴重: Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/wsdl/extensions/ElementExtensible
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1572)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)

缺少jar包wsdl4j-1.6.3.jar

參考我列舉出來的jar包

部分代碼

@WebService
public interface UserWS {
    public User getUserById(long id);
}
@WebService
public class UserWSImpl implements UserWS{

    @Override
    public User getUserById(long id) {
        User user = new User();
        user.setAge(18);
        user.setName("張三");
        user.setId(1);
        return user;
    }

}

發佈測試

啓動tomcat

瀏覽器輸入http://localhost:8080/helloServer/webservice

這裏寫圖片描述

輸入http://localhost:8080/helloServer/webservice/userWS?wsdl
這裏寫圖片描述

這樣顯示的話就是發佈成功了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章