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报安全性错误 Cannot create a secure XMLInputFactory

在使用CXF 发布webservice 时 调用中后台总是失败 提示‘Cannot create a secure XMLInputFactory’ ,使用的CXF 版本是2.7.8  反编译jar ...

cxf webService

  • 2016年06月02日 18:04
  • 4KB
  • 下载

一个CXF集成SPRING的WEBSERVICE完整实例

1 首先准备以下JAR包 [java] view plain copy activation.jar   commons-logging-1.1.1.jar   cxf-2.5...
  • xwnxwn
  • xwnxwn
  • 2016年03月09日 19:14
  • 1626

spring + cxf 实现简单的webservice

  • 2015年03月11日 16:35
  • 14.24MB
  • 下载

WebService流行框架之Axis和CXF

前言 上节课我们对WebService进行了简单的介绍,对于其所应用到的技术有了一定的了解。今天主要讲解下WebService的两个流行的框架Axis和CXF。   正题 一、服务端发布Web...

CXF创建Webservice接口与Spring整合实例

  • 2017年10月04日 18:13
  • 53.38MB
  • 下载

webservice+cxf+wss4j+spring

  • 2017年11月08日 20:47
  • 32KB
  • 下载

CXF创建webservice客户端和服务端

一、CXF的介绍Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成。CXF框...
  • xzknet
  • xzknet
  • 2014年01月06日 15:29
  • 41054
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CXF Webservice nonSpring
举报原因:
原因补充:

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