0

この正規表現ステートメントが私が望むことを実行することを確認する必要があります。

次のjson文字列が与えられます

{"a":"1","Provider":"WebHook","b":"2"}

次の正規表現を確認する必要があります

(?<=\bProvider":")\w+

文字列Provider":"に続く単語を常に返します

この場合、文字列Provider ":"に続く単語はWebHookですが、任意の単語にすることができます。私はこの単語を制御できるので、ASCII以外の文字が含まれることはありません。

この式は、Java正規表現エンジンを使用するApacheCamelで使用します。

誰かが私の戦略の落とし穴を見つけることができますか?

4

2 に答える 2

1

ここでは構文解析が正しい解決策ですが、基準を満たす正規表現を作成するのは難しくありません。

/"Provider":"(.*?)"/

Perlスタイルのregexを使用する

于 2010-12-18T17:40:14.533 に答える
1

わかりました、アドバイスの人に感謝します。私は、正規表現を解析する代わりに、弾丸を噛み、正しい方法で物事を行いました。これが私の解決策です:

org.codehaus.jackson.map.ObjectMapperを使用するサービスを構築しました。このクラスは、交換本体を引数として取ります。こんな感じです。

public class ProviderTypeWrangler {

    public String getProvider(String json) {

        try {

            ObjectMapper mapper = new ObjectMapper();
            Integration integration;
            integration = mapper.readValue(json, Integration.class);
            return integration.getProvider();
        } catch (JsonParseException e) {
            return "";
        } catch (JsonMappingException e) {
            return "";
        } catch (IOException e) {
            return "";
        }

    }

}

次に、ルーティングスリップパターンを使用して、このサービスへのアクセスを提供しました。別のEIPが適切であると誰かが考えた場合、私は提案を受け付けます。とにかく、これがその例です。

public class WufooIntegrationRoutingSlip {

    @RoutingSlip
    public String slip(String body) {
        String answer = "activemq:noProducerDefined";
        ProviderTypeWrangler wrangler = new ProviderTypeWrangler();
        String producer = wrangler.getProvider(body);
        Logger mylogger = Logger.getLogger("log4j.logger.org.apache.camel");
        if (!producer.equals("")) {
            mylogger.info("Body:"+body);
            answer = "activemq:"+producer;
        }
        return answer;
    }

}

次に、camel.xmlファイルで、このルーティングスリップをBeanとして公開しました

<bean id="integrationBean" class="com.wufoo.camel.WufooIntegrationRoutingSlip"/>

そして、そのBeanを使用して、交換を正しいキューにルーティングしました。

<route errorHandlerRef="dlc" autoStartup="true" id="IntegrationQueue" xmlns:ns2="http://camel.apache.org/schema/web" xmlns="http://camel.apache.org/schema/spring">
    <description>Send all integrations here.  Logic will parse to individual queue based on Provider.</description>
    <from uri="activemq:integration"/> 
    <bean ref="integrationBean"/>
</route>

途中でラクダと春についてたくさん学んだので、正しい方向に押してくれたコメンテーターに感謝します。

于 2010-12-29T15:11:09.697 に答える