2016-07-07 15 views
0

smooks(1.5.1)の最新リリースとwso2 esb ang getエラーを使用してCSVファイルを解析しようとしました: java.lang.IllegalArgumentException:メソッド呼び出しのargsmooksを使用してCSVファイルを解析すると、nullまたは空の引数が返される

私のcsvファイルは、マルチレコードのフィールド定義を持っています(タブとdelimeted) 入力の.csvファイル:

T11 T12 T13 T14 T15 T16 
T21 T22 T23 T24 T25 T26 
T3 

プロキシサービス(Smooksのコンフィグを持つ部分のみ:

<smooks config-key="smooks-config"> 
<input type="text"/> 
<output type="xml"/> 
</smooks> 

Smooksの設定ファイルを:

<?xml version="1.0" encoding="UTF-8"?> 
<localEntry key="smooks-config" xmlns="http://ws.apache.org/ns/synapse"> 
    <smooks-resource-list xmlns="http://www.milyn.org/xsd/smooks-1.1.xsd" xmlns:csv="http://www.milyn.org/xsd/smooks/csv-1.5.xsd"> 
    <csv:reader fields="T11[*] | T22[*] | T3[*]" indent="true" 
     recordElementName="message" rootElementName="messages" separator="&#x9;"/> 
    </smooks-resource-list> 
</localEntry> 

結果で私は例外を受け取ります:

TID: [-1234] [ESB] [2016-07-07 15:33:16,742] DEBUG - Start : Smooks mediator {org.wso2.carbon.mediator.transform.SmooksMediator} 
TID: [-1234] [ESB] [2016-07-07 15:33:16,756] ERROR - Failed to filter source. {org.wso2.carbon.mediator.transform.SmooksMediator} 
org.milyn.SmooksException: Failed to filter source. 
    at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:97) 
    at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:64) 
    at org.milyn.Smooks._filter(Smooks.java:526) 
    at org.milyn.Smooks.filterSource(Smooks.java:482) 
    at org.wso2.carbon.mediator.transform.SmooksMediator.mediate(SmooksMediator.java:131) 
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81) 
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48) 
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149) 
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
    at org.apache.axis2.transport.base.AbstractTransportListener.handleIncomingMessage(AbstractTransportListener.java:328) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.processFile(VFSTransportListener.java:751) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.scanFileOrDirectory(VFSTransportListener.java:407) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.poll(VFSTransportListener.java:177) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.poll(VFSTransportListener.java:124) 
    at org.apache.axis2.transport.base.AbstractPollingTransportListener$1$1.run(AbstractPollingTransportListener.java:67) 
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: null or empty 'fields' arg in method call. 
    at org.milyn.assertion.AssertArgument.isNotNullAndNotEmpty(AssertArgument.java:105) 
    at org.milyn.flatfile.Record.<init>(Record.java:43) 
    at org.milyn.flatfile.variablefield.VariableFieldRecordParser.nextRecord(VariableFieldRecordParser.java:201) 
    at org.milyn.flatfile.FlatFileReader.parse(FlatFileReader.java:176) 
    at org.milyn.delivery.sax.SAXParser.parse(SAXParser.java:76) 
    at org.milyn.delivery.sax.SmooksSAXFilter.doFilter(SmooksSAXFilter.java:86) 
    ... 19 more 
TID: [-1234] [ESB] [2016-07-07 15:33:16,763] ERROR - Failed to filter source. Caused by Failed to filter source. {org.apache.synapse.mediators.base.SequenceMediator} 
org.wso2.carbon.mediator.service.MediatorException: Failed to filter source. Caused by Failed to filter source. 
    at org.wso2.carbon.mediator.transform.SmooksMediator.handleException(SmooksMediator.java:252) 
    at org.wso2.carbon.mediator.transform.SmooksMediator.mediate(SmooksMediator.java:147) 
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:81) 
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:48) 
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:149) 
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:185) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
    at org.apache.axis2.transport.base.AbstractTransportListener.handleIncomingMessage(AbstractTransportListener.java:328) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.processFile(VFSTransportListener.java:751) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.scanFileOrDirectory(VFSTransportListener.java:407) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.poll(VFSTransportListener.java:177) 
    at org.apache.synapse.transport.vfs.VFSTransportListener.poll(VFSTransportListener.java:124) 
    at org.apache.axis2.transport.base.AbstractPollingTransportListener$1$1.run(AbstractPollingTransportListener.java:67) 
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

は、私はこの問題は(私はcsvファイルからこの行を削除する場合 - ファイルが解析されますが、追加の「recordElementName」なし)「T3」の行であると考え、事前に

おかげ

答えて

0

フィールドは、 cvs reader configの定義が正しく表示されません。 Smooksの1.5のドキュメントによると

:レコード名は、行の最初のフィールドにマッチすることになっていることを

Note the sytax in the 'fields' attribute. Each record definition is separated by the pipe character '|'. Each record definition is constructed as record-name[field-name,field- name]. record-name is matched against the first field in the incoming message and so used to select the appropriate recodr definition to be used for outputting that record. Also note how you can use an astrix character ('*') when you don't want to name the record fields. In this case (as when extra/unexpected fields are present in a record), the reader will generate the output field elements using a generated element name e.g. "field_0", "field_1" etc. See the "magazine" record in the previous example.

注意してください。

私の理解では、CVSのリーダーの設定はあなたの例では、このようなものであるべきである。

<csv:reader fields="T11[*] | T21[*] | T3[*]" indent="true" 
    recordElementName="message" rootElementName="messages" 
    separator="&#x9;"/> 

お知らせ "T21 [*]" の代わりに "T22 [*]" の

はそれを補正してみてくださいT3の問題と思われるものが修正されているかどうかを確認してください。

関連する問題