WebService与Spring整合部署

服务端(CXF发布webservice)

1、  http://cxf.apache.org/download.html下载 cxf文件包(3.1.18必须使用Java 7或Java 8)。

2、  将下载包的lib文件夹下的jar全部拷贝到spring项目中的lib目录下,注意删除相同的jar包(版本号不同拷贝不会替换)。

3、  删除以下4个jar包:

cxf-services-ws-discovery-api-3.1.5.jar

cxf-services-ws-discovery-service-3.1.5.jar

cxf-services-wsn-api-3.1.5.jar

cxf-services-wsn-core-3.1.5.jar

4、  web.xml配置如下:

<!-- 配置cxf框架 cxf-servlet.xml -->

    <servlet>

        <servlet-name>cxf</servlet-name>

        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>

        <init-param>

                 <param-name>config-location</param-name>

                 <param-value>classpath:conf/cxf-servlet.xml</param-value>

        </init-param>

    </servlet>

    <servlet-mapping>

        <servlet-name>cxf</servlet-name>

        <url-pattern>/webservice/*</url-pattern>

</servlet-mapping>

5、  conf目录下添加cxf-servlet.xml文件, cxf-servlet.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:jaxws="http://cxf.apache.org/jaxws"

                   xsi:schemaLocation=" http://www.springframework.org/schema/beans

                                                                 http://www.springframework.org/schema/beans/spring-beans.xsd

                                                                 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

    <!-- 加载提供的服务 -->

    <jaxws:endpoint id="helloService" address="/MyWebService"

                 implementor="net.evecom.hr.MyWebService"></jaxws:endpoint>

</beans>

7、  在net.evecom.hr目录下创建MyWebService类,如下:

package net.evecom.hr;

import javax.jws.WebParam;

import javax.jws.WebService;

@WebService

public class MyWebService {

    public String hiMyService(@WebParam(name = "content") String content) {

        System.out.println("客户端发送过来了:" + content);

        return "服务器返回:" + content;

    }

}

8、启动tomcat,访问localhost:8080/项目名/webservice/,查看是否正常启动。

客户端(axis2获取webservice)

1、  http://axis.apache.org/axis2/java/core/download.html下载axis2-1.7.9;

2、  将下载包lib文件夹下的jar包复制到另一个项目lib目录下;

3、  测试代码如下:

package net.evecom.hr;

import java.util.Iterator;

import javax.xml.namespace.QName;

import org.apache.axiom.om.OMAbstractFactory;

import org.apache.axiom.om.OMElement;

import org.apache.axiom.om.OMFactory;

import org.apache.axiom.om.OMNamespace;

import org.apache.axis2.AxisFault;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.client.ServiceClient;

import com.alibaba.fastjson.JSONObject;

public class Test {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        String url = "http://localhost:8080/项目名/webservice/MyWebService?wsdl";

        sendWsdl(url, "啊啊啊啊啊");

    }

    public static void sendWsdl(String url, String xmlStr) {

        JSONObject res = new JSONObject();

        try {

            String endpoint = url.replace("?wsdl", "");// 不需要传?wsdl

            // 直接引用远程的wsdl文件

            Options options = new Options();

            options.setTo(new EndpointReference(endpoint));

            ServiceClient sender = new ServiceClient();

            sender.setOptions(options);

            OMFactory fac = OMAbstractFactory.getOMFactory();

            OMNamespace omNs = fac.createOMNamespace("http://hr.evecom.net/", "");// 参数1(uri)=即为wsdl文档的targetNamespace;参数2(prefix)=可不填

            OMElement method = fac.createOMElement("hiMyService", omNs);// 方法名

            QName qname = new QName("content");

            OMElement in0 = fac.createOMElement(qname);// 方法参数

            in0.setText(xmlStr); // 参数值

            method.addChild(in0); // 添加参数

            OMElement resultEle = sender.sendReceive(method);// 调用wsdl

            System.out.println("调用接口结果:" + resultEle.toString());

            Iterator<?> iterator = resultEle.getChildElements();

            OMElement result1 = null;

            while (iterator.hasNext()) {

                result1 = (OMElement) iterator.next();

                System.out.println(result1.getText());

            }

        } catch (AxisFault ex) {

            ex.printStackTrace();

        }

    }

}

4、运行代码,查看是否正常返回

至此,简单的webservice与Spring整合部署完成。

=====================================我是一条分割线============================================

添加拦截器:

  1. 服务端配置如下:

a)         cxf-servlet.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:jaxws="http://cxf.apache.org/jaxws"

                   xsi:schemaLocation=" http://www.springframework.org/schema/beans

                                                                 http://www.springframework.org/schema/beans/spring-beans.xsd

                                                                 http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">

    <bean id="webServiceInterceptor" class="net.evecom.common.interceptors.WebServiceInterceptor"></bean>

    <bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>

    <bean id="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>

    <!-- 加载提供的服务 -->

    <jaxws:endpoint id="webServiceTest" address="/MyWebService" implementor="net.evecom.webservice.hr.MyWebService">

                 <!-- 添加in拦截器 -->

                       <jaxws:inInterceptors>

                            <ref bean="loggingInInterceptor" />

                            <ref bean="webServiceInterceptor" />

                       </jaxws:inInterceptors>

                       <!-- 添加out拦截器 -->

                       <jaxws:outInterceptors>

                            <ref bean="loggingOutInterceptor" />

                       </jaxws:outInterceptors>

         </jaxws:endpoint>

                  <!-- <jaxws:server id="webServiceTest" serviceClass="net.evecom.webservice.hr.MyWebService"

                   address="/MyWebService">

                   <jaxws:serviceBean>

                            <ref bean="MyWebService" />

                   </jaxws:serviceBean>

         </jaxws:server> -->

</beans>

b)         添加WebServiceInterceptor,代码如下:

/*

 * Copyright (c) 2005, 2016, EVECOM Technology Co.,Ltd. All rights reserved.

 * EVECOM PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

 *

 */

package net.evecom.common.interceptors;

import java.util.List;

import org.apache.cxf.binding.soap.SoapMessage;

import org.apache.cxf.headers.Header;

import org.apache.cxf.interceptor.Fault;

import org.apache.cxf.phase.AbstractPhaseInterceptor;

import org.apache.cxf.phase.Phase;

import org.w3c.dom.Element;

import net.evecom.common.util.MD5;

public class WebServiceInterceptor extends AbstractPhaseInterceptor<SoapMessage> {

    private static final String TOKEN = "test";

    public WebServiceInterceptor(String phase) {

        super(phase);

    }

    public WebServiceInterceptor() {

        super(Phase.PRE_INVOKE);

    }

    public void handleMessage(SoapMessage message) throws Fault {

        List<Header> headers = message.getHeaders();

        if (headers == null || headers.size() == 0) {

            throw new Fault(new IllegalArgumentException("没有Header,拦截器实施拦截"));

        }

        Header firstHeader = headers.get(0);

        Element ele = (Element) firstHeader.getObject();

        String token = ele.getFirstChild().getTextContent();

        if (!token.equals(MD5.parseMD5(TOKEN))) {

            throw new Fault(new IllegalArgumentException("token不正确"));

        }
    }

}
  1. 客户端需要在发送请求时,添加头消息(token=md5.parseMD5(“test”)),代码如下:
       // 创建消息头:token=evecomoa

            SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory();

            // SOAPHeaderBlock soapHeader = soapFactory.createSOAPHeaderBlock("RequestHeader", omNamespace);

            // 添加头消息内容

            SOAPHeaderBlock soapHeaderBlock = soapFactory.createSOAPHeaderBlock("token", omNamespace);

            soapHeaderBlock.addChild(soapFactory.createOMText(MD5.parseMD5("test")));

            // soapHeader.addChild(soapHeaderBlock);

            // 将消息头加入到当前消息中

            sender.addHeader(soapHeaderBlock);

原文地址:https://www.cnblogs.com/maysky-l/p/11996607.html

时间: 2024-10-27 16:36:17

WebService与Spring整合部署的相关文章

webservice开发spring整合cxf入门案例

一.创建服务端发布服务 1. 添加依赖 <dependencies> <!-- cxf 进行rs开发 必须导入 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> <version>3.0.1</version> </dependency> &l

So easy Webservice 8.spring整合CXF 发布WS

1.添加jar包(cxf的jar包中包含了spring的jar包),添加spring配置文件 2.web.xml中配置CXFServlet,过滤WS服务的地址 <!-- 配置CXFServlet,实现地址过滤的功能,项目启动时实例化 --> <servlet> <servlet-name>cxfServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFSer

webservice的cxf和spring整合发布

1.新建一个web项目 2.导入cxf相应的jar包,并部署到项目中 3.服务接口 1 package com.xiaostudy; 2 3 /** 4 * @desc 服务器接口 5 * @author xiaostudy 6 * 7 */ 8 public interface Test_service { 9 10 public String getNumber(String number); 11 12 } 4.服务接口实现类 1 package com.xiaostudy; 2 3 im

Spring整合CXF,发布RSETful 风格WebService(转)

Spring整合CXF,发布RSETful 风格WebService 这篇文章是承接之前CXF整合Spring的这个项目示例的延伸,所以有很大一部分都是一样的.关于发布CXF WebServer和Spring整合CXF这里就不再多加赘述了.如果你对Spring整合CXF WebService不了解,具体你可以参看这两篇文章: http://www.cnblogs.com/hoojo/archive/2011/03/30/1999563.html http://www.cnblogs.com/ho

Quartz与Spring整合进行热部署的实现(一)

先来几张实现图 任务管理页 新建任务管理.目前实现叫简单的需求...若各位同学要实现复杂的设计...quartz都有提供强大的支持.小弟目前的需求做到这已经够用了. 接下来.我们如何实现quartz的热部署编码呢? 小弟是利用spring整合quzrtz实现的.但是会产生两个小问题. 我们先看看quartz如何与spring整合 <bean name="quartzScheduler" class="org.springframework.scheduling.quar

Spring整合CXF之发布WebService服务

今天我们来讲下如何用Spring来整合CXF,来发布WebService服务: 给下官方文档地址:http://cxf.apache.org/docs/writing-a-service-with-spring.html 根据官方文档.我们把前面的实例用Spring整合CXF来处理下.会简化很多: 首先我们来建一个Maven项目 WebService_CXF 建好项目第一步,我们打开pom.xml 我们来添加下Spring支持: <!-- 添加Spring支持 --> <dependen

activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建        (2)创建流程模型:activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型        (3)流程模型列表展示:activiti自定义流程之Spring整合activiti-modeler5.16实例(三):流程模型列表展示 1.maven导包及spring的一些基本配置与之前的没有什么变化,依旧沿用就

Web Service学习-CXF与Spring整合为JavaEE应用发布WebService(三)

CXF与Spring整合,分两个方面给大家介绍: 1,在传统ssh项目基础上添加Web Service 赋值CXF的jar包 在web.xml配置文件中导入CXF的核心控制器:CXFServlet 在Spring配置文件中导入CXF提供Schema,xml配置文件 在Spring配置文件中使用jaxws:endpoint元素来暴露Web Service 如果要添加拦截器,在jaxws:endpoint元素里添加 inInterceptors,outInterceptors子元素 2,远程调用We

Spring 整合CXF 实现WebService(JAX-WS)

服务端创建项目 添加依赖 web.xml 配置CXFServlet <?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="htt