我们有从系统生成的iDOC文件。 现在,我们尝试通过RFC连接将它们发送到SAP。 我已经作为客户端建立了RFC连接,但无法发送iDOC!

我试图创建一个样本iDOC进行测试,但是它不起作用!

Exception in thread "main" java.lang.NoSuchMethodError: com.sap.conn.idoc.jco.SAPRepository$ConnectionProvider.execute(Lcom/sap/conn/jco/JCoFunction;Lcom/sap/conn/jco/rt/AbapRepository;)V

at com.sap.conn.idoc.jco.SAPRepository.queryRootSegmentMetaData40(SAPRepository.java:1204)

at com.sap.conn.idoc.jco.SAPRepository.queryRootSegmentMetaData(SAPRepository.java:1110)

at com.sap.conn.idoc.jco.SAPRepository.getRootSegmentMetaData(SAPRepository.java:909)

at com.sap.conn.idoc.rt.DefaultIDocDocument.(DefaultIDocDocument.java:124)

at com.sap.conn.idoc.rt.DefaultIDocDocument.(DefaultIDocDocument.java:61)

at com.sap.conn.idoc.jco.JCoIDocDocument.(JCoIDocDocument.java:51)

at com.sap.conn.idoc.jco.JCoIDocRuntime.createIDocDocument(JCoIDocRuntime.java:133)

at com.sap.conn.idoc.jco.JCoIDocRuntime.createIDocDocument(JCoIDocRuntime.java:35)

at com.sap.conn.idoc.rt.DefaultIDocRuntime.createIDocDocument(DefaultIDocRuntime.java:175)

at com.sap.conn.idoc.rt.DefaultIDocRuntime.createIDocDocument(DefaultIDocRuntime.java:18)

at com.idoc.sender.IDocClientExample.main(IDocClientExample.java:49)

我什至尝试发送样本iDOC XML,但我也遇到了另一个错误,试图多次更改XML,但是我又一次遇到了同样的问题!

com.sap.conn.idoc.IDocParseException: (7) IDOC_ERROR_PARSE_FAILURE: Invalid character encountered in XML input data source:

state=READING_XMLDECLARATION, charPosition=14, lineNumber=1, columnNumber=15, invalidChar=U+003D,

sourceSnippet=...@<?xml version="1.0" encoding="UTF-8"?>20120114120000

^

at com.sap.conn.idoc.rt.xml.DefaultIDocXMLParser.throwIDocParseException(DefaultIDocXMLParser.java:2223)

at com.sap.conn.idoc.rt.xml.DefaultIDocXMLParser.parseProlog(DefaultIDocXMLParser.java:1635)

at com.sap.conn.idoc.rt.xml.DefaultIDocXMLParser.parse(DefaultIDocXMLParser.java:320)

at com.sap.conn.idoc.rt.xml.DefaultIDocXMLProcessor.parse(DefaultIDocXMLProcessor.java:112)

at com.sap.conn.idoc.rt.xml.DefaultIDocXMLProcessor.parse(DefaultIDocXMLProcessor.java:54)

at com.sap.conn.idoc.rt.xml.DefaultIDocXMLProcessor.parse(DefaultIDocXMLProcessor.java:31)

at com.idoc.sender.IDocClientExample.main(IDocClientExample.java:57)

这是我用来创建iDOC和发送iDOC XML的代码:

package com.idoc.sender;

import com.sap.conn.idoc.*;

import com.sap.conn.idoc.jco.JCoIDoc;

import com.sap.conn.jco.JCoDestination;

import com.sap.conn.jco.JCoDestinationManager;

import java.io.BufferedReader;

import java.io.FileReader;

public class IDocClientExample {

public static void main(String[] args) {

try {

String iDocXML = null;

FileReader fileReader;

try {

fileReader = new FileReader("TestSalesOrder.xml");

BufferedReader br = new BufferedReader(fileReader);

StringBuffer sb = new StringBuffer();

String line;

while ((line = br.readLine()) != null) {

sb.append(line);

}

iDocXML = sb.toString();

br.close();

fileReader.close();

} catch (Exception ex) {

ex.printStackTrace();

}

// see provided configuration file xxxx.jcoDestination

JCoDestination destination = JCoDestinationManager.getDestination("xxxx");

IDocRepository iDocRepository = JCoIDoc.getIDocRepository(destination);

String tid = destination.createTID();

IDocFactory iDocFactory = JCoIDoc.getIDocFactory();

System.out.println(destination.getAttributes());

// a) create sample new idoc

IDocDocument doc = iDocFactory.createIDocDocument(iDocRepository, "SYSTAT01");

IDocSegment segment = doc.getRootSegment();

segment.addChild("E1MARAM");

JCoIDoc.send(doc, IDocFactory.IDOC_VERSION_DEFAULT, destination, tid);

// b) use existent xml file

IDocXMLProcessor processor = iDocFactory.getIDocXMLProcessor();

IDocDocumentList iDocList = processor.parse(iDocRepository, iDocXML);

JCoIDoc.send(iDocList, IDocFactory.IDOC_VERSION_DEFAULT, destination, tid);

destination.confirmTID(tid);

} catch (Exception e) {

e.printStackTrace();

}

System.out.print("program end");

}

}

// a) create sample new idoc

IDocDocument doc = iDocFactory.createIDocDocument(iDocRepository, "SYSTAT01");

IDocSegment segment = doc.getRootSegment();

segment.addChild("E1MARAM");

JCoIDoc.send(doc, IDocFactory.IDOC_VERSION_DEFAULT, destination, tid);

// b) use existent xml file

IDocXMLProcessor processor = iDocFactory.getIDocXMLProcessor();

IDocDocumentList iDocList = processor.parse(iDocRepository, iDocXML);

JCoIDoc.send(iDocList, IDocFactory.IDOC_VERSION_DEFAULT, destination, tid);

destination.confirmTID(tid);

} catch (Exception e) {

e.printStackTrace();

}

System.out.print("program end");

}

}

这是我的连接文件:

jco.client.lang=EN

jco.client.client=100

jco.client.passwd=xxxx

jco.client.user=xxxx

jco.client.sysnr=01

jco.client.ashost=xxxx

这是我的xml文件:

20120114120000DEBMAS06

DEBMAS

HTTPDEMO

LS

HTTPDEMO

SAPxxx

LS

xxxCLNT100

47

Test Customer

0004

TEST

City

PL

A

L

Street

我正在使用sapjco3-x86-64bit-3.0.5和sapidoc-3.0.1!

测试iDOC的创建并发送IDOC XML仅用于测试,但在本例中,我们已经准备好了iDOC!

我的问题是,如何通过RFC将iDOC 从磁盘直接发送到SAP? 如果无法这样做,如何解决创建iDOC或发送iDOC XML的错误? 我的第二个问题,一旦我能够发送iDOC,是否必须建立一个新的SERVER RFC连接,以便可以从SAP接收iDOC?

** 编辑 **

现在,我可以正确发送和接收IDoc。 我的问题是如何将IDoc作为Flat IDoc获得 。

我可以使用以下代码将IDoc作为XML IDoc接收:

package com.idoc.actif;

import com.sap.conn.idoc.IDocDocumentList;

import com.sap.conn.idoc.IDocXMLProcessor;

import com.sap.conn.idoc.jco.*;

import com.sap.conn.jco.server.*;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

public class IDocServerExample

{

public static void main(String[] a)

{

try

{

// see provided examples of configuration files xxxx.jcoServer and xxxx.jcoDestination

JCoIDocServer server = JCoIDoc.getServer("xxxx");

server.setIDocHandlerFactory(new MyIDocHandlerFactory());

server.setTIDHandler(new MyTidHandler());

MyThrowableListener listener = new MyThrowableListener();

server.addServerErrorListener(listener);

server.addServerExceptionListener(listener);

//server.setConnectionCount(1);

server.start();

}

catch (Exception e)

{

e.printStackTrace();

}

}

static class MyIDocHandler implements JCoIDocHandler

{

public void handleRequest(JCoServerContext serverCtx, IDocDocumentList idocList)

{

FileOutputStream fos=null;

OutputStreamWriter osw=null;

try

{

//receiving XML IDoc, how to get the IDoc as a Flat IDoc (SAP is sending the IDoc as Flat)???

IDocXMLProcessor xmlProcessor = JCoIDoc.getIDocFactory().getIDocXMLProcessor();

fos=new FileOutputStream(serverCtx.getTID());

osw=new OutputStreamWriter(fos, "UTF8");

xmlProcessor.render(idocList, osw, IDocXMLProcessor.RENDER_WITH_TABS_AND_CRLF);

osw.flush();

}

catch (Throwable thr)

{

thr.printStackTrace();

}

finally

{

try

{

if (osw!=null)

osw.close();

if (fos!=null)

fos.close();

}

catch (IOException e)

{

e.printStackTrace();

}

}

}

}

static class MyIDocHandlerFactory implements JCoIDocHandlerFactory

{

private JCoIDocHandler handler = new MyIDocHandler();

public JCoIDocHandler getIDocHandler(JCoIDocServerContext serverCtx)

{

return handler;

}

}

static class MyThrowableListener implements JCoServerErrorListener, JCoServerExceptionListener

{

public void serverErrorOccurred(JCoServer server, String connectionId, JCoServerContextInfo ctx, Error error)

{

System.out.println(">>> Error occured on " + server.getProgramID() + " connection " + connectionId);

error.printStackTrace();

}

public void serverExceptionOccurred(JCoServer server, String connectionId, JCoServerContextInfo ctx, Exception error)

{

System.out.println(">>> Error occured on " + server.getProgramID() + " connection " + connectionId);

error.printStackTrace();

}

}

static class MyTidHandler implements JCoServerTIDHandler

{

public boolean checkTID(JCoServerContext serverCtx, String tid)

{

System.out.println("checkTID called for TID="+tid);

return true;

}

public void confirmTID(JCoServerContext serverCtx, String tid)

{

System.out.println("confirmTID called for TID="+tid);

}

public void commit(JCoServerContext serverCtx, String tid)

{

System.out.println("commit called for TID="+tid);

}

public void rollback(JCoServerContext serverCtx, String tid)

{

System.out.print("rollback called for TID="+tid);

}

}

}

idoc java_java - 将iDOC从Java发送到SAP - 堆栈内存溢出相关推荐

  1. linux下java调用python脚本,java - 在Linux Terminal中以编程方式从Java调用python脚本 - 堆栈内存溢出...

    我正在开发一个Java应用程序,用于检查源文件中的补丁程序(是否存在). 用于检测补丁程序更改的核心逻辑位于python脚本[titled'patch.py​​']中,并且我的Java应用程序与此Py ...

  2. java 处理byte_java - 文件到Java中的byte [] - 堆栈内存溢出

    ===============>>#1 票数:1222 例: import java.io.File; import java.nio.file.Files; File file; // ...

  3. java ftp上传超时_java - Java FTP连接超时 - 堆栈内存溢出

    我正在做一个项目,修改后,稍后会将一些文件上传到FTP服务器...除了弄清楚文件的上传之外,我什么都没有. 我可以成功连接到FTP服务器,但是一旦文件上传,该程序将挂起几分钟,然后显示超时. java ...

  4. JAVA中数字格式异常,java - Java数字格式异常 - 堆栈内存溢出

    当我遇到NumberFormatException时,我正在CodeChef平台上解决问题. 首先,我使用Scanner处理输入,然后使用BufferedReader . 但是他们都不起作用! 这是我 ...

  5. java web空指针,java - Web服务中的Java空指针异常@autowired [重复] - 堆栈内存溢出

    错误:domain.SpeakerRecog.test上的java.lang.NullPointerException SpeakerMapper为null, speakermapper.insert ...

  6. raspberry pi java8_java - Raspberry PI 2 Java 8 JVM错误 - 堆栈内存溢出

    我正在构建基于Java 1.8,spring,hibernate,mysql的Web应用程序,并使用tomcat作为Web服务器. 现在我的应用正在记录(每隔5秒)树莓的系统数据,例如: cpu温度, ...

  7. java输出钻石_java - 用Java打印钻石形状 - 堆栈内存溢出

    我想在Eclipse的输出控制台上打印网格形状. 基本上,我从用户那里得到一个整数,它是网格单个边框中的星星数. 这里是我到目前为止的代码: import java.util.Scanner; pub ...

  8. drawrect java_java - g.drawRect在背景后面绘制矩形 - 堆栈内存溢出

    我想提出一种清除屏幕的方法. 我试着做repaint(); 我看到它在另一个代码中起作用. 现在,我正在尝试执行g.drawRect但是它将其绘制在背景后面( 程序看起来像什么 ). 我做了一个明确的 ...

  9. opencv java 去干扰_java - OpenCV Java修补图像格式要求 - 堆栈内存溢出

    一直试图让修复工作在Android上进行, int height = (int) viewMat.size().height; int width = (int) viewMat.size().wid ...

最新文章

  1. Android Handler、Loop 的简单使用
  2. 开机自启动win7计划任务
  3. Linux Vim 光标错位,技术|Vim 复制粘帖格式错乱问题的解决办法
  4. “直播带货”还能火多久?
  5. kaggle实战—泰坦尼克(二、数据清洗及特征处理)
  6. android系统换动画,Android Activity动画跳转修改
  7. MDI窗体关闭问题解决一例
  8. python文件、存储、压缩
  9. 【CV学习笔记】OpenCV基本操作
  10. hulu dpp_如何将Hulu视频下载到您的PC以便离线观看
  11. NVR和DVR有什么区别_NVR和DVR哪个好 IP Camera
  12. Borůvka (Sollin) 算法求 MST 最小生成树
  13. 用js处理图片加载错误时加载默认图片的方法
  14. Java通过HAPI解析HL7消息
  15. 最新 EDK2 实验
  16. gradle迁到kts, 以及module管理
  17. 基于若依系统进行模块化开发(使用eclipse)
  18. web服务器的开发(简易版本)
  19. PAZU WEB打印控件
  20. 人物介绍的排版【小白进】

热门文章

  1. bootstrap后台管理系统前后台实现(含数据库)
  2. openWRT摄像头选购
  3. 如何安排初一的课程表
  4. atitit.GMT UTC Catitit.GMT UTC CST DST CET 星期 月份 节日 时间的不同本质and起源
  5. 【C语言】警告:“scanf_s”: 没有为格式字符串传递足够的参数
  6. 【luogu CF1569D】Inconvenient Pairs(思维)
  7. python结构方程模型_结构方程模型:方法与应用_结构方程模型公式
  8. windows安装perl及komodo IDE的详细步骤
  9. linux如何编译Intel网卡驱动源码,并进行安装
  10. Vue安装及创建第一个Vue项目