标签: ibm-integration-bus

返回类型为Exception是不错的编程?

在一个项目的用例中我遇到了一个奇怪的情况:ESQL正在调用一个java方法,向它发送一个String输入参数,该方法将解组,应用一些逻辑,然后存储来自unmarshalled对象的有用信息.因此,该方法必须抛出JAXBException,或者使用try catch来处理可能的异常.

这个问题是,ESQL无法调用包含签名中的throws的java方法.但是,我们希望任何错误都可以回到之前调用的MBNode,因此可以在那里进行适当的处​​理,因此trycatch不在图片之内.

让我感到震惊的是,遇到问题时是不可能返回一种Exception,如果没有则返回null?所以我写了一个简单的方法,虽然我没有得到任何警告或错误,但从良好的编程意义上来说,这似乎是错误的.

例如:

public Exception doStuffAndCheckForErorrs(String inString)
{
    if(inString.equals(null))
    {
       return new Exception("Your string is null");
    }
    else
    return null;
}
Run Code Online (Sandbox Code Playgroud)

但是我对这样做有什么不好的感觉.

我愿意接受任何想法或不同的解决方案,特别是如果有解决ESQL签名问题的方法.

更新:

添加有关ESQL过程无法在签名中使用throws子句调用java方法的参考.

摘自CREATE PROCEDURE语句部分下的此链接:

"您要调用的任何Java方法都必须具有以下基本签名:public static(<0 - N parameters>)其中必须位于ESQL到Java数据类型映射表中的Java IN数据类型列表中(不包括REFERENCE类型,不允许作为返回值)或Java void数据类型.参数数据类型也必须在ESQL到Java数据类型映射表中.此外,Java方法不允许有异常在其签名中抛出条款."

java error-handling exception ibm-integration-bus extended-sql

10
推荐指数
1
解决办法
1562
查看次数

如何在esql中选择不同?

我在esql(IBM Websphere Message Broker)中有一个子流,我需要在其中实现类似于select distinct功能的功能。

一些背景:我在Oracle数据库中有一个表group_errcode_ref。该表几乎是ERROR_CODEand 的固定链接/映射IDERROR_CODE是唯一的,但ID可以重复。例如,错误代码4000和4001都可以链接到ID 1。

在我的esql子流中,我有一系列错误代码,这些错误代码根据进入该流的当前数据而有所不同。

所以我需要做的是获取输入错误代码数组,并ID从表中为数组中的所有错误代码选择group_errcode_ref

我现在所拥有的:

declare db rows;
set db.rows[] = (select d.ID from Database.group_errcode_ref as d where d.ERROR_CODE in (select D from errCodes.Code[] as D);
Run Code Online (Sandbox Code Playgroud)

errCodes是来自输入的错误代码的数组。row是与错误代码对应的所有ID的数组。

很好,但是我想从db.rows[]数组中删除重复项。

我不确定在esql中执行此操作的最佳方法,但它不支持distinctgroup by, 要么order by

sql oracle messagebroker ibm-integration-bus extended-sql

5
推荐指数
1
解决办法
3339
查看次数

如何获取IIB全局缓存中MbGlobalMap的所有值?

我将一些信息存储MbGlobalMap在IBM Integration Bus 的(嵌入式全局高速缓存)中。如果地图被调用,EXAMPLE.MAP我可以按如下方式访问值:

MbGlobalMap map = MbGlobalMap.getGlobalMap("EXAMPLE.MAP");
Object value = map.get(key);
Run Code Online (Sandbox Code Playgroud)

但是EXAMPLE.MAP,即使我不知道地图的所有键,我也想获取的所有值。我无法迭代MbGlobalMap和强制转换java.util.Map完全不起作用。

这是该类的文档:https : //www.ibm.com/support/knowledgecenter/SSMKHH_9.0.0/com.ibm.etools.mft.plugin.doc/com/ibm/broker/plugin/MbGlobalMap.html。没有提供方法来返回Map中的所有元素。

解决方法可能是其中包含所有当前键的列表,因此您可以获取此列表,并可以获取地图内的所有值。但是我认为这不是一个干净的解决方案。

java ibm-integration-bus

5
推荐指数
1
解决办法
1867
查看次数

在ESQL中动态生成JSON键/值对

如何在ESQL中将从外部系统检索到的JSON响应转换为有意义的数据(键/值对)?

检索的JSON:

{
    "data": [
        {
            "name": "application.info.header",
            "value": "headerValue"
        },
        {
            "name": "entity.statistics.name.fullName",
            "value": "fullNameValue"
        },
        {
            "name": "application.info.matter",
            "value": "matterValue"
        },
        {
            "name": "entity.statistics.skill",
            "value": "skillValue"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

哪里,

  • name 〜JSON的层次结构(最后一个属性是关键)

  • value 〜对关键的价值

预期的JSON:

{
    "data": {
        "application": {
            "info": {
                "header": "headerValue",
                "matter": "matterValue"
            }
        },
        "entity": {
            "statistics": {
                "name": {
                    "fullName": "fullNameValue"
                },
                "skill": "skillValue"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不用说,这可以通过Java中的Split方法轻松实现-我正在寻找ESQL中合适的方法

当前的ESQL模块:

CREATE COMPUTE MODULE getDetails_prepareResponse
    CREATE FUNCTION Main() RETURNS BOOLEAN …
Run Code Online (Sandbox Code Playgroud)

java json ibm-integration-bus extended-sql

5
推荐指数
1
解决办法
626
查看次数

esql中的CURRENT_TIME格式

esql中CURRENT_TIME函数的默认格式是什么?我们如何根据我们的要求更改它(24小时或12小时格式)

ibm-integration-bus extended-sql

4
推荐指数
1
解决办法
8526
查看次数

什么是ESQL COALESCE函数的XQuery等价物?

我正在尝试将WMB 7映射节点转换为IIB 9节点.自动转换过程将一些ESQL函数转换为XQuery函数.

具体来说,它改变了ESQL功能

COALESCE (var0, var1) 
Run Code Online (Sandbox Code Playgroud)

(返回第一个非空值,如if var0 = null then var1 else var0)

XQUERY (var0,var1)
Run Code Online (Sandbox Code Playgroud)
  1. 这是正确的转换吗?

  2. 如果是,有人可以提供API的链接吗?我在XQuery语法和操作员手册上找不到这个.

sql xquery ibm-integration-bus extended-sql

4
推荐指数
1
解决办法
999
查看次数

为什么Mapping Node会获得java.lang.RuntimeException?

我正在使用Message Broker 8和MQ 7.当我尝试在消息流中使用Mapping Node时,我得到一个java.lang.RuntimeException.

以下是事件查看器显示的内容:

( BROKER8.default ) The map script generation for QName ''{practica}:CambioFecha'' has failed, with the following details: ''java.lang.RuntimeException: ''.   

The generation of the map has failed.   

Review and resolve the problems indicated in the message from the map generation.
Run Code Online (Sandbox Code Playgroud)

完整的异常堆栈是:

    ExceptionList: ( ['MQROOT' : 0xe052600]
      (0x01000000:Name):RecoverableException = (
        (0x03000000:NameValue):File                 = 'F:\build\S000_P\src\DataFlowEngine\PluginInterface\ImbJniNode.cpp' (CHARACTER)
        (0x03000000:NameValue):Line                 = 1170 (INTEGER)
        (0x03000000:NameValue):Function             = 'ImbJniNode::evaluate' (CHARACTER)
        (0x03000000:NameValue):Type                 = 'ComIbmMSLMappingNode' (CHARACTER)
        (0x03000000:NameValue):Name                 = 'practica/DATAGRAMA#FCMComposite_1_7' (CHARACTER)
        (0x03000000:NameValue):Label                = 'practica.DATAGRAMA.Cambio Formato Fecha' (CHARACTER)
        (0x03000000:NameValue):Catalog …
Run Code Online (Sandbox Code Playgroud)

java exception ibm-integration-bus

2
推荐指数
1
解决办法
1468
查看次数

Websphere Message Broker:访问ESQL中的XML元素

Websphere Message Broker:文件输出示例中的文件.我有一个带有重复元素结构的XML文件.如何在ESQL中访问和修改特定元素的值.我按照以下代码行事

CREATE PROCEDURE CopyEntireMessage() BEGIN
     --SET OutputRoot = InputRoot;
      DECLARE I INTEGER 1;
      DECLARE J INTEGER;
      SET J = CARDINALITY(OutputRoot.*[]);
      WHILE I < J DO
         SET OutputRoot = InputRoot;
         SET OutputRoot.XMLNS.person.student[I].name = 'XYZ';
         SET I = I + 1;
      END WHILE;
 END;
Run Code Online (Sandbox Code Playgroud)

但它不起作用.从输入文件夹中提取文件但我在Output文件夹中看不到任何内容.但如果我评论

SET OutputRoot.XMLNS.student[I].name = 'XYZ';
Run Code Online (Sandbox Code Playgroud)

然后文件在输出文件夹中可用,因为它没有任何变化.

我的XML文件如下

<person>
 <student>
   <name>ABC</name>
   <age>20</age>
   <address>city1</address>
 </student>
 <student>
   <name>PQR</name>
   <age>20</age>
   <address>city2</address>
 </student>
</person>
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我吗?

xml messagebroker ibm-integration-bus ibm-mq extended-sql

2
推荐指数
1
解决办法
2万
查看次数

在IBM Integration Bus中存储数据库参数的最佳位置

我想知道在IBM Integration Bus中存储数据库参数的最佳位置在哪里.例如,如果我们有dev,test和prod环境,每个环境都有一个单独的数据库(当然),如何才能最好地组织更改数据库连接属性?用户变量?一些外部服务?Decision Manager存储库?缓存变量(共享或极限标度网格)?

ibm-integration-bus

2
推荐指数
1
解决办法
362
查看次数

用于将字符串拆分为多个值的ESQL

以下输入xml字段需要包含6个字符,每6个字符应分割并保存在输出的选项字段中.

Input: 
<feature>124414500045563879</feature>

output:
<option>124414</option>
<option>500045</option>
<option>563879</option>
Run Code Online (Sandbox Code Playgroud)

IIB ESQL中是否有任何tokenizer功能可用于实现上述结果.

messagebroker ibm-integration-bus extended-sql

2
推荐指数
1
解决办法
5465
查看次数

使用JAVA访问IIB中的消息内容

有谁知道如何在 Java 计算节点中访问 MbMessage 的内容?我正在使用 IBM 集成工具包 10,到目前为止我只知道 Message 由一个根元素和各种子元素组成。

我正在从 MQ 接收 JSON 文本,我只需要在计算节点中访问它,修改它并将其发送到 Azure 服务总线,但我很难从消息中访问 JSON 文本。

我试图访问各种 MbMessage 元素,但没有从中获得任何合理的价值。我将输出作为异常抛出到错误日志中。我得到的唯一合理的数据来自 Chapter 元素,但我猜格式是十六进制的。看到这个:

"7b224865616422203a207b22536f7572636553797374656d223a224d565844445441505244222c2022546172676574223a2241677265656d656e74222c2022416374696f6e223a2264656c657465222c20224d6573736167654964223a22222c2022436f72656c6174696f6e4964223a22222c2254696d657374616d70223a223230313930333230313631383531333636373230303030303030222c20224368616e67654964223a22227d2c224974656d7322203a207b2241677265656d656e744964223a225357453134305f36303736343336222c224d616368696e654b6579223a2231313131303337313333222c2241677265656d656e74436c617373223a22353631222c2241677265656d656e744e756d626572223a2242303638323135222c224c696e654e756d626572223a22315f3330222c22436f6e74726163746564486f757273223a22313030222c2241677265656d656e7456616c696446726f6d223a223230313930333132222c2241677265656d656e7456616c6964546f223a223230323230333131222c224c6173744d6f646966696564223a223230313930333230313631383531333636373230303030303030222c22497349536974654f726967696e61746564223a2230222c22497344656c657"

// This is how i see in log what is in the element value of a chapter
if(true){
    throw new Exception("Message Content: " + outMessage.getRootElement().getLastChild().getLastChild().getValueAsString());
}
Run Code Online (Sandbox Code Playgroud)

我希望得到我发送到消息队列的 JSON 文本。

java ibm-integration-bus

2
推荐指数
1
解决办法
2008
查看次数

Esql如何使用select语句从输入xml中检索值

我有一个看起来像这样的输入 xml

<log>
    <line>
        <id>1</id>
    <line>
        <id>2</id>
    <otherLine>
        <id>2</id>
        <field>
            12345-67
        </field>
    </otherLine>
</log>
Run Code Online (Sandbox Code Playgroud)

我在 esql 中所做的基本上是迭代每个<line>元素,我想从值匹配的<otherLine>地方检索<id>值。

我有这样的代码:

declare inDoc reference to InputRoot.XMLNSC.log;
declare line reference to inDoc;
declare fieldValue character;

move line firstchild name 'line';
while lastmove(line) do

    set fieldValue = select r.field from inDoc.otherLine[] as r where r.id = line.id;
    -- I want this to be null when hitting the line with <id>1</id> and 12345-67 and hitting the line with <id>2</id>

    move …
Run Code Online (Sandbox Code Playgroud)

xml select ibm-integration-bus extended-sql

1
推荐指数
1
解决办法
8188
查看次数

IBM ACE 和 IBM API CONNECT

能以某种方式向我解释一下这些产品的区别吗?

  • 据我了解,IBM ACE (AppConnect) 为您提供了更多 iPaas 功能。它允许你创建一个 API。
  • 但据我现在了解,实际的 API 管理需要 API Connect。代理/政策等
  • 有谁知道这些产品已获得许可吗?您是否必须通过 API 连接才能管理、治理您的 API 等?

ibm-integration-bus apiconnect

1
推荐指数
1
解决办法
1526
查看次数