简介
本文档提供了如何使用Eclips创建JAR文件以及如何在SAP PI ESR配置中导出和上传JAR文件的端到端的详细信息。
本文档介绍了java代码非常重要的一点,从PI路径下载外部jar文件的位置以及如何将外部jar文件添加到java项目中。
逐步创建用于java映射的.jar文件。
要创建jar文件,请下载Eclipse。
下面是创建jar文件的逐步屏幕截图。
右键单击src包并创建java类。
右键点击java项目,进入构建路径,消费返利新模式,点击配置构建路径。
如前所述添加两个外部JAR文件以下
习近平.mapping.tool.lib\u api.jar
com.sap.xpi网站.ib.mapping.lib库.jar
:/rep/repository/com.sap.xpi网站.ib.mapping.lib库.jar
:/rep/repository/com.sap.xpi网站.ib.mapping.lib库.jar
下面是请求映射的完整java代码。
导入java.io.BufferedReader文件;
进口java.io.ByteArrayInputStream文件;
导入文件输入流;
导入java.io.FileOutputStream文件;
导入java.io.IOException异常;
导入输入流;
导入java.io.InputStreamReader;
导入java.io.OutputStream输出流;
导入java.io.读卡器;
导入java.util.Map文件;
导入java.util.HashMap文件;
进口javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入com.sap.aii公司.映射工具.tf3.右集装箱;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform文件.变压器;
进口javax.xml.transform文件.TransformerFactory;
导入javax.xml.transform文件.dom.DOMSource文件;
导入javax.xml.transform文件.stream.StreamResult文件;
导入org.w3c。属性;
导入org.w3c。dom.文档;
导入org.w3c。dom.节点;
导入org.w3c。dom.NodeList节点列表;
导入org.w3c。dom.元素;
导入org.w3c。dom.NamedNodeMap文件;
进口com.sap.aii公司.mapping.lookup.Channel频道;
导入com.sap.aii公司.mapping.lookup.LookupService;
导入com.sap.aii公司.mapping.lookup.Payload有效负载;
导入com.sap.aii公司.mapping.lookup.SystemAccessor;
//导入com.sun.xml.内部.ws.api.服务器.容器;
导入com.sap.aii公司.映射.api.*;
公共类SFDC\U JAVA扩展抽象转换{
String sessionId="";
String serverUrl="";
String prefix=""
+ ""
+ " " + "" + "";
字符串后缀= " ";
字符串信封=" ";
private Map Map;
/*method setparameters是必需的,但我们不使用它*/
public void setParameter(Map param){
Map=param;
if(Map==null)
{
Map=new HashMap();
}
}
public"void execute(InputStream in,OutputStream out){
try{
copyPayload(in,out);
}catch(Exception t){
t.printStackTrace();
}
}
private static final DynamicConfigurationKey KEY_URL=DynAMIConfigurationKey.create文件("HTTP//SAP/COM/XI/XI/Stase/SOAP","TServerLocation");
/*方法是为输入消息负载构建Soap信封*/
private void copyPayload(InputStream in,OutputStream out)抛出StreamTransformationException
{
String c="";
String Newpayload="";
try{
InputStreamReader inr=new InputStreamReader(in);
/*InputStream inr=in.getInputPayload中().getInputStream();*/
BufferedReader reader=新的BufferedReader(inr);
/*
*以下是删除
*来自输入消息负载
*/
字符串temp=";
while((temp=读卡器.readLine()) !=null){
c=c+temp;
}
int len=c.indexOf(">");
Newpayload=c.substring(len+1);
Newpayload=新有效载荷。更换("",
"");
输出。写入(前缀.getBytes());
输出。写入(sessionId.getBytes());
输出。写入(后缀.getBytes());
输出。写入(Newpayload.getBytes文件());
输出。写入(信封.getBytes());
catch(IOException e){
throw new StreamTransformationException(e.getMessage());
}
}
/*
*方法是用用户名和密码登录到SFDC,淘客帝国,从响应
*/
private void getSessionIdFromSFDC(String username,String password){
try{
Channel Channel=查找服务.getChannel("BC_SALESFORCE",家居智能化系统价格,"CC_SOAP_LOOKUP");
SystemAccessor accessor=null;
accessor=LookupService.getSystemAccessor(频道);
字符串loginxml=""+username
+""+password+"";
InputStream InputStream=new ByteArrayInputStream(loginxml.getBytes());
有效载荷=LookupService.getXmlPayload(输入流);
有效负载SOAPOutPayload=null;
SOAPOutPayload=访问器.call(有效负载);
InputStream Input=SOAPOutPayload.getContent文件();
DocumentBuilderFactory=DocumentBuilderFactory.newInstance();
文档生成器=工厂.newDocumentBuilder();
文件=生成器.parse(inp);
节点列表会话1=document.getElementsByTagName文件("sessionId");
节点列表serverUrl1=document.getElementsByTagName文件("serverUrl");
Node Node=sessionId1.item(0);
Node node1=serverUrl1.item(0);
if(Node!=null){
节点=节点.getFirstChild();
如果(节点!=null){
sessionId=节点.getNodeValue();
}
}
如果(节点1!=null){
node1=node1.getFirstChild();
if(node1!=null){
serverUrl=node1.getNodeValue();
}
}
}catch(异常e){
e.printStackTrace();
}
}
public static void main(String[]args)抛出异常{
try{
SFDC_JAVA obj=new SFDC_JAVA();
FileInputStream in=new FileInputStream("D:/输入.xml"";
FileOutputStream out=新FileOutputStream("D:/输出.xml");
目标执行(in,out);
}catch(Exception e){
e.printStackTrace();
}
}
public String convertStreamToString(InputStream in){
StringBuffer sb=new StringBuffer();
try{
InputStreamReader isr=new InputStreamReader(in);
Reader=new BufferedReader(isr);
int ch;
while((ch=阅读()) > -1)
某人((char)ch);
读卡器关闭();
}catch(Exception Exception){
}
return向某人求婚();
}
public void transform(TransformationInput in,TransformationOutput)抛出StreamTransformationException{
DynamicConfiguration conf=in.getDynamicConfiguration中();
getSessionIdFromSFDC("用户ID","密码");
配置输出(KEY_URL,云服务器一年多少钱,serverUrl);
执行(in.getInputPayload中().getInputStream(),out.getOutputPayload输出有效负载().getOutputStream());
}
}
响应Java映射:
与上面提到的响应Java映射必须执行的步骤相同(创建Java项目和类等)
下面的代码用于从响应消息中移除信封和标头,并将实际的UPSERT响应消息发送到目标系统。(Salesforce-a SAP)
导入文件输入流;
导入java.io.FileOutputStream文件;
导入输入流;
导入java.io.OutputStream输出流;
导入java.util.Map文件;
进口javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.transform文件.变压器;
进口javax.xml.transform文件.TransformerFactory;
导入javax.xml.transform文件.dom.DOMSource文件;
导入javax.xml.transform文件.stream.StreamResult文件;
导入org.w3c。dom.文档;
导入org.w3c。dom.元素;
导入org.w3c。dom.节点;
导入org.w3c。dom.NodeList节点列表;
进口com.sap.aii公司.映射.api.StreamTransformation;
进口com.sap.aii公司.mapping.api.StreamTransformationException异常;
public class removesoapendevelop实现StreamTransformation{
public void execute(InputStream in,淘客app,OutputStream out)抛出StreamTransformationException{
try{
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
文档生成器生成器=工厂.newDocumentBuilder();
/*以XML格式输入文档*/
文档docIn=builderel.parse文件(in);
/*解析后的文档*/
文档docOut=builderel.newDocument文件();
变压器厂tf=TransformerFactory.newInstance文件();
变压器变换=变压器();
元素根;
节点p;
NodeList l;
int mm,n1;
Node a;
NodeList b;
int cc,n2;
//如果需要包含命名空间,请使用下两行
//root=docOut.createElement文件("ns0:upsertResponse");
//根.setAttribute("xmlns:ns0″,"urn:enterprise.soap.sforce.com");
根=docOut.createElement文件("upsertResponse");
根.setAttribute("xmlns:xsi文件","http://www.w3.org/2001/XMLSchema-instance");
根.setAttribute("xmlns:","urn:enterprise.soap.sforce.com");
//根=docOut.createElement文件("错误");
//根.setAttribute("xmlns:","urn:enterprise.soap.sforce.com");
p=docIn.getElementsByTagName文件("upsertResponse")。项(0);
//a=docIn.getElementsByTagName文件("错误")。项(0);
l=p.getChildNodes();
//b=a.getChildNodes();
n1=l.getLength();
//n2=b.getLength();