2011-10-06 2 views
1

配列を入力とするいくつかのメソッドを公開するWebサービスがあります。私はmule-config.xmlファイルの中で必要なフローをサービス実装に定義し、サービスによって公開されているWSDLからWCFクライアントを作成することができます。Mule ESBの配列入力 - どのように私はarray-entry-point-resolverを使うのですか?

私は私のクライアントからの入力として配列を受け入れるこれらの方法のいずれかを起動しようとすると、私は次の例外を取得:さらに調査の結果

WARN 2011-10-06 13:38:02,139 [connector.http.mule.default.receiver.3] org.apache.cxf.phase.PhaseInterceptorChain: Interceptor for {http://api.data.ws.occ600.emsgt.com/}ConfigurationServiceService#{http://api.data.ws.occ600.emsgt.com/}create has thrown exception, unwinding now 
org.apache.cxf.interceptor.Fault: Component that caused exception is: DefaultJavaComponent{configurationService.commponent.32217869}. Message payload is of type: MapExtent[] 
    at org.mule.module.cxf.MuleInvoker.invoke(MuleInvoker.java:85) 
    at org.mule.module.cxf.MuleJAXWSInvoker.invoke(MuleJAXWSInvoker.java:47) 
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75) 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
    at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37) 
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106) 
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255) 
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113) 
    at org.mule.module.cxf.CxfInboundMessageProcessor.sendToDestination(CxfInboundMessageProcessor.java:288) 
    at org.mule.module.cxf.CxfInboundMessageProcessor.process(CxfInboundMessageProcessor.java:129) 
    at org.mule.module.cxf.config.FlowConfiguringMessageProcessor.process(FlowConfiguringMessageProcessor.java:50) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:90) 
    at org.mule.processor.SecurityFilterMessageProcessor.process(SecurityFilterMessageProcessor.java:77) 
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:88) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:90) 
    at org.mule.processor.ExceptionHandlingMessageProcessor.process(ExceptionHandlingMessageProcessor.java:25) 
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:88) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(InterceptingChainLifecycleWrapper.java:63) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(InterceptingChainLifecycleWrapper.java:94) 
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:88) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(InterceptingChainLifecycleWrapper.java:63) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(InterceptingChainLifecycleWrapper.java:94) 
    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:185) 
    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:158) 
    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:145) 
    at org.mule.transport.http.HttpMessageReceiver$HttpWorker.doRequest(HttpMessageReceiver.java:247) 
    at org.mule.transport.http.HttpMessageReceiver$HttpWorker.processRequest(HttpMessageReceiver.java:206) 
    at org.mule.transport.http.HttpMessageReceiver$HttpWorker.run(HttpMessageReceiver.java:164) 
    at org.mule.work.WorkerContext.run(WorkerContext.java:309) 
    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.component.ComponentException: Component that caused exception is: DefaultJavaComponent{configurationService.commponent.32217869}. Message payload is of type: MapExtent[] 
    at org.mule.component.DefaultComponentLifecycleAdapter.invoke(DefaultComponentLifecycleAdapter.java:359) 
    at org.mule.component.AbstractJavaComponent.invokeComponentInstance(AbstractJavaComponent.java:86) 
    at org.mule.component.AbstractJavaComponent.doInvoke(AbstractJavaComponent.java:77) 
    at org.mule.component.AbstractComponent.invokeInternal(AbstractComponent.java:120) 
    at org.mule.component.AbstractComponent.access$000(AbstractComponent.java:56) 
    at org.mule.component.AbstractComponent$1$1.process(AbstractComponent.java:234) 
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:88) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(InterceptingChainLifecycleWrapper.java:63) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(InterceptingChainLifecycleWrapper.java:94) 
    at org.mule.component.AbstractComponent.process(AbstractComponent.java:154) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:90) 
    at org.mule.processor.AsyncInterceptingMessageProcessor.process(AsyncInterceptingMessageProcessor.java:97) 
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:88) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:90) 
    at org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeInterceptor.java:55) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:90) 
    at org.mule.interceptor.AbstractEnvelopeInterceptor.process(AbstractEnvelopeInterceptor.java:55) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:90) 
    at org.mule.processor.AbstractFilteringMessageProcessor.process(AbstractFilteringMessageProcessor.java:41) 
    at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:88) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.doProcess(InterceptingChainLifecycleWrapper.java:63) 
    at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:89) 
    at org.mule.processor.chain.InterceptingChainLifecycleWrapper.process(InterceptingChainLifecycleWrapper.java:94) 
    at org.mule.construct.AbstractFlowConstruct$1$1.process(AbstractFlowConstruct.java:107) 
    at org.mule.processor.AbstractInterceptingMessageProcessor.processNext(AbstractInterceptingMessageProcessor.java:90) 
    at org.mule.module.cxf.CxfInboundMessageProcessor.processNext(CxfInboundMessageProcessor.java:328) 
    at org.mule.module.cxf.MuleInvoker.invoke(MuleInvoker.java:80) 
    ... 39 more 
Caused by: org.mule.model.resolvers.EntryPointNotFoundException: Failed to find entry point for component, the following resolvers tried but failed: [ 
ArrayEntryPointResolver: Found too many possible methods on object "com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2" that accept parameters "{class [Lcom.emssatcom.occ600.dal.api.MapExtent;}", Methods matched are "[public final void com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2.delete(com.emsgt.data.api.EMSRecord[]) throws com.emssatcom.occ600.dal.api.DALException, public final com.emssatcom.occ600.dal.api.MapExtent[] com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2.create(com.emssatcom.occ600.dal.api.MapExtent[]) throws com.emssatcom.occ600.dal.api.DALException, public final void com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2.update(com.emssatcom.occ600.dal.api.MapExtent[]) throws com.emssatcom.occ600.dal.api.DALException, public final void com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2.createEx(com.emsgt.data.api.EMSRecord[]) throws com.emssatcom.occ600.dal.api.DALException, public final void com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2.updateOnly(com.emsgt.data.api.EMSRecord[]) throws com.emssatcom.occ600.dal.api.DALException, public final void com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2.updateOrInsert(com.emsgt.data.api.EMSRecord[]) throws com.emssatcom.occ600.dal.api.DALException]" 
ReflectionEntryPointResolver: Could not find entry point on: "com.emsgt.occ600.ws.data.lib.ConfigurationServiceImpl$$EnhancerByCGLIB$$7277bad2" with arguments: "{class com.emssatcom.occ600.dal.api.MapExtent,class com.emssatcom.occ600.dal.api.MapExtent}" 
] 
    at org.mule.model.resolvers.DefaultEntryPointResolverSet.invoke(DefaultEntryPointResolverSet.java:52) 
    at org.mule.component.DefaultComponentLifecycleAdapter.invoke(DefaultComponentLifecycleAdapter.java:350) 

を、私は、アレイ・エントリ・ポイント - を発見しましたリゾルバ。これを私のmule-configに次のように追加します。

<component> 
      <entry-point-resolver-set> 
       <reflection-entry-point-resolver/> 
       <array-entry-point-resolver /> 
     </entry-point-resolver-set> 

    <spring-object bean="myWebService"/> 
</component> 

まだ助けになりません。この人との経験は?

+0

私は、2つのメソッドが同じ型とパラメーターの数をとる場合、どのメソッドを呼び出すかを助ける必要がある配列エントリポイントリゾルバを見つけました。どんなアイデアも高く評価されます。 –

答えて

0

私はこの問題を解決するために、配列エントリポイントリゾルバとメソッドエントリポイントリゾルバとAPIシグネチャの変更を組み合わせて使用​​しました。ここで問題となるのは、Muleはメソッド名の代わりにどのメソッドを使うかを決めるためにwebservice呼び出しの引数を使います。たとえドキュメントの状態がmethod-entry-point-resolverを含む多くのリゾルバを使用していても同じです。

したがって、2つの異なる名前のメソッドを公開するインターフェイスがあり、どちらもT型の単一の配列を受け入れる場合は、正しいメソッドが呼び出されることを保証するリゾルバの組み合わせはありません。私の言う限りではありません。あなたは、このような方法は、エントリー・ポイント・リゾルバのコレクションの両方でこれらのメソッドを指定した場合:入力引数は、メソッド名を無視して、T []であれば

<method-entry-point-resolver> 
       <include-entry-point method="method1"/> 
       <include-entry-point method="method2"/> 
      </method-entry-point-resolver> 

ESB Muleは常に、法1を呼び出します。

あなたがしようとすると、この:

<method-entry-point-resolver> 
       <include-entry-point method="method1"/>           
      </method-entry-point-resolver> 
      <array-entry-point-resolver> 
       <include-entry-point method="method2"/>     
      </array-entry-point-resolver> 

ミュールはまだ常に正しいメソッドを呼び出すことはありません。ですから、私はT []を単にラップするクラスを作成し、これをmethod1への入力引数として変更しました。 method-entry-point-resolversとarray-entry-point-resolversのコレクションのmethod2のコレクションにmethod1を設定し、これが機能します。

これは明らかに問題ですが、私はMuleSoftの人に対応することができませんでした。

関連する問題