2016-08-18 14 views
0

netsuiteから連絡先を検索しようとしています。私が基本的にやっているのは、電子メールでパラメータを指定して検索条件を作成し、その結果を取得してXMLトランスフォーマにオブジェクトにマップしようとすることです。netsuite検索結果を取得中にエラーが発生しました

java.util.concurrent.CopyOnWriteArrayList.writeObject()を呼び出すことができませんでした:アクションでXStreamのインスタンスをマーシャリングすることはできません

私のように使用していラバフローは、次のとおりです。

しかし、私はと、次のエラーを取得しています
<flow name="contact_searchFlow"> 
    <http:listener config-ref="HTTP_Request_Configuration" path="/basicContactSearch" doc:name="HTTP"/> 
    <logger message="Test1" level="INFO" doc:name="Logger"/> 
<component class="netsuitews.ContactBasicSearchComponent" doc:name="Search Contact Basic criteria"/> 
    <logger message="Test 2" level="INFO" doc:name="Logger"/> 
<netsuite:search config-ref="NetSuite__Request_Level_Authentication" searchRecord="CONTACT_BASIC" fetchSize="5" doc:name="Contact Basic Search"/> 
    <logger message="Test3" level="INFO" doc:name="Logger"/> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 
    <logger message="Test4" level="INFO" doc:name="Logger"/>  

私のように使用しています検索コンポーネントは次のとおりです。

public class ContactBasicSearchComponent implements Callable { 

public Object onCall(MuleEventContext eventContext) throws Exception { 
    ContactSearchBasic searchCriteria = new ContactSearchBasic();  

    SearchStringField nameFilter = new SearchStringField(); 
    nameFilter.setOperator(SearchStringFieldOperator.IS); 
    nameFilter.setSearchValue("[email protected]"); 
    searchCriteria.setEmail(nameFilter); 

    return searchCriteria; 
} 
@Override 
public Object call() throws Exception { 
    // TODO Auto-generated method stub 
    return null; 
} 

}

Iは、NetSuiteのコネクタ(ミュール3.5+)バージョン7.1.0.201603151241及びラバ3.8.0 EEバージョンで実行を使用しています。

ここでは、私はMuleログから得たスタックトレースです。

2016-08-18 20:41:26,181 [netsuitews].HTTP_Request_Configuration.worker.01] INFO org.mule.api.processor.LoggerMessageProcessor - Test1 

2016-08-18 20:41:26,194 [[netsuitews].HTTP_Request_Configuration.worker.01] INFO org.mule.api.processor.LoggerMessageProcessor - Test 2 

2016-08-18 20:41:37,668 [[netsuitews].HTTP_Request_Configuration.worker.01] INFO org.mule.api.processor.LoggerMessageProcessor - Test3 

2016-08-18 20:41:43,761 [[netsuitews].HTTP_Request_Configuration.worker.01] ERROR org.mule.exception.DefaultMessagingExceptionStrategy - 

******************************************************************************** 
Message    : Could not call java.util.concurrent.CopyOnWriteArrayList.writeObject() : Cannot marshal the XStream instance in action 
------------------------------- 
message    : Could not call java.util.concurrent.CopyOnWriteArrayList.writeObject() 
cause-exception  : com.thoughtworks.xstream.converters.ConversionException 
cause-message  : Cannot marshal the XStream instance in action 

(com.thoughtworks.xstream.converters.ConversionException). 
Payload    : [email protected] 
Element XML   : <mulexml:object-to-xml-transformer doc:name="Object to XML"></mulexml:object-to-xml-transformer> 
Payload Type   : org.mule.streaming.ConsumerIterator 

Element    : /contact_searchFlow/processors/5 @ netsuitews:customer_crud.xml:61 (Object to XML) 

Root Exception stack trace: 
com.thoughtworks.xstream.converters.ConversionException: Cannot marshal the XStream instance in action 
at com.thoughtworks.xstream.core.util.SelfStreamingInstanceChecker.marshal(SelfStreamingInstanceChecker.java:59) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:250) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:226) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.<init>(AbstractReflectionConverter.java:189) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:135) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:83) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:84) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:250) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:226) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.<init>(AbstractReflectionConverter.java:189) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:135) 
at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:83) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:69) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:58) 
at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:43) 
at com.thoughtworks.xstream.core.AbstractReferenceMarshaller$1.convertAnother(AbstractReferenceMarshaller.java:88) 
at  
. 
. 
. 

あなたは、この上で助けてくださいでした! NetSuiteの検索操作がページ区切りを実装するプロセッサであるため、変換例外が発生する

答えて

1

。したがって、結果のペイロードのタイプはです。ConsumerIteratorです。 Object to XMLトランスフォーマーは、そのイテレーターをXMLに直接変換することはできません。それを操作するには、まずその内容を抽出する必要があります。 1つの選択肢は、データをリストに変換してXMLトランスフォーマを適用することです。たとえば:

#[org.apache.commons.collections.IteratorUtils.toList(payload)] 

は、その後、あなたの流れは次のようになります。

<flow> 
    ... 
    <netsuite:search config-ref="NetSuite__Request_Level_Authentication" searchRecord="CONTACT_BASIC" fetchSize="5" doc:name="NetSuite"/> 
    <set-payload value="#[org.apache.commons.collections.IteratorUtils.toList(payload)]" doc:name="Set Payload"/> 
    <mulexml:object-to-xml-transformer doc:name="Object to XML"/> 
</flow> 

はまた、私はあなたがNetSuiteのための入力データを構築するためにDataWeaveを使う代わりに、検索条件を設定するためにJavaコンポーネントを使用することをお勧め。

<dw:transform-message doc:name="Transform Message"> 
    <dw:set-payload><![CDATA[%dw 1.0 
    %output application/java 
    --- 
    { 
     email: { 
      operator: "IS", 
      searchValue: "[email protected]" 
     } 
    } as :object { 
     class : "com.netsuite.webservices.platform.common.ContactSearchBasic" 
    } 
    ]]></dw:set-payload> 
</dw:transform-message> 

最終流れは次のようになります。

enter image description here

+0

ありがとうございます。あなたは正しい@CountDです。それは魅力のように働く。 – Raj

関連する問題