SAP服务推送到java服务接收数据并处理

关联:java主动调用sap详情 附带jar包

首先引入jar包

 <!--发布 webservice 服务 begin-->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.2.5</version>
            <exclusions>
                <exclusion>
                    <artifactId>cxf-core</artifactId>
                    <groupId>org.apache.cxf</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>3.2.6</version>
        </dependency>
        <!--webservice end-->

新建配置

package ......;

import com.wl.ltx.sap.webservice.SapReceiveService;
import com.wl.ltx.sap.webservice.SapReceiveServiceImpl;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 *sapReceiveService
 *@author chufangbo
 *@since 2021-09-14
 * 配置类
 */
@Configuration
public class CxfConfig {

    @Bean(name = "cxfServlet")//名字重复报错的话 重新命名
    public ServletRegistrationBean cxfServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/webService/*");
        return servletRegistrationBean;
    }

    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }

    @Bean
    public SapReceiveService sapReceiveService(){
        return new SapReceiveServiceImpl();
    }
    @Bean
    public EndpointImpl endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), sapReceiveService());
        //SYSID=[TFSAP] 需要给sap保持一致
         LoggerFactory.getLogger("CxfConfig").info("--------------------SendSapHead.SYSID=[TFSAP]----------------------自动发布webservice对外服务-------供sap主动调用--------------------------------------------");
        //要发布的服务名
        endpoint.publish("/sapReceiveService");
        return endpoint;
    }
}

sap所需要的服务

  <!--sap-webservice begin-->
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-api</artifactId>
            <version>1.2.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-impl</artifactId>
            <version>1.2.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ws.commons.axiom</groupId>
            <artifactId>axiom-dom</artifactId>
            <version>1.2.13</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-adb</artifactId>
            <version>1.6.2</version>
            <exclusions>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-adb-codegen</artifactId>
            <version>1.6.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>XmlSchema</artifactId>
                    <groupId>org.apache.ws.commons.schema</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-clustering</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-codegen</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-corba</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-ant-plugin</artifactId>
            <version>1.6.2</version>
            <exclusions>
                <exclusion>
                    <groupId>wsdl4j</groupId>
                    <artifactId>wsdl4j</artifactId>
                </exclusion>

                <exclusion>
                    <groupId>org.apache.axis2</groupId>
                    <artifactId>axis2-java2wsdl</artifactId>

                </exclusion>
                <exclusion>
                    <artifactId>XmlSchema</artifactId>
                    <groupId>org.apache.ws.commons.schema</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-fastinfoset</artifactId>
            <version>1.6.2</version>
            <exclusions>
                <exclusion>
                    <groupId>wsdl4j</groupId>
                    <artifactId>wsdl4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.axis2</groupId>
                    <artifactId>axis2-java2wsdl</artifactId>

                </exclusion>
                <exclusion>
                    <artifactId>XmlSchema</artifactId>
                    <groupId>org.apache.ws.commons.schema</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-jaxbri</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-jaxws</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-jibx</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-json</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-kernel</artifactId>
            <version>1.6.2</version>
            <exclusions>
                <exclusion>
                    <groupId>wsdl4j</groupId>
                    <artifactId>wsdl4j</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>XmlSchema</artifactId>
                    <groupId>org.apache.ws.commons.schema</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-metadata</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-mtompolicy</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-saaj</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-soapmonitor-servlet</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-spring</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-transport-http</artifactId>
            <version>1.6.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-transport-local</artifactId>
            <version>1.6.2</version>
        </dependency>

        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-xmlbeans</artifactId>
            <version>1.6.2</version>
        </dependency>

        <dependency>
            <groupId>orj.hibersap</groupId>
            <artifactId>sapjco3</artifactId>
            <version>3.0</version>
            <scope>system</scope>
            <systemPath>${pom.basedir}/src/main/lib/sapjco3.jar</systemPath>
            <!--            <systemPath>${project.basedir}/src/lib/sapjco3.jar</systemPath>-->
        </dependency>
        <!--sap-webservice end -->

暴露服务

package com.wl.ltx.sap.webservice;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

/**
 * Created by chufangbo 2021-09-11
 * CxfConfig配置类
 * ZPI004
 * http://127.0.0.1:9102/ltx-sapcomponent/webService/sapReceiveService?wsdl 本地验证地址打开是XML页面

 * 给sap提供的地址 就是本地验证的地址,如果正式的话提供正式地址
 */
@WebService(name = "sapReceiveService", // 暴露服务名称
        targetNamespace = "http://service.sap.ltx.wl.com"// 命名空间 一般是接口包名的倒序
)
public interface SapReceiveService {

    //标注该方法为webservice暴露的方法,用于向外公布,它修饰的方法是webservice方法
    @WebMethod
    @WebResult(name = "String", targetNamespace = "")
    String sapSendTo(@WebParam(name = "data") String data);
}

贴sap配置图

接口实现类

package com.wl.ltx.sap.webservice;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import com.wl.ltx.goods.client.GoodsApiClient;
import com.wl.ltx.goods.param.MaterialReceiveParam;

import org.apache.commons.collections.map.HashedMap;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.jws.WebService;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by chufangbo 2021-09-11
 *
 * SAP--ZPI004--物料:1020038
 * 本地IP  http://172.29.53.197:9102/ltx-sapcomponent/webService/sapReceiveService?wsdl
 * 
 */

@WebService(serviceName = "sapReceiveService", //与接口中的serviceName一致
        targetNamespace = "http://service.sap.ltx.wl.com", //与接口中的targetNamespace一致
        endpointInterface = "com.wl.ltx.sap.webservice.SapReceiveService")
@Component
public class SapReceiveServiceImpl implements SapReceiveService {

    @Resource
    private GoodsApiClient goodsApiClient;//商品服务
   

    private static final  String SAP_TO_OUT_MATERIAL ="SAP_TO_OUT_MATERIAL";//sap物料主数据

    @Override
    public  String sapSendTo(String data) {
        JSONArray array = new JSONArray();
        JSONObject json = new JSONObject();
        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
        Map<String,Object> map = new HashedMap();
        try {
                json =  array.parseObject(data);
                if(json!= null){
                    String dataMsg = json.getString("DATA");
                    String control = json.getString("CONTROL");
                    String ifid = JSONObject.parseObject(control).getString("IFID");
//                    System.out.println("ifid: "+ifid);
//                    System.out.println("dataMsg: "+dataMsg);
                    Boolean success = true;
                    switch (ifid){
                        case SAP_TO_OUT_MATERIAL:
                            success  =  sapToOutMaterial(dataMsg);
                            break;

                        default:
                            map.put("MTYPE","E");
                            map.put("KEYDATA", "");
                            map.put("MSGTXT", "接口未定义,无法调取");
                    }
                    if(success){
                        map.put("MTYPE","S");
                        map.put("KEYDATA", "");
                        map.put("MSGTXT", "接收并保存数据成功");
                    }else{
                        map.put("MTYPE","E");
                        map.put("KEYDATA", "");
                        map.put("MSGTXT", "接收并保存数据失败");
                    }

                }else{
                    map.put("MTYPE","E");
                    map.put("KEYDATA", "");
                    map.put("MSGTXT", "接收数据为空");
                }

            }catch (Exception e){
                map.put("MTYPE","E");
                map.put("KEYDATA", "");
                map.put("MSGTXT", "接收并保存数据"+e.getMessage());
                e.printStackTrace();
            }finally {
                list.add(map);
                json.put("DATA",list);
                json.put("CONTROL",json.get("CONTROL"));
             }

        return JSONObject.toJSONString(json);
    }


    public Boolean  sapToOutMaterial(String dataMsg){
        Boolean success = true;
        try {
            System.out.println("SAP主动推送-sapToOutMaterial: "+dataMsg);
             List<MaterialReceiveParam> ammeterList = JSONArray.parseArray(dataMsg, MaterialReceiveParam.class);
//            MaterialReceiveParam param = JSONObject.parseObject(dataMsg,MaterialReceiveParam.class);
            for (MaterialReceiveParam param : ammeterList) {
                 goodsApiClient.receiveSapMaterial(param);
            }
//            List<TCAmmeterSapEntity> ammeterList = JSONArray.parseArray(data, TCAmmeterSapEntity.class);
        }catch (Exception e){
            e.printStackTrace();
            success =  false;
        }finally {
            return success;
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值