标签: extended-sql

返回类型为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
查看次数

在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
查看次数

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万
查看次数

用于将字符串拆分为多个值的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
查看次数

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
查看次数