1

チャネル リーダーでデータベースから blob フィールドを読み取り、TCP 経由で送信する必要があります。

Blob フィールドがある場合を除いて、データベース リーダーでこれを簡単に実行できるため、代わりに JavaScript リーダーを使用しようとしています。

var dbConn = DatabaseConnectionFactory.createDatabaseConnection('org.postgresql.Driver','jdbc:postgresql://127.0.0.1:5432/ris','postgres','postgres');
// You may access this result below with $('column_name')
var resultQuery = "select mensajehl7, p.ip, p.port from turnohl7 h7 join pacs p on p.idpacs=h7.idpacs where h7.estado='NW'";
var qryResult = dbConn.executeCachedQuery(resultQuery);

var result = new Packages.java.util.ArrayList();

while(qryResult.next())
{ 
  var columna = new Array();
  columna['hl7'] = qryResult.getBytes(1);
  result.add(columna);
}

dbConn.close();
return result;

スタックトレースが示唆するように、結果は XML である必要があるようです。

[2012-12-04 12:56:29,227]  ERROR (org.mule.impl.DefaultComponentExceptionStrategy:95): Caught exception in Exception Strategy for: f4a3cccb-902e-4504-86f5-0bfa473ad144: org.mule.umo.routing.RoutingException: Failed to transform message before applying the filter. Failed to route event via endpoint: ImmutableMuleEndpoint{connector=com.mirth.connect.connectors.js.JavaScriptConnector@379cf50c, endpointUri=js://sink, transformer=Transformer{name='ResultMapToXML', returnClass=false, returnClass=false, sourceTypes=[interface java.util.Map, class java.lang.String]}, name='_jsEndpoint#-1389160782', type='receiver', properties={}, transactionConfig=org.mule.impl.MuleTransactionConfig@44adab2d, filter=null, deleteUnacceptedMessages=false, initialised=true, securityFilter=null, synchronous=true, initialState=started, createConnector=0}. Message payload is of type: java.lang.String
org.mule.umo.routing.RoutingException: Failed to transform message before applying the filter. Failed to route event via endpoint: ImmutableMuleEndpoint{connector=com.mirth.connect.connectors.js.JavaScriptConnector@379cf50c, endpointUri=js://sink, transformer=Transformer{name='ResultMapToXML', returnClass=false, returnClass=false, sourceTypes=[interface java.util.Map, class java.lang.String]}, name='_jsEndpoint#-1389160782', type='receiver', properties={}, transactionConfig=org.mule.impl.MuleTransactionConfig@44adab2d, filter=null, deleteUnacceptedMessages=false, initialised=true, securityFilter=null, synchronous=true, initialState=started, createConnector=0}. Message payload is of type: java.lang.String
    at org.mule.routing.inbound.SelectiveConsumer.isMatch(SelectiveConsumer.java:64)
    at org.mule.routing.inbound.InboundMessageRouter.route(InboundMessageRouter.java:79)
    at org.mule.providers.AbstractMessageReceiver$DefaultInternalMessageListener.onMessage(AbstractMessageReceiver.java:487)
    at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:266)
    at org.mule.providers.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:225)
    at com.mirth.connect.connectors.js.JavaScriptMessageReceiver.processMessage(JavaScriptMessageReceiver.java:101)
    at com.mirth.connect.connectors.js.JavaScriptMessageReceiver.poll(JavaScriptMessageReceiver.java:82)
    at org.mule.providers.PollingMessageReceiver.run(PollingMessageReceiver.java:97)
    at org.mule.impl.work.WorkerContext.run(WorkerContext.java:290)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1061)
    at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:575)
    at java.lang.Thread.run(Unknown Source)Caused by: org.mule.umo.transformer.TransformerException: java.lang.StringIndexOutOfBoundsException: String index out of range: -2 (com.mirth.connect.server.mule.adaptors.AdaptorException)
    at com.mirth.connect.server.mule.transformers.JavaScriptTransformer.transform(JavaScriptTransformer.java:285)
    at org.mule.transformers.AbstractEventAwareTransformer.doTransform(AbstractEventAwareTransformer.java:48)
    at org.mule.transformers.AbstractTransformer.transform(AbstractTransformer.java:197)
    at org.mule.transformers.AbstractTransformer.transform(AbstractTransformer.java:200)
    at org.mule.transformers.AbstractTransformer.transform(AbstractTransformer.java:200)

Transformer で bytea フィールドを使用するにはどうすればよいですか?

4

2 に答える 2

2

この回答は直接的なものではありませんが、役立つことを願っています。

次の 2 つの側面について説明します。

1. データベースから HL7 データを取得する

私の場合、HL7 データが varchar(max) で SQL Server に格納され、完全なクエリを渡す代わりにストアド プロシージャを呼び出すことを除いて、同様のことを行います。

データテーブルが返されたら、次のように hl7 データを (blob ではなく) clob として抽出します。

// the hl7 data is returned as a CLOB, not a string
var hl7MsgClob  = dataTable.getClob("HL7");
var clobLength = hl7MsgClob.length();

// clobs have a starting index of 1, and the getSubString is inclusive on both ends of the range
var hl7Msg = hl7MsgClob.getSubString(1,clobLength);

// This is a code template that decodes characters we escaped prior to writing to SQL Server
var cleanHL7 = Util_DecodeTextFromSQLStorage(hl7Msg);

// convert the message to an XML format
var HL7AsXML = SerializerFactory.getHL7Serializer(false,false,true).toXML(cleanHL7);

2. Mirth でのデータの受け渡し

Javascript リーダーから返されるデータ型は、チャネル ソースのデータ型と一致する必要があります。Mirth の新しいバージョンについては知りませんが、バージョン 1.8.2 では、これは「受信データ」というラベルの付いたドロップダウンの [概要] タブで構成されます。

これを HL7 v2.x に設定した場合、必要なデータ型は実際には HL7 v.2.x の XML バリアントである可能性があります。より一般的なパイプ区切り形式ではありません。hl7 がパイプで区切られた形式の場合、実験のために、上記で投稿したコードの最後の行を使用して、それを xML 形式に変換できます。

于 2012-12-06T18:53:16.897 に答える
0

データベースから BLOB を取得する簡単な方法は、select ステートメントでキャストを使用することです。

CAST(<Field Name> AS CHAR(10000) CHARACTER SET utf8) AS '<FieldName>'
于 2014-11-28T15:28:03.193 に答える