gpt4 book ai didi

java - 如何在 smooks 中定义 ISA-Segment?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:34 25 4
gpt4 key购买 nike

我正在 smooks 的帮助下在 java 程序中创建 ANSI.X12 消息。我正在使用 xml 文件(及其 http://www.milyn.org/schema/edi-message-mapping-1.2.xsd )自己定义 X12 消息。它的大部分工作得很好,但我在 ISA 段上确实有问题。我是这样定义的:

<?xml version="1.0" encoding="UTF-8"?>
<medi:edimap xmlns:medi="http://www.milyn.org/schema/edi-message-mapping-1.2.xsd">

<medi:description name="Some X12 Message Definition" version="1.0" />

<medi:delimiters segment="&#10;" field="*"
component="^" sub-component="~" escape="?" />

<medi:segments xmltag="Segments">

<medi:segment segcode="ISA" xmltag="InterchangeControlHeader">
<medi:field xmltag="AuthorizationInformationQualifier" />
<medi:field xmltag="AuthorizationInformation"/>
<medi:field xmltag="SecurityInformationQualifier"/>
<medi:field xmltag="SecurityInformation"/>
<medi:field xmltag="InterchangeSenderQualifier"/>
<medi:field xmltag="InterchangeSenderID"/>
<medi:field xmltag="InterchangeReceiverQualifier"/>
<medi:field xmltag="InterchangeReceiverID"/>
<medi:field xmltag="InterchangeDate" type="Date" typeParameters="format=yyMMdd"/>
<medi:field xmltag="InterchangeTime" type="Date" typeParameters="format=HHmm"/>
<medi:field xmltag="InterchangeControlStandardsIdentifier"/>
<medi:field xmltag="InterchangeControlVersionNumber"/>
<medi:field xmltag="InterchangeControlNumber"/>
<medi:field xmltag="AcknowledgmentRequested"/>
<medi:field xmltag="UsageIndicator"/>
<medi:field xmltag="ComponentElementSeparator"/>
</medi:segment>
[...]

只要我插入正确长度的字符串,这主要是可用的。问题在于组件分隔符(在本例中为 ^)。 ISA 段定义了哪些字符是用于分隔段、元素等的特殊字符。当我将 "^" 作为值放入 ComponentElementSeparator 时,它​​会被转义(当然),因为它是一个特殊的字符,而 smooks 不知道我的 ISA段是特殊的 ISA 段。

我明白了

ISA*00*          *00*          *01*000000987654321*01*000000123456789*141031*1656*U*00401*000002388*0*T*?^

它应该在哪里

ISA*00*          *00*          *01*000000987654321*01*000000123456789*141031*1656*U*00401*000002388*0*T*^

(注意 ? 之前末尾的 ^ )。

到目前为止,我得到的唯一解决方法是将一些不同的字符放入 medi:delimiters 中,例如 <medi:delimiters segment="&#10;" field="*" component="&lt;" sub-component="~" escape="?" /> ,但是一旦该字符出现在数据中的某处,这必然会产生问题。这特别令人沮丧,因为消息甚至没有使用任何必须分离的组件。

我在 smooks 的文档中找不到任何相关信息,但一定有某种方法可以做到这一点。毕竟,X12 是我所知道的两个原因之一,首先是任何人都会使用 smooks(另一个是 EDIFACT)。

有人知道将 ISA 插入到我的 smooks 消息描述中的正确方法吗?

最佳答案

这可能晚了,但我遇到了这个问题。我已经确定问题(如果您使用 EJC 生成)是它在每个段输出步骤的末尾添加了以下内容:

writer.write(EDIUtils.concatAndTruncate(nodeTokens, DelimiterType.FIELD, delimiters));

如果定界符在最后(ISA.ComponentElementSeparator 是),它将被截断除非它是用转义符定义的,这不是此特定场景所需的行为。还没有答案,但想提出问题的来源。

在此处添加了问题定义和可能的方向:https://github.com/smooks/smooks/issues/114

更新:如果使用 EJC,请设置以下内容:

 <medi:import truncatableSegments="false" ....

关于java - 如何在 smooks 中定义 ISA-Segment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26803404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com