2

Mule1.3アプリケーションをMule3.2.1(最新バージョン)にアップグレードしています。Mule 1.3構成ファイルには、いくつかの「mule-descriptor」サブ要素を持つ「model」要素があります。

<model name="theModel">
  <mule-descriptor name="theName" implementation="com.company.SomeClass">
    <inbound-router>
      <endpoint address="servlet://service/foo" transformers="ACustomTransformer" responseTransformers="AnotherCustomTransformer" />
      <endpoint address="vm://anEndpoint"/>
    </inbound-router>
    <outbound-router>
      <router className="org.mule.routing.outbound.FilteringOutboundRouter">
        <endpoint address="Authenticator">
          <properties>
            <property name="propName" value="propValue" />
          </properties>
        </endpoint>
        <filter expression="/data = null" className="org.mule.routing.filters.xml.JXPathFilter" />
      </router>
      <router className="org.mule.routing.outbound.OutboundPassThroughRouter">
        <endpoint address="RequestValidator" />
      </router>
    </outbound-router>
    <properties>
      <property name="someProp" value="someValue" />
    </properties>
  </mule-descriptor>
  <!-- more <mule-descriptor> elements -->
</model>

これをMule3に相当するものに変換するにはどうすればよいですか?ありがとう。


編集-2012年5月29日

1)一部のラバ記述子には、自分自身を指すインバウンドルーターがあります。

<mule-descriptor name="theName" implementation="com.company.SomeClass">
  <inbound-router>
    <endpoint address="theName" />
  </inbound-router>
</mule-descriptor> 

これらをMule3フローにどのように変換する必要がありますか?回答の情報を使用してこれらをフローに変換すると、起動時にエラーメッセージが表示されます。これは、フローがまだ作成されているため(循環依存のように)、フローを参照できないことを示しているようです。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ref:RequestValidator.20': Cannot resolve reference to bean 'RequestValidator' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'RequestValidator': Cannot create inner bean '(inner bean)' of type [org.mule.config.spring.factories.InboundEndpointFactoryBean] while setting bean property 'messageSource'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)': 1 constructor arguments specified but no matching constructor found in bean '(inner bean)' (hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)

2) 1つのmule記述子は、BridgeComponentMuleAPIのクラスを実装として使用します。これらはどのように処理する必要がありますか?このクラスはMule3には存在しません。

<mule-descriptor name="theName" implementation="org.mule.components.simple.BridgeComponent">
  <inbound-router>
    <endpoint address="vm://theInboundAddress" />
  </inbound-router>
  <outbound-router>
    <router className="org.mule.routing.outbound.FilteringOutboundRouter">
      <endpoint address="vm://theOutboundAddress" />
    </router>
  </outbound-router>
</mule-descriptor>

3)別のラバ記述子の要素に「matchAll」属性があり<outbound-router>ます。これをMule3フローにどのように変換する必要がありますか?

<mule-descriptor name="theName" implementation="com.company.SomeClass">
  <inbound-router>
    <endpoint address="servlet://theInboundEndpoint" />
  </inbound-router>
  <outbound-router matchAll="true">
    <router className="org.mule.routing.outbound.OutboundPassThroughRouter">
      <endpoint address="firstOutboundEndpoint" />
    </router>
    <router className="org.mule.routing.outbound.FilteringOutboundRouter" transformer="MyTransformer">
      <endpoint address="vm://secondOutboundEndpoint" />
      <filter pattern="Error*" className="org.mule.routing.filters.WildcardFilter" />
    </router>
  </outbound-router>
</mule-descriptor>

4) Mule 1.x構成には、いくつかの要素<endpoint-identifier>の名前と同じ名前の<mule-descriptor>要素がいくつかあります。これらの名前は、のエンドポイントアドレスとしても使用されます<mule-descriptor>。例えば:

<endpoint-identifiers>
  <endpoint-identifier name="TheEndpointName" value="vm://theEndpointAddress" />
</endpoint-identifiers>

...

<model name="...">
  <mule-descriptor name="TheEndpointName" implementation="...">
    <inbound-router>
      <endpoint address="TheEndpointName" />
    </inbound-router>
    ...
  </mule-descriptor>
  ...
</model>

私の推測では、Mule3に相当するものは次のコードのようになります。これは正しいです?

<flow name="TheEndpointName">
  <!--
    My first guess was:
    <inbound-endpoint ref="TheEndpointName" />
  -->
  <vm:inbound-endpoint path="theEndpointAddress" />
  ...
</flow>

ありがとうございました。

2012年5月30日編集

5)一部のミュール記述子はMuleAPIのRestServiceWrapperクラスを使用します。これをMule3に変換すると、次の<flow>エラーが発生します。

The required object/property 'serviceUrl' is null

Mule 1.x構成のmule-descriptorが「urlFromMessage」というプロパティを設定していることに気付きました。これは、XML構成ファイルで提供されるURLの代わりに、Muleにプロパティとして提供されることを示しているようです。メッセージ。ただし、「urlFromMessage」プロパティは、Mule3のバージョンのRestServiceWrapperクラスには存在しません。Mule 3で別のコンポーネントクラスを使用する必要がありますか?このクラスはMuleAPIの一部なので、代わりに使用する必要がある標準のXMLタグはありますか?ありがとう。

<mule-descriptor name="theName" implementation="org.mule.components.rest.RestServiceWrapper">
  <inbound-router>
    ...
  </inbound-router>
  <properties>
    <property name="urlFromMessage" value="true" />
  </properties>
</mule-descriptor>
4

1 に答える 1

4
  • model非推奨になりました。
  • flow置き換えられましたmule-descriptor

さらに、Mule3用に変換された構成を確認してください。

<flow name="theName">
    <composite-source>
        <vm:inbound-endpoint path="anEndpoint">
            <transformer ref="ACustomTransformer" />
            <response>
                <transformer ref="AnotherCustomTransformer" />
            </response>
        </vm:inbound-endpoint>
        <servlet:inbound-endpoint path="/service/foo" />
    </composite-source>
    <component>
        <singleton-object class="com.company.SomeClass">
            <property key="someProp" value="someValue" />
        </singleton-object>
    </component>
    <outbound-endpoint ref="Authenticator">
        <expression-filter expression="/data = null"
            evaluator="jxpath" />
        <property key="propName" value="propValue" />
    </outbound-endpoint>
    <outbound-endpoint ref="RequestValidator" />
</flow>

注意:この設定はMule 3.2.1で有効ですが、希望どおりに動作することを保証することはできません。テストして微調整する必要があります。

その他の回答:

1)フローとエンドポイントに別の名前を使用します。これらはバックグラウンドで個別のBeanとして登録されるため、同じ名前を共有することはできません。それは与える:

<flow name="theFlowName">
    <inbound-endpoint ref="theInboundName" />
    <component>
        <singleton-object class="com.company.SomeClass" />
    </component>
</flow>

2)ブリッジパターンを使用します:

<pattern:bridge name="theName"
                inboundAddress="vm://theInboundAddress"
                outboundAddress="vm://theOutboundAddress" />

3)allルーティングメッセージプロセッサを使用processor-chainし、を使用して複数のメッセージプロセッサを1つにグループ化します。

<flow name="theName">
    <servlet:inbound-endpoint path="/theInboundEndpoint" />
    <component>
        <singleton-object class="com.company.SomeClass" />
    </component>
    <all>
        <outbound-endpoint ref="firstOutboundEndpoint" />
        <processor-chain>
            <transformer ref="MyTransformer" />
            <wildcard-filter pattern="Error*" />
            <vm:outbound-endpoint path="secondOutboundEndpoint" />
        </processor-chain>
    </all>
</flow>

4)フローでグローバルエンドポイントを宣言することはできず、エンドポイントとフローに異なる名前を使用する必要があるため、実際のMule3構成に相当するものは次のとおりです。

<vm:endpoint name="TheEndpointName" path="theEndpointAddress" />

<flow name="TheFlowName">
    <inbound-endpoint ref="TheEndpointName" />
    <component>
        <singleton-object class="..." />
    </component>
</flow>

5)ほとんどのMuleのデフォルトコンポーネントがXML要素として利用できるようになったため、実際に次を使用する必要があります。

<http:rest-service-component serviceUrl="..." />

urlFromMessageなくなりました。代わりに、Mule式を使用して、実行中のメッセージから動的な方法でURLを抽出できます。たとえば、URLがsvcURLuseという名前のインバウンドプロパティで提供されている場合:

<http:rest-service-component serviceUrl="#[header:INBOUND:svcURL]" />
于 2012-05-17T15:29:21.067 に答える