CXF Webservice nonSpring

原创 2016年05月31日 13:15:10

不使用Spring的情况下创建CXF Webservice。

需要通过继承CXFNonSpringServlet来发布service。
  • 需要的jar
    asm-3.3.1.jar
    asm-attrs-2.2.3.jar
    cxf-api-2.7.8.jar
    cxf-rt-bindings-soap-2.7.8.jar
    cxf-rt-bindings-xml-2.7.8.jar
    cxf-rt-core-2.7.8.jar
    cxf-rt-databinding-jaxb-2.7.8.jar
    cxf-rt-frontend-jaxws-2.7.8.jar
    cxf-rt-frontend-simple-2.7.8.jar
    cxf-rt-transports-http-2.7.8.jar
    cxf-rt-ws-addr-2.7.8.jar
    cxf-rt-ws-policy-2.7.8.jar
    cxf-rt-ws-security-2.7.8.jar
    neethi-3.0.2.jar
    wsdl4j-1.6.3.jar
    wss4j-1.6.13.jar
    xml-apis-1.0.b2.jar
    xml-resolver-1.2.jar
    xmlbeans-2.6.0.jar
    xmlParserAPIs-2.0.2.jar
    xmlpull-1.1.3.1.jar
    xmlschema-core-2.0.3.jar
    xmlsec-1.5.6.jar
    xmltooling-1.3.2-1.jar
    stax2-api-3.1.1.jar
    woodstox-core-asl-4.2.0.jar

  • 代码结构
    wsclient - 客户端
    wscommon - Service接口定义
    wsservernonspring - 服务器端

  • service接口定义 - wscommon

package com.ben.service;

import javax.jws.WebService;
import com.ben.soapbean.User;

@WebService
public interface LoginService {
    public void sayLogin(User user);
}
  • Service实现 - wsservernonspring
package com.ben.serviceimpl;

import javax.jws.WebService;
import com.ben.service.LoginService;
import com.ben.soapbean.User;

@WebService(endpointInterface="com.ben.service.LoginService", serviceName="LoginService")
public class LoginServiceImpl implements LoginService{

    public void sayLogin(User user) {
        System.out.println("user login....");
    }
}
  • Service发布 - wsservernonspring
package com.ben.servlet;


import javax.servlet.ServletConfig;
import javax.servlet.annotation.WebServlet;
import javax.xml.ws.Endpoint;
import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
//import org.apache.cxf.frontend.ServerFactoryBean;
import org.apache.cxf.transport.servlet.CXFNonSpringServlet;
import com.ben.serviceimpl.LoginServiceImpl;

/**
 * Servlet implementation class ServicePublisher
 */
@WebServlet
public class ServicePublisher extends CXFNonSpringServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServicePublisher() {
        super();
    }

    @Override
    protected void loadBus(ServletConfig sc) {
        super.loadBus(sc);
        // You could add the endpoint publish codes here
        Bus bus = this.getBus();
        BusFactory.setDefaultBus(bus);
        Endpoint.publish("/loginService", new LoginServiceImpl());
        // You can als use the simple frontend API to do this
//        ServerFactoryBean factroy = new ServerFactoryBean();
//        factroy.setBus(bus);
//        factroy.setServiceClass(LoginServiceImpl.class);
//        factroy.setAddress("/loginService");
//        factroy.create();
    }
}
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>wsservernonspring</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>ServicePublisher</servlet-name>
    <servlet-class>com.ben.servlet.ServicePublisher</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ServicePublisher</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

Note.
*在没有配置CXF Secure的情况下,需要打开allowInsecureParser。
方法是在服务器启动命令中加入jvm参数*
-Dorg.apache.cxf.stax.allowInsecureParser=1

- 客户端调用

package com.ben.client;

import com.ben.service.LoginService;
import com.ben.soapbean.User;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class Login {
    public static void main(String[] args) {
        User user = new User();
        user.name = "tester";
        URL wsdlURL = null;
        try {
            wsdlURL = new URL("http://localhost:8080/wsservernonspring/loginService?wsdl");
            Service service = Service.create(wsdlURL, new QName("http://serviceimpl.ben.com/", "LoginService"));
            LoginService lclient = service.getPort(LoginService.class);
            lclient.sayLogin(user);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

CXF部署到tomcat(不结合spring)

新建web工程引入cxf包,笔者使用的是cxf2.7.7版本,以下是必须jar架包 此处不带jetty和spring的依赖包。出现Cannot create a secure XMLInputFac...
  • jqncc
  • jqncc
  • 2013年12月09日 16:10
  • 1898

WebService CXF调用方式《三》

问题?WebService CXF调用方式《三》,CXF工作原理和调用方式 一、CXF是什么? Apache CXF是一个开源的,全功能的,容易使用的Web服务框架。CXF是两个项目的结合:由IO...
  • Mr_li13
  • Mr_li13
  • 2016年04月28日 09:34
  • 7265

CXF创建webservice客户端和服务端

一、CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成。CXF...
  • ch656409110
  • ch656409110
  • 2013年07月13日 18:42
  • 35276

webservice-CXF-spring+maven

  • 2015年02月08日 12:21
  • 23KB
  • 下载

CXF框架访问远程webService服务之获取快递状态信息

  • 2014年12月03日 17:10
  • 37KB
  • 下载

CXF协议WebService+Spring客户端和服务端程序,实现了多数据源动态切换

  • 2017年12月05日 14:57
  • 94.62MB
  • 下载

maven - spring4.1.6和cxf3.0.8 WebService整合代码

  • 2017年12月12日 10:12
  • 18.5MB
  • 下载

webservice的CXF框架最新版

  • 2017年12月27日 09:40
  • 54.75MB
  • 下载

cxf webservice整体jar包

  • 2017年12月06日 11:56
  • 6.99MB
  • 下载

CXF实现发布RESTful WebService服务

  • 2017年12月29日 14:23
  • 54.14MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CXF Webservice nonSpring
举报原因:
原因补充:

(最多只允许输入30个字)