ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PI-Custom adapter module

2021-01-21 15:34:26  阅读:414  来源: 互联网

标签:sap String adapter null module contstr import PI com


PI自定义适配器模块

1.开发EJB项目

1.1Eclipse创建EJB项目

参考:https://blogs.sap.com/2019/05/03/how-to-create-custom-adapter-module-in-sap-pipo-for-ejb-3.0-version/

1.2类方法ChgRestFormat.java

  1 package com.sap.pi.geely.custom;
  2 
  3 import java.io.ByteArrayInputStream;
  4 import java.io.ByteArrayOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.rmi.RemoteException;
  8 import java.security.KeyStore;
  9 import java.security.KeyStoreException;
 10 import javax.annotation.PostConstruct;
 11 import javax.annotation.PreDestroy;
 12 import javax.ejb.Local;
 13 import javax.ejb.LocalHome;
 14 import javax.ejb.Remote;
 15 import javax.ejb.RemoteHome;
 16 import javax.ejb.Stateless;
 17 import javax.naming.InitialContext;
 18 import javax.naming.NamingException;
 19 import com.sap.aii.af.lib.mp.module.Module;
 20 import com.sap.aii.af.lib.mp.module.ModuleContext;
 21 import com.sap.aii.af.lib.mp.module.ModuleData;
 22 import com.sap.aii.af.lib.mp.module.ModuleException;
 23 import com.sap.aii.af.lib.mp.module.ModuleHome;
 24 import com.sap.aii.af.lib.mp.module.ModuleLocal;
 25 import com.sap.aii.af.lib.mp.module.ModuleLocalHome;
 26 import com.sap.aii.af.lib.mp.module.ModuleRemote;
 27 import com.sap.engine.interfaces.messaging.api.Message;
 28 import com.sap.engine.interfaces.messaging.api.MessageKey;
 29 import com.sap.engine.interfaces.messaging.api.PublicAPIAccessFactory;
 30 import com.sap.engine.interfaces.messaging.api.auditlog.AuditAccess;
 31 import com.sap.engine.interfaces.messaging.api.auditlog.AuditLogStatus;
 32 import com.sap.engine.interfaces.messaging.api.exception.InvalidParamException;
 33 
 34 /**
 35  * Session Bean implementation class ChgRestFormat
 36  */
 37 @Stateless(name = "ChgRestFormatBean")
 38 @Local(value = { ModuleLocal.class })
 39 @Remote(value = { ModuleRemote.class })
 40 @LocalHome(value = ModuleLocalHome.class)
 41 @RemoteHome(value = ModuleHome.class)
 42 public class ChgRestFormat implements Module{
 43     /**
 44      * Default constructor. 
 45      */    
 46     @Override
 47     public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData) throws ModuleException {
 48         // TODO Auto-generated method stub
 49         AuditAccess audit     = null;
 50         Message     msg        = null;
 51         MessageKey     msgKey    = null;
 52         byte[]         content    = null;
 53         String        contstr    = null;
 54         String         fldNode    = null;
 55         String        msgType = null;
 56         String        dataFormat    = null;
 57         String        nameSpace    = null;
 58         String        fullpload    = null;
 59         
 60         try {
 61 
 62             //Load message:
 63             msg = (Message) inputModuleData.getPrincipalData();
 64             msgKey = new MessageKey(msg.getMessageId(),msg.getMessageDirection());    //msg.getMessageKey();
 65             
 66             audit = PublicAPIAccessFactory.getPublicAPIAccess().getAuditAccess();
 67             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
 68                     "Edit by rico | Custom-Java-Adapter-Module (localejbs/ChgRestFormat)");
 69 
 70             //Loads the contents of the incoming message: 
 71             content = msg.getDocument().getContent();
 72             contstr = new String(msg.getDocument().getContent());
 73             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
 74                     "Edit by rico | ChgRestFormat | Document-Content:" + contstr);
 75 
 76             fullpload = new String(msg.getMainPayload().getContent());
 77             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
 78                     "Edit by rico | ChgRestFormat | Payload-Content:" + fullpload);
 79             
 80             //Load configuration parameters:
 81             fldNode = (String) moduleContext.getContextData("fldNode");
 82             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
 83                     "Edit by rico | ChgRestFormat | input-fldNode:" + fldNode);
 84 
 85             msgType = (String) moduleContext.getContextData("msgType");
 86             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
 87                     "Edit by rico | ChgRestFormat | input-msgType:" + msgType);
 88 
 89             nameSpace = (String) moduleContext.getContextData("nameSpace");
 90             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
 91                     "Edit by rico | ChgRestFormat | input-nameSpace:" + nameSpace);
 92             
 93             dataFormat = (String) moduleContext.getContextData("dataFormat");
 94             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
 95                     "Edit by rico | ChgRestFormat | input-nameSpace:" + dataFormat);
 96             
 97             //convert content to specify format(JSON or XML)
 98             if(dataFormat.equals("XML")==true) {
 99                 contstr = "<"+fldNode+">"+contstr+"</"+fldNode+">";
100                 
101                 if((msgType != null && !msgType.isEmpty()) && (nameSpace != null && !nameSpace.isEmpty())) {
102                     String stacd = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+"<ns0:"+msgType+" xmlns:ns0=\""+nameSpace+"\">";
103                     String endcd = "</ns0:"+msgType+">";
104                     contstr = stacd + contstr + endcd;
105                 }            
106             }else if(dataFormat.equals("JSON")==true) {
107                 contstr = "{\""+fldNode+"\":\""+contstr+"\"}";
108                 
109                 if((msgType != null && !msgType.isEmpty()) && (nameSpace != null && !nameSpace.isEmpty())) {
110                     String stajs = "\""+msgType+"\":"+contstr;
111                     contstr = "{"+stajs+"}";
112                 }
113             }
114             
115             audit.addAuditLogEntry(msgKey, AuditLogStatus.SUCCESS,
116                     "Edit by rico | ChgRestFormat | Trans-Content:" + contstr);
117             
118             //Transform string to array
119             byte convert[] = contstr.getBytes("UTF-8");
120             
121             //ByteArrayInputStream byteArr= new ByteArrayInputStream(content);
122             
123             //Update output:
124             try {
125                 msg.getDocument().setContent(convert);
126             } catch (InvalidParamException e) {
127                 audit.addAuditLogEntry(msgKey, AuditLogStatus.ERROR, e.getMessage());
128                 throw new ModuleException(e.getMessage(), e);
129             }
130             
131             inputModuleData.setPrincipalData(msg);
132     
133             } catch (Exception e) {
134                 ModuleException me = new ModuleException(e);
135                 throw me;
136         }
137         
138         return inputModuleData;
139     }
140     
141 }
View Code

1.3配置META-INF: ejb-j2ee-engine.xml

 

1.4配置EAR:application-j2ee-engine.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <application-j2ee-engine xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="application-j2ee-engine.xsd">
 3     <reference reference-type="hard">
 4         <reference-target target-type="service" provider-name="sap.com">engine.security.facade</reference-target>
 5     </reference>
 6     <reference reference-type="hard">
 7         <reference-target target-type="library" provider-name="sap.com">engine.j2ee14.facade</reference-target>
 8     </reference>
 9     <reference reference-type="hard">
10         <reference-target target-type="service" provider-name="sap.com">com.sap.aii.af.svc.facade</reference-target>
11     </reference>
12     <reference reference-type="hard">
13         <reference-target target-type="interface" provider-name="sap.com">com.sap.aii.af.ifc.facade</reference-target>
14     </reference>
15     <reference reference-type="hard">
16         <reference-target target-type="library" provider-name="sap.com">com.sap.aii.af.lib.facade</reference-target>
17     </reference>
18     <reference reference-type="hard">
19         <reference-target target-type="library" provider-name="sap.com">com.sap.base.technology.facade</reference-target>
20     </reference>
21     <fail-over-enable xsi:type="fail-over-enableType_disable"
22         mode="disable" /></application-j2ee-engine>
View Code

 

1.5发布

1.5.1可手工导出导入:

 

 

 

 1.5.2通过SERVER发布

 

 

 

 PI服务器实例编码

 

 

 

 确认后输入登录信息即可发布到PI。

发布成功后进入PI首页查看EJB Explorer

 

 

2.PI配置

2.1ESR-Message Mapping

 

 2.2Communication Channel

 

 

 

 

 

 

 

 

 

3.测试

3.1Postman发送

 

 3.2PI消息

 

标签:sap,String,adapter,null,module,contstr,import,PI,com
来源: https://www.cnblogs.com/ricoo/p/14307070.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有